From ac65a43bbcda8714d6b59b55f0f00370679cec61 Mon Sep 17 00:00:00 2001 From: Sen Date: Sat, 6 Sep 2025 14:20:23 +0200 Subject: [PATCH] add item deselect --- client/src/main/java/client/Client.java | 25 +++++--- .../java/client/network/ClientPlayer.java | 8 ++- .../java/client/util/PlayerController.java | 6 +- .../block/artificial/BlockFlowerPot.java | 2 +- .../java/common/block/tech/BlockCauldron.java | 2 +- .../java/common/entity/animal/EntityCat.java | 2 +- .../common/entity/animal/EntityHorse.java | 2 +- .../java/common/entity/animal/EntityWolf.java | 6 +- .../java/common/entity/npc/EntityMage.java | 4 +- .../java/common/entity/npc/EntityNPC.java | 64 +++++++++---------- .../common/entity/types/EntityAnimal.java | 4 +- .../common/entity/types/EntityLiving.java | 2 +- .../java/common/inventory/ContainerChest.java | 1 - .../inventory/ContainerEnchantment.java | 1 - .../inventory/ContainerEntityInventory.java | 1 - .../common/inventory/ContainerMerchant.java | 1 - .../src/main/java/common/item/ItemStack.java | 2 +- .../java/common/item/material/ItemArmor.java | 1 - .../server/command/commands/CommandClear.java | 2 +- .../src/main/java/server/network/Player.java | 26 +++++--- 20 files changed, 84 insertions(+), 78 deletions(-) diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 6a977150..b12b637a 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -452,7 +452,7 @@ public class Client implements IThreadListener { private final List chunkListing = Lists.newArrayList(); private final Set emptyChunkListing = Sets.newHashSet(); private final Set nextEmptyChunkListing = Sets.newHashSet(); - private final int[] lastSelection = new int[ItemCategory.values().length]; + public final int[] lastSelection = new int[ItemCategory.values().length]; private boolean primary; private boolean secondary; @@ -573,9 +573,9 @@ public class Client implements IThreadListener { public LocalPos pointedLiquid; public DisplayMode vidMode; public String dimensionName; + public ItemCategory itemSelection = ItemCategory.USEABLE; private ChunkClient emptyChunk; private ChunkClient outsideChunk; - private ItemCategory itemSelection = ItemCategory.USEABLE; private List entities; private List unloaded; @@ -1557,6 +1557,8 @@ public class Client implements IThreadListener { private void select(int dir) { int last = this.player.getSelectedIndex(); int n = 0; + if(last < 0) + this.player.setSelectedIndex(0); do { this.player.setSelectedIndex(this.player.getSelectedIndex() + dir); if(this.player.getSelectedIndex() < 0) @@ -1574,9 +1576,10 @@ public class Client implements IThreadListener { private void category(int dir) { ItemCategory last = this.itemSelection; - this.lastSelection[last.ordinal()] = this.player.getSelectedIndex(); + this.lastSelection[last.ordinal()] = this.player.getSelectedIndex() >= 0 ? this.player.getSelectedIndex() : 0; int total; int n = 0; + boolean any = false; do { this.itemSelection = ItemCategory.values()[(ItemCategory.values().length + this.itemSelection.ordinal() + dir) % ItemCategory.values().length]; total = 0; @@ -1584,6 +1587,7 @@ public class Client implements IThreadListener { if(this.player.getStackInSlot(z) != null && this.player.getStackInSlot(z).getItem().getCategory() == this.itemSelection) ++total; } + any |= total > 0; ++n; } while(total <= 0 && n < ItemCategory.values().length); @@ -1592,6 +1596,9 @@ public class Client implements IThreadListener { this.controller.resetUseCooldown(); this.player.setSelectedIndex(Math.min(this.lastSelection[this.itemSelection.ordinal()], this.player.getHotbarSize() - 1)); } + else if(!any) { + this.player.setSelectedIndex(-1); + } } public void moveCamera(float x, float y) { @@ -1679,7 +1686,7 @@ public class Client implements IThreadListener { this.player.swingItem(); this.player.client.addToSendQueue(new CPacketAction(Action.ITEM_ACTION, ItemControl.PRIMARY.ordinal())); if(this.player.getHeldItem() != null && this.player.getHeldItem().isEmpty()) - this.player.setHeldItem(null); + this.player.clearHeldItem(); this.leftClickCounter = 10; return; } @@ -1733,7 +1740,7 @@ public class Client implements IThreadListener { this.player.swingItem(); this.player.client.addToSendQueue(new CPacketAction(Action.ITEM_ACTION, ItemControl.SECONDARY.ordinal())); if(this.player.getHeldItem() != null && this.player.getHeldItem().isEmpty()) - this.player.setHeldItem(null); + this.player.clearHeldItem(); return; } @@ -1767,7 +1774,7 @@ public class Client implements IThreadListener { if (itemstack.isEmpty()) { - this.player.setHeldItem(null); + this.player.clearHeldItem(); } else if (itemstack.getSize() != i) { @@ -1796,7 +1803,7 @@ public class Client implements IThreadListener { if(this.player.getHeldItem() != null && this.player.getHeldItem().getItem().onAction(this.player.getHeldItem(), this.player, this.world, ItemControl.TERTIARY, null)) { this.player.client.addToSendQueue(new CPacketAction(Action.ITEM_ACTION, ItemControl.TERTIARY.ordinal())); if(this.player.getHeldItem() != null && this.player.getHeldItem().isEmpty()) - this.player.setHeldItem(null); + this.player.clearHeldItem(); return; } @@ -1813,7 +1820,7 @@ public class Client implements IThreadListener { this.player.setSelectedIndex(idx); this.controller.resetUseCooldown(); } - if(this.itemCheat) { + if(this.itemCheat && this.player.getSelectedIndex() >= 0) { this.player.client.addToSendQueue(new CPacketCheat(item, -2 - this.player.getSelectedIndex(), this.ctrl())); } } @@ -1826,7 +1833,7 @@ public class Client implements IThreadListener { if(this.player.getHeldItem() != null && this.player.getHeldItem().getItem().onAction(this.player.getHeldItem(), this.player, this.world, ItemControl.QUARTERNARY, null)) { this.player.client.addToSendQueue(new CPacketAction(Action.ITEM_ACTION, ItemControl.QUARTERNARY.ordinal())); if(this.player.getHeldItem() != null && this.player.getHeldItem().isEmpty()) - this.player.setHeldItem(null); + this.player.clearHeldItem(); return; } } diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index ad761735..56c29649 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -510,7 +510,7 @@ public class ClientPlayer implements IClientPlayer if (i == 0) { - player.setHeldItem(null); + player.clearHeldItem(); } else { @@ -568,11 +568,15 @@ public class ClientPlayer implements IClientPlayer { NetHandler.checkThread(packetIn, this, this.gm, this.world); - if (packetIn.getHeldItemHotbarIndex() >= 0 && packetIn.getHeldItemHotbarIndex() < this.gm.player.getHotbarSize()) + if (packetIn.getHeldItemHotbarIndex() >= -1 && packetIn.getHeldItemHotbarIndex() < this.gm.player.getHotbarSize()) { if(this.gm.player.getSelectedIndex() != packetIn.getHeldItemHotbarIndex()) this.gm.controller.resetUseCooldown(); this.gm.player.setSelectedIndex(packetIn.getHeldItemHotbarIndex()); + if(this.gm.player.getHeldItem() != null && this.gm.player.getHeldItem().getItem().getCategory() != null) { + this.gm.itemSelection = this.gm.player.getHeldItem().getItem().getCategory(); + this.gm.lastSelection[this.gm.itemSelection.ordinal()] = this.gm.player.getSelectedIndex(); + } } } diff --git a/client/src/main/java/client/util/PlayerController.java b/client/src/main/java/client/util/PlayerController.java index 0992062f..95c778c7 100755 --- a/client/src/main/java/client/util/PlayerController.java +++ b/client/src/main/java/client/util/PlayerController.java @@ -65,7 +65,7 @@ public class PlayerController { stack.getItem().onBlockDestroyed(stack, world, block, pos, this.gm.player); if(stack.isEmpty()) { - this.gm.player.setHeldItem(null); + this.gm.player.clearHeldItem(); } } @@ -83,7 +83,7 @@ public class PlayerController { this.interacting = true; this.handler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.START_DESTROY_BLOCK, pos, face)); if(this.gm.player.getHeldItem() != null && this.gm.player.getHeldItem().isEmpty()) - this.gm.player.setHeldItem(null); + this.gm.player.clearHeldItem(); return true; } if(!this.hitting || !this.isHitting(pos)) { @@ -260,7 +260,7 @@ public class PlayerController { player.setHeldItem(changed); if(changed.isEmpty()) { - player.setHeldItem(null); + player.clearHeldItem(); } return true; diff --git a/common/src/main/java/common/block/artificial/BlockFlowerPot.java b/common/src/main/java/common/block/artificial/BlockFlowerPot.java index 891cb014..82d4993d 100755 --- a/common/src/main/java/common/block/artificial/BlockFlowerPot.java +++ b/common/src/main/java/common/block/artificial/BlockFlowerPot.java @@ -79,7 +79,7 @@ public class BlockFlowerPot extends Block if (itemstack.decrSize()) { - playerIn.setHeldItem(null); + playerIn.clearHeldItem(); } return true; diff --git a/common/src/main/java/common/block/tech/BlockCauldron.java b/common/src/main/java/common/block/tech/BlockCauldron.java index 89cc59b6..e618719e 100755 --- a/common/src/main/java/common/block/tech/BlockCauldron.java +++ b/common/src/main/java/common/block/tech/BlockCauldron.java @@ -135,7 +135,7 @@ public class BlockCauldron extends Block if (itemstack.decrSize()) { - playerIn.setHeldItem(null); + playerIn.clearHeldItem(); } // } diff --git a/common/src/main/java/common/entity/animal/EntityCat.java b/common/src/main/java/common/entity/animal/EntityCat.java index d4d2cbde..ee9830a1 100755 --- a/common/src/main/java/common/entity/animal/EntityCat.java +++ b/common/src/main/java/common/entity/animal/EntityCat.java @@ -221,7 +221,7 @@ public class EntityCat extends EntityTameable { if (itemstack.decrSize()) { - player.setHeldItem(null); + player.clearHeldItem(); } if (!this.worldObj.client) diff --git a/common/src/main/java/common/entity/animal/EntityHorse.java b/common/src/main/java/common/entity/animal/EntityHorse.java index 940b9839..25519296 100755 --- a/common/src/main/java/common/entity/animal/EntityHorse.java +++ b/common/src/main/java/common/entity/animal/EntityHorse.java @@ -906,7 +906,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { { if (itemstack.decrSize()) { - player.setHeldItem(null); + player.clearHeldItem(); } return true; diff --git a/common/src/main/java/common/entity/animal/EntityWolf.java b/common/src/main/java/common/entity/animal/EntityWolf.java index 3d846c07..e4bc86d7 100755 --- a/common/src/main/java/common/entity/animal/EntityWolf.java +++ b/common/src/main/java/common/entity/animal/EntityWolf.java @@ -270,7 +270,7 @@ public class EntityWolf extends EntityTameable if (itemstack.decrSize()) { - player.setHeldItem(null); + player.clearHeldItem(); } return true; @@ -286,7 +286,7 @@ public class EntityWolf extends EntityTameable if (itemstack.decrSize()) { - player.setHeldItem(null); + player.clearHeldItem(); } return true; @@ -306,7 +306,7 @@ public class EntityWolf extends EntityTameable { if (itemstack.decrSize()) { - player.setHeldItem(null); + player.clearHeldItem(); } if (!this.worldObj.client) diff --git a/common/src/main/java/common/entity/npc/EntityMage.java b/common/src/main/java/common/entity/npc/EntityMage.java index 40cc4609..0af11857 100755 --- a/common/src/main/java/common/entity/npc/EntityMage.java +++ b/common/src/main/java/common/entity/npc/EntityMage.java @@ -35,7 +35,7 @@ public class EntityMage extends EntityNPC { this.drinking = false; ItemStack itemstack = this.getHeldItem(); - this.setHeldItem(null); + this.clearHeldItem(); if (itemstack != null && itemstack.getItem() instanceof ItemPotion potion) { @@ -115,7 +115,7 @@ public class EntityMage extends EntityNPC } } else { - this.setHeldItem(null); + this.clearHeldItem(); } } } diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index 22e83116..4b9e5869 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -199,7 +199,6 @@ public abstract class EntityNPC extends EntityLiving implements IInventory private boolean fleeing; private boolean playing; protected boolean noPickup; - private ItemStack heldItem; private ItemStack prevHeldItem; private ItemStack mouseItem; private final ItemStack[] armor = new ItemStack[Equipment.ARMOR_SLOTS]; @@ -672,7 +671,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory if (stack != null && !this.isPlayer() && this.isBreedingItem(stack) && this.getGrowingAge() == 0 && !this.isMating()) { if(stack.decrSize()) - player.setHeldItem(null); + player.clearHeldItem(); if (!this.worldObj.client) { this.setIsWillingToMate(true); @@ -684,7 +683,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory else if (stack != null && !this.isPlayer() && this.isBreedingItem(stack) && this.getGrowingAge() < 0) { if(stack.decrSize()) - player.setHeldItem(null); + player.clearHeldItem(); if (!this.worldObj.client) { this.grow(this.rand.range(200, 250)); @@ -1741,6 +1740,8 @@ public abstract class EntityNPC extends EntityLiving implements IInventory */ public EntityItem dropOneItem(boolean dropAll) { + if(this.getSelectedIndex() < 0) + return null; if(this.client != null) { CPacketBreak.Action c07packetplayerdigging$action = dropAll ? CPacketBreak.Action.DROP_ALL_ITEMS : CPacketBreak.Action.DROP_ITEM; this.client.addToSendQueue(new CPacketBreak(c07packetplayerdigging$action, LocalPos.ORIGIN, Facing.DOWN)); @@ -2497,7 +2498,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory public ItemStack getHeldItem() { - return this.isPlayer() || this.dummy ? (this.getSelectedIndex() < this.getHotbarSize() && this.getSelectedIndex() >= 0 ? this.getStackInSlot(this.getSelectedIndex()) : null) : this.heldItem; + return this.getSelectedIndex() < this.getHotbarSize() && this.getSelectedIndex() >= 0 ? this.getStackInSlot(this.getSelectedIndex()) : null; } public ItemStack[] getArmor() @@ -2517,14 +2518,17 @@ public abstract class EntityNPC extends EntityLiving implements IInventory public void setHeldItem(ItemStack stack) { - if(this.isPlayer() || this.dummy) { - this.setInventorySlotContents(this.getSelectedIndex(), stack); - } - else { - this.heldItem = stack; - if(!this.worldObj.client) - this.setCombatTask(); - } + if(!this.isPlayer() && !this.dummy) + this.setSelectedIndex(0); + if(this.getSelectedIndex() >= 0) + this.setInventorySlotContents(this.getSelectedIndex(), stack); + if(!this.isPlayer() && !this.dummy && !this.worldObj.client) + this.setCombatTask(); + } + + public final void clearHeldItem() + { + this.setHeldItem(null); } public void setArmor(Equipment slot, ItemStack stack) @@ -2534,8 +2538,10 @@ public abstract class EntityNPC extends EntityLiving implements IInventory public void setHeldNoUpdate(ItemStack stack) { - if(!this.isPlayer()) - this.heldItem = stack; + if(!this.isPlayer() && !this.dummy) { + this.setSelectedIndex(0); + this.setInventorySlotContents(this.getSelectedIndex(), stack); + } } public void setMouseItem(ItemStack stack) @@ -2874,7 +2880,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory if (itemstack.isEmpty()) { - this.setHeldItem(null); + this.clearHeldItem(); } } @@ -3294,17 +3300,13 @@ public abstract class EntityNPC extends EntityLiving implements IInventory List list = tag.getList("items"); this.clear(); - for(int z = 0; z < list.size(); z++) { + for(int z = 0; z < list.size() && z < this.getInventoryCapacity(); z++) { TagObject item = list.get(z); - int slot = item.getByte("Slot") & 255; ItemStack stack = ItemStack.readFromTag(item); - if(stack != null && slot >= 0 && slot < this.getInventoryCapacity()) - this.setInventorySlotContents(slot, stack); + if(stack != null) + this.setInventorySlotContents(z, stack); } - if(this.isPlayer()) - this.setSelectedIndex(tag.getInt("selected")); - else - this.setHeldNoUpdate(ItemStack.readFromTag(tag.getObject("held"))); + this.setSelectedIndex(this.isPlayer() || this.dummy ? tag.getInt("selected") : 0); for(Equipment slot : Equipment.ARMOR) { this.setArmor(slot, ItemStack.readFromTag(tag.getObject(slot.getName()))); } @@ -3426,21 +3428,13 @@ public abstract class EntityNPC extends EntityLiving implements IInventory for(int z = 0; z < this.getInventoryCapacity(); z++) { if(this.getStackInSlot(z) != null) { TagObject item = new TagObject(); - item.setByte("Slot", (byte)z); this.getStackInSlot(z).writeTags(item); list.add(item); } } tag.setList("items", list); - if(this.isPlayer()) { + if(this.isPlayer() || this.dummy) tag.setInt("selected", this.getSelectedIndex()); - } - else { - TagObject item = new TagObject(); - if(this.getHeldItem() != null) - this.getHeldItem().writeTags(item); - tag.setObject("held", item); - } for(Equipment slot : Equipment.ARMOR) { TagObject item = new TagObject(); if(this.getArmor(slot) != null) @@ -3578,7 +3572,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory { if (itemstack.isEmpty()) // && !this.creative) { - this.setHeldItem(null); + this.clearHeldItem(); } return true; @@ -3593,7 +3587,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory { if (itemstack.isEmpty()) // && !this.creative) { - this.setHeldItem(null); + this.clearHeldItem(); } // else if (itemstack.stackSize < itemstack1.stackSize && this.creative) // { @@ -3701,7 +3695,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory if (itemstack.isEmpty()) { - this.setHeldItem(null); + this.clearHeldItem(); } } diff --git a/common/src/main/java/common/entity/types/EntityAnimal.java b/common/src/main/java/common/entity/types/EntityAnimal.java index 9d820410..17ec4bbc 100755 --- a/common/src/main/java/common/entity/types/EntityAnimal.java +++ b/common/src/main/java/common/entity/types/EntityAnimal.java @@ -170,7 +170,7 @@ public abstract class EntityAnimal extends EntityLiving if (this.isBreedingItem(stack) && this.getGrowingAge() == 0 && !this.isInLove()) { if(stack.decrSize()) - player.setHeldItem(null); + player.clearHeldItem(); this.setInLove(player); return true; } @@ -178,7 +178,7 @@ public abstract class EntityAnimal extends EntityLiving if (this.isChild() && this.isBreedingItem(stack)) { if(stack.decrSize()) - player.setHeldItem(null); + player.clearHeldItem(); if(!this.worldObj.client) this.grow((int)((float)(-this.getGrowingAge() / 20) * 0.1F)); return true; diff --git a/common/src/main/java/common/entity/types/EntityLiving.java b/common/src/main/java/common/entity/types/EntityLiving.java index 43c4b2a2..7e6d6d67 100755 --- a/common/src/main/java/common/entity/types/EntityLiving.java +++ b/common/src/main/java/common/entity/types/EntityLiving.java @@ -2678,7 +2678,7 @@ public abstract class EntityLiving extends Entity if(stack != null && stack.getItem() == Items.lead && this.allowLeashing() && (!(this instanceof EntityTameable tameable) || !tameable.isTamed() || tameable.isOwner(player))) { this.setLeashedTo(player, true); if(stack.decrSize()) - player.setHeldItem(null); + player.clearHeldItem(); return true; } return this.interact(player) || super.interactFirst(player); diff --git a/common/src/main/java/common/inventory/ContainerChest.java b/common/src/main/java/common/inventory/ContainerChest.java index b67c63a2..1a5d36ab 100755 --- a/common/src/main/java/common/inventory/ContainerChest.java +++ b/common/src/main/java/common/inventory/ContainerChest.java @@ -7,7 +7,6 @@ import common.collect.Lists; import common.entity.npc.EntityNPC; import common.item.ItemStack; import common.tileentity.TileEntityChest; -import common.util.Equipment; public class ContainerChest extends Container { diff --git a/common/src/main/java/common/inventory/ContainerEnchantment.java b/common/src/main/java/common/inventory/ContainerEnchantment.java index 7bf095e2..b8373bba 100755 --- a/common/src/main/java/common/inventory/ContainerEnchantment.java +++ b/common/src/main/java/common/inventory/ContainerEnchantment.java @@ -13,7 +13,6 @@ import common.item.ItemStack; import common.item.material.ItemEnchantedBook; import common.network.IPlayer; import common.rng.Random; -import common.util.Equipment; import common.util.LocalPos; import common.util.Pair; import common.world.World; diff --git a/common/src/main/java/common/inventory/ContainerEntityInventory.java b/common/src/main/java/common/inventory/ContainerEntityInventory.java index ad8f152f..1fec4b54 100755 --- a/common/src/main/java/common/inventory/ContainerEntityInventory.java +++ b/common/src/main/java/common/inventory/ContainerEntityInventory.java @@ -8,7 +8,6 @@ import common.entity.animal.EntityHorse; import common.entity.npc.EntityNPC; import common.init.Items; import common.item.ItemStack; -import common.util.Equipment; public class ContainerEntityInventory extends Container { diff --git a/common/src/main/java/common/inventory/ContainerMerchant.java b/common/src/main/java/common/inventory/ContainerMerchant.java index 78c64ab6..6e56f452 100755 --- a/common/src/main/java/common/inventory/ContainerMerchant.java +++ b/common/src/main/java/common/inventory/ContainerMerchant.java @@ -6,7 +6,6 @@ import common.collect.Lists; import common.entity.npc.EntityNPC; import common.item.ItemStack; import common.network.IPlayer; -import common.util.Equipment; import common.village.MerchantRecipe; import common.world.World; diff --git a/common/src/main/java/common/item/ItemStack.java b/common/src/main/java/common/item/ItemStack.java index ce20252a..5229d438 100755 --- a/common/src/main/java/common/item/ItemStack.java +++ b/common/src/main/java/common/item/ItemStack.java @@ -421,7 +421,7 @@ public final class ItemStack { entity.renderBrokenItemStack(this); this.decrSize(); if(entity != null && entity.isPlayer() && this.isEmpty() && this.item instanceof ItemBow) - ((EntityNPC)entity).setHeldItem(null); + ((EntityNPC)entity).clearHeldItem(); this.setItemDamage(0); } } diff --git a/common/src/main/java/common/item/material/ItemArmor.java b/common/src/main/java/common/item/material/ItemArmor.java index ed84f890..a78feaa2 100755 --- a/common/src/main/java/common/item/material/ItemArmor.java +++ b/common/src/main/java/common/item/material/ItemArmor.java @@ -20,7 +20,6 @@ import common.util.Equipment; import common.util.Serverside; import common.util.Vec3; import common.world.AWorldServer; -import common.world.World; public class ItemArmor extends Item { private final ToolMaterial material; diff --git a/server/src/main/java/server/command/commands/CommandClear.java b/server/src/main/java/server/command/commands/CommandClear.java index e949f6c2..3070d889 100644 --- a/server/src/main/java/server/command/commands/CommandClear.java +++ b/server/src/main/java/server/command/commands/CommandClear.java @@ -24,7 +24,7 @@ public class CommandClear extends Command { if(entity.isPlayer()) ((EntityNPC)entity).setMouseItem(null); else - ((EntityNPC)entity).setHeldItem(null); + ((EntityNPC)entity).clearHeldItem(); exec.log("Inventar von %s gelöscht", entity.getRawName()); done++; } diff --git a/server/src/main/java/server/network/Player.java b/server/src/main/java/server/network/Player.java index 685d5cef..804ff266 100755 --- a/server/src/main/java/server/network/Player.java +++ b/server/src/main/java/server/network/Player.java @@ -1108,7 +1108,7 @@ public class Player extends User implements Executor, IPlayer if(this.onPlayerInteract(true, pos)) { this.sendPacket(new SPacketBlockChange(this.entity.worldObj, pos)); if(this.entity.getHeldItem() != null && this.entity.getHeldItem().isEmpty()) - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); this.entity.openContainer.detectAndSendChanges(); return; } @@ -1223,7 +1223,7 @@ public class Player extends User implements Executor, IPlayer if (itemstack1.isEmpty()) { - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); } } @@ -1252,7 +1252,7 @@ public class Player extends User implements Executor, IPlayer if (itemstack.isEmpty()) { - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); } if (!this.entity.isUsingItem()) @@ -1268,7 +1268,7 @@ public class Player extends User implements Executor, IPlayer this.sendPacket(new SPacketBlockChange(this.entity.worldObj, pos)); stack.getItem().onItemUse(stack, this.entity, this.entity.worldObj, pos, side, offsetX, offsetY, offsetZ); if(stack.isEmpty()) - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); this.entity.openContainer.detectAndSendChanges(); return false; } @@ -1950,10 +1950,13 @@ public class Player extends User implements Executor, IPlayer case ITEM: if(msg.length() > 30) throw new IllegalArgumentException("Ungültiger Name"); - if(packetIn.getArg() == -1) - this.entity.inventoryContainer.renameItem(Equipment.ARMOR_SLOTS + this.entity.getSelectedIndex(), msg); - else + if(packetIn.getArg() == -1) { + if(this.entity.getSelectedIndex() >= 0) + this.entity.inventoryContainer.renameItem(Equipment.ARMOR_SLOTS + this.entity.getSelectedIndex(), msg); + } + else { this.entity.openContainer.renameItem(packetIn.getArg(), msg); + } this.entity.openContainer.detectAndSendChanges(); break; @@ -2378,12 +2381,15 @@ public class Player extends User implements Executor, IPlayer this.entity.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos)); this.entity.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos.offset(enumfacing))); } + + if(this.entity.getSelectedIndex() < 0) + return; itemstack = this.entity.getHeldItem(); if (itemstack != null && itemstack.isEmpty()) { - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); itemstack = null; } @@ -2608,7 +2614,7 @@ public class Player extends User implements Executor, IPlayer break; case SET_ITEMSLOT: - if(packetIn.getAuxData() >= 0 && packetIn.getAuxData() < this.entity.getHotbarSize()) { + if(packetIn.getAuxData() >= -1 && packetIn.getAuxData() < this.entity.getHotbarSize()) { if(packetIn.getAuxData() != this.entity.getSelectedIndex()) this.itemUseCooldown = 0; this.entity.setSelectedIndex(packetIn.getAuxData()); @@ -2657,7 +2663,7 @@ public class Player extends User implements Executor, IPlayer item.getItem().onAction(item, this.entity, this.entity.worldObj, ItemControl.values()[packetIn.getAuxData() % ItemControl.values().length], null); if(item.isEmpty()) - this.entity.setHeldItem(null); + this.entity.clearHeldItem(); this.entity.openContainer.detectAndSendChanges(); } break;