用Java写一个Bukkit1201 的箱子保护插件将箱子放置者ID记录到配置文件如果放置者与打开者ID不符将不能打开大型箱子也一样
下面是一个使用Java编写的Bukkit 1.20.1的箱子保护插件示例:
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
public class ChestProtectionPlugin extends JavaPlugin implements Listener {
private FileConfiguration dataConfig;
private File dataFile;
@Override
public void onEnable() {
// 注册事件监听器
Bukkit.getPluginManager().registerEvents(this, this);
// 加载或创建数据文件
dataFile = new File(getDataFolder(), "data.yml");
if (!dataFile.exists()) {
saveResource("data.yml", false);
}
dataConfig = YamlConfiguration.loadConfiguration(dataFile);
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlockPlaced();
if (block.getType() == Material.CHEST) {
Chest chest = (Chest) block.getState();
Player player = event.getPlayer();
String chestOwner = player.getUniqueId().toString();
dataConfig.set(chest.getLocation().toString(), chestOwner);
saveDataConfig();
}
}
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
BlockState blockState = event.getInventory().getLocation().getBlock().getState();
if (blockState instanceof Chest) {
Chest chest = (Chest) blockState;
Player player = (Player) event.getPlayer();
String chestOwner = dataConfig.getString(chest.getLocation().toString());
String playerID = player.getUniqueId().toString();
if (chestOwner != null && !chestOwner.equals(playerID)) {
event.setCancelled(true);
player.sendMessage("你没有权限打开这个箱子!");
}
}
}
private void saveDataConfig() {
try {
dataConfig.save(dataFile);
} catch (IOException e) {
getLogger().severe("无法保存数据文件: " + e.getMessage());
}
}
}
请将上述代码保存为ChestProtectionPlugin.java并放置在您的插件项目中的正确位置。然后,使用Maven或Gradle等构建工具构建您的插件。
此插件将在箱子放置时记录放置者的ID,并在打开箱子时检查放置者与打开者的ID是否匹配。如果不匹配,将取消打开箱子的事件,并向玩家发送一条消息。
请注意,此示例仅考虑了普通的箱子。如果您想支持大型箱子(例如双箱或三箱),您需要在代码中进行一些修改以处理这些特殊类型的箱子。
原文地址: https://www.cveoy.top/t/topic/ifYe 著作权归作者所有。请勿转载和采集!