mirror of
https://github.com/PaperMC/Paper.git
synced 2024-08-21 20:02:55 +02:00
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 Bukkit Changes: b999860d SPIGOT-2304: Add LootGenerateEvent CraftBukkit Changes:77fd87e4
SPIGOT-2304: Implement LootGenerateEventa1a705ee
SPIGOT-5566: Doused campfires & fires should call EntityChangeBlockEvent41712edd
SPIGOT-5707: PersistentDataHolder not Persistent on API dropped Item
274 lines
16 KiB
Diff
274 lines
16 KiB
Diff
From 99a6eecdaaf00be03a70e78de4a4f3b5cb54e97f 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/InteractionResultWrapper.java b/src/main/java/net/minecraft/server/InteractionResultWrapper.java
|
|
index 5cab47a282..886babdcda 100644
|
|
--- a/src/main/java/net/minecraft/server/InteractionResultWrapper.java
|
|
+++ b/src/main/java/net/minecraft/server/InteractionResultWrapper.java
|
|
@@ -10,6 +10,7 @@ public class InteractionResultWrapper<T> {
|
|
this.b = t0;
|
|
}
|
|
|
|
+ public EnumInteractionResult getResult() { return this.a(); } // Paper - OBFHELPER
|
|
public EnumInteractionResult a() {
|
|
return this.a;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemEgg.java b/src/main/java/net/minecraft/server/ItemEgg.java
|
|
index 6fccd70a03..16f1b734e0 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemEgg.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemEgg.java
|
|
@@ -16,21 +16,35 @@ public class ItemEgg extends Item {
|
|
|
|
entityegg.setItem(itemstack);
|
|
entityegg.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
|
|
- // CraftBukkit start
|
|
- if (!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.playSound((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));
|
|
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+ } else {
|
|
if (entityhuman instanceof EntityPlayer) {
|
|
((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
|
}
|
|
- return InteractionResultWrapper.fail(itemstack);
|
|
+ return new InteractionResultWrapper<ItemStack>(EnumInteractionResult.FAIL, itemstack);
|
|
}
|
|
- // CraftBukkit end
|
|
+ // Paper end
|
|
+
|
|
+
|
|
}
|
|
world.playSound((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)); // CraftBukkit - from above
|
|
|
|
+ /* // Paper start - moved up
|
|
entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
if (!entityhuman.abilities.canInstantlyBuild) {
|
|
itemstack.subtract(1);
|
|
}
|
|
+ */ // Paper end
|
|
|
|
return InteractionResultWrapper.success(itemstack);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemEnderPearl.java b/src/main/java/net/minecraft/server/ItemEnderPearl.java
|
|
index cab869e8e9..b57e9f7e72 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemEnderPearl.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemEnderPearl.java
|
|
@@ -16,22 +16,37 @@ public class ItemEnderPearl extends Item {
|
|
|
|
entityenderpearl.setItem(itemstack);
|
|
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.playSound((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.b(StatisticList.ITEM_USED.b(this));
|
|
+ entityhuman.getCooldownTracker().setCooldown(this, 20);
|
|
+ } else {
|
|
+ // Paper end
|
|
if (entityhuman instanceof EntityPlayer) {
|
|
((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
|
}
|
|
- return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
|
|
+ return new InteractionResultWrapper<ItemStack>(EnumInteractionResult.FAIL, itemstack);
|
|
}
|
|
}
|
|
|
|
- world.playSound((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().setCooldown(this, 20);
|
|
- // CraftBukkit end
|
|
-
|
|
- entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
- if (!entityhuman.abilities.canInstantlyBuild) {
|
|
- itemstack.subtract(1);
|
|
- }
|
|
+ // Paper start - moved up
|
|
+// world.playSound((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().setCooldown(this, 20);
|
|
+// // CraftBukkit end
|
|
+//
|
|
+// entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+// if (!entityhuman.abilities.canInstantlyBuild) {
|
|
+// itemstack.subtract(1);
|
|
+// }
|
|
+ // Paper end
|
|
|
|
return InteractionResultWrapper.success(itemstack);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemExpBottle.java b/src/main/java/net/minecraft/server/ItemExpBottle.java
|
|
index 071688b3ab..1d575af526 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemExpBottle.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemExpBottle.java
|
|
@@ -15,19 +15,38 @@ public class ItemExpBottle extends Item {
|
|
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
|
|
ItemStack itemstack = entityhuman.b(enumhand);
|
|
|
|
- world.playSound((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));
|
|
+// world.playSound((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 - moved down
|
|
if (!world.isClientSide) {
|
|
EntityThrownExpBottle entitythrownexpbottle = new EntityThrownExpBottle(world, entityhuman);
|
|
|
|
entitythrownexpbottle.setItem(itemstack);
|
|
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.playSound((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));
|
|
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+ } else {
|
|
+ if (entityhuman instanceof EntityPlayer) {
|
|
+ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
|
+ }
|
|
+ return new InteractionResultWrapper<ItemStack>(EnumInteractionResult.FAIL, itemstack);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
+ /* // Paper start - moved up
|
|
entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
if (!entityhuman.abilities.canInstantlyBuild) {
|
|
itemstack.subtract(1);
|
|
}
|
|
+ */ // Paper end
|
|
|
|
return InteractionResultWrapper.success(itemstack);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemLingeringPotion.java b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
|
|
index c19b678cfb..7672e31fc0 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemLingeringPotion.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
|
|
@@ -8,7 +8,11 @@ public class ItemLingeringPotion extends ItemPotionThrowable {
|
|
|
|
@Override
|
|
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
|
|
- world.playSound((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));
|
|
- return super.a(world, entityhuman, enumhand);
|
|
+ // Paper start
|
|
+ InteractionResultWrapper<ItemStack> wrapper = super.a(world, entityhuman, enumhand);
|
|
+ if (wrapper.getResult() != EnumInteractionResult.FAIL)
|
|
+ world.playSound((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));
|
|
+ return wrapper;
|
|
+ // Paper end
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemPotionThrowable.java b/src/main/java/net/minecraft/server/ItemPotionThrowable.java
|
|
index 5d1f118c51..d1beab1ab7 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemPotionThrowable.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemPotionThrowable.java
|
|
@@ -15,13 +15,31 @@ public class ItemPotionThrowable extends ItemPotion {
|
|
|
|
entitypotion.setItem(itemstack);
|
|
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();
|
|
+ }
|
|
+
|
|
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+ } else {
|
|
+ if (entityhuman instanceof EntityPlayer) {
|
|
+ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
|
+ }
|
|
+ return new InteractionResultWrapper<ItemStack>(EnumInteractionResult.FAIL, itemstack);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
+ /* // Paper start - moved up
|
|
entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
if (!entityhuman.abilities.canInstantlyBuild) {
|
|
itemstack.subtract(1);
|
|
}
|
|
+ */ // Paper end
|
|
|
|
return InteractionResultWrapper.success(itemstack);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ItemSnowball.java b/src/main/java/net/minecraft/server/ItemSnowball.java
|
|
index 56ec508959..e6044e654b 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemSnowball.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemSnowball.java
|
|
@@ -17,19 +17,27 @@ public class ItemSnowball extends Item {
|
|
|
|
entitysnowball.setItem(itemstack);
|
|
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.playSound((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.playSound((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));
|
|
+ entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+ } else {
|
|
+ if (entityhuman instanceof EntityPlayer) {
|
|
+ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
|
+ }
|
|
+ return new InteractionResultWrapper<ItemStack>(EnumInteractionResult.FAIL, itemstack);
|
|
}
|
|
}
|
|
// CraftBukkit end
|
|
|
|
- entityhuman.b(StatisticList.ITEM_USED.b(this));
|
|
+// entityhuman.b(StatisticList.ITEM_USED.b(this)); // Paper - moved up
|
|
// CraftBukkit start - moved up
|
|
/*
|
|
if (!entityhuman.abilities.canInstantlyBuild) {
|
|
diff --git a/src/main/java/net/minecraft/server/ItemSplashPotion.java b/src/main/java/net/minecraft/server/ItemSplashPotion.java
|
|
index 18bd846cee..e71e933fff 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemSplashPotion.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemSplashPotion.java
|
|
@@ -8,7 +8,11 @@ public class ItemSplashPotion extends ItemPotionThrowable {
|
|
|
|
@Override
|
|
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
|
|
- world.playSound((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));
|
|
- return super.a(world, entityhuman, enumhand);
|
|
+ // Paper start
|
|
+ InteractionResultWrapper<ItemStack> wrapper = super.a(world, entityhuman, enumhand);
|
|
+ if (wrapper.getResult() != EnumInteractionResult.FAIL)
|
|
+ world.playSound((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));
|
|
+ return wrapper;
|
|
+ // Paper end
|
|
}
|
|
}
|
|
--
|
|
2.26.2
|
|
|