2017-08-06 9 views
1

getInstance()の近くにある "Magic"は何ですか?私はこの質問(Setting the block underneath any player to glowstone, then setting it back to the original material)の返信の答えでそれを見つけました。私はそれが動作していないとそれを修正する方法として魔法とは何かを知りたいと思います。マジックは解決できません。エラーの内容です。取得メインクラスが推奨されていないために私が見たチュートリアルに関する質問があります

package me.deltarift.walkonwater; 

import org.bukkit.Bukkit; 
import org.bukkit.Material; 
import org.bukkit.block.Block; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.player.PlayerMoveEvent; 
import org.bukkit.plugin.java.JavaPlugin; 

public class WalkOnWater extends JavaPlugin { 

    @EventHandler 
    public void onStep(PlayerMoveEvent pme) { 
     Player player = pme.getPlayer(); 
     final Block block = player.getLocation().subtract(0, 1, 0).getBlock(); 
     final Material type = block.getType(); 
     if(!type.equals(Material.GLOWSTONE)){ 
      @SuppressWarnings("deprecation") 
      Material m = player.getItemInHand().getType(); 
      if (m == Material.GLOWSTONE) { 
       if(type.isSolid()) { 
        block.setType(Material.GLOWSTONE); 
        Bukkit.getScheduler().runTaskLater(Magic.getInstance(), new Runnable(){ 
         public void run(){ 
          block.setType(type); 
         } 
        },10L); 
       } 
      } 
     } 
    } 
} 
+2

マジックは、そののgetInstanceメソッドに戻り、singeltonクラスですマジック自体の目的。 – sourabh1024

+0

質問に対する回答がわからない場合は、新しい質問を作成するのではなく、回答を明確にするためにコメントを追加してください。これにより不要な重複が作成されます。元の質問のコンテキストで追加することは、他者の回答を改善するのにも役立ちます。 –

答えて

3

方法Scheduler#runTaskLater(plugin, runnable, delay)takes the Main class of your plugin (The one that extends JavaPlugin) as the first argumentにそれがタスクを管理できるように(プラグインが無効になっているとき、すなわち、それをキャンセル)

しかし、静的のgetInstance()、そしてあなたthis答えに記載されているようにdependency injectionを使用する方がよいでしょう。


ない主な議論の一部が、:マウスが移動したときにPlayerMoveEventでもと呼ばれる

  1. 、すなわち多く、何度:ここ

    は、そのコードのためのいくつかの最適化のヒントです。あなたは、彼らが別のブロックに移動していることを確認するチェックを持っている必要があり、彼らは最初にグローストーンを保持している。

  2. Combat Updateの時点で、Dual Wieldingが追加されました。したがって、getItemInHand()は推奨されなくなりました。アイテムを取得するにはPlayer#getInventory().getItemInMainHand();またはPlayer#getInventory().getItemInOffHand();を使用してください。
  3. As recommended by the wiki
  4. は、あなたが Scheduler#runTaskLater();
0

Magic.getInstance()は、元のユーザーの独自のプラグインでMagicと呼ばれるメインクラスを参照するための静的な試みであるBukkitRunnableの代わりに使用する必要があります。あなた自身のプラグインでこのコードを使用するには、Magic.getInstance()を自分のメインクラスの適切なインスタンスへの参照に置き換えてください。

このコードはすでにあなたのメインクラス内にある場合、あなたは、単にそのようthisを使用することができます。 Bukkit.getScheduler().runTaskLater(this, new Runnable(){...}

に「主な」名前ですそうでなければ、あなたは、そのようなクラスのコンストラクタにあなたのメインクラスを渡すことができます

Main plugin; 
public class SecondaryClass { 
    SecondaryClass(Main plugin) { 
     this.plugin = plugin; 
    } 
} 

...そしてそのようにそれを参照してください:あなたのメインクラスの Bukkit.getScheduler().runTaskLater(plugin, new Runnable(){...}

関連する問題