如何在进阶完成后运行一个事件?

问题描述 投票:0回答:1

我想编写一个插件,让边框跟随玩家,并在玩家每次获得进阶时翻倍。问题是,我不知道如何检测某人何时获得晋级,并将其保持在同一个类中。下面是目前的代码。

survivalBorders.class

package sc458.survivalborders;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class survivalBorders extends JavaPlugin {
    public void onEnable() {
        World world = Bukkit.getWorld("survival");
        WorldBorder border = world.getWorldBorder();
        double borderSize = border.getSize();

        while(true) {
            if(PlayerAdvancementDoneEvent) {
                border.setSize(borderSize*2);
            }
        }
    }
    public void onDisable() {

    }
}

MoveEvent.class

package sc458.survivalborders;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;

public class MoveEvent implements Listener {
    public void onMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        World world = Bukkit.getWorld("survival");
        WorldBorder border = world.getWorldBorder();
        int locX = p.getLocation().getBlockX();
        int locZ = p.getLocation().getBlockZ();
        border.setCenter(locX, locZ);
    }
}
java minecraft bukkit
1个回答
1
投票

试着用Listener调用PlayerMoveEvent,然后你就可以在他每次移动时(事件被触发)->再次设置边界。所以基本上当他的坐标发生变化时,边框会立即跟着你移动。

public class MoveEvent implements Listener {
   @EventHandler
   public void onMove(PlayerMoveEvent e) {
     Player p = e.getPlayer();
     WorldBorder border = world.getWorldBorder();
     int locX = p.getLocation().getBlockX();
     int locZ = p.getLocation().getBlockZ();
     border.setCenter(locX, locZ);
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.