我想禁止将我的自定义物品放入任何箱子中,我尝试过,但不知何故,我的常规库存中的物品奇怪地摇晃,但仍然可以放入其他物品栏中,我想问如何禁止这样做作为拐杖,因为我现在正在做。
这是我当前的代码:
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Inventory clickedInventory = event.getClickedInventory();
if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER) {
ItemStack itemStack = event.getHotbarButton() == -1 ? event.getCursor() : clickedInventory.getItem(event.getHotbarButton());
if ((customItemService.isCustomItem(itemStack) || customItemService.isCustomItem(event.getCurrentItem())) && event.getSlotType() == InventoryType.SlotType.ARMOR) {
event.setCancelled(true);
}
if (customItemService.isCustomItem(event.getCurrentItem()) && event.isShiftClick()) {
event.setCancelled(true);
}
return;
}
Inventory inventory = event.getView().getTopInventory();
if (inventory.getType() == InventoryType.WORKBENCH || inventory.getType() == InventoryType.CRAFTING) {
return;
}
boolean found = inventory.getType() == InventoryType.CHEST;
Location location = inventory.getLocation();
if (location == null) {
return;
}
boolean cancelled = false;
Inventory playerInventory = event.getWhoClicked().getInventory();
if (event.getHotbarButton() != -1 && customItemService.isCustomItem(playerInventory.getItem(event.getHotbarButton()))) {
if (location.getBlockY() < 5 && found) {
cancelled = true;
}
if (!found) {
cancelled = true;
}
}
if (customItemService.isCustomItem(event.getCurrentItem()) || customItemService.isCustomItem(event.getCursor())) {
if (location.getBlockY() < 5) {
cancelled = true;
}
if (!found) {
cancelled = true;
}
}
if (cancelled) {
event.setCancelled(true);
event.getWhoClicked().sendMessage(locale.get("not-allow"));
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
if (event.getInventory().getType() == InventoryType.PLAYER || event.getInventory().getType() == InventoryType.CRAFTING) {
if (customItemService.isCustomItem(event.getCursor()) || customItemService.isCustomItem(event.getOldCursor())) {
event.setCancelled(true);
}
return;
}
Inventory inventory = event.getView().getTopInventory();
if (inventory.getType() == InventoryType.WORKBENCH) {
return;
}
boolean found = inventory.getType() == InventoryType.CHEST;
Location location = event.getView().getTopInventory().getLocation();
if (location == null) {
return;
}
boolean cancelled = false;
if (customItemService.isCustomItem(event.getOldCursor()) || customItemService.isCustomItem(event.getCursor())) {
if (location.getBlockY() < 5) {
cancelled = true;
}
if (!found) {
cancelled = true;
}
}
if (cancelled) {
event.setCancelled(true);
event.getWhoClicked().sendMessage(locale.get("not-allow"));
}
}
我需要它,这样玩家就无法不通过shift、不通过键盘上的按钮、不通过鼠标来放置我的自定义项目
我尝试使用库存点击事件,它似乎有效,但你仍然可以将物品放在带有箱子的手推车中。
为了防止玩家将自定义物品放入宝箱中,请务必通过重置
InventoryClick
和 InventoryDrag
事件处理来取消所有将物品移入库存(包括宝箱)的尝试。
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
ItemStack itemStack = event.getCurrentItem();
if (customItemService.isCustomItem(itemStack)) {
event.setCancelled(true);
event.getWhoClicked().sendMessage(locale.get("not-allow"));
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
for (int slot : event.getRawSlots()) {
ItemStack itemStack = event.getInventory().getItem(slot);
if (customItemService.isCustomItem(itemStack)) {
event.setCancelled(true);
event.getWhoClicked().sendMessage(locale.get("not-allow"));
break;
}
}
}
通过此调整,玩家将无法将您的自定义物品放入库存中,包括宝箱。