602723113
就比如说像这样

for(int i=1;i<=10;i++){
     do something;
}

@EventHandler
public void move(PlayerMoveEvent e)
{
         something code;
}

这时候监视器触发了,怎么才能跳出这个循环?

TimmyOVO
本帖最后由 星燚 于 2016-6-11 18:40 编辑

你想用监听器监听后跳出外部的for循环?
这不很简单,加个全局变量另外,孩子你的想法很危险
我不知道你到底想干嘛
for循环基本处于一瞬间就完成,你需要结束它干嘛
而且如果是死循环类似这样
for(int c=-1;c<0;c--)
{
}
你服务器立马卡死或者非常卡...
也没必要吧

  1. private volatile int a=0;
  2. for(int i=1;i<=10;i++){
  3.      if(a==20)
  4. {
  5. break;
  6. }
  7. }

  8. @EventHandler
  9. public void move(PlayerMoveEvent e)
  10. {
  11.     setMyInt(20);
  12. }
  13. public int getMyInt()


  14. {
  15. return a;
  16. }
  17. public void setMyInt(Int number)
  18. {
  19. this.a=number;
  20. }
复制代码


602723113
星燚 发表于 2016-6-11 18:26
你想用监听器监听后跳出外部的for循环?
这不很简单,加个全局变量另外,孩子你的想法很危险
我不知道你到 ...

我其实是想弄一个插件,这个插件只是一个不断给予经验值的插件,然后玩家移动后就不再给予,这么的一个东西,不是想去弄个什么别的东西,顺便说声谢谢~

TimmyOVO
602723113 发表于 2016-6-14 18:53
我其实是想弄一个插件,这个插件只是一个不断给予经验值的插件,然后玩家移动后就不再给予,这么的一个东 ...

。。你这不可行
PlayerMoveEvent连玩家视角改变都会监听
不仅仅是移动

602723113
星燚 发表于 2016-6-14 18:54
。。你这不可行
PlayerMoveEvent连玩家视角改变都会监听
不仅仅是移动

诶呀这个不要紧的,告诉玩家就好了嘛 2333

andylizi
{:10_492:}建议先搞懂BukkitRunnable
用for等循环是不可能做到的。

Bryan33
梨子说的是正确的
因为MC单线程执行 所以在for中没办法被其他的代码影响
只能通过BukkitRunnable等方式实现

HotFlow
判断一下视角就好了

userzhangchao
ZHE GE HEN QIANG ZHI CHI LOU ZHU LOU ZHU JIA YOU A

耗子
如果不用线程和休眠的话这个给予经验的速度很快,而且服务器会卡

602723113
耗子 发表于 2016-6-27 22:52
如果不用线程和休眠的话这个给予经验的速度很快,而且服务器会卡

那可不可以用 Thread.sleep() ?

SilverMing
602723113 发表于 2016-6-28 08:48
那可不可以用 Thread.sleep() ?

前面已经有人提到MC是单线程的,除非你休眠的不是主线程,用Thread.sleep()相等于将整个服务器「休眠」掉(其实就是卡服)

耗子
602723113 发表于 2016-6-28 08:48
那可不可以用 Thread.sleep() ?

可以自己创建一个Timer

他们服务器
本帖最后由 他们服务器 于 2016-6-30 11:35 编辑
602723113 发表于 2016-6-28 08:48
那可不可以用 Thread.sleep() ?

可以单独创建一个类继承Thread类,然后start(),这样Thread.sleep()就不会影响到服务器了,但是不提倡这种做法,因为线程同步问题很难解决。最好的方案还是用BukkitRunnable类。

弱鸡绿毛怪
貌似不可以