ea855e2b46
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Also, restore a patch that was dropped in the last upstream Bukkit Changes: 279eeab3 Fix command description not being set 96e2bb18 Remove debug print from SyntheticEventTest CraftBukkit Changes: d3ed1516 Fix dangerously threaded beacons 217a293d Don't relocate joptsimple to allow --help to work. 1be05a21 Prepare for imminent Java 12 release a49270b2 Mappings Update 5259d80c SPIGOT-4669: Fix PlayerTeleportEvent coordinates for relative teleports Spigot Changes: e6eb36f2 Rebuild patches
259 lines
16 KiB
Diff
259 lines
16 KiB
Diff
From 7da3a215fe926e8a27fc41e0e952cf72ad565873 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <Blake.Galbreath@GMail.com>
|
|
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 18e8825c4..5f3926d83 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 3672996c2..719210da1 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 d26b42f71..23b06169e 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 a74c803e7..8d882b81b 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 d8879e084..95194ccdc 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 87e2825a8..2bddefb80 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
|
|
|