diff --git a/Spigot-API-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch b/Spigot-API-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch new file mode 100644 index 0000000000..3624415105 --- /dev/null +++ b/Spigot-API-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch @@ -0,0 +1,48 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Fri, 29 Jun 2018 00:19:19 -0400 +Subject: [PATCH] LivingEntity Hand Raised/Item Use API + +How long an entity has raised hands to charge an attack or use an item + +diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java +index 5921c952..5ccb8ef3 100644 +--- a/src/main/java/org/bukkit/entity/LivingEntity.java ++++ b/src/main/java/org/bukkit/entity/LivingEntity.java +@@ -0,0 +0,0 @@ import org.bukkit.Material; + import org.bukkit.attribute.Attributable; + import org.bukkit.block.Block; + import org.bukkit.inventory.EntityEquipment; ++import org.bukkit.inventory.ItemStack; + import org.bukkit.potion.PotionEffect; + import org.bukkit.potion.PotionEffectType; + import org.bukkit.projectiles.ProjectileSource; +@@ -0,0 +0,0 @@ public interface LivingEntity extends Attributable, Entity, Damageable, Projecti + * @param delay Delay in ticks + */ + void setShieldBlockingDelay(int delay); ++ ++ /** ++ * Get's the item being actively "used" or consumed. ++ * @return The item. Will be null if no active item. ++ */ ++ ItemStack getActiveItem(); ++ ++ /** ++ * Get's remaining time a player needs to keep hands raised with an item to finish using it. ++ * @return Remaining ticks to use the item ++ */ ++ int getItemUseRemainingTime(); ++ ++ /** ++ * Get how long the players hands have been raised (Charging Bow attack, using a potion, etc) ++ */ ++ int getHandRaisedTime(); ++ ++ /** ++ * Whether or not this entity is using or charging an attack (Bow pulled back, drinking potion, eating food) ++ */ ++ boolean isHandRaised(); + // Paper end + } +-- \ No newline at end of file diff --git a/Spigot-API-Patches/RangedEntity-API.patch b/Spigot-API-Patches/RangedEntity-API.patch index 36ec9c8a4f..fc80a5d916 100644 --- a/Spigot-API-Patches/RangedEntity-API.patch +++ b/Spigot-API-Patches/RangedEntity-API.patch @@ -8,7 +8,7 @@ and to perform an attack. diff --git a/src/main/java/com/destroystokyo/paper/entity/RangedEntity.java b/src/main/java/com/destroystokyo/paper/entity/RangedEntity.java new file mode 100644 -index 00000000..5153efab +index 00000000..7b07f10c --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/RangedEntity.java @@ -0,0 +0,0 @@ @@ -26,10 +26,19 @@ index 00000000..5153efab + void rangedAttack(LivingEntity target, float charge); + + /** -+ * Sets that the Entity is "charging" up an attack, by raising its arms -+ * @param charging Whether the entities arms are raised to charge attack ++ * Sets that the Entity is "charging" up an attack, by raising its hands ++ * ++ * @param raiseHands Whether the entities hands are raised to charge attack + */ -+ void setChargingAttack(boolean charging); ++ void setChargingAttack(boolean raiseHands); ++ ++ /** ++ * Alias to {@link LivingEntity#isHandRaised()}, if the entity is charging an attack ++ * @return If entities hands are raised ++ */ ++ default boolean isChargingAttack() { ++ return isHandRaised(); ++ } +} diff --git a/src/main/java/org/bukkit/entity/Illusioner.java b/src/main/java/org/bukkit/entity/Illusioner.java index 7c92c431..14e6c5ee 100644 diff --git a/Spigot-Server-Patches/Ability-to-apply-mending-to-XP-API.patch b/Spigot-Server-Patches/Ability-to-apply-mending-to-XP-API.patch index 81eb97f8bd..25ed1ffaf2 100644 --- a/Spigot-Server-Patches/Ability-to-apply-mending-to-XP-API.patch +++ b/Spigot-Server-Patches/Ability-to-apply-mending-to-XP-API.patch @@ -10,7 +10,7 @@ of giving the player experience points. Both an API To standalone mend, and apply mending logic to .giveExp has been added. diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java -index 98300d0a..f714dc32 100644 +index 98300d0a2..f714dc326 100644 --- a/src/main/java/net/minecraft/server/EnchantmentManager.java +++ b/src/main/java/net/minecraft/server/EnchantmentManager.java @@ -0,0 +0,0 @@ public class EnchantmentManager { @@ -22,7 +22,7 @@ index 98300d0a..f714dc32 100644 List list = enchantment.a(entityliving); diff --git a/src/main/java/net/minecraft/server/Enchantments.java b/src/main/java/net/minecraft/server/Enchantments.java -index 35e87eb1..74a6a4f6 100644 +index 35e87eb1c..74a6a4f60 100644 --- a/src/main/java/net/minecraft/server/Enchantments.java +++ b/src/main/java/net/minecraft/server/Enchantments.java @@ -0,0 +0,0 @@ public class Enchantments { @@ -35,7 +35,7 @@ index 35e87eb1..74a6a4f6 100644 @Nullable diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java -index ff5cc74b..1c59fd96 100644 +index ff5cc74ba..1c59fd966 100644 --- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java +++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java @@ -0,0 +0,0 @@ public class EntityExperienceOrb extends Entity { @@ -52,7 +52,7 @@ index ff5cc74b..1c59fd96 100644 return i * 2; } diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 52cb34ab..d1ff97a9 100644 +index d666088f2..f6b802dc8 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { @@ -78,7 +78,7 @@ index 52cb34ab..d1ff97a9 100644 return this.damage; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 428b208a..21631c58 100644 +index 428b208ae..21631c588 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/Fix-NFE-when-attempting-to-read-EMPTY-ItemStack.patch b/Spigot-Server-Patches/Fix-NFE-when-attempting-to-read-EMPTY-ItemStack.patch index 5608db5888..a55b56a28c 100644 --- a/Spigot-Server-Patches/Fix-NFE-when-attempting-to-read-EMPTY-ItemStack.patch +++ b/Spigot-Server-Patches/Fix-NFE-when-attempting-to-read-EMPTY-ItemStack.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Fix NFE when attempting to read EMPTY ItemStack Thanks @gabizou diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 9465f4c1..52cb34ab 100644 +index 736686bed..d666088f2 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { diff --git a/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch b/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch index b3a62452a4..e2c0632dc4 100644 --- a/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch +++ b/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch @@ -18,7 +18,7 @@ For consistency, the old API methods now forward to use the ItemMeta API equivalents, and should deprecate the old API's. diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 0dcea61d..a8f7ff98 100644 +index 82d72ea15..5047a57e9 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { @@ -53,7 +53,7 @@ index 0dcea61d..a8f7ff98 100644 this.item.a(this.tag); // CraftBukkit end @@ -0,0 +0,0 @@ public final class ItemStack { - + // Paper end public void setTag(@Nullable NBTTagCompound nbttagcompound) { this.tag = nbttagcompound; + processEnchantOrder(this.tag); // Paper @@ -69,7 +69,7 @@ index 0dcea61d..a8f7ff98 100644 public boolean hasEnchantments() { diff --git a/src/main/java/net/minecraft/server/NBTTagList.java b/src/main/java/net/minecraft/server/NBTTagList.java -index ca9eb2f3..576c3b71 100644 +index ca9eb2f3b..576c3b714 100644 --- a/src/main/java/net/minecraft/server/NBTTagList.java +++ b/src/main/java/net/minecraft/server/NBTTagList.java @@ -0,0 +0,0 @@ public class NBTTagList extends NBTBase { @@ -86,7 +86,7 @@ index ca9eb2f3..576c3b71 100644 public NBTTagList() {} diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index fb1dc542..cdf16e15 100644 +index fb1dc542d..cdf16e15a 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -0,0 +0,0 @@ import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS; @@ -212,7 +212,7 @@ index fb1dc542..cdf16e15 100644 static Map getEnchantments(net.minecraft.server.ItemStack item) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index c743ae06..0cdc8007 100644 +index c743ae066..0cdc8007a 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -0,0 +0,0 @@ import java.lang.annotation.RetentionPolicy; diff --git a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch index 4bdb45ed3b..9d41164ccd 100644 --- a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch +++ b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch @@ -6,7 +6,7 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration Allows you to determine how long it takes to use a usable/consumable item diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 985237d86..908fb280a 100644 +index f6b802dc8..6521bb508 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { diff --git a/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch new file mode 100644 index 0000000000..a84f046650 --- /dev/null +++ b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch @@ -0,0 +1,60 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Fri, 29 Jun 2018 00:21:28 -0400 +Subject: [PATCH] LivingEntity Hand Raised/Item Use API + +How long an entity has raised hands to charge an attack or use an item + +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index 156bf8ee0..14637be49 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { + + } + ++ public ItemStack getActiveItem() { return cJ(); } // Paper - OBFHELPER + public ItemStack cJ() { + return this.activeItem; + } + ++ public int getItemUseRemainingTime() { return cK(); } // Paper - OBFHELPER + public int cK() { + return this.bp; + } + ++ public int getHandRaisedTime() { return cL(); } // Paper - OBFHELPER + public int cL() { + return this.isHandRaised() ? this.activeItem.m() - this.cK() : 0; + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +index 14fb474f7..9c750efc7 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +@@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { + public void setShieldBlockingDelay(int delay) { + getHandle().setShieldBlockingDelay(delay); + } ++ ++ @Override ++ public ItemStack getActiveItem() { ++ return getHandle().getActiveItem().asBukkitMirror(); ++ } ++ ++ @Override ++ public int getItemUseRemainingTime() { ++ return getHandle().getItemUseRemainingTime(); ++ } ++ ++ @Override ++ public int getHandRaisedTime() { ++ return getHandle().getHandRaisedTime(); ++ } ++ ++ @Override ++ public boolean isHandRaised() { ++ return getHandle().isHandRaised(); ++ } + // Paper end + } +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/MC-Utils.patch b/Spigot-Server-Patches/MC-Utils.patch index 254a7de0db..7bb52cf055 100644 --- a/Spigot-Server-Patches/MC-Utils.patch +++ b/Spigot-Server-Patches/MC-Utils.patch @@ -76,6 +76,36 @@ index ba461ad48..2359b31f4 100644 while (EntityTypes.g.size() <= i) { EntityTypes.g.add(null); // Paper - Decompile fix +diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java +index 76bfbaa81..82d72ea15 100644 +--- a/src/main/java/net/minecraft/server/ItemStack.java ++++ b/src/main/java/net/minecraft/server/ItemStack.java +@@ -0,0 +0,0 @@ import org.bukkit.Location; + import org.bukkit.TreeType; + import org.bukkit.block.BlockState; + import org.bukkit.craftbukkit.block.CraftBlockState; ++import org.bukkit.craftbukkit.inventory.CraftItemStack; + import org.bukkit.craftbukkit.util.CraftMagicNumbers; + import org.bukkit.entity.Player; + import org.bukkit.event.world.StructureGrowEvent; +@@ -0,0 +0,0 @@ public final class ItemStack { + return this.tag != null ? this.tag.getList("ench", 10) : new NBTTagList(); + } + ++ // Paper start - (this is just a good no conflict location) ++ public org.bukkit.inventory.ItemStack asBukkitMirror() { ++ return CraftItemStack.asCraftMirror(this); ++ } ++ public org.bukkit.inventory.ItemStack asBukkitCopy() { ++ return CraftItemStack.asCraftMirror(this.cloneItemStack()); ++ } ++ public static ItemStack fromBukkitCopy(org.bukkit.inventory.ItemStack itemstack) { ++ return CraftItemStack.asNMSCopy(itemstack); ++ } ++ // Paper end + public void setTag(@Nullable NBTTagCompound nbttagcompound) { + this.tag = nbttagcompound; + } diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java new file mode 100644 index 000000000..a4b0901cf diff --git a/Spigot-Server-Patches/Optimize-ItemStack.isEmpty.patch b/Spigot-Server-Patches/Optimize-ItemStack.isEmpty.patch index 3e53a880fb..61d37b8324 100644 --- a/Spigot-Server-Patches/Optimize-ItemStack.isEmpty.patch +++ b/Spigot-Server-Patches/Optimize-ItemStack.isEmpty.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimize ItemStack.isEmpty() Remove hashMap lookup every check, simplify code to remove ternary diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index a8f7ff98..9465f4c1 100644 +index 5047a57e9..736686bed 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { diff --git a/Spigot-Server-Patches/RangedEntity-API.patch b/Spigot-Server-Patches/RangedEntity-API.patch index cdb999c693..fbc618217f 100644 --- a/Spigot-Server-Patches/RangedEntity-API.patch +++ b/Spigot-Server-Patches/RangedEntity-API.patch @@ -8,7 +8,7 @@ and to perform an attack. diff --git a/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java new file mode 100644 -index 000000000..d85e4a203 +index 000000000..696660b08 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java @@ -0,0 +0,0 @@ @@ -27,8 +27,8 @@ index 000000000..d85e4a203 + } + + @Override -+ default void setChargingAttack(boolean charging) { -+ getHandle().setChargingAttack(charging); ++ default void setChargingAttack(boolean raiseHands) { ++ getHandle().setChargingAttack(raiseHands); + } +} diff --git a/src/main/java/net/minecraft/server/IRangedEntity.java b/src/main/java/net/minecraft/server/IRangedEntity.java