summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2016-03-19 11:13:15 +1100
committermd_5 <git@md-5.net>2016-03-19 11:13:15 +1100
commitff617f73cdc334b77b6ba72c60bce1a89c483cee (patch)
treec50ae29b9a896a12316bcc1d30c1ba65ac8bbf2e
parent2bfda1f8f4aba22d8b3f1818bc8af30e67c94b2a (diff)
downloadcraftbukkit-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.patch9
-rw-r--r--nms-patches/ItemSnowball.patch33
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);