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

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

Discussion in 'Помощь' started by Thiiago, Mar 24, 2017.

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

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

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

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

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

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

    Trophy Points:
    31
    Имя в Minecraft:
    Thiiago
    чярят через all u want
     
  5. NuaN

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

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

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

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

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

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

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

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

    if ((Config.ItemName != null) && (!Config.ItemName.equals("")))
    Code:
     @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, если мне понадобится забанить игрока
     
    Last edited: Mar 25, 2017
  9. NuaN

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

    Trophy Points:
    76
    Имя в Minecraft:
    NuaN
    Это вообще не то что тебе надо.[DOUBLEPOST=1490450367,1490450020][/DOUBLEPOST]Вот тебе такое нужно:
    Code:
    //Снимает зачарование с предмета если на него кликаешь в инвентаре
        @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 Участник Пользователь

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

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

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

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

    Trophy Points:
    31
    Имя в Minecraft:
    Thiiago
    Блииин я не умею...
    Глянь, пожалуйста, куда вставить
    Code:
    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 Активный участник Пользователь

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

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

    Trophy Points:
    31
    Имя в Minecraft:
    Thiiago
    Сделал как ты сказал:
    Code:
    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
    Code:
    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
    Code:
    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 Администратор

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    Skype:
    alexandr0116
    Как хочешь.
     
  20. NuaN

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

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

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

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

Share This Page