diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java index 5d240e76..274b9bc5 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -325,6 +325,16 @@ public abstract class Disguise { bar.addPlayer((Player) getEntity()); } + public boolean isUpsideDown() { + return getWatcher().isUpsideDown(); + } + + public Disguise setUpsideDown(boolean upsideDown) { + getWatcher().setUpsideDown(upsideDown); + + return this; + } + private void createRunnable() { final boolean alwaysSendVelocity; diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java index 045151af..b267a14b 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java @@ -53,6 +53,8 @@ public class FlagWatcher { private boolean sleeping; private boolean swimming; private transient boolean previouslySneaking; + @Getter + private boolean upsideDown; public FlagWatcher(Disguise disguise) { this.disguise = (TargetedDisguise) disguise; @@ -84,6 +86,9 @@ public class FlagWatcher { cloned.equipment = equipment.clone(cloned); cloned.modifiedEntityAnimations = Arrays.copyOf(modifiedEntityAnimations, modifiedEntityAnimations.length); cloned.addEntityAnimations = addEntityAnimations; + cloned.upsideDown = upsideDown; + cloned.swimming = swimming; + cloned.sleeping = sleeping; return cloned; } @@ -120,6 +125,25 @@ public class FlagWatcher { getEquipment().setChestplate(itemStack); } + @Deprecated + public void setInternalUpsideDown(boolean upsideDown) { + this.upsideDown = upsideDown; + } + + public void setUpsideDown(boolean upsideDown) { + if (isUpsideDown() == upsideDown) { + return; + } + + this.upsideDown = upsideDown; + + if (getDisguise().isPlayerDisguise()) { + ((PlayerDisguise) getDisguise()).setUpsideDown(upsideDown); + } else { + setInteralCustomName(isUpsideDown() ? "Dinnerbone" : ""); + } + } + public List convert(List list) { List newList = new ArrayList<>(); HashSet sentValues = new HashSet<>(); @@ -377,6 +401,10 @@ public class FlagWatcher { return; } + setInteralCustomName(name); + } + + protected void setInteralCustomName(String name) { if (Strings.isNullOrEmpty(name)) { if (NmsVersion.v1_13.isSupported()) { setData(MetaIndex.ENTITY_CUSTOM_NAME, Optional.empty()); diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java index a2036a97..f29de432 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java @@ -32,8 +32,6 @@ public class PlayerDisguise extends TargetedDisguise { private boolean explicitNameVisible = false; private UUID uuid = UUID.randomUUID(); private volatile DisguiseUtilities.DScoreTeam scoreboardName; - @Getter - private boolean upsideDown; private PlayerDisguise() { super(DisguiseType.PLAYER); @@ -197,7 +195,7 @@ public class PlayerDisguise extends TargetedDisguise { return this; } - this.upsideDown = upsideDown; + getWatcher().setInternalUpsideDown(upsideDown); if (isDisguiseInUse()) { resendDisguise(DisguiseConfig.isArmorstandsName() ? getName() : "Dinnerbone", true); diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java index 6ce8a424..a8dad3dc 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java @@ -37,14 +37,6 @@ public class PlayerWatcher extends LivingWatcher { ((PlayerDisguise) getDisguise()).setNameVisible(nameVisible); } - public boolean isUpsideDown() { - return ((PlayerDisguise) getDisguise()).isUpsideDown(); - } - - public void setUpsideDown(boolean upsideDown) { - ((PlayerDisguise) getDisguise()).setUpsideDown(upsideDown); - } - @RandomDefaultValue public String getName() { return ((PlayerDisguise) getDisguise()).getName(); diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java index 9707db83..b7f75e1c 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java @@ -15,10 +15,6 @@ public class SheepWatcher extends AgeableWatcher { return AnimalColor.getColorByWool(((int) getData(MetaIndex.SHEEP_WOOL) & 15)).getDyeColor(); } - public boolean isSheared() { - return (getData(MetaIndex.SHEEP_WOOL) & 16) != 0; - } - @Deprecated public void setColor(AnimalColor color) { setColor(color.getDyeColor()); @@ -31,6 +27,22 @@ public class SheepWatcher extends AgeableWatcher { sendData(MetaIndex.SHEEP_WOOL); } + public boolean isRainbowWool() { + return "jeb_".equals(getCustomName()); + } + + public void setRainbowWool(boolean rainbow) { + if (isRainbowWool() == rainbow) { + return; + } + + setInteralCustomName("jeb_"); + } + + public boolean isSheared() { + return (getData(MetaIndex.SHEEP_WOOL) & 16) != 0; + } + public void setSheared(boolean flag) { byte b0 = getData(MetaIndex.SHEEP_WOOL);