Bukkit 1.20 箱子保护插件:设置主人并限制访问
下面是一个使用Java编写的Bukkit插件,可以实现你所描述的功能:
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
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;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class ChestProtectionPlugin extends JavaPlugin implements Listener {
private Map<Block, UUID> chestOwners;
@Override
public void onEnable() {
chestOwners = new HashMap<>();
Bukkit.getPluginManager().registerEvents(this, this);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("setowner")) {
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "用法: /setowner <玩家名字> <箱子坐标>");
return true;
}
Player player = Bukkit.getPlayer(args[0]);
if (player == null) {
sender.sendMessage(ChatColor.RED + "找不到玩家 " + args[0]);
return true;
}
Block block = getBlockFromArgs(sender, args[1]);
if (block == null) {
return true;
}
chestOwners.put(block, player.getUniqueId());
sender.sendMessage(ChatColor.GREEN + "已将箱子的主人设置为玩家 " + player.getName());
return true;
}
return false;
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || !event.getPlayer().isSneaking()) {
return;
}
Block block = event.getClickedBlock();
if (block == null || block.getType() != Material.CHEST) {
return;
}
Player player = event.getPlayer();
UUID chestOwner = chestOwners.get(block);
if (chestOwner == null || !chestOwner.equals(player.getUniqueId())) {
event.setCancelled(true);
player.sendMessage(ChatColor.RED + "你没有权限打开这个箱子!");
} else {
Inventory gui = createGui(player, block);
player.openInventory(gui);
}
}
@Override
public void onDisable() {
chestOwners.clear();
}
private Block getBlockFromArgs(CommandSender sender, String arg) {
String[] parts = arg.split(",");
if (parts.length != 3) {
sender.sendMessage(ChatColor.RED + "无效的坐标格式!");
return null;
}
int x, y, z;
try {
x = Integer.parseInt(parts[0]);
y = Integer.parseInt(parts[1]);
z = Integer.parseInt(parts[2]);
} catch (NumberFormatException e) {
sender.sendMessage(ChatColor.RED + "无效的坐标!");
return null;
}
Block block = sender.getServer().getWorlds().get(0).getBlockAt(x, y, z);
if (block.getType() != Material.CHEST) {
sender.sendMessage(ChatColor.RED + "这个坐标不是箱子!");
return null;
}
return block;
}
public static ItemStack createGuiItem(Material material, String name, String... lore) {
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(ChatColor.RESET + name);
meta.setLore(Arrays.asList(lore));
item.setItemMeta(meta);
return item;
}
public static Inventory createGui(Player player, Block block) {
Inventory gui = Bukkit.createInventory(player, 9, "箱子设置");
UUID chestOwner = chestOwners.get(block);
String ownerName = (chestOwner != null) ? Bukkit.getPlayer(chestOwner).getName() : "无";
gui.setItem(4, createGuiItem(Material.CHEST, "箱子主人", "当前主人: ' + ownerName));
return gui;
}
}
这段代码实现了一个Bukkit插件,当玩家按住SHIFT键并右键点击箱子时,如果玩家是箱子的主人,将打开一个GUI界面,可以设置箱子的主人。如果玩家不是箱子的主人,将禁止打开箱子并显示禁止消息。
要使用这个插件,你需要在一个Java开发环境中创建一个新的Java项目,将这段代码保存为一个名为ChestProtectionPlugin.java的文件,并将其添加到项目中。然后,使用适当的方法编译和打包插件,并将生成的JAR文件放入你的Bukkit服务器的插件文件夹中。
在游戏中,你可以使用/setowner <玩家名字> <箱子坐标>命令来设置箱子的主人。然后,当玩家按住SHIFT键并右键点击箱子时,将打开一个GUI界面,可以查看和修改箱子的主人。
使用说明:
- 将代码保存为
ChestProtectionPlugin.java文件。 - 编译并打包插件,生成JAR文件。
- 将JAR文件放入Bukkit服务器的插件文件夹中。
- 在游戏中使用
/setowner <玩家名字> <箱子坐标>命令设置箱子主人。 - 按住SHIFT键并右键点击箱子,打开GUI界面设置或查看主人信息。
注意事项:
- 坐标格式为
X,Y,Z。 - 确保插件已正确加载和启用。
- 该插件仅提供基本功能,你可以根据需要进行扩展和修改。
示例:
- 设置玩家
Player1为坐标10,64,15处的箱子的主人:/setowner Player1 10,64,15 - 玩家
Player2尝试打开该箱子,但没有权限,会收到禁止消息。 - 玩家
Player1按住SHIFT键并右键点击该箱子,会打开GUI界面,可以查看和修改主人信息。
原文地址: https://www.cveoy.top/t/topic/pLgl 著作权归作者所有。请勿转载和采集!