aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0281-Add-more-Witch-API.patch
blob: ce30836286b33db0f8fcaf97c25fdc74fb366b1a (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
From 0000000000000000000000000000000000000000 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/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java
index 94bd20db7ffea00579225e6887b8c78a3da3ff1a..365354910047631b0a4402f29ad156e6447c2606 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
@@ -1,5 +1,8 @@
 package net.minecraft.world.entity.monster;
 
+// Paper start
+import com.destroystokyo.paper.event.entity.WitchReadyPotionEvent;
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
 import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
@@ -157,21 +160,24 @@ public class Witch extends Raider implements RangedAttackMob {
                 }
 
                 if (potionregistry != null) {
-                    // Paper start
                     ItemStack potion = PotionUtils.setPotion(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.setItemSlot(EquipmentSlot.MAINHAND, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(bukkitStack));
+                    // Paper start - logic moved into setDrinkingPotion, copy exact impl into the method and then comment out
+                    this.setDrinkingPotion(potion);
+//                    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 end
+//                    this.bq = this.getItemInMainHand().k();
+//                    this.v(true);
+//                    if (!this.isSilent()) {
+//                        this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_WITCH_DRINK, this.getSoundCategory(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
+//                    }
+//
+//                    AttributeModifiable attributemodifiable = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
+//
+//                    attributemodifiable.removeModifier(EntityWitch.bo);
+//                    attributemodifiable.b(EntityWitch.bo);
                     // Paper end
-                    this.usingTime = this.getMainHandItem().getUseDuration();
-                    this.setUsingItem(true);
-                    if (!this.isSilent()) {
-                        this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.WITCH_DRINK, this.getSoundSource(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
-                    }
-
-                    AttributeInstance attributemodifiable = this.getAttribute(Attributes.MOVEMENT_SPEED);
 
-                    attributemodifiable.removeModifier(Witch.SPEED_MODIFIER_DRINKING);
-                    attributemodifiable.addTransientModifier(Witch.SPEED_MODIFIER_DRINKING);
                 }
             }
 
@@ -183,6 +189,24 @@ public class Witch extends Raider implements RangedAttackMob {
         super.aiStep();
     }
 
+    // Paper start - moved to its own method
+    public void setDrinkingPotion(ItemStack potion) {
+        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.setItemSlot(EquipmentSlot.MAINHAND, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(bukkitStack));
+        // Paper end
+        this.usingTime = this.getMainHandItem().getUseDuration();
+        this.setUsingItem(true);
+        if (!this.isSilent()) {
+            this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.WITCH_DRINK, this.getSoundSource(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
+        }
+
+        AttributeInstance attributemodifiable = this.getAttribute(Attributes.MOVEMENT_SPEED);
+
+        attributemodifiable.removeModifier(Witch.SPEED_MODIFIER_DRINKING);
+        attributemodifiable.addTransientModifier(Witch.SPEED_MODIFIER_DRINKING);
+    }
+    // Paper end
+
     @Override
     public SoundEvent getCelebrateSound() {
         return SoundEvents.WITCH_CELEBRATE;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
index d4eeb071dbbfca3ecea256228853bcb5c11f49ee..8625d8d7ac94dca2acc348a4c3c912d39cd22b47 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
@@ -3,6 +3,13 @@ package org.bukkit.craftbukkit.entity;
 import org.bukkit.craftbukkit.CraftServer;
 import org.bukkit.entity.EntityType;
 import org.bukkit.entity.Witch;
+// Paper start
+import com.destroystokyo.paper.entity.CraftRangedEntity;
+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 CraftRaider implements Witch, com.destroystokyo.paper.entity.CraftRangedEntity<net.minecraft.world.entity.monster.Witch> { // Paper
     public CraftWitch(CraftServer server, net.minecraft.world.entity.monster.Witch entity) {
@@ -23,4 +30,28 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo.
     public EntityType getType() {
         return EntityType.WITCH;
     }
+
+    // Paper start
+    public boolean isDrinkingPotion() {
+        return getHandle().isDrinkingPotion();
+    }
+
+    public int getPotionUseTimeLeft() {
+        return getHandle().usingTime;
+    }
+
+    @Override
+    public void setPotionUseTimeLeft(int ticks) {
+        getHandle().usingTime = ticks;
+    }
+
+    public ItemStack getDrinkingPotion() {
+        return CraftItemStack.asCraftMirror(getHandle().getMainHandItem());
+    }
+
+    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
 }