aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch')
-rw-r--r--Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch259
1 files changed, 259 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch b/Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch
new file mode 100644
index 0000000000..a6c8c7c0d4
--- /dev/null
+++ b/Spigot-Server-Patches/0292-PlayerLaunchProjectileEvent.patch
@@ -0,0 +1,259 @@
+From a247cf802ea037f8e9df044e64fddc17ed3a43ef Mon Sep 17 00:00:00 2001
+From: BillyGalbreath <[email protected]>
+Date: Sat, 21 Jul 2018 03:11:03 -0500
+Subject: [PATCH] PlayerLaunchProjectileEvent
+
+
+diff --git a/src/main/java/net/minecraft/server/ItemEgg.java b/src/main/java/net/minecraft/server/ItemEgg.java
+index 18e8825c48..5f3926d830 100644
+--- a/src/main/java/net/minecraft/server/ItemEgg.java
++++ b/src/main/java/net/minecraft/server/ItemEgg.java
+@@ -9,16 +9,34 @@ public class ItemEgg extends Item {
+ public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
+ ItemStack itemstack = entityhuman.b(enumhand);
+
++ /* // Paper start - moved down
+ if (!entityhuman.abilities.canInstantlyBuild) {
+ itemstack.subtract(1);
+ }
+
+ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (ItemEgg.i.nextFloat() * 0.4F + 0.8F));
++ */ // Paper end
+ if (!world.isClientSide) {
+ EntityEgg entityegg = new EntityEgg(world, entityhuman);
+
+ entityegg.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
+- world.addEntity(entityegg);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityegg.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entityegg)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
++ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ } else {
++ if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++ return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
++ }
++ // Paper end
+ }
+
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
+diff --git a/src/main/java/net/minecraft/server/ItemEnderPearl.java b/src/main/java/net/minecraft/server/ItemEnderPearl.java
+index 3672996c2d..719210da15 100644
+--- a/src/main/java/net/minecraft/server/ItemEnderPearl.java
++++ b/src/main/java/net/minecraft/server/ItemEnderPearl.java
+@@ -14,7 +14,19 @@ public class ItemEnderPearl extends Item {
+ EntityEnderPearl entityenderpearl = new EntityEnderPearl(world, entityhuman);
+
+ entityenderpearl.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
+- if (!world.addEntity(entityenderpearl)) {
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entityenderpearl)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
++ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ entityhuman.getCooldownTracker().a(this, 20);
++ } else {
++ // Paper end
+ if (entityhuman instanceof EntityPlayer) {
+ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
+ }
+@@ -22,13 +34,15 @@ public class ItemEnderPearl extends Item {
+ }
+ }
+
+- if (!entityhuman.abilities.canInstantlyBuild) {
+- itemstack.subtract(1);
+- }
+-
+- world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemEnderPearl.i.nextFloat() * 0.4F + 0.8F));
+- entityhuman.getCooldownTracker().a(this, 20);
+- // CraftBukkit end
++ // Paper start - moved up
++ //if (!entityhuman.abilities.canInstantlyBuild) {
++ // itemstack.subtract(1);
++ //}
++ //
++ //world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemEnderPearl.i.nextFloat() * 0.4F + 0.8F));
++ //entityhuman.getCooldownTracker().a(this, 20);
++ // // CraftBukkit end
++ // Paper end
+
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
+ return new InteractionResultWrapper<>(EnumInteractionResult.SUCCESS, itemstack);
+diff --git a/src/main/java/net/minecraft/server/ItemExpBottle.java b/src/main/java/net/minecraft/server/ItemExpBottle.java
+index d26b42f710..23b06169e2 100644
+--- a/src/main/java/net/minecraft/server/ItemExpBottle.java
++++ b/src/main/java/net/minecraft/server/ItemExpBottle.java
+@@ -8,17 +8,34 @@ public class ItemExpBottle extends Item {
+
+ public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
+ ItemStack itemstack = entityhuman.b(enumhand);
+-
++ /* // Paper start
+ if (!entityhuman.abilities.canInstantlyBuild) {
+ itemstack.subtract(1);
+ }
+
+ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_EXPERIENCE_BOTTLE_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemExpBottle.i.nextFloat() * 0.4F + 0.8F));
++ */ // Paper end
+ if (!world.isClientSide) {
+ EntityThrownExpBottle entitythrownexpbottle = new EntityThrownExpBottle(world, entityhuman);
+
+ entitythrownexpbottle.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.7F, 1.0F);
+- world.addEntity(entitythrownexpbottle);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitythrownexpbottle.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entitythrownexpbottle)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
++ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_EXPERIENCE_BOTTLE_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ } else {
++ if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++ return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
++ }
++ // Paper end
+ }
+
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
+diff --git a/src/main/java/net/minecraft/server/ItemLingeringPotion.java b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
+index a74c803e72..8d882b81bb 100644
+--- a/src/main/java/net/minecraft/server/ItemLingeringPotion.java
++++ b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
+@@ -8,14 +8,38 @@ public class ItemLingeringPotion extends ItemPotion {
+
+ public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
+ ItemStack itemstack = entityhuman.b(enumhand);
++ /* // Paper start
+ ItemStack itemstack1 = entityhuman.abilities.canInstantlyBuild ? itemstack.cloneItemStack() : itemstack.cloneAndSubtract(1);
+
+ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_LINGERING_POTION_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemLingeringPotion.i.nextFloat() * 0.4F + 0.8F));
++ */ // Paper end
+ if (!world.isClientSide) {
++ // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet
++ ItemStack itemstack1 = itemstack.cloneItemStack();
++ if (!entityhuman.abilities.canInstantlyBuild) {
++ itemstack1.setCount(1);
++ }
++ // Paper end
+ EntityPotion entitypotion = new EntityPotion(world, entityhuman, itemstack1);
+
+ entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F);
+- world.addEntity(entitypotion);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitypotion.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entitypotion)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
++ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_LINGERING_POTION_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ } else {
++ if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++ return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
++ }
++ // Paper end
+ }
+
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
+diff --git a/src/main/java/net/minecraft/server/ItemSnowball.java b/src/main/java/net/minecraft/server/ItemSnowball.java
+index d8879e0847..95194ccdc8 100644
+--- a/src/main/java/net/minecraft/server/ItemSnowball.java
++++ b/src/main/java/net/minecraft/server/ItemSnowball.java
+@@ -21,15 +21,23 @@ public class ItemSnowball extends Item {
+ EntitySnowball entitysnowball = new EntitySnowball(world, entityhuman);
+
+ entitysnowball.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
+- if (world.addEntity(entitysnowball)) {
+- if (!entityhuman.abilities.canInstantlyBuild) {
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entitysnowball)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
+ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
+ }
+
+- world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemSnowball.i.nextFloat() * 0.4F + 0.8F));
+- } else if (entityhuman instanceof EntityPlayer) {
+- ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ } else {
++ if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++ return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
+ }
++ // Paper end
+ }
+ // CraftBukkit end
+
+diff --git a/src/main/java/net/minecraft/server/ItemSplashPotion.java b/src/main/java/net/minecraft/server/ItemSplashPotion.java
+index 87e2825a84..2bddefb802 100644
+--- a/src/main/java/net/minecraft/server/ItemSplashPotion.java
++++ b/src/main/java/net/minecraft/server/ItemSplashPotion.java
+@@ -8,14 +8,38 @@ public class ItemSplashPotion extends ItemPotion {
+
+ public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
+ ItemStack itemstack = entityhuman.b(enumhand);
++ /* // Paper start
+ ItemStack itemstack1 = entityhuman.abilities.canInstantlyBuild ? itemstack.cloneItemStack() : itemstack.cloneAndSubtract(1);
+
+ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SPLASH_POTION_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (ItemSplashPotion.i.nextFloat() * 0.4F + 0.8F));
++ */ // Paper end
+ if (!world.isClientSide) {
++ // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet
++ ItemStack itemstack1 = itemstack.cloneItemStack();
++ if (!entityhuman.abilities.canInstantlyBuild) {
++ itemstack1.setCount(1);
++ }
++ // Paper end
+ EntityPotion entitypotion = new EntityPotion(world, entityhuman, itemstack1);
+
+ entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F);
+- world.addEntity(entitypotion);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitypotion.getBukkitEntity());
++ if (event.callEvent() && world.addEntity(entitypotion)) {
++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) {
++ itemstack.subtract(1);
++ } else if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++
++ world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SPLASH_POTION_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ } else {
++ if (entityhuman instanceof EntityPlayer) {
++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
++ }
++ return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
++ }
++ // Paper end
+ }
+
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
+--
+2.21.0
+