Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Перехват чужих команд

Статус
Закрыто для дальнейших ответов.

misterzym

Активный участник
Пользователь
Баллы
63
Имя в Minecraft
Misterzym
Собственно есть команда от comandbook /sethome
делаю ее перехват
Код:
@EventHandler(priority=EventPriority.HIGH)
  public void onCom(PlayerCommandPreprocessEvent e)
  {
      String com=e.getMessage(); Player player=e.getPlayer();
      if(substring(com, "sethome") !=-1){
          if (!conner()){
              e.getPlayer().sendMessage("Запрещено ставить точку дома!");
              e.setCancelled(true);
          }
      }
  }
но увы, сыпит ошибкой, и не отменяет действие, что не так в коде?
 
misterzym, можно было ещё ошибку привести. А то непонятно в каком месте ошибка. Может на самом деле в методе conner()?
 
fromgate, а я ставлю на ошибку в методе substring (строкой выше).
Код:
if(substring(com, "sethome") !=-1){
Не понимаю, зачем создавать свой метод, если у объекта String уже есть подходящий для Вас indexOf(String str).
 
misterzym, можно было ещё ошибку привести. А то непонятно в каком месте ошибка. Может на самом деле в методе conner()?
В самом деле,. ошибку я просто забыл прикрепить, conner() по апи worldguard получает информацию, отдельно, в другом примере, тот же код апи работает безукоризненно
Код:
2013-12-02 22:15:50 [SEVERE] Could not pass event PlayerCommandPreprocessEvent to fixer v1.0
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:363)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:464)
    at net.minecraft.network.NetServerHandler.func_72566_d(NetServerHandler.java:1361)
    at net.minecraft.network.NetServerHandler.chat(NetServerHandler.java:1240)
    at net.minecraft.network.NetServerHandler.func_72481_a(NetServerHandler.java:1166)
    at net.minecraft.network.packet.Packet3Chat.func_73279_a(Packet3Chat.java:60)
    at net.minecraft.network.TcpConnection.func_74428_b(TcpConnection.java:442)
    at net.minecraft.network.NetServerHandler.func_72570_d(NetServerHandler.java:213)
    at net.minecraft.network.NetworkListenThread.func_71747_b(NetworkListenThread.java:53)
    at net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(SourceFile:30)
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:859)
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:728)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:612)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
Caused by: java.lang.NullPointerException
    at ru.dmitriymx.bukkit.tutorial.DmxFirstPlugin.onCom(DmxFirstPlugin.java:95)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:361)
    ... 16 more

fromgate, а я ставлю на ошибку в методе substring (строкой выше).
Код:
if(substring(com, "sethome") !=-1){
Не понимаю, зачем создавать свой метод, если у объекта String уже есть подходящий для Вас indexOf(String str).
На самом деле substring занимается не только сверкой, но и записью в лог в случае совпадения + записью в переменные других классов, но суть не в этом, функция прекрасно работает с сверкой полей с табличек например, затык только тут
 
ок, выкинем все ненужные эвенты, функции и прочее и сведем задачу к конкретной и сыпящей идентичную ошибку, получается на выходе:

Код:
 public static final Logger _log = Logger.getLogger("Minecraft");
  public WorldGuardPlugin wg;

  @Override
  public void onEnable() {
      _log.info("[FIXER] Active");
      Bukkit.getPluginManager().registerEvents(this, this);     
  }

  @EventHandler(priority=EventPriority.HIGH)
  public void onCom(PlayerCommandPreprocessEvent e)
  {
      String com=e.getMessage(); Player player=e.getPlayer();
      if(com.indexOf("sethome")!=-1){
          if (!wg.canBuild(player,player.getLocation().getBlock().getRelative(0, -1, 0))){
              e.getPlayer().sendMessage("Запрещено ставить точку дома!");
              e.setCancelled(true);
          }
      }
  }
 
Ну вижу нигде инициализацию переменной wg.
 
Ступил так ступил, забыл закопировать инициализацию апи, спасибо всем за помощь в такой позорной ошибке Х_Х
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх