2016-10-20 4 views
0

プラグインのバグのためのプラグインをコーディングしたい(ChestShop)。 プレイヤーが右クリックしたとき(サインの2行目が「B Free」または「Free」、3行目が「Iron_Ingot」)、イベントをキャンセルしてメッセージを送信します。Player sign interact

public void onPlayerInteract(PlayerInteractEvent e){ 
    Player player = e.getPlayer(); 
    if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)){ 
     if(e.getClickedBlock().getState() instanceof Sign){ 
      Sign sign = (Sign) e.getClickedBlock().getState(); 
      if(sign.getLine(2).equals("B Free") || sign.getLine(2).equals("Free")){ 
       if(sign.getLine(3).equals("Iron_Ingot")) 
       e.setCancelled(true); 
       e.getPlayer().sendMessage("You can not click this sign"); 

      } 
     } 
    } 
} 

コードの一部が間違っている、私はこれを試してみましたが、それはうまくいきませんでしたか? どのような方法を使用できますか?

+0

Block.getStateが(何ですか)? – TsundereBug

+0

それを使用するブロックを指定します。 – drhopeness

+0

あなたは '@ EventHandler'を忘れましたか? また、イベントが登録されていることを確認してください。 –

答えて

1

あなたのonPlayerInteractメソッドが持つクラスは、teインターフェイスのListenerを実装する必要があります。また、EventHandlerアノテーションを使用し、プラグインでイベントを登録する必要があります。 (JavaPluginを拡張)メインクラスでのごonEnableで

public class PlayerInteract implements Listener { 

    // priority is when the listener is called. 
    // LOWEST is called first, then LOW, NORMAL, HIGH, HIGHEST, MONITOR. 
    @EventHandler(priority = EventPriority.NORMAL) 
    public void onPlayerInteract(PlayerInteractEvent event) { 
     // ... 
    } 

} 

getServer().getPluginManager().registerEvents(new PlayerInteract(),this); 
+0

心配しないで、イベント(EventHandler enumまたはMain javaクラスimplement ...)を使用する方法を知っていますが、これを見つけられませんでした。 – drhopeness

+0

@drhopenessそれでも動作しない場合は、イベント、メインクラス、plugin.yml、およびエラーを処理します。 – Priv

+0

ありがとう、私はバグを修正しました。 – drhopeness