gpt4 book ai didi

java - 每 2 分钟调用一个函数

转载 作者:行者123 更新时间:2023-11-29 07:29:46 24 4
gpt4 key购买 nike

我正在为 Minecraft 服务器开发一个插件,它可以自动为西瓜农场打破西瓜。它循环遍历所有玩家当前区 block 中的所有方 block ,并打破属于西瓜的方 block 。起初,我试图在 onEnable 方法中使用 while 循环连续调用此函数,但这导致服务器超时/滞后。没有 while 循环(仅从 onEnable 调用函数一次),插件工作正常。每次我重装服务器,功能都会运行,所有的瓜都会坏掉;所以我决定制作一个每两分钟调用一次该函数的计时器。出于某种原因,服务器仍然超时,即使有计时器,我不明白

这是我的代码:

package me.spigot.itiurray.main;

import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
private long goTime = 0;

@Override
public void onEnable() {
getLogger().info("MelonDrop has been enabled.");
startBreakWithInterval();
}

private void breakMelons() {
for (Player player : Bukkit.getOnlinePlayers()) {
Chunk chunk = player.getLocation().getChunk();

int x = chunk.getX() << 4;
int z = chunk.getZ() << 4;

for (int xx = x; xx < x + 16; xx++) {
for (int zz = z; zz < z + 16; zz++) {
for (int yy = 0; yy < 256; yy++) {

Block block = chunk.getBlock(xx, yy, zz);

if (block.getType().equals(Material.MELON_BLOCK))
block.breakNaturally();

goTime = System.currentTimeMillis() + 120000;
}
}
}
}
}

private void startBreakWithInterval() {
boolean running = true;

while (running == true) {
if (System.currentTimeMillis() >= getGoTime())
breakMelons();
}
}

private long getGoTime() {
return goTime;
}
}

编辑:这是它目前的样子...

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);

@Override
public void onEnable() {
getLogger().info("MelonDrop has been enabled.");

scheduledExecutorService.scheduleWithFixedDelay(() -> breakMelons(),
2, 2, TimeUnit.MINUTES);
}

最佳答案

您的代码卡在 while(running == true)

我建议你使用 ScheduledExecutorService

关于java - 每 2 分钟调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44529987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com