Bukkit 1.20.1 展示箱插件: 将普通箱子转换为无法取物的展示箱
以下是一个示例代码,可以在 Bukkit 1.20.1 版本上实现将箱子转换为展示箱的功能:
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
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.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.List;
public class DisplayChestPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
getLogger().info('DisplayChestPlugin has been enabled!');
}
@Override
public void onDisable() {
getLogger().info('DisplayChestPlugin has been disabled!');
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase('displaychest')) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + 'This command can only be executed by players.');
return true;
}
Player player = (Player) sender;
Block block = player.getTargetBlock(null, 5);
BlockState blockState = block.getState();
if (!(blockState instanceof Chest)) {
player.sendMessage(ChatColor.RED + 'You must be looking at a chest to use this command.');
return true;
}
Chest chest = (Chest) blockState;
Inventory inventory = chest.getInventory();
Inventory displayInventory = Bukkit.createInventory((InventoryHolder) player, 27, 'Display Chest');
for (int i = 0; i < inventory.getSize(); i++) {
ItemStack item = inventory.getItem(i);
if (item != null) {
displayInventory.setItem(i, item);
}
}
chest.getBlockInventory().clear();
chest.update();
player.openInventory(displayInventory);
player.sendMessage(ChatColor.GREEN + 'The chest has been converted to a display chest.');
return true;
}
return false;
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (event.getView().getTitle().equals('Display Chest')) {
event.setCancelled(true);
}
}
}
要使用该插件,您需要在 Bukkit 服务器上创建一个新的插件,并将以上代码保存到 DisplayChestPlugin.java 文件中。然后,将生成的 .jar 文件放入服务器的插件文件夹中,并重新启动服务器。
一旦插件启用,玩家可以使用 /displaychest 命令将所看到的箱子转换为展示箱。转换后,玩家只能右键打开箱子查看物品,而无法拿出物品。玩家也无法通过拖拽物品到自己的背包中来拿取物品。
请注意,此插件基于 Bukkit API,并且在 Bukkit 1.20.1 版本上进行了测试。确保您的服务器版本与此版本兼容。
原文地址: https://www.cveoy.top/t/topic/qhcj 著作权归作者所有。请勿转载和采集!