Minecraft插件编码:命令不会更改参数int

时间:2016-12-05 22:35:21

标签: java plugins arguments minecraft

所以我正在编写一个Minecraft插件,我对此很新。 这是我的代码:

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());似乎实际上没有改变时间值?对不起,可能看起来像个愚蠢的问题。

1 个答案:

答案 0 :(得分:0)

首先,使用时间的初始值计算show的值一次。如果您希望show的值为计时器所代表的分钟数,则应在更新时间时更新show的值。

其次,传递给bukkit runnable的时间是final,其中bukkit runnable将其调度为您给它的原始数字,并且更新time变量不会改变bukkit runnable的间隔。

更改时间更改时bukkit可运行间隔的解决方案是存储全局BukkitRunnable变量。为此,您必须从已弃用的getServer().getScheduler().scheduleAsyncRepeatingTask()移至较新的new BukkitRunnable()方法,如本教程所示:http://wiki.bukkit.org/Scheduler_Programming#Anonymous_BukkitRunnable_Example

您想要做的是构造bukkit runnable一次,并将其存储为全局变量。每次更新时间时,都需要取消使用runnable.cancel()运行的全局bukkit,然后使用您刚刚计算的新runnable.runTaskTimerAsynchronously()变量安排它再次使用time运行。

只是提示,您不应该为更新播放器库存的任务安排异步任务(在另一个线程上),您只需要ConcurrentException