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

  • Автор темы Автор темы Thiiago
  • Дата начала Дата начала

Thiiago

Активный участник
Пользователь
Баллы
46
Ник в Minecraft
Thiiago
Где это можно включить? За 1.5.2 запинаете, знаю. На 1.5.2 плагины уже не пишут, тогда без плагинов давайте. Может можно в ядре отключить?
 
EnchantFixer не контролирует броню
Ну тогда могу посоветовать написать простенький плагин: ловить InventoryClickEvent -> проверять если данный предмет зачарован -> убирать чары все.
 
Ну тогда могу посоветовать написать простенький плагин: ловить InventoryClickEvent -> проверять если данный предмет зачарован -> убирать чары все.
Я покалупал плагин, убрал 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, если мне понадобится забанить игрока
 
Последнее редактирование:
Я покалупал плагин, убрал 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, если мне понадобится забанить игрока
Это вообще не то что тебе надо.
Вот тебе такое нужно:
Код:
//Снимает зачарование с предмета если на него кликаешь в инвентаре
    @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Зачарованные предметы запрещены!");
    }
 
Это вообще не то что тебе надо.
Вот тебе такое нужно:
Код:
//Снимает зачарование с предмета если на него кликаешь в инвентаре
    @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Зачарованные предметы запрещены!");
    }
Этот код под 1.5.2? И будет работать если я этот кусок кода в eclips просто вставлю, вместо "public void onInventoryClick(InventoryClickEvent e)"
 
Этот код под 1.5.2? И будет работать если я этот кусок кода в eclips просто вставлю, вместо "public void onInventoryClick(InventoryClickEvent e)"
Этот код под все версии идет. Нет нельзя. Это ивент. Читай на вики как их правильно регистрировать.
 
Этот код под все версии идет. Нет нельзя. Это ивент. Читай на вики как их правильно регистрировать.
Блииин я не умею...
Глянь, пожалуйста, куда вставить
JavaScript:
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.*********ventory.ItemStack;
import org.*********ventory.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;
  }
}
 
Блииин я не умею...
Глянь, пожалуйста, куда вставить
JavaScript:
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.*********ventory.ItemStack;
import org.*********ventory.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;
  }
}
Все методы перед которыми стоит @EventHandler можешь убрать (если они тебе не нужны). И просто мой метод вставь рядом с ихними или вместо их.
 
Все методы перед которыми стоит @EventHandler можешь убрать (если они тебе не нужны). И просто мой метод вставь рядом с ихними или вместо их.
Сделал как ты сказал:
JavaScript:
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.*********ventory.ItemStack;
import org.*********ventory.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
Вот тут содержимое

config.java
JavaScript:
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
JavaScript:
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;
  }
}
 
Сделал как ты сказал:
JavaScript:
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.*********ventory.ItemStack;
import org.*********ventory.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 ошибку пишетПосмотреть вложение 45710
Вот тут содержимое

config.java
JavaScript:
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
JavaScript:
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;
  }
}
Ну так и укажи тип. Или своей башки нету?
 
я java не знаю. ты можешь помочь?
Убери вообще класс 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);
  }
}
 
Убери вообще класс 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);
  }
}
Прикольно, он убирает чары только в Survival, а если игрок в креативе, можно вообще предмет удалить, его ведь не жалко?
Есть мысль, если у игрока креатив, то включается у него survival и потом снимаются чары
 
Последнее редактирование:
Назад
Верх Низ