用Java写一个Bukkit1201的 玩家进入地狱门的时候不会传送到地狱并且 会将玩家传送到进入地狱门之前并且打开一个Gui
以下是使用Java编写的Bukkit插件,可以在玩家进入地狱门时将其传送回进入地狱门之前的位置,并打开一个GUI界面。
首先,创建一个新的Java类文件,命名为"PortalPlugin",并在其中添加以下代码:
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
public class PortalPlugin extends JavaPlugin implements Listener {
private HashMap<String, Location> previousLocations;
@Override
public void onEnable() {
// 注册事件监听器
getServer().getPluginManager().registerEvents(this, this);
// 初始化HashMap
previousLocations = new HashMap<>();
}
@Override
public void onDisable() {
// 清空HashMap
previousLocations.clear();
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
Location from = event.getFrom();
Location to = event.getTo();
// 检查玩家是否进入地狱门
if (isNetherPortal(to.getBlock())) {
// 将玩家传送回进入地狱门之前的位置
if (previousLocations.containsKey(player.getName())) {
Location previousLocation = previousLocations.get(player.getName());
player.teleport(previousLocation);
} else {
// 如果没有记录玩家之前的位置,则将其传送到世界的默认位置
World defaultWorld = Bukkit.getWorlds().get(0);
player.teleport(defaultWorld.getSpawnLocation());
}
// 打开GUI界面
openPortalGUI(player);
// 取消传送事件
event.setCancelled(true);
}
// 记录玩家的当前位置
previousLocations.put(player.getName(), from);
}
private boolean isNetherPortal(Block block) {
return block.getType() == Material.NETHER_PORTAL;
}
private void openPortalGUI(Player player) {
Inventory gui = Bukkit.createInventory(null, 9, "Portal GUI");
// 在GUI中添加物品
ItemStack item = new ItemStack(Material.DIAMOND);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("Welcome to the Nether!");
item.setItemMeta(meta);
gui.setItem(4, item);
// 打开GUI界面
player.openInventory(gui);
}
}
然后,在plugin.yml文件中添加以下内容:
name: PortalPlugin
version: 1.0
main: com.example.PortalPlugin
api-version: 1.20.1-R0.1-SNAPSHOT
最后,将以上代码保存并导出为一个jar文件,并将其放置在Bukkit服务器的插件文件夹中。
注意:以上代码仅适用于Bukkit 1.20.1版本。如果使用其他版本的Bukkit,可能需要做一些调整
原文地址: http://www.cveoy.top/t/topic/inHv 著作权归作者所有。请勿转载和采集!