diff options
author | md_5 <git@md-5.net> | 2016-03-19 11:13:15 +1100 |
---|---|---|
committer | md_5 <git@md-5.net> | 2016-03-19 11:13:15 +1100 |
commit | ff617f73cdc334b77b6ba72c60bce1a89c483cee (patch) | |
tree | c50ae29b9a896a12316bcc1d30c1ba65ac8bbf2e | |
parent | 2bfda1f8f4aba22d8b3f1818bc8af30e67c94b2a (diff) | |
download | craftbukkit-ff617f73cdc334b77b6ba72c60bce1a89c483cee.tar craftbukkit-ff617f73cdc334b77b6ba72c60bce1a89c483cee.tar.gz craftbukkit-ff617f73cdc334b77b6ba72c60bce1a89c483cee.tar.lz craftbukkit-ff617f73cdc334b77b6ba72c60bce1a89c483cee.tar.xz craftbukkit-ff617f73cdc334b77b6ba72c60bce1a89c483cee.zip |
SPIGOT-1956: Don't deplete projectile item when event cancelled
-rw-r--r-- | nms-patches/ItemBow.patch | 9 | ||||
-rw-r--r-- | nms-patches/ItemSnowball.patch | 33 |
2 files changed, 40 insertions, 2 deletions
diff --git a/nms-patches/ItemBow.patch b/nms-patches/ItemBow.patch index 64e6fd71..728c2c39 100644 --- a/nms-patches/ItemBow.patch +++ b/nms-patches/ItemBow.patch @@ -30,13 +30,18 @@ } itemstack.damage(1, entityhuman); -@@ -81,7 +96,10 @@ +@@ -81,7 +96,15 @@ entityarrow.fromPlayer = EntityArrow.PickupStatus.CREATIVE_ONLY; } - world.addEntity(entityarrow); + if (event.getProjectile() == entityarrow.getBukkitEntity()) { -+ world.addEntity(entityarrow); ++ if (!world.addEntity(entityarrow)) { ++ if (entityhuman instanceof EntityPlayer) { ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); ++ } ++ return; ++ } + } + // CraftBukkit end } diff --git a/nms-patches/ItemSnowball.patch b/nms-patches/ItemSnowball.patch new file mode 100644 index 00000000..62b259f5 --- /dev/null +++ b/nms-patches/ItemSnowball.patch @@ -0,0 +1,33 @@ +--- a/net/minecraft/server/ItemSnowball.java ++++ b/net/minecraft/server/ItemSnowball.java +@@ -8,17 +8,27 @@ + } + + public InteractionResultWrapper<ItemStack> a(ItemStack itemstack, World world, EntityHuman entityhuman, EnumHand enumhand) { +- if (!entityhuman.abilities.canInstantlyBuild) { ++ // CraftBukkit start - moved down ++ /*if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + +- world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.fG, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemSnowball.i.nextFloat() * 0.4F + 0.8F)); ++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.fG, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemSnowball.i.nextFloat() * 0.4F + 0.8F));*/ + if (!world.isClientSide) { + EntitySnowball entitysnowball = new EntitySnowball(world, entityhuman); + + entitysnowball.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F); +- world.addEntity(entitysnowball); ++ if (world.addEntity(entitysnowball)) { ++ if (!entityhuman.abilities.canInstantlyBuild) { ++ --itemstack.count; ++ } ++ ++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.fG, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemSnowball.i.nextFloat() * 0.4F + 0.8F)); ++ } else if (entityhuman instanceof EntityPlayer) { ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); ++ } + } ++ // CraftBukkit end + + entityhuman.b(StatisticList.b((Item) this)); + return new InteractionResultWrapper(EnumInteractionResult.SUCCESS, itemstack); |