Bukkit 1.20.1 玩家放置箱子保护插件:记录放置者ID,禁止非放置者打开
以下是一个示例的Java代码,用于实现在Bukkit 1.20.1服务器中,当玩家放置箱子后记录放置者ID,并禁止非放置者打开箱子。当两个箱子合并成一个时,只记录一个放置者ID,同时非放置者也不能打开大箱子。
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.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.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.UUID;
public class ChestProtectionPlugin extends JavaPlugin implements Listener {
private HashMap<Block, UUID> placedChests;
@Override
public void onEnable() {
placedChests = new HashMap<>();
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
Player player = event.getPlayer();
if (block.getType() == Material.CHEST) {
Chest chest = (Chest) block.getState();
placedChests.put(block, player.getUniqueId());
}
}
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
if (event.getInventory().getType() == org.bukkit.event.inventory.InventoryType.CHEST) {
BlockState blockState = event.getInventory().getLocation().getBlock().getState();
if (blockState instanceof Chest) {
Chest chest = (Chest) blockState;
UUID placerId = placedChests.get(chest.getBlock());
if (placerId != null) {
Player player = (Player) event.getPlayer();
if (!player.getUniqueId().equals(placerId)) {
event.setCancelled(true);
}
}
}
}
}
}
你可以将上述代码保存为一个Java文件,并在Bukkit服务器中作为一个插件加载。该插件将会在玩家放置箱子时记录放置者ID,并在非放置者尝试打开箱子时禁止打开。当两个箱子合并成一个时,只记录一个放置者ID,并且非放置者也不能打开大箱子。
原文地址: https://www.cveoy.top/t/topic/fRjo 著作权归作者所有。请勿转载和采集!