Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Запретить вообще чарить вещи на сервере

Тема в разделе "Помощь", создана пользователем Thiiago, 24 мар 2017.

  1. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Где это можно включить? За 1.5.2 запинаете, знаю. На 1.5.2 плагины уже не пишут, тогда без плагинов давайте. Может можно в ядре отключить?
     
  2. Хостинг MineCraft
    <
  3. SkiperLol

    SkiperLol Активный участник Пользователь

    Баллы:
    96
    Запретить стол зачарований.
     
  4. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    чярят через all u want
     
  5. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Не выдавать креатив, либо поставь EnchantFixer или EnchantLimiter или типо того.
     
  6. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    EnchantFixer не контролирует броню
     
  7. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Ну тогда могу посоветовать написать простенький плагин: ловить InventoryClickEvent -> проверять если данный предмет зачарован -> убирать чары все.
     
  8. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Я покалупал плагин, убрал if и результат чёт не очень.

    if ((Config.ItemName != null) && (!Config.ItemName.equals("")))
    Код:
     @EventHandler
      public void onInventoryClick(InventoryClickEvent e)
      {
        Player player = (Player)e.getWhoClicked();
        ItemStack item = e.getCurrentItem();
        if ((player == null) || (item == null)) {
          return;
        }
        Material material = item.getType();
        boolean blocked = check(item);
        if (blocked)
        {
          item = new ItemStack(material);
          if ((Config.ItemName != null) && (!Config.ItemName.equals("")))
          {
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(Config.ItemName);
            item.setItemMeta(meta);
          }
          player.setItemInHand(item);
          player.sendMessage(this.main.msgprefix + Config.Message);
          e.setCancelled(true);
        }
      }
    Можешь подсказать строку на удаление предмета полностью?
    И где брать enevt'ы для spigot api, если мне понадобится забанить игрока
     
    Последнее редактирование: 25 мар 2017
  9. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Это вообще не то что тебе надо.[DOUBLEPOST=1490450367,1490450020][/DOUBLEPOST]Вот тебе такое нужно:
    Код:
    //Снимает зачарование с предмета если на него кликаешь в инвентаре
        @EventHandler
        public void onClick(InventoryClickEvent e) {   
            ItemStack is = e.getCurrentItem();
            if (is == null || is.getType() == Material.AIR) { return; }
            if (!is.hasItemMeta()) { return; }
            ItemMeta meta = is.getItemMeta();
            if (meta.hasEnchants()) {
                for (Enchantment ench : meta.getEnchants().keySet()) {
                    meta.removeEnchant(ench);
                }
            }
            is.setItemMeta(meta);
           
            //Если нужно отослать сообщение игроку
            Player p = (Player) e.getWhoClicked();
            p.sendMessage("§cЗачарованные предметы запрещены!");
        }
     
  10. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Этот код под 1.5.2? И будет работать если я этот кусок кода в eclips просто вставлю, вместо "public void onInventoryClick(InventoryClickEvent e)"
     
  11. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Этот код под все версии идет. Нет нельзя. Это ивент. Читай на вики как их правильно регистрировать.
     
  12. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Блииин я не умею...
    Глянь, пожалуйста, куда вставить
    Код:
    package ru.yooxa.enchantfixer;
    
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.Map;
    import org.bukkit.Material;
    import org.bukkit.Server;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerPickupItemEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.PluginManager;
    
    public class PlayerListener
      implements Listener
    {
      public Main main;
     
      public PlayerListener(Main main)
      {
        this.main = main;
       
        main.getServer().getPluginManager().registerEvents(this, main);
      }
     
      @EventHandler
      public void onInteract(PlayerInteractEvent e)
      {
        Player player = e.getPlayer();
        ItemStack item = e.getItem();
        if ((player == null) || (item == null)) {
          return;
        }
        Material material = item.getType();
        boolean blocked = check(item);
        if (blocked)
        {
          item = new ItemStack(material);
          if ((Config.ItemName != null) && (!Config.ItemName.equals("")))
          {
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(Config.ItemName);
            item.setItemMeta(meta);
          }
          player.setItemInHand(item);
          player.sendMessage(this.main.msgprefix + Config.Message);
          e.setCancelled(true);
        }
      }
     
      @EventHandler
      public void onItemPickup(PlayerPickupItemEvent e)
      {
        Player player = e.getPlayer();
        ItemStack item = e.getItem().getItemStack();
        if ((player == null) || (item == null)) {
          return;
        }
        boolean blocked = check(item);
        if (blocked) {
          e.setCancelled(true);
        }
      }
     
      @EventHandler
      public void onInventoryClick(InventoryClickEvent e)
      {
        Player player = (Player)e.getWhoClicked();
        ItemStack item = e.getCurrentItem();
        if ((player == null) || (item == null)) {
          return;
        }
        Material material = item.getType();
        boolean blocked = check(item);
        if (blocked)
        {
          item = new ItemStack(material);
          if ((Config.ItemName != null) && (!Config.ItemName.equals("")))
          {
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(Config.ItemName);
            item.setItemMeta(meta);
          }
          player.setItemInHand(item);
          player.sendMessage(this.main.msgprefix + Config.Message);
          e.setCancelled(true);
        }
      }
     
      public boolean check(ItemStack item)
      {
        boolean blocked = false;
        for (Iterator i$ = item.getEnchantments().values().iterator(); i$.hasNext();)
        {
          int i = ((Integer)i$.next()).intValue();
          if (i > Config.MaxLevel)
          {
            blocked = true;
            break;
          }
        }
        return blocked;
      }
    }
    
     
  13. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Все методы перед которыми стоит @EventHandler можешь убрать (если они тебе не нужны). И просто мой метод вставь рядом с ихними или вместо их.
     
  14. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Сделал как ты сказал:
    Код:
    package ru.yooxa.enchantfixer;
    
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.bukkit.Material;
    import org.bukkit.Server;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerPickupItemEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.PluginManager;
    
    public class PlayerListener
      implements Listener
    {
      public Main main;
    
      public PlayerListener(Main main)
      {
        this.main = main;
       
        main.getServer().getPluginManager().registerEvents(this, main);
      }
    
      @EventHandler
      public void onClick(InventoryClickEvent e) { 
          ItemStack is = e.getCurrentItem();
          if (is == null || is.getType() == Material.AIR) { return; }
          if (!is.hasItemMeta()) { return; }
          ItemMeta meta = is.getItemMeta();
          if (meta.hasEnchants()) {
              for (Enchantment ench : meta.getEnchants().keySet()) {
                  meta.removeEnchant(ench);
              }
          }
          is.setItemMeta(meta);
          Player p = (Player) e.getWhoClicked();
          p.sendMessage("§cЗачарованные предметы запрещены!");
      }
    
      public boolean check(ItemStack item)
      {
        boolean blocked = false;
        for (Iterator i$ = item.getEnchantments().values().iterator(); i$.hasNext();)
        {
          int i = ((Integer)i$.next()).intValue();
          if (i > Config.MaxLevel)
          {
            blocked = true;
            break;
          }
        }
        return blocked;
      }
    }
    
    Но плагин не как не снимает чары.
    Eclips ошибку пишет Безымянный.png [DOUBLEPOST=1490545015,1490544828][/DOUBLEPOST]Вот тут содержимое

    config.java
    Код:
    package ru.yooxa.enchantfixer;
    
    import org.bukkit.configuration.file.FileConfiguration;
    
    public class Config
    {
      public Main main;
      public static int MaxLevel;
      public static String Message;
      public static String ItemName;
     
      public Config(Main main)
      {
        this.main = main;
        MaxLevel = main.getConfig().getInt("MaxLevel");
        Message = main.getConfig().getString("Message").replace("&", "§");
        ItemName = main.getConfig().getString("ItemName").replace("&", "§");
      }
    }
    
    Main.java
    Код:
    package ru.yooxa.enchantfixer;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main
      extends JavaPlugin
    {
      String msgprefix;
     
      public void onEnable()
      {
        saveDefaultConfig();
       
        this.msgprefix = getConfig().getString("Prefix").replace("&", "§");
        new Config(this);
        new PlayerListener(this);
      }
     
      public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
      {
        if (cmd.getName().equalsIgnoreCase("enchantfixer"))
        {
          if ((sender instanceof Player))
          {
            Player player = (Player)sender;
            if (!player.hasPermission("enchantfixer.reload"))
            {
              player.sendMessage(this.msgprefix + "Нет прав");
              return true;
            }
          }
          if (args.length != 1)
          {
            sender.sendMessage(this.msgprefix + "Используйте /enchantfixer reload , чтобы перезагрузить конфиг");
            return true;
          }
          if (args[0].equalsIgnoreCase("reload"))
          {
            new Config(this);
            sender.sendMessage(this.msgprefix + "Конфиг перезагружен.");
            return true;
          }
        }
        return false;
      }
    }
    
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну так и укажи тип. Или своей башки нету?
     
  16. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Я не знаю что надо написать, предлагает после Iterator скобки <чёто ещё>
     
  17. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Учись думать головой.
     
  18. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    я java не знаю. ты можешь помочь?
     
  19. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Как хочешь.
     
  20. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NuaN
    Убери вообще класс config.java
    PlayerListener.java -> убери метод check.
    Main.java сделай таким:
    Код:
    package ru.yooxa.enchantfixer;
    import org.bukkit.plugin.java.JavaPlugin;
    public class Main extends JavaPlugin {
      public void onEnable() {
        new PlayerListener(this);
      }
    }
     
  21. Автор темы
    Thiiago

    Thiiago Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Thiiago
    Прикольно, он убирает чары только в Survival, а если игрок в креативе, можно вообще предмет удалить, его ведь не жалко?
    Есть мысль, если у игрока креатив, то включается у него survival и потом снимаются чары
     
    Последнее редактирование: 26 мар 2017

Поделиться этой страницей