Add new config option to auto-hide tall disguises, also as a disguise option

This commit is contained in:
libraryaddict 2020-04-27 17:31:00 +12:00
parent 1d7fd61556
commit af492c2e3b
No known key found for this signature in database
GPG Key ID: 052E4FBCD257AEA4
7 changed files with 48 additions and 13 deletions

View File

@ -240,6 +240,9 @@ public class DisguiseConfig {
@Getter
private static boolean notifyUpdate;
private static BukkitTask updaterTask;
@Getter
@Setter
private static boolean hideTallSelfDisguises;
public static void setAutoUpdate(boolean update) {
if (isAutoUpdate() == update) {
@ -566,6 +569,7 @@ public class DisguiseConfig {
setScoreboardDisguiseNames(config.getBoolean("ScoreboardNames"));
setTablistRemoveDelay(config.getInt("TablistRemoveDelay"));
setAutoUpdate(config.getBoolean("AutoUpdate"));
setHideTallSelfDisguises(config.getBoolean("HideTallSelfDisguises"));
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");

View File

@ -20,7 +20,9 @@ import me.libraryaddict.disguise.disguisetypes.watchers.*;
import me.libraryaddict.disguise.events.DisguiseEvent;
import me.libraryaddict.disguise.events.UndisguiseEvent;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.DisguiseValues;
import me.libraryaddict.disguise.utilities.LibsPremium;
import me.libraryaddict.disguise.utilities.reflection.FakeBoundingBox;
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
@ -95,6 +97,9 @@ public abstract class Disguise {
@Getter
@Setter
private boolean customName = true;
@Getter
@Setter
private boolean hideTallSelfDisguise = DisguiseConfig.isHideTallSelfDisguises();
public Disguise(DisguiseType disguiseType) {
this.disguiseType = disguiseType;
@ -119,6 +124,7 @@ public abstract class Disguise {
protected void clone(Disguise disguise) {
disguise.setDisguiseName(getDisguiseName());
disguise.setCustomName(isCustomName());
disguise.setHideTallSelfDisguise(isHideTallSelfDisguise());
disguise.setReplaceSounds(isSoundsReplaced());
disguise.setViewSelfDisguise(isSelfDisguiseVisible());
@ -543,6 +549,27 @@ public abstract class Disguise {
setupWatcher();
}
if (getEntity() instanceof Player && isSelfDisguiseVisible() && isHideTallSelfDisguise() &&
!getType().isCustom()) {
DisguiseValues values = DisguiseValues.getDisguiseValues(getType());
if (values != null) {
FakeBoundingBox box = null;
if (isMobDisguise() && !((MobDisguise) this).isAdult()) {
box = values.getBabyBox();
}
if (box == null) {
box = values.getAdultBox();
}
if (box != null && box.getY() > 1.7D) {
setSelfDisguiseVisible(false);
}
}
}
return this;
}

View File

@ -25,7 +25,7 @@ public class DisguiseValues {
private double maxHealth;
private Class nmsEntityClass;
public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth) {
public DisguiseValues(DisguiseType type, Class classType, double maxHealth) {
values.put(type, this);
nmsEntityClass = classType;
this.maxHealth = maxHealth;
@ -35,10 +35,18 @@ public class DisguiseValues {
return adultBox;
}
public void setAdultBox(FakeBoundingBox newBox) {
adultBox = newBox;
}
public FakeBoundingBox getBabyBox() {
return babyBox;
}
public void setBabyBox(FakeBoundingBox newBox) {
babyBox = newBox;
}
public double getMaxHealth() {
return maxHealth;
}
@ -46,12 +54,4 @@ public class DisguiseValues {
public Class getNmsEntityClass() {
return nmsEntityClass;
}
public void setAdultBox(FakeBoundingBox newBox) {
adultBox = newBox;
}
public void setBabyBox(FakeBoundingBox newBox) {
babyBox = newBox;
}
}

View File

@ -114,7 +114,7 @@ public class ParamInfoManager {
// Add these last as it's what we want to present to be called the least
for (String methodName : new String[]{"setSelfDisguiseVisible", "setHideHeldItemFromSelf",
"setHideArmorFromSelf", "setHearSelfDisguise", "setHidePlayer", "setExpires", "setNotifyBar",
"setBossBarColor", "setBossBarStyle"}) {
"setBossBarColor", "setBossBarStyle", "setHideTallSelfDisguise"}) {
try {
Class cl = boolean.class;

View File

@ -1717,7 +1717,7 @@ public class ReflectionManager {
try {
if (disguiseType == DisguiseType.UNKNOWN || disguiseType.isCustom()) {
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, 0, 0);
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, 0);
disguiseValues.setAdultBox(new FakeBoundingBox(0, 0, 0));
@ -1758,7 +1758,7 @@ public class ReflectionManager {
}
}
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(), entitySize,
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(),
bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0);
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity);

View File

@ -328,7 +328,8 @@ public enum LibsMsg {
LD_COMMAND_RELOAD(ChatColor.BLUE + "/libsdisguises reload - " + ChatColor.AQUA +
"Reload's the plugin config and possibly blows disguises"),
LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA +
"Used to help debug scoreboard issues on a player disguise");
"Used to help debug scoreboard issues on a player disguise"),
SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall..");
private final String string;

View File

@ -119,6 +119,9 @@ UndisguiseRadiusMax: 50
# Shall the players view their disguises?
# Best used when viewing yourself in 3rd person
ViewSelfDisguises: true
# Some disguises are rather big and tall and block your vision
# By default those disguises are disabled, such as zombies, players, etc.
HideTallSelfDisguises: true
# Shall I disguise the sounds?
# This turns your damage sound into a MOOOO