aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0225-PlayerLaunchProjectileEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0225-PlayerLaunchProjectileEvent.patch')
-rw-r--r--patches/server/0225-PlayerLaunchProjectileEvent.patch276
1 files changed, 276 insertions, 0 deletions
diff --git a/patches/server/0225-PlayerLaunchProjectileEvent.patch b/patches/server/0225-PlayerLaunchProjectileEvent.patch
new file mode 100644
index 0000000000..d732a1386e
--- /dev/null
+++ b/patches/server/0225-PlayerLaunchProjectileEvent.patch
@@ -0,0 +1,276 @@
+From 0000000000000000000000000000000000000000 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/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java
+index 32b63407b943fb00d765dbf4e0eefb4b06f801b6..58cb992c5defec2f092755cbde661ff10f38bf9d 100644
+--- a/src/main/java/net/minecraft/world/item/EggItem.java
++++ b/src/main/java/net/minecraft/world/item/EggItem.java
+@@ -25,21 +25,33 @@ public class EggItem extends Item {
+
+ entityegg.setItem(itemstack);
+ entityegg.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F);
+- // CraftBukkit start
+- if (!world.addFreshEntity(entityegg)) {
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityegg.getBukkitEntity());
++ if (event.callEvent() && world.addFreshEntity(entityegg)) {
++ if (event.shouldConsume() && !user.getAbilities().instabuild) {
++ itemstack.shrink(1);
++ } else if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++
++ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), net.minecraft.sounds.SoundEvents.EGG_THROW, net.minecraft.sounds.SoundSource.PLAYERS, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ user.awardStat(Stats.ITEM_USED.get(this));
++ } else {
+ if (user instanceof net.minecraft.server.level.ServerPlayer) {
+ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
+ }
+ return InteractionResultHolder.fail(itemstack);
+ }
+- // CraftBukkit end
++ // Paper end
+ }
+ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.EGG_THROW, SoundSource.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+
++ /* // Paper start - moved up
+ user.awardStat(Stats.ITEM_USED.get(this));
+ if (!user.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
++ */ // Paper end
+
+ return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide());
+ }
+diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java
+index c7d4745aed77b23562cde7c68b8870fa239428d4..749ab72edc0d2e9c6f1161415ab8d59d3d6ca976 100644
+--- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java
++++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java
+@@ -25,7 +25,20 @@ public class EnderpearlItem extends Item {
+
+ entityenderpearl.setItem(itemstack);
+ entityenderpearl.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F);
+- if (!world.addFreshEntity(entityenderpearl)) {
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity());
++ if (event.callEvent() && world.addFreshEntity(entityenderpearl)) {
++ if (event.shouldConsume() && !user.getAbilities().instabuild) {
++ itemstack.shrink(1);
++ } else if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++
++ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ user.awardStat(Stats.ITEM_USED.get(this));
++ user.getCooldowns().addCooldown(this, 20);
++ } else {
++ // Paper end
+ if (user instanceof net.minecraft.server.level.ServerPlayer) {
+ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
+ }
+@@ -33,6 +46,7 @@ public class EnderpearlItem extends Item {
+ }
+ }
+
++ /* // Paper start - moved up
+ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+ user.getCooldowns().addCooldown(this, 20);
+ // CraftBukkit end
+@@ -41,6 +55,7 @@ public class EnderpearlItem extends Item {
+ if (!user.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
++ */ // Paper end - moved up
+
+ return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide());
+ }
+diff --git a/src/main/java/net/minecraft/world/item/ExperienceBottleItem.java b/src/main/java/net/minecraft/world/item/ExperienceBottleItem.java
+index 72dfb7b652f515bf9df201d524a851ab56706544..b80bedb5f27b474d7f66e9e1cc38ca3b692fc92b 100644
+--- a/src/main/java/net/minecraft/world/item/ExperienceBottleItem.java
++++ b/src/main/java/net/minecraft/world/item/ExperienceBottleItem.java
+@@ -22,18 +22,37 @@ public class ExperienceBottleItem extends Item {
+ @Override
+ public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
+ ItemStack itemStack = user.getItemInHand(hand);
+- world.playSound((Player)null, user.getX(), user.getY(), user.getZ(), SoundEvents.EXPERIENCE_BOTTLE_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
++ // world.playSound((Player)null, user.getX(), user.getY(), user.getZ(), SoundEvents.EXPERIENCE_BOTTLE_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // Paper - moved down
+ if (!world.isClientSide) {
+ ThrownExperienceBottle thrownExperienceBottle = new ThrownExperienceBottle(world, user);
+ thrownExperienceBottle.setItem(itemStack);
+ thrownExperienceBottle.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.7F, 1.0F);
+- world.addFreshEntity(thrownExperienceBottle);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownExperienceBottle.getBukkitEntity());
++ if (event.callEvent() && world.addFreshEntity(thrownExperienceBottle)) {
++ if (event.shouldConsume() && !user.getAbilities().instabuild) {
++ itemStack.shrink(1);
++ } else if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++
++ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.EXPERIENCE_BOTTLE_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (net.minecraft.world.entity.Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F));
++ user.awardStat(Stats.ITEM_USED.get(this));
++ } else {
++ if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++ return InteractionResultHolder.fail(itemStack);
++ }
++ // Paper end
+ }
+
++ /* // Paper start - moved up
+ user.awardStat(Stats.ITEM_USED.get(this));
+ if (!user.getAbilities().instabuild) {
+ itemStack.shrink(1);
+ }
++ */ // Paper end
+
+ return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
+ }
+diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java
+index e927eaaaf79cd5cdc150a9db10d730c7b17601fc..88306f54c0f8ee83020d94f20b62762910c9e9b2 100644
+--- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java
++++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java
+@@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag;
+ import net.minecraft.nbt.ListTag;
+ import net.minecraft.network.chat.Component;
+ import net.minecraft.stats.Stats;
++import net.minecraft.server.level.ServerPlayer;
+ import net.minecraft.world.InteractionHand;
+ import net.minecraft.world.InteractionResult;
+ import net.minecraft.world.InteractionResultHolder;
+@@ -45,8 +46,12 @@ public class FireworkRocketItem extends Item {
+ Direction direction = context.getClickedFace();
+ FireworkRocketEntity fireworkRocketEntity = new FireworkRocketEntity(level, context.getPlayer(), vec3.x + (double)direction.getStepX() * 0.15D, vec3.y + (double)direction.getStepY() * 0.15D, vec3.z + (double)direction.getStepZ() * 0.15D, itemStack);
+ fireworkRocketEntity.spawningEntity = context.getPlayer() == null ? null : context.getPlayer().getUUID(); // Paper
+- level.addFreshEntity(fireworkRocketEntity);
+- itemStack.shrink(1);
++ // Paper start - PlayerLaunchProjectileEvent
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Firework) fireworkRocketEntity.getBukkitEntity());
++ if (!event.callEvent() || !level.addFreshEntity(fireworkRocketEntity)) return InteractionResult.PASS;
++ if (event.shouldConsume() && !context.getPlayer().getAbilities().instabuild) itemStack.shrink(1);
++ else if (context.getPlayer() instanceof ServerPlayer) ((ServerPlayer) context.getPlayer()).getBukkitEntity().updateInventory();
++ // Paper end
+ }
+
+ return InteractionResult.sidedSuccess(level.isClientSide);
+diff --git a/src/main/java/net/minecraft/world/item/LingeringPotionItem.java b/src/main/java/net/minecraft/world/item/LingeringPotionItem.java
+index db0492f6337de562210ef062f46e98992c908200..f2d1b4e3fc08f6a06beb391bc6e60f62a9bf82b9 100644
+--- a/src/main/java/net/minecraft/world/item/LingeringPotionItem.java
++++ b/src/main/java/net/minecraft/world/item/LingeringPotionItem.java
+@@ -23,7 +23,12 @@ public class LingeringPotionItem extends ThrowablePotionItem {
+
+ @Override
+ public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
++ // Paper start
++ InteractionResultHolder<ItemStack> wrapper = super.use(world, user, hand);
++ if (wrapper.getResult() != net.minecraft.world.InteractionResult.FAIL) {
+ world.playSound((Player)null, user.getX(), user.getY(), user.getZ(), SoundEvents.LINGERING_POTION_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+- return super.use(world, user, hand);
++ }
++ return wrapper;
++ // Paper end
+ }
+ }
+diff --git a/src/main/java/net/minecraft/world/item/SnowballItem.java b/src/main/java/net/minecraft/world/item/SnowballItem.java
+index d60e57e84f7d66e1858ab50ac33777feedf1c54d..ef3f90a5bcdd7b9815a4053cff166f9d2552f55d 100644
+--- a/src/main/java/net/minecraft/world/item/SnowballItem.java
++++ b/src/main/java/net/minecraft/world/item/SnowballItem.java
+@@ -26,18 +26,26 @@ public class SnowballItem extends Item {
+
+ entitysnowball.setItem(itemstack);
+ entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F);
+- if (world.addFreshEntity(entitysnowball)) {
+- if (!user.getAbilities().instabuild) {
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity());
++ if (event.callEvent() && world.addFreshEntity(entitysnowball)) {
++ user.awardStat(Stats.ITEM_USED.get(this));
++ if (event.shouldConsume() && !user.getAbilities().instabuild) {
++ // Paper end
+ itemstack.shrink(1);
++ } else if (user instanceof net.minecraft.server.level.ServerPlayer) { // Paper
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); // Paper
+ }
+
+ world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.SNOWBALL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+- } else if (user instanceof net.minecraft.server.level.ServerPlayer) {
+- ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ } else { // Paper
++ if (user instanceof net.minecraft.server.level.ServerPlayer) ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); // Paper
++ return InteractionResultHolder.fail(itemstack); // Paper
+ }
+ }
+ // CraftBukkit end
+
++ /* // Paper tart - moved up
+ user.awardStat(Stats.ITEM_USED.get(this));
+ // CraftBukkit start - moved up
+ /*
+@@ -45,6 +53,7 @@ public class SnowballItem extends Item {
+ itemstack.shrink(1);
+ }
+ */
++ // Paper end
+
+ return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide());
+ }
+diff --git a/src/main/java/net/minecraft/world/item/SplashPotionItem.java b/src/main/java/net/minecraft/world/item/SplashPotionItem.java
+index 317e20052bcac9118e1adeb619bedaacc6fcd690..ece19f30064e9f59d4df077683e1f894455a84b7 100644
+--- a/src/main/java/net/minecraft/world/item/SplashPotionItem.java
++++ b/src/main/java/net/minecraft/world/item/SplashPotionItem.java
+@@ -14,7 +14,12 @@ public class SplashPotionItem extends ThrowablePotionItem {
+
+ @Override
+ public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
++ // Paper start
++ InteractionResultHolder<ItemStack> wrapper = super.use(world, user, hand);
++ if (wrapper.getResult() != net.minecraft.world.InteractionResult.FAIL) {
+ world.playSound((Player)null, user.getX(), user.getY(), user.getZ(), SoundEvents.SPLASH_POTION_THROW, SoundSource.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+- return super.use(world, user, hand);
++ }
++ return wrapper;
++ // Paper end
+ }
+ }
+diff --git a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java
+index 0673f62f25532955f3552b64f122e644d42027e4..de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc 100644
+--- a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java
++++ b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java
+@@ -19,13 +19,31 @@ public class ThrowablePotionItem extends PotionItem {
+ ThrownPotion thrownPotion = new ThrownPotion(world, user);
+ thrownPotion.setItem(itemStack);
+ thrownPotion.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.5F, 1.0F);
+- world.addFreshEntity(thrownPotion);
++ // Paper start
++ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.getBukkitEntity());
++ if (event.callEvent() && world.addFreshEntity(thrownPotion)) {
++ if (event.shouldConsume() && !user.getAbilities().instabuild) {
++ itemStack.shrink(1);
++ } else if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++
++ user.awardStat(Stats.ITEM_USED.get(this));
++ } else {
++ if (user instanceof net.minecraft.server.level.ServerPlayer) {
++ ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
++ }
++ return InteractionResultHolder.fail(itemStack);
++ }
++ // Paper end
+ }
+
++ /* // Paper start - moved up
+ user.awardStat(Stats.ITEM_USED.get(this));
+ if (!user.getAbilities().instabuild) {
+ itemStack.shrink(1);
+ }
++ */ // Paper end
+
+ return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
+ }