aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0380-Add-more-Witch-API.patch
blob: ce28b674451f1f412dd4e2365d2dca162ea54dfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
From 088816d1d3369362e024ac4adb488002dd46f696 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Fri, 12 Oct 2018 14:10:46 -0500
Subject: [PATCH] Add more Witch API


diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java
index feedfc9d9c..955e0e19b9 100644
--- a/src/main/java/net/minecraft/server/EntityWitch.java
+++ b/src/main/java/net/minecraft/server/EntityWitch.java
@@ -1,5 +1,11 @@
 package net.minecraft.server;
 
+// Paper start
+import com.destroystokyo.paper.event.entity.WitchReadyPotionEvent;
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.entity.Witch;
+// Paper end
+
 import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
@@ -8,9 +14,9 @@ import javax.annotation.Nullable;
 public class EntityWitch extends EntityMonster implements IRangedEntity {
 
     private static final UUID a = UUID.fromString("5CD17E52-A79A-43D3-A529-90FDE04B181E");
-    private static final AttributeModifier b = (new AttributeModifier(EntityWitch.a, "Drinking speed penalty", -0.25D, 0)).a(false);
+    private static final AttributeModifier b = (new AttributeModifier(EntityWitch.a, "Drinking speed penalty", -0.25D, 0)).a(false); private static final AttributeModifier DRINKING_SPEED = b; // Paper - OBFHELPER
     private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityWitch.class, DataWatcherRegistry.i);
-    private int bC;
+    private int bC; public int getPotionUseTimeLeft() { return bC; } public void setPotionUseTimeLeft(int timeLeft) { bC = timeLeft; } // Paper - OBFHELPER
 
     public EntityWitch(World world) {
         super(EntityTypes.WITCH, world);
@@ -44,10 +50,12 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
         return SoundEffects.ENTITY_WITCH_DEATH;
     }
 
+    public void setDrinkingPotion(boolean drinkingPotion) { a(drinkingPotion); } // Paper - OBFHELPER
     public void a(boolean flag) {
         this.getDataWatcher().set(EntityWitch.c, flag);
     }
 
+    public boolean isDrinkingPotion() { return l(); } // Paper - OBFHELPER
     public boolean l() {
         return (Boolean) this.getDataWatcher().get(EntityWitch.c);
     }
@@ -100,18 +108,17 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
                 }
 
                 if (potionregistry != null) {
-                    // Paper start
-                    ItemStack potion = PotionUtil.a(new ItemStack(Items.POTION), potionregistry);
-                    org.bukkit.inventory.ItemStack bukkitStack = com.destroystokyo.paper.event.entity.WitchReadyPotionEvent.process((org.bukkit.entity.Witch) this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion));
-                    this.setSlot(EnumItemSlot.MAINHAND, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(bukkitStack));
+                    // Paper start - moved all this down into its own method
+                    //this.setSlot(EnumItemSlot.MAINHAND, PotionUtil.a(new ItemStack(Items.POTION), potionregistry));
+                    //this.bC = this.getItemInMainHand().k();
+                    //this.a(true);
+                    //this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_WITCH_DRINK, this.bV(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
+                    //AttributeInstance attributeinstance = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
+                    //attributeinstance.c(EntityWitch.b);
+                    //attributeinstance.b(EntityWitch.b);
+
+                    setDrinkingPotion(PotionUtil.addPotionToItemStack(new ItemStack(Items.POTION), potionregistry));
                     // Paper end
-                    this.bC = this.getItemInMainHand().k();
-                    this.a(true);
-                    this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_WITCH_DRINK, this.bV(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
-                    AttributeInstance attributeinstance = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
-
-                    attributeinstance.c(EntityWitch.b);
-                    attributeinstance.b(EntityWitch.b);
                 }
             }
 
@@ -123,6 +130,18 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
         super.movementTick();
     }
 
+    // Paper start
+    public void setDrinkingPotion(ItemStack potion) {
+        setSlot(EnumItemSlot.MAINHAND, CraftItemStack.asNMSCopy(WitchReadyPotionEvent.process((Witch) getBukkitEntity(), CraftItemStack.asCraftMirror(potion))));
+        setPotionUseTimeLeft(getItemInMainHand().getItemUseMaxDuration());
+        setDrinkingPotion(true);
+        world.sendSoundEffect(null, locX, locY, locZ, SoundEffects.ENTITY_WITCH_DRINK, getSoundCategory(), 1.0F, 0.8F + random.nextFloat() * 0.4F);
+        AttributeInstance attributeinstance = getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
+        attributeinstance.removeModifier(EntityWitch.DRINKING_SPEED);
+        attributeinstance.addModifier(EntityWitch.DRINKING_SPEED);
+    }
+    // Paper end
+
     protected float applyMagicModifier(DamageSource damagesource, float f) {
         f = super.applyMagicModifier(damagesource, f);
         if (damagesource.getEntity() == this) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
index f25998eb6d..ac465bda2e 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
@@ -6,6 +6,13 @@ import org.bukkit.craftbukkit.CraftServer;
 import org.bukkit.entity.Witch;
 import org.bukkit.entity.EntityType;
 
+// Paper start
+import com.google.common.base.Preconditions;
+import org.bukkit.Material;
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.inventory.ItemStack;
+// Paper end
+
 public class CraftWitch extends CraftMonster implements Witch, CraftRangedEntity<EntityWitch> { // Paper
     public CraftWitch(CraftServer server, EntityWitch entity) {
         super(server, entity);
@@ -24,4 +31,23 @@ public class CraftWitch extends CraftMonster implements Witch, CraftRangedEntity
     public EntityType getType() {
         return EntityType.WITCH;
     }
+
+    // Paper start
+    public boolean isDrinkingPotion() {
+        return getHandle().isDrinkingPotion();
+    }
+
+    public int getPotionUseTimeLeft() {
+        return getHandle().getPotionUseTimeLeft();
+    }
+
+    public ItemStack getDrinkingPotion() {
+        return CraftItemStack.asCraftMirror(getHandle().getItemInMainHand());
+    }
+
+    public void setDrinkingPotion(ItemStack potion) {
+        Preconditions.checkArgument(potion == null || potion.getType().isEmpty() || potion.getType() == Material.POTION, "must be potion, air, or null");
+        getHandle().setDrinkingPotion(CraftItemStack.asNMSCopy(potion));
+    }
+    // Paper end
 }
-- 
2.21.0