Skip to content

Commit

Permalink
LivingEntity Hand Raised/Item Use API
Browse files Browse the repository at this point in the history
How long an entity has raised hands to charge an attack or use an item

Also aliased isHandsRaised for isChargingAttack in RangedEntity
  • Loading branch information
aikar committed Jun 29, 2018
1 parent 7abf2ee commit 98555e9
Show file tree
Hide file tree
Showing 10 changed files with 195 additions and 44 deletions.
@@ -0,0 +1,50 @@
From d76f522b7f164a56a7f9651170e439739ef6e015 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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
@@ -10,6 +10,7 @@ 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;
@@ -399,5 +400,27 @@ 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
}
--
2.18.0

@@ -1,4 +1,4 @@
From d22cc23fcedf807711836fcaedd9d7fd95f47f2d Mon Sep 17 00:00:00 2001
From d2a1657e1c25dc241d143ee6486513c024a5695b Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Tue, 26 Jun 2018 21:34:40 -0400
Subject: [PATCH] RangedEntity API
Expand All @@ -8,10 +8,10 @@ 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 +1,19 @@
@@ -0,0 +1,28 @@
+package com.destroystokyo.paper.entity;
+
+import org.bukkit.entity.LivingEntity;
Expand All @@ -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 raiseHands);
+
+ /**
+ * Alias to {@link LivingEntity#isHandRaised()}, if the entity is charging an attack
+ * @return If entities hands are raised
+ */
+ void setChargingAttack(boolean charging);
+ 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
Expand Down
34 changes: 32 additions & 2 deletions Spigot-Server-Patches/0005-MC-Utils.patch
@@ -1,4 +1,4 @@
From 657fd80d2b490c68d3d640f155f8ea627edca61f Mon Sep 17 00:00:00 2001
From 7d617689162687744920577469a5bda672cd0e99 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 28 Mar 2016 20:55:47 -0400
Subject: [PATCH] MC Utils
Expand Down Expand Up @@ -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
@@ -14,6 +14,7 @@ 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;
@@ -583,6 +584,17 @@ 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
Expand Down Expand Up @@ -349,5 +379,5 @@ index 8cede938a..cd2d58bfb 100644
return System.nanoTime() / 1000000L;
}
--
2.17.1
2.18.0

