本帖最后由 IMENDERDRAGON 于 2017-7-9 13:07 编辑
比如说我要在X:50至X:100之间从X:50开始每1秒放置一个方块,然后就是如下代码:worldIn, y, z变量是在上面的事件里定义的
int i = 50;
while(i <= 100){
i++;
try{
Thread.sleep(1000);
worldIn.setBlockStste(new BlockPos(i, y, z), 那一个方块.getDefaultState(), 3);
}
catch(Exception e){
System.out.println(e);
}
}
可是为什么必须得循环结束后放置?
求解答。。
比如说我要在X:50至X:100之间从X:50开始每1秒放置一个方块,然后就是如下代码:worldIn, y, z变量是在上面的事件里定义的
int i = 50;
while(i <= 100){
i++;
try{
Thread.sleep(1000);
worldIn.setBlockStste(new BlockPos(i, y, z), 那一个方块.getDefaultState(), 3);
}
catch(Exception e){
System.out.println(e);
}
}
可是为什么必须得循环结束后放置?
求解答。。
Thread.sleep()是卡服
请使用BukkitRunnable
请使用BukkitRunnable
强行sleep最为致命。
建议楼主使用简单易用的BukkitRunnable,另外除非是整个服务器的定时任务(比如开一个监视线程)这类的最好别自己对主线程操作,反正你这么写服务器肯定是要卡1秒的。
建议楼主使用简单易用的BukkitRunnable,另外除非是整个服务器的定时任务(比如开一个监视线程)这类的最好别自己对主线程操作,反正你这么写服务器肯定是要卡1秒的。
还好只卡了50秒(卡60秒服务器就崩溃了)
凋灵兔子 发表于 2017-7-10 23:36
强行sleep最为致命。
建议楼主使用简单易用的BukkitRunnable,另外除非是整个服务器的定时任务(比如开一个 ...
有没有是使用forge的?
IMENDERDRAGON 发表于 2017-7-14 08:15
有没有是使用forge的?
是不是原理都一样,卡线程了,单独schedule就好了,这样异步操作主线程我记得forge有方法提供的,不然无法操作