如题:
功能如下,判断物品LORE, 如果包含某个lore, 则不能把这个物品放入 某个指定title库存中
过程中用到了InventoryMoveItemEvent, 但是发现玩家移动物品的时候不生效, 只有漏斗自动放入的时候才生效 1.12.2 spigot
功能如下,判断物品LORE, 如果包含某个lore, 则不能把这个物品放入 某个指定title库存中
过程中用到了InventoryMoveItemEvent, 但是发现玩家移动物品的时候不生效, 只有漏斗自动放入的时候才生效 1.12.2 spigot
本帖最后由 2000000 于 2022-11-17 17:07 编辑
未经测试,思路大概就是这样
遍历物品Lore来检查物品Lore是否含有指定的字符串,并且监听 InventoryClickEvent 如果有指定的字符串且 Inv 标题为您所限制的则取消此次点击
需要注意的是,如果您检查的Lore是从配置文件中获取的,那么我会建议您在插件开启时便将Lore存储进容器里,避免现场多次读取配置文件造成的卡顿
@EventHandler
public void inventoryClickEvent(InventoryClickEvent event) {
Inventory inventory = event.getClickedInventory();
ItemStack clickItem = event.getCurrentItem();
if (inventory == null || clickItem == null) return;
if (checkItemStackLore(clickItem, "string") && event.getView().getTitle().equals("限制的title")) event.setCancelled(true);
}
private static boolean checkItemStackLore(ItemStack itemStack, String contains) {
ItemMeta meta = itemStack.getItemMeta();
if (meta == null || meta.getLore() == null) return false;
for (String l : meta.getLore()) if (l.contains(contains)) return true;
return false;
}
未经测试,思路大概就是这样
遍历物品Lore来检查物品Lore是否含有指定的字符串,并且监听 InventoryClickEvent 如果有指定的字符串且 Inv 标题为您所限制的则取消此次点击
需要注意的是,如果您检查的Lore是从配置文件中获取的,那么我会建议您在插件开启时便将Lore存储进容器里,避免现场多次读取配置文件造成的卡顿
2000000 发表于 2022-11-17 17:01
未经测试,思路大概就是这样
遍历物品Lore来检查物品Lore是否含有指定的字符串,并且监听 InventoryClick ...
原来要用点击事件