22 changes: 11 additions & 11 deletions Spigot-Server-Patches/0072-Handle-Item-Meta-Inconsistencies.patch
@@ -1,4 +1,4 @@
From 41148ad75dcb5ba9bfbff7a6bfa03d861f50cf03 Mon Sep 17 00:00:00 2001
From cc98c3d6d2a78be363dccfc73b395cc82d52810d Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 28 May 2015 23:00:19 -0400
Subject: [PATCH] Handle Item Meta Inconsistencies
Expand All @@ -18,10 +18,10 @@ 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
@@ -56,6 +56,22 @@ public final class ItemStack {
@@ -57,6 +57,22 @@ public final class ItemStack {
}

// CraftBukkit start
Expand All @@ -44,23 +44,23 @@ index 0dcea61d..a8f7ff98 100644
public ItemStack(Item item, int i, int j) {
this(item, i, j, true);
}
@@ -113,6 +129,7 @@ public final class ItemStack {
@@ -114,6 +130,7 @@ public final class ItemStack {
if (nbttagcompound.hasKeyOfType("tag", 10)) {
// CraftBukkit start - make defensive copy as this data may be coming from the save thread
this.tag = (NBTTagCompound) nbttagcompound.getCompound("tag").clone();
+ processEnchantOrder(this.tag); // Paper
if (this.item != null) {
this.item.a(this.tag);
// CraftBukkit end
@@ -585,6 +602,7 @@ public final class ItemStack {

@@ -597,6 +614,7 @@ public final class ItemStack {
// Paper end
public void setTag(@Nullable NBTTagCompound nbttagcompound) {
this.tag = nbttagcompound;
+ processEnchantOrder(this.tag); // Paper
}

public String getName() {
@@ -658,6 +676,7 @@ public final class ItemStack {
@@ -670,6 +688,7 @@ public final class ItemStack {
nbttagcompound.setShort("id", (short) Enchantment.getId(enchantment));
nbttagcompound.setShort("lvl", (short) ((byte) i));
nbttaglist.add(nbttagcompound);
Expand All @@ -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
@@ -14,6 +14,12 @@ public class NBTTagList extends NBTBase {
Expand All @@ -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
@@ -4,6 +4,7 @@ import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS;
Expand Down Expand Up @@ -212,7 +212,7 @@ index fb1dc542..cdf16e15 100644

static Map<Enchantment, Integer> 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
@@ -6,13 +6,8 @@ import java.lang.annotation.RetentionPolicy;
Expand Down Expand Up @@ -358,5 +358,5 @@ index c743ae06..0cdc8007 100644
private final Spigot spigot = new Spigot()
{
--
2.14.3
2.18.0

8 changes: 4 additions & 4 deletions Spigot-Server-Patches/0178-Optimize-ItemStack.isEmpty.patch
@@ -1,15 +1,15 @@
From 928399a231691ca924638613a15cbebaa634a4af Mon Sep 17 00:00:00 2001
From b70ebdb4c08ced933b85774c1a3a4955a976059a Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 21 Dec 2016 03:48:29 -0500
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
@@ -143,9 +143,15 @@ public final class ItemStack {
@@ -144,9 +144,15 @@ public final class ItemStack {
this.F();
}

Expand All @@ -27,5 +27,5 @@ index a8f7ff98..9465f4c1 100644
public static void a(DataConverterManager dataconvertermanager) {
dataconvertermanager.a(DataConverterTypes.ITEM_INSTANCE, (DataInspector) (new DataInspectorBlockEntity()));
--
2.16.2
2.18.0

@@ -1,15 +1,15 @@
From 48ad7625f43d7fd2a6856e321c5ae439372a2d9c Mon Sep 17 00:00:00 2001
From 27b11fe499c79cd2a1fefa1139f9e17ba852facd Mon Sep 17 00:00:00 2001
From: kashike <kashike@vq.lc>
Date: Sun, 9 Apr 2017 23:50:15 -0700
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
@@ -119,7 +119,7 @@ public final class ItemStack {
@@ -120,7 +120,7 @@ public final class ItemStack {

// CraftBukkit - break into own method
public void load(NBTTagCompound nbttagcompound) {
Expand All @@ -19,5 +19,5 @@ index 9465f4c1..52cb34ab 100644
// CraftBukkit start - Route through setData for filtering
// this.damage = Math.max(0, nbttagcompound.getShort("Damage"));
--
2.14.3
2.18.0

@@ -1,4 +1,4 @@
From 596b1db6a5e10475c0bc5c0f0d91fa43821c1d6e Mon Sep 17 00:00:00 2001
From a8a128697eaaacb25e8e8fa9ac38f1dd0c2a892d Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 20 Dec 2017 17:36:49 -0500
Subject: [PATCH] Ability to apply mending to XP API
Expand All @@ -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
@@ -226,6 +226,7 @@ public class EnchantmentManager {
Expand All @@ -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
@@ -32,7 +32,7 @@ public class Enchantments {
Expand All @@ -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
@@ -234,10 +234,12 @@ public class EntityExperienceOrb extends Entity {
Expand All @@ -52,10 +52,10 @@ 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
@@ -28,7 +28,7 @@ public final class ItemStack {
@@ -29,7 +29,7 @@ public final class ItemStack {
private Item item;
private NBTTagCompound tag;
private boolean g;
Expand All @@ -64,7 +64,7 @@ index 52cb34ab..d1ff97a9 100644
private EntityItemFrame i;
private Block j;
private boolean k;
@@ -349,10 +349,12 @@ public final class ItemStack {
@@ -350,10 +350,12 @@ public final class ItemStack {
return this.getItem().k();
}

Expand All @@ -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
@@ -923,8 +923,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Expand Down Expand Up @@ -123,5 +123,5 @@ index 428b208a..21631c58 100644
}

--
2.14.3
2.18.0

@@ -1,15 +1,15 @@
From 3b7b48e9015f695e3e59130a51a7a06dae7cbc11 Mon Sep 17 00:00:00 2001
From f0635a630823c63d00fc43a9acf99936959670fc Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Tue, 5 Jun 2018 23:00:29 -0400
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
@@ -560,6 +560,7 @@ public final class ItemStack {
@@ -561,6 +561,7 @@ public final class ItemStack {
this.getItem().b(this, world, entityhuman);
}

Expand All @@ -36,5 +36,5 @@ index aa99254ff..be6589dbf 100644
public void addUnsafeEnchantment(Enchantment ench, int level) {
Validate.notNull(ench, "Cannot add null enchantment");
--
2.17.1
2.18.0

0 comments on commit 98555e9

Please sign in to comment.