From 878b43758db4dbe6e9cc0c07c3b52d8c96344d5d Mon Sep 17 00:00:00 2001 From: Parker Hawke Date: Mon, 21 Dec 2020 18:30:48 +1100 Subject: [PATCH] #772: Add API to set equipment silently --- nms-patches/Entity.patch | 31 ++++--- nms-patches/EntityArmorStand.patch | 41 +++++++-- nms-patches/EntityHuman.patch | 27 +++++- nms-patches/EntityLiving.patch | 85 +++++++++++-------- .../inventory/CraftEntityEquipment.java | 63 +++++++++++--- .../inventory/CraftInventoryPlayer.java | 35 ++++++++ 6 files changed, 212 insertions(+), 70 deletions(-) diff --git a/nms-patches/Entity.patch b/nms-patches/Entity.patch index c399fc83a..a590e9b9a 100644 --- a/nms-patches/Entity.patch +++ b/nms-patches/Entity.patch @@ -520,7 +520,16 @@ this.world.getMethodProfiler().exit(); } -@@ -1753,6 +2063,13 @@ +@@ -1690,6 +2000,8 @@ + + public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack) {} + ++ public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack, boolean silent) {} // CraftBukkit ++ + public boolean isBurning() { + boolean flag = this.world != null && this.world.isClientSide; + +@@ -1753,6 +2065,13 @@ } public void setSwimming(boolean flag) { @@ -534,7 +543,7 @@ this.setFlag(4, flag); } -@@ -1785,8 +2102,12 @@ +@@ -1785,8 +2104,12 @@ return this.getScoreboardTeam() != null ? this.getScoreboardTeam().isAlly(scoreboardteambase) : false; } @@ -548,7 +557,7 @@ } public boolean getFlag(int i) { -@@ -1813,16 +2134,56 @@ +@@ -1813,16 +2136,56 @@ } public void setAirTicks(int i) { @@ -608,7 +617,7 @@ } public void k(boolean flag) { -@@ -1972,15 +2333,32 @@ +@@ -1972,15 +2335,32 @@ @Nullable public Entity b(WorldServer worldserver) { @@ -643,7 +652,7 @@ this.world.getMethodProfiler().exitEnter("reloading"); Entity entity = this.getEntityType().a((World) worldserver); -@@ -1989,9 +2367,17 @@ +@@ -1989,9 +2369,17 @@ entity.setPositionRotation(shapedetectorshape.position.x, shapedetectorshape.position.y, shapedetectorshape.position.z, shapedetectorshape.yaw, entity.pitch); entity.setMot(shapedetectorshape.velocity); worldserver.addEntityTeleport(entity); @@ -663,7 +672,7 @@ } this.bN(); -@@ -2012,13 +2398,18 @@ +@@ -2012,13 +2400,18 @@ @Nullable protected ShapeDetectorShape a(WorldServer worldserver) { @@ -686,7 +695,7 @@ return null; } else { WorldBorder worldborder = worldserver.getWorldBorder(); -@@ -2028,8 +2419,16 @@ +@@ -2028,8 +2421,16 @@ double d3 = Math.min(2.9999872E7D, worldborder.h() - 16.0D); double d4 = DimensionManager.a(this.world.getDimensionManager(), worldserver.getDimensionManager()); BlockPosition blockposition = new BlockPosition(MathHelper.a(this.locX() * d4, d0, d2), this.locY(), MathHelper.a(this.locZ() * d4, d1, d3)); @@ -704,7 +713,7 @@ IBlockData iblockdata = this.world.getType(this.ac); EnumDirection.EnumAxis enumdirection_enumaxis; Vec3D vec3d; -@@ -2046,8 +2445,8 @@ +@@ -2046,8 +2447,8 @@ vec3d = new Vec3D(0.5D, 0.0D, 0.0D); } @@ -715,7 +724,7 @@ } } else { BlockPosition blockposition1; -@@ -2057,8 +2456,15 @@ +@@ -2057,8 +2458,15 @@ } else { blockposition1 = worldserver.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING_NO_LEAVES, worldserver.getSpawn()); } @@ -732,7 +741,7 @@ } } -@@ -2066,8 +2472,23 @@ +@@ -2066,8 +2474,23 @@ return BlockPortalShape.a(blockutil_rectangle, enumdirection_enumaxis, this.getPositionVector(), this.a(this.getPose())); } @@ -758,7 +767,7 @@ } public boolean canPortal() { -@@ -2253,7 +2674,26 @@ +@@ -2253,7 +2676,26 @@ } public void a(AxisAlignedBB axisalignedbb) { diff --git a/nms-patches/EntityArmorStand.patch b/nms-patches/EntityArmorStand.patch index 7de504dcd..a28ae517d 100644 --- a/nms-patches/EntityArmorStand.patch +++ b/nms-patches/EntityArmorStand.patch @@ -30,7 +30,30 @@ @Override public void updateSize() { double d0 = this.locX(); -@@ -383,6 +399,21 @@ +@@ -110,13 +126,20 @@ + + @Override + public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack) { ++ // CraftBukkit start ++ this.setSlot(enumitemslot, itemstack, false); ++ } ++ ++ @Override ++ public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack, boolean silent) { ++ // CraftBukkit end + switch (enumitemslot.a()) { + case HAND: +- this.b(itemstack); ++ this.b(itemstack, silent); // CraftBukkit + this.handItems.set(enumitemslot.b(), itemstack); + break; + case ARMOR: +- this.b(itemstack); ++ this.b(itemstack, silent); // CraftBukkit + this.armorItems.set(enumitemslot.b(), itemstack); + } + +@@ -383,6 +406,21 @@ return false; } else { ItemStack itemstack2; @@ -52,7 +75,7 @@ if (entityhuman.abilities.canInstantlyBuild && itemstack1.isEmpty() && !itemstack.isEmpty()) { itemstack2 = itemstack.cloneItemStack(); -@@ -411,12 +442,22 @@ +@@ -411,12 +449,22 @@ public boolean damageEntity(DamageSource damagesource, float f) { if (!this.world.isClientSide && !this.dead) { if (DamageSource.OUT_OF_WORLD.equals(damagesource)) { @@ -78,7 +101,7 @@ return false; } else if (DamageSource.FIRE.equals(damagesource)) { if (this.isBurning()) { -@@ -441,7 +482,7 @@ +@@ -441,7 +489,7 @@ } else if (damagesource.v()) { this.F(); this.D(); @@ -87,7 +110,7 @@ return flag1; } else { long i = this.world.getTime(); -@@ -452,7 +493,7 @@ +@@ -452,7 +500,7 @@ } else { this.f(damagesource); this.D(); @@ -96,7 +119,7 @@ } return true; -@@ -479,7 +520,7 @@ +@@ -479,7 +527,7 @@ f1 -= f; if (f1 <= 0.5F) { this.g(damagesource); @@ -105,7 +128,7 @@ } else { this.setHealth(f1); } -@@ -487,13 +528,13 @@ +@@ -487,13 +535,13 @@ } private void f(DamageSource damagesource) { @@ -121,7 +144,7 @@ ItemStack itemstack; int i; -@@ -501,7 +542,7 @@ +@@ -501,7 +549,7 @@ for (i = 0; i < this.handItems.size(); ++i) { itemstack = (ItemStack) this.handItems.get(i); if (!itemstack.isEmpty()) { @@ -130,7 +153,7 @@ this.handItems.set(i, ItemStack.b); } } -@@ -509,10 +550,11 @@ +@@ -509,10 +557,11 @@ for (i = 0; i < this.armorItems.size(); ++i) { itemstack = (ItemStack) this.armorItems.get(i); if (!itemstack.isEmpty()) { @@ -143,7 +166,7 @@ } -@@ -613,8 +655,16 @@ +@@ -613,8 +662,16 @@ return this.isSmall(); } diff --git a/nms-patches/EntityHuman.patch b/nms-patches/EntityHuman.patch index 9bbe68bd1..8e8269442 100644 --- a/nms-patches/EntityHuman.patch +++ b/nms-patches/EntityHuman.patch @@ -372,7 +372,32 @@ } @Override -@@ -1603,26 +1762,31 @@ +@@ -1555,14 +1714,21 @@ + + @Override + public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack) { ++ // CraftBukkit start ++ this.setSlot(enumitemslot, itemstack, false); ++ } ++ ++ @Override ++ public void setSlot(EnumItemSlot enumitemslot, ItemStack itemstack, boolean silent) { ++ // CraftBukkit end + if (enumitemslot == EnumItemSlot.MAINHAND) { +- this.b(itemstack); ++ this.b(itemstack, silent); // CraftBukkit + this.inventory.items.set(this.inventory.itemInHandIndex, itemstack); + } else if (enumitemslot == EnumItemSlot.OFFHAND) { +- this.b(itemstack); ++ this.b(itemstack, silent); // CraftBukkit + this.inventory.extraSlots.set(0, itemstack); + } else if (enumitemslot.a() == EnumItemSlot.Function.ARMOR) { +- this.b(itemstack); ++ this.b(itemstack, silent); // CraftBukkit + this.inventory.armor.set(enumitemslot.b(), itemstack); + } + +@@ -1603,26 +1769,31 @@ protected void releaseShoulderEntities() { if (this.e + 20L < this.world.getTime()) { diff --git a/nms-patches/EntityLiving.patch b/nms-patches/EntityLiving.patch index e537d6494..2845118d7 100644 --- a/nms-patches/EntityLiving.patch +++ b/nms-patches/EntityLiving.patch @@ -85,7 +85,22 @@ this.die(); for (int i = 0; i < 20; ++i) { -@@ -567,6 +611,17 @@ +@@ -497,7 +541,13 @@ + } + + protected void b(ItemStack itemstack) { +- if (!itemstack.isEmpty()) { ++ // CraftBukkit start ++ this.b(itemstack, false); ++ } ++ ++ protected void b(ItemStack itemstack, boolean silent) { ++ if (!itemstack.isEmpty() && !silent) { ++ // CraftBukkit end + SoundEffect soundeffect = SoundEffects.ITEM_ARMOR_EQUIP_GENERIC; + Item item = itemstack.getItem(); + +@@ -567,6 +617,17 @@ } } @@ -103,7 +118,7 @@ if (nbttagcompound.hasKeyOfType("Health", 99)) { this.setHealth(nbttagcompound.getFloat("Health")); } -@@ -604,9 +659,32 @@ +@@ -604,9 +665,32 @@ } @@ -136,7 +151,7 @@ try { while (iterator.hasNext()) { MobEffectList mobeffectlist = (MobEffectList) iterator.next(); -@@ -616,6 +694,12 @@ +@@ -616,6 +700,12 @@ this.a(mobeffect, true); })) { if (!this.world.isClientSide) { @@ -149,7 +164,7 @@ iterator.remove(); this.b(mobeffect); } -@@ -626,6 +710,17 @@ +@@ -626,6 +716,17 @@ } catch (ConcurrentModificationException concurrentmodificationexception) { ; } @@ -167,7 +182,7 @@ if (this.updateEffects) { if (!this.world.isClientSide) { -@@ -735,7 +830,13 @@ +@@ -735,7 +836,13 @@ this.datawatcher.set(EntityLiving.f, 0); } @@ -181,7 +196,7 @@ if (this.world.isClientSide) { return false; } else { -@@ -744,7 +845,14 @@ +@@ -744,7 +851,14 @@ boolean flag; for (flag = false; iterator.hasNext(); flag = true) { @@ -197,7 +212,7 @@ iterator.remove(); } -@@ -769,18 +877,44 @@ +@@ -769,18 +883,44 @@ return (MobEffect) this.effects.get(mobeffectlist); } @@ -243,7 +258,7 @@ return true; } else { return false; -@@ -804,13 +938,39 @@ +@@ -804,13 +944,39 @@ return this.getMonsterType() == EnumMonsterType.UNDEAD; } @@ -284,7 +299,7 @@ if (mobeffect != null) { this.b(mobeffect); -@@ -847,20 +1007,55 @@ +@@ -847,20 +1013,55 @@ } @@ -341,7 +356,7 @@ this.datawatcher.set(EntityLiving.HEALTH, MathHelper.a(f, 0.0F, this.getMaxHealth())); } -@@ -874,7 +1069,7 @@ +@@ -874,7 +1075,7 @@ return false; } else if (this.world.isClientSide) { return false; @@ -350,7 +365,7 @@ return false; } else if (damagesource.isFire() && this.hasEffect(MobEffects.FIRE_RESISTANCE)) { return false; -@@ -886,17 +1081,19 @@ +@@ -886,17 +1087,19 @@ this.ticksFarFromPlayer = 0; float f1 = f; @@ -373,7 +388,7 @@ this.damageShield(f); f2 = f; f = 0.0F; -@@ -916,20 +1113,39 @@ +@@ -916,20 +1119,39 @@ if ((float) this.noDamageTicks > 10.0F) { if (f <= this.lastDamage) { @@ -415,7 +430,7 @@ this.ap = 0.0F; Entity entity1 = damagesource.getEntity(); -@@ -1050,19 +1266,29 @@ +@@ -1050,19 +1272,29 @@ EnumHand[] aenumhand = EnumHand.values(); int i = aenumhand.length; @@ -449,7 +464,7 @@ EntityPlayer entityplayer = (EntityPlayer) this; entityplayer.b(StatisticList.ITEM_USED.b(Items.TOTEM_OF_UNDYING)); -@@ -1070,14 +1296,16 @@ +@@ -1070,14 +1302,16 @@ } this.setHealth(1.0F); @@ -471,7 +486,7 @@ } } -@@ -1194,28 +1422,46 @@ +@@ -1194,28 +1428,46 @@ boolean flag = this.lastDamageByPlayerTime > 0; @@ -520,7 +535,7 @@ } -@@ -1336,9 +1582,14 @@ +@@ -1336,9 +1588,14 @@ int i = this.e(f, f1); if (i > 0) { @@ -536,7 +551,7 @@ return true; } else { return flag; -@@ -1378,7 +1629,7 @@ +@@ -1378,7 +1635,7 @@ protected float applyArmorModifier(DamageSource damagesource, float f) { if (!damagesource.ignoresArmor()) { @@ -545,7 +560,7 @@ f = CombatMath.a(f, (float) this.getArmorStrength(), (float) this.b(GenericAttributes.ARMOR_TOUGHNESS)); } -@@ -1391,7 +1642,8 @@ +@@ -1391,7 +1648,8 @@ } else { int i; @@ -555,7 +570,7 @@ i = (this.getEffect(MobEffects.RESISTANCE).getAmplifier() + 1) * 5; int j = 25 - i; float f1 = f * (float) j; -@@ -1422,28 +1674,173 @@ +@@ -1422,28 +1680,173 @@ } } @@ -574,7 +589,10 @@ + public Double apply(Double f) { + if ((damagesource == DamageSource.ANVIL || damagesource == DamageSource.FALLING_BLOCK) && !EntityLiving.this.getEquipment(EnumItemSlot.HEAD).isEmpty()) { + return -(f - (f * 0.75F)); -+ + +- f = Math.max(f - this.getAbsorptionHearts(), 0.0F); +- this.setAbsorptionHearts(this.getAbsorptionHearts() - (f1 - f)); +- float f2 = f1 - f; + } + return -0.0; + } @@ -666,21 +684,18 @@ + float armorDamage = (float) (event.getDamage() + event.getDamage(DamageModifier.BLOCKING) + event.getDamage(DamageModifier.HARD_HAT)); + this.damageArmor(damagesource, armorDamage); + } -+ + + // Apply blocking code // PAIL: steal from above + if (event.getDamage(DamageModifier.BLOCKING) < 0) { + this.world.broadcastEntityEffect(this, (byte) 29); // SPIGOT-4635 - shield damage sound + this.damageShield((float) -event.getDamage(DamageModifier.BLOCKING)); + Entity entity = damagesource.j(); - -- f = Math.max(f - this.getAbsorptionHearts(), 0.0F); -- this.setAbsorptionHearts(this.getAbsorptionHearts() - (f1 - f)); -- float f2 = f1 - f; ++ + if (entity instanceof EntityLiving) { + this.shieldBlock((EntityLiving) entity); + } + } - ++ + absorptionModifier = (float) -event.getDamage(DamageModifier.ABSORPTION); + this.setAbsorptionHearts(Math.max(this.getAbsorptionHearts() - absorptionModifier, 0.0F)); + float f2 = absorptionModifier; @@ -739,7 +754,7 @@ } public CombatTracker getCombatTracker() { -@@ -1464,9 +1861,19 @@ +@@ -1464,9 +1867,19 @@ } public final void setArrowCount(int i) { @@ -760,7 +775,7 @@ public final int dz() { return (Integer) this.datawatcher.get(EntityLiving.bi); } -@@ -1816,6 +2223,7 @@ +@@ -1816,6 +2229,7 @@ } if (this.onGround && !this.world.isClientSide) { @@ -768,7 +783,7 @@ this.setFlag(7, false); } } else { -@@ -2321,6 +2729,7 @@ +@@ -2321,6 +2735,7 @@ } if (!this.world.isClientSide) { @@ -776,7 +791,7 @@ this.setFlag(7, flag); } -@@ -2441,6 +2850,7 @@ +@@ -2441,6 +2856,7 @@ } public boolean hasLineOfSight(Entity entity) { @@ -784,7 +799,7 @@ Vec3D vec3d = new Vec3D(this.locX(), this.getHeadY(), this.locZ()); Vec3D vec3d1 = new Vec3D(entity.locX(), entity.getHeadY(), entity.locZ()); -@@ -2458,14 +2868,21 @@ +@@ -2458,14 +2874,21 @@ @Override public boolean isInteractable() { @@ -808,7 +823,7 @@ @Override protected void velocityChanged() { this.velocityChanged = this.random.nextDouble() >= this.b(GenericAttributes.KNOCKBACK_RESISTANCE); -@@ -2658,7 +3075,25 @@ +@@ -2658,7 +3081,25 @@ } else { if (!this.activeItem.isEmpty() && this.isHandRaised()) { this.b(this.activeItem, 16); @@ -835,7 +850,7 @@ if (itemstack != this.activeItem) { this.a(enumhand, itemstack); -@@ -2750,10 +3185,18 @@ +@@ -2750,10 +3191,18 @@ } if (flag2) { @@ -857,7 +872,7 @@ } } -@@ -2850,7 +3293,7 @@ +@@ -2850,7 +3299,7 @@ } public void entityWakeup() { @@ -866,7 +881,7 @@ World world = this.world; this.world.getClass(); -@@ -2921,7 +3364,7 @@ +@@ -2921,7 +3370,7 @@ Pair pair = (Pair) iterator.next(); if (!world.isClientSide && pair.getFirst() != null && world.random.nextFloat() < (Float) pair.getSecond()) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java index 76691563a..9052fc15c 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java @@ -20,9 +20,14 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setItem(EquipmentSlot slot, ItemStack item) { + this.setItem(slot, item, false); + } + + @Override + public void setItem(EquipmentSlot slot, ItemStack item, boolean silent) { Preconditions.checkArgument(slot != null, "slot must not be null"); EnumItemSlot nmsSlot = CraftEquipmentSlot.getNMS(slot); - setEquipment(nmsSlot, item); + setEquipment(nmsSlot, item, silent); } @Override @@ -39,7 +44,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setItemInMainHand(ItemStack item) { - setEquipment(EnumItemSlot.MAINHAND, item); + this.setItemInMainHand(item, false); + } + + @Override + public void setItemInMainHand(ItemStack item, boolean silent) { + setEquipment(EnumItemSlot.MAINHAND, item, silent); } @Override @@ -49,7 +59,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setItemInOffHand(ItemStack item) { - setEquipment(EnumItemSlot.OFFHAND, item); + this.setItemInOffHand(item, false); + } + + @Override + public void setItemInOffHand(ItemStack item, boolean silent) { + setEquipment(EnumItemSlot.OFFHAND, item, silent); } @Override @@ -69,7 +84,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setHelmet(ItemStack helmet) { - setEquipment(EnumItemSlot.HEAD, helmet); + this.setHelmet(helmet, false); + } + + @Override + public void setHelmet(ItemStack helmet, boolean silent) { + setEquipment(EnumItemSlot.HEAD, helmet, silent); } @Override @@ -79,7 +99,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setChestplate(ItemStack chestplate) { - setEquipment(EnumItemSlot.CHEST, chestplate); + this.setChestplate(chestplate, false); + } + + @Override + public void setChestplate(ItemStack chestplate, boolean silent) { + setEquipment(EnumItemSlot.CHEST, chestplate, silent); } @Override @@ -89,7 +114,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setLeggings(ItemStack leggings) { - setEquipment(EnumItemSlot.LEGS, leggings); + this.setLeggings(leggings, false); + } + + @Override + public void setLeggings(ItemStack leggings, boolean silent) { + setEquipment(EnumItemSlot.LEGS, leggings, silent); } @Override @@ -99,7 +129,12 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setBoots(ItemStack boots) { - setEquipment(EnumItemSlot.FEET, boots); + this.setBoots(boots, false); + } + + @Override + public void setBoots(ItemStack boots, boolean silent) { + setEquipment(EnumItemSlot.FEET, boots, silent); } @Override @@ -115,24 +150,24 @@ public class CraftEntityEquipment implements EntityEquipment { @Override public void setArmorContents(ItemStack[] items) { - setEquipment(EnumItemSlot.FEET, items.length >= 1 ? items[0] : null); - setEquipment(EnumItemSlot.LEGS, items.length >= 2 ? items[1] : null); - setEquipment(EnumItemSlot.CHEST, items.length >= 3 ? items[2] : null); - setEquipment(EnumItemSlot.HEAD, items.length >= 4 ? items[3] : null); + setEquipment(EnumItemSlot.FEET, items.length >= 1 ? items[0] : null, false); + setEquipment(EnumItemSlot.LEGS, items.length >= 2 ? items[1] : null, false); + setEquipment(EnumItemSlot.CHEST, items.length >= 3 ? items[2] : null, false); + setEquipment(EnumItemSlot.HEAD, items.length >= 4 ? items[3] : null, false); } private ItemStack getEquipment(EnumItemSlot slot) { return CraftItemStack.asBukkitCopy(entity.getHandle().getEquipment(slot)); } - private void setEquipment(EnumItemSlot slot, ItemStack stack) { - entity.getHandle().setSlot(slot, CraftItemStack.asNMSCopy(stack)); + private void setEquipment(EnumItemSlot slot, ItemStack stack, boolean silent) { + entity.getHandle().setSlot(slot, CraftItemStack.asNMSCopy(stack), silent); } @Override public void clear() { for (EnumItemSlot slot : EnumItemSlot.values()) { - setEquipment(slot, null); + setEquipment(slot, null, false); } } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java index dc1debb3f..9d894c508 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java @@ -37,6 +37,11 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i setItem(getHeldItemSlot(), item); } + @Override + public void setItemInMainHand(ItemStack item, boolean silent) { + setItemInMainHand(item); // Silence doesn't apply to players + } + @Override public ItemStack getItemInOffHand() { return CraftItemStack.asCraftMirror(getInventory().extraSlots.get(0)); @@ -49,6 +54,11 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i setExtraContents(extra); } + @Override + public void setItemInOffHand(ItemStack item, boolean silent) { + setItemInOffHand(item); // Silence doesn't apply to players + } + @Override public ItemStack getItemInHand() { return getItemInMainHand(); @@ -131,6 +141,11 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i } } + @Override + public void setItem(EquipmentSlot slot, ItemStack item, boolean silent) { + setItem(slot, item); // Silence doesn't apply to players + } + @Override public ItemStack getItem(EquipmentSlot slot) { Preconditions.checkArgument(slot != null, "slot must not be null"); @@ -190,21 +205,41 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i setItem(getSize() - 2, helmet); } + @Override + public void setHelmet(ItemStack helmet, boolean silent) { + setHelmet(helmet); // Silence doesn't apply to players + } + @Override public void setChestplate(ItemStack chestplate) { setItem(getSize() - 3, chestplate); } + @Override + public void setChestplate(ItemStack chestplate, boolean silent) { + setChestplate(chestplate); // Silence doesn't apply to players + } + @Override public void setLeggings(ItemStack leggings) { setItem(getSize() - 4, leggings); } + @Override + public void setLeggings(ItemStack leggings, boolean silent) { + setLeggings(leggings); // Silence doesn't apply to players + } + @Override public void setBoots(ItemStack boots) { setItem(getSize() - 5, boots); } + @Override + public void setBoots(ItemStack boots, boolean silent) { + setBoots(boots); // Silence doesn't apply to players + } + @Override public ItemStack[] getArmorContents() { return asCraftMirror(getInventory().armor);