papermc/Spigot-Server-Patches/0393-Add-more-Witch-API.patch
Aikar eb38e51ee0
Fix "prevent players from moving into unloaded chunks"
it used public method instead of private, and moved to world config

also improved the implementation to not use obfuscated stuff

Also removed the Fix Double chest conversion patch since its
fixed in other ways in vanilla
2018-10-23 21:13:58 -04:00

140 lines
7 KiB
Diff

From 7ac07ac07ac07ac07ac07ac07ac07ac07ac07ac0 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 7ac07ac07ac0..7ac07ac07ac0 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, Boolean.valueOf(flag));
}
+ public boolean isDrinkingPotion() { return l(); } // Paper - OBFHELPER
public boolean l() {
return ((Boolean) this.getDataWatcher().get(EntityWitch.c)).booleanValue();
}
@@ -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.k();
}
+ // 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 7ac07ac07ac0..7ac07ac07ac0 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.19.1