写一个基于spigot的菜单
时间: 2024-04-04 07:03:34 浏览: 162
基于Java的Minecraft Spigot服务器BoatFly插件设计源码
当然可以!下面是一个简单的基于Spigot的菜单插件示例代码:
```java
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
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.Arrays;
public class MenuPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// 注册菜单监听器
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
// 在插件卸载时清除所有菜单
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.getOpenInventory().getTopInventory().getHolder() instanceof MenuHolder) {
player.closeInventory();
}
}
}
public void openMenu(Player player) {
// 创建一个9个物品槽的菜单
Inventory menu = Bukkit.createInventory(new MenuHolder(), 9, "菜单");
// 在菜单中添加物品
ItemStack item1 = createItem(Material.DIAMOND_SWORD, "剑", "这是一把剑");
ItemStack item2 = createItem(Material.IRON_CHESTPLATE, "胸甲", "这是一件胸甲");
ItemStack item3 = createItem(Material.GOLDEN_APPLE, "金苹果", "这是一个金苹果");
menu.setItem(0, item1);
menu.setItem(4, item2);
menu.setItem(8, item3);
// 打开菜单
player.openInventory(menu);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (event.getInventory().getHolder() instanceof MenuHolder) {
event.setCancelled(true);
Player player = (Player) event.getWhoClicked();
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || clickedItem.getType() == Material.AIR) {
return;
}
// 根据不同的物品进行处理
if (clickedItem.getType() == Material.DIAMOND_SWORD) {
player.sendMessage("你点击了剑!");
} else if (clickedItem.getType() == Material.IRON_CHESTPLATE) {
player.sendMessage("你点击了胸甲!");
} else if (clickedItem.getType() == Material.GOLDEN_APPLE) {
player.sendMessage("你点击了金苹果!");
}
}
}
private ItemStack createItem(Material material, String name, String... lore) {
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
meta.setLore(Arrays.asList(lore));
item.setItemMeta(meta);
return item;
}
private class MenuHolder implements org.bukkit.inventory.InventoryHolder {
@Override
public Inventory getInventory() {
return null;
}
}
}
```
这个插件创建了一个简单的菜单,包含三个物品:剑、胸甲和金苹果。当玩家点击菜单中的物品时,会根据不同的物品进行相应的处理,并向玩家发送相应的消息。你可以根据自己的需求进行修改和扩展。记得在plugin.yml文件中将main设置为你的主类路径。
阅读全文