下面是一个使用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是否匹配。如果不匹配,将取消打开箱子的事件,并向玩家发送一条消息。

请注意,此示例仅考虑了普通的箱子。如果您想支持大型箱子(例如双箱或三箱),您需要在代码中进行一些修改以处理这些特殊类型的箱子。

用Java写一个Bukkit1201 的箱子保护插件将箱子放置者ID记录到配置文件如果放置者与打开者ID不符将不能打开大型箱子也一样

原文地址: https://www.cveoy.top/t/topic/ifYe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录