2016-12-05 15 views
0

私はMinecraftプラグインをコーディングしています。ここ は私のコードです:Minecraftプラグインコーディング:コマンドは引数のintを変更しません

public class ItemGiver extends JavaPlugin { 

public int time; 
int show = time/1200; 

// Divide by mins by 1200 for ticks 
@Override 
public void onEnable() { 
    getLogger().info("ItemGiver enabled."); 
    timer(); 

} 
@Override 
public void onDisable() { 

} 





public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 


    if(cmd.getName().equalsIgnoreCase("bonustime") && sender instanceof Player) { 
     Player player = (Player) sender; 
     if(args.length == 1) { 

     if(player.hasPermission("bonus.set") || player.isOp()) { 

       player.sendMessage(ChatColor.DARK_PURPLE + "[Bonus] The bonus delay has been set to " + show + " minute(s)!"); 
       time = Integer.parseInt(args[0].trim()) * 1200; 
       return true; 

       } 

     } 
     if(args.length != 1) { 
      player.sendMessage(ChatColor.RED + "Incorrect Syntax."); 
     } 


     } 







    return false; 

} 


@SuppressWarnings("deprecation") 
public void timer() 
{ 

    this.getServer().getScheduler().scheduleAsyncRepeatingTask(this,new Runnable() 
    { 
     public void run() 
     { 

      for(Player player : Bukkit.getServer().getOnlinePlayers()) 
      { 

       player.getInventory().addItem(new ItemStack(Material.COBBLESTONE, 32)); 
       player.getInventory().addItem(new ItemStack(Material.IRON_INGOT, 1)); 
       player.giveExpLevels(2); 
       player.sendMessage(ChatColor.DARK_PURPLE + "[Bonus] You have received your bonus! Next bonus in " + show + " minutes!"); 
      } 
     } 
    } 
    , time, time); 
} 

}

問題は、私はそれぞれの「ボーナス寄付を」遅延させるための変更時間を作るしようとしていますonCommandブール値、である、time = Interger.parseInt(arg[0].trim());が実際に値を変更しないように見えます時間の?申し訳ありませんが、愚かな質問のように見えるかもしれません。

+0

のために求めているあなたはショー 'の値を期待しています「時間」を変えたときに変更する?割り当てはそのようには機能しません。それが現れて、それはゼロに初期化されます( 'time'はゼロに初期化され、ゼロで除算されたゼロはまだゼ​​ロです)ので、そのままです。 – Sam

+0

私は..私は両方の時間を期待していて、変化するように見せていました。どのようにしてゼロから初期化しないのですか?それともそうする方法はありますか?もう一度申し訳ありませんが、私はこれについてかなり新しいです。 – BlackSmoked

+0

同じ情報に近い新しい質問を作成するのではなく、前の質問を編集する – Kerooker

答えて

0

最初に、showの値が初期値timeで1回計算されます。 showの値をタイマーが表す分数にする場合は、時間を更新するときに、showの値を更新する必要があります。

第2に、bukkit runnableに渡す時間は最後です。bukkit runnableは元の数値にスケジューリングし、time変数を更新するとbukkit実行可能時間が変更されません。

時刻が変更されたときにbukkit実行可能時間を変更する解決策は、グローバルBukkitRunnable変数を格納することです。これを実行するためには、このチュートリアルに示すように、新しいnew BukkitRunnable()方法に廃止予定getServer().getScheduler().scheduleAsyncRepeatingTask()から移動する必要があります:http://wiki.bukkit.org/Scheduler_Programming#Anonymous_BukkitRunnable_Example

あなたがしたいと思う何度実行可能bukkitを構築し、としてそれを保存していますグローバル変数。時間を更新するたびに、グローバルなbukkit実行可能ファイルをrunnable.cancel()でキャンセルし、次に計算した新しいtime変数を使用してrunnable.runTaskTimerAsynchronously()で再度実行するようスケジュールする必要があります。

ただ、先端には、プレイヤーのインベントリを更新タスクのために(別のスレッドで)非同期タスクのスケジュールを設定すべきではない、あなただけのConcurrentException

関連する問題