From a9fa5bd1553a49136f5bd02cdcb57f844625f78e Mon Sep 17 00:00:00 2001 From: BuildTools <unconfigured@null.spigotmc.org> Date: Sun, 4 Apr 2021 20:16:05 +0200 Subject: [PATCH] Added Shulker Peek and AttachedFace Methods diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityShulker.java b/src/main/java/net/minecraft/world/entity/monster/EntityShulker.java index bfecaa56..4cf9be60 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityShulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityShulker.java @@ -1,6 +1,7 @@ package net.minecraft.world.entity.monster; import java.util.EnumSet; + import java.util.Iterator; import java.util.List; import java.util.Optional; @@ -57,7 +58,7 @@ public class EntityShulker extends EntityGolem implements IMonster { private static final UUID bp = UUID.fromString("7E0292F2-9434-48D5-A29F-9583AF7DF27F"); private static final AttributeModifier bq = new AttributeModifier(EntityShulker.bp, "Covered armor bonus", 20.0D, AttributeModifier.Operation.ADDITION); - protected static final DataWatcherObject<EnumDirection> b = DataWatcher.a(EntityShulker.class, DataWatcherRegistry.n); + public static final DataWatcherObject<EnumDirection> ATTACHFACE = DataWatcher.a(EntityShulker.class, DataWatcherRegistry.n); protected static final DataWatcherObject<Optional<BlockPosition>> c = DataWatcher.a(EntityShulker.class, DataWatcherRegistry.m); protected static final DataWatcherObject<Byte> d = DataWatcher.a(EntityShulker.class, DataWatcherRegistry.a); public static final DataWatcherObject<Byte> COLOR = DataWatcher.a(EntityShulker.class, DataWatcherRegistry.a); @@ -118,7 +119,7 @@ public class EntityShulker extends EntityGolem implements IMonster { @Override protected void initDatawatcher() { super.initDatawatcher(); - this.datawatcher.register(EntityShulker.b, EnumDirection.DOWN); + this.datawatcher.register(EntityShulker.ATTACHFACE, EnumDirection.DOWN); this.datawatcher.register(EntityShulker.c, Optional.empty()); this.datawatcher.register(EntityShulker.d, (byte) 0); this.datawatcher.register(EntityShulker.COLOR, (byte) 16); @@ -136,7 +137,7 @@ public class EntityShulker extends EntityGolem implements IMonster { @Override public void loadData(NBTTagCompound nbttagcompound) { super.loadData(nbttagcompound); - this.datawatcher.set(EntityShulker.b, EnumDirection.fromType1(nbttagcompound.getByte("AttachFace"))); + this.datawatcher.set(EntityShulker.ATTACHFACE, EnumDirection.fromType1(nbttagcompound.getByte("AttachFace"))); this.datawatcher.set(EntityShulker.d, nbttagcompound.getByte("Peek")); this.datawatcher.set(EntityShulker.COLOR, nbttagcompound.getByte("Color")); if (nbttagcompound.hasKey("APX")) { @@ -154,7 +155,7 @@ public class EntityShulker extends EntityGolem implements IMonster { @Override public void saveData(NBTTagCompound nbttagcompound) { super.saveData(nbttagcompound); - nbttagcompound.setByte("AttachFace", (byte) ((EnumDirection) this.datawatcher.get(EntityShulker.b)).c()); + nbttagcompound.setByte("AttachFace", (byte) ((EnumDirection) this.datawatcher.get(EntityShulker.ATTACHFACE)).c()); nbttagcompound.setByte("Peek", (Byte) this.datawatcher.get(EntityShulker.d)); nbttagcompound.setByte("Color", (Byte) this.datawatcher.get(EntityShulker.COLOR)); BlockPosition blockposition = this.eM(); @@ -217,7 +218,7 @@ public class EntityShulker extends EntityGolem implements IMonster { EnumDirection enumdirection1 = this.g(blockposition); if (enumdirection1 != null) { - this.datawatcher.set(EntityShulker.b, enumdirection1); + this.datawatcher.set(EntityShulker.ATTACHFACE, enumdirection1); } else { this.eK(); } @@ -335,7 +336,7 @@ public class EntityShulker extends EntityGolem implements IMonster { return false; } // CraftBukkit end - this.datawatcher.set(EntityShulker.b, enumdirection); + this.datawatcher.set(EntityShulker.ATTACHFACE, enumdirection); this.playSound(SoundEffects.ENTITY_SHULKER_TELEPORT, 1.0F, 1.0F); this.datawatcher.set(EntityShulker.c, Optional.of(blockposition1)); this.datawatcher.set(EntityShulker.d, (byte) 0); @@ -413,7 +414,7 @@ public class EntityShulker extends EntityGolem implements IMonster { } public EnumDirection eL() { - return (EnumDirection) this.datawatcher.get(EntityShulker.b); + return (EnumDirection) this.datawatcher.get(EntityShulker.ATTACHFACE); } @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java index 6fc7d2a0..d2caa33d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java @@ -1,7 +1,9 @@ package org.bukkit.craftbukkit.entity; +import net.minecraft.core.EnumDirection; import net.minecraft.world.entity.monster.EntityShulker; import org.bukkit.DyeColor; +import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.entity.EntityType; import org.bukkit.entity.Shulker; @@ -36,4 +38,101 @@ public class CraftShulker extends CraftGolem implements Shulker { public void setColor(DyeColor color) { getHandle().getDataWatcher().set(EntityShulker.COLOR, (color == null) ? 16 : color.getWoolData()); } + + @Override + public boolean isPeeking() { + int v = getHandle().eN(); + return v > 0 && v <= 30; + } + + @Override + public boolean isClosed() { + return getHandle().eN() == 0; + } + + @Override + public boolean isOpen() { + return getHandle().eN() > 30; + } + + @Override + public void setPeeking() { + getHandle().a(30); + } + + @Override + public void setOpen() { + getHandle().a(100); + } + + @Override + public void setClosed() { + getHandle().a(0); + } + + @Override + public void setCustomPeek(byte b) { + getHandle().a(b); + } + + @Override + public BlockFace getAttachedFace() { + EnumDirection ed = getHandle().eL(); + + switch(ed) { + case DOWN: return BlockFace.DOWN; + case UP: return BlockFace.UP; + case NORTH: return BlockFace.NORTH; + case EAST: return BlockFace.EAST; + case SOUTH: return BlockFace.SOUTH; + case WEST: return BlockFace.WEST; + } + + return null; + } + + @Override + public void setAttachedFace(BlockFace bf) { + + EnumDirection ed = null; + + switch(bf) { + case DOWN: + ed = EnumDirection.DOWN; + break; + case UP: + ed = EnumDirection.UP; + break; + case NORTH: + ed = EnumDirection.NORTH; + break; + case EAST: + ed = EnumDirection.EAST; + break; + case SOUTH: + ed = EnumDirection.SOUTH; + break; + case WEST: + ed = EnumDirection.WEST; + break; + default: + throw new IllegalArgumentException("The BlockFace " + bf.name() + " is not valid for Shulkers!"); + } + + getHandle().getDataWatcher().set(EntityShulker.ATTACHFACE, ed); + + } + + + + } + + + + + + + + + -- 2.31.1.windows.1