Add setGlowColor to FlagWatcher, doesn't support non-player-disguises yet.

This commit is contained in:
libraryaddict 2020-09-04 07:58:09 +12:00
parent 865326eda7
commit 33e803134b
2 changed files with 67 additions and 26 deletions

View File

@ -24,11 +24,13 @@ import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scoreboard.Team;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
@ -55,6 +57,7 @@ public class FlagWatcher {
private transient boolean previouslySneaking;
@Getter
private boolean upsideDown;
private ChatColor glowColor;
public FlagWatcher(Disguise disguise) {
this.disguise = (TargetedDisguise) disguise;
@ -76,8 +79,7 @@ public class FlagWatcher {
try {
cloned = getClass().getConstructor(Disguise.class).newInstance(owningDisguise);
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
cloned = new FlagWatcher(owningDisguise);
}
@ -88,6 +90,7 @@ public class FlagWatcher {
cloned.addEntityAnimations = addEntityAnimations;
cloned.upsideDown = upsideDown;
cloned.sleeping = sleeping;
cloned.glowColor = glowColor;
return cloned;
}
@ -185,8 +188,9 @@ public class FlagWatcher {
watch = ReflectionManager.createWatchable(MetaIndex.getMetaIndex(this, id), value);
if (watch == null)
if (watch == null) {
continue;
}
if (!isDirty) {
watch.setDirtyState(false);
@ -196,8 +200,9 @@ public class FlagWatcher {
watch = ReflectionManager.createWatchable(MetaIndex.getMetaIndex(this, id), watch.getValue());
if (watch == null)
if (watch == null) {
continue;
}
if (!isDirty) {
watch.setDirtyState(false);
@ -224,11 +229,12 @@ public class FlagWatcher {
continue;
}
WrappedWatchableObject watch = ReflectionManager
.createWatchable(MetaIndex.getMetaIndex(this, id), value);
WrappedWatchableObject watch =
ReflectionManager.createWatchable(MetaIndex.getMetaIndex(this, id), value);
if (watch == null)
if (watch == null) {
continue;
}
newList.add(watch);
}
@ -251,8 +257,7 @@ public class FlagWatcher {
try {
DisguiseUtilities
.sendSelfDisguise((Player) getDisguise().getEntity(), getDisguise());
}
catch (Exception ex) {
} catch (Exception ex) {
ex.printStackTrace();
}
}, 2);
@ -344,8 +349,7 @@ public class FlagWatcher {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
}
}
}
catch (InvocationTargetException e) {
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@ -464,8 +468,9 @@ public class FlagWatcher {
}
protected <Y> Y getData(MetaIndex<Y> flagType) {
if (flagType == null)
if (flagType == null) {
return null;
}
if (entityValues.containsKey(flagType.getIndex())) {
return (Y) entityValues.get(flagType.getIndex());
@ -487,8 +492,9 @@ public class FlagWatcher {
}
public boolean hasValue(MetaIndex no) {
if (no == null)
if (no == null) {
return false;
}
return entityValues.containsKey(no.getIndex());
}
@ -539,6 +545,28 @@ public class FlagWatcher {
sendData(MetaIndex.ENTITY_META);
}
public ChatColor getGlowColor() {
return glowColor;
}
public void setGlowColor(ChatColor glowColor) {
if (getGlowColor() == glowColor) {
return;
}
this.glowColor = glowColor;
if (!getDisguise().isDisguiseInUse() || getDisguise().getEntity() == null) {
return;
}
if (getDisguise().isPlayerDisguise()) {
DisguiseUtilities.updateExtendedName((PlayerDisguise) getDisguise());
} else {
// TODO
}
}
public boolean isInvisible() {
return getEntityFlag(5);
}
@ -608,14 +636,15 @@ public class FlagWatcher {
if (entityValues.containsKey(i) && entityValues.get(i) != null) {
watchable = ReflectionManager.createWatchable(MetaIndex.getMetaIndex(this, i), entityValues.get(i));
} else if (backupEntityValues.containsKey(i) && backupEntityValues.get(i) != null) {
watchable = ReflectionManager
.createWatchable(MetaIndex.getMetaIndex(this, i), backupEntityValues.get(i));
watchable =
ReflectionManager.createWatchable(MetaIndex.getMetaIndex(this, i), backupEntityValues.get(i));
} else {
continue;
}
if (watchable == null)
if (watchable == null) {
continue;
}
watchableObjects.add(watchable);
}
@ -630,8 +659,9 @@ public class FlagWatcher {
List<WrappedWatchableObject> list = new ArrayList<>();
for (MetaIndex data : dataValues) {
if (data == null)
if (data == null) {
continue;
}
if (!entityValues.containsKey(data.getIndex()) || entityValues.get(data.getIndex()) == null) {
continue;
@ -646,8 +676,9 @@ public class FlagWatcher {
WrappedWatchableObject watch = ReflectionManager.createWatchable(data, value);
if (watch == null)
if (watch == null) {
continue;
}
list.add(watch);
}
@ -670,8 +701,7 @@ public class FlagWatcher {
} else {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
}
}
catch (InvocationTargetException e) {
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@ -687,8 +717,9 @@ public class FlagWatcher {
}
protected void setBackupValue(MetaIndex no, Object value) {
if (no == null)
if (no == null) {
return;
}
backupEntityValues.put(no.getIndex(), value);
}
@ -725,8 +756,9 @@ public class FlagWatcher {
protected void sendItemStack(EquipmentSlot slot, ItemStack itemStack) {
if (!DisguiseAPI.isDisguiseInUse(getDisguise()) || getDisguise().getWatcher() != this ||
getDisguise().getEntity() == null)
getDisguise().getEntity() == null) {
return;
}
if (itemStack == null && getDisguise().getEntity() instanceof LivingEntity) {
itemStack = ReflectionManager.getEquipment(slot, getDisguise().getEntity());
@ -753,8 +785,7 @@ public class FlagWatcher {
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
}
catch (InvocationTargetException e) {
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@ -806,16 +837,18 @@ public class FlagWatcher {
}
protected <Y> void setData(MetaIndex<Y> id, Y value) {
if (id == null)
if (id == null) {
return;
}
if (id.getIndex() == -1) {
throw new IllegalArgumentException(
"You can't do that in this version of Minecraft! I can't use " + MetaIndex.getName(id) + "!");
}
if (value == null && id.getDefault() instanceof ItemStack)
if (value == null && id.getDefault() instanceof ItemStack) {
throw new IllegalArgumentException("Cannot use null ItemStacks");
}
entityValues.put(id.getIndex(), value);

View File

@ -113,6 +113,14 @@ public class DisguiseUtilities {
team.setOption(Option.NAME_TAG_VISIBILITY, nameVisible ? OptionStatus.ALWAYS : OptionStatus.NEVER);
}
ChatColor color = disguise.getWatcher().getGlowColor();
if (color == null) {
color = ChatColor.WHITE;
}
team.setColor(color);
if (NmsVersion.v1_13.isSupported()) {
team.setPrefix("Colorize");
team.setSuffix("Colorize");