Added new config options to keep a disguise
This commit is contained in:
parent
376f18ef95
commit
25df368e9a
@ -56,3 +56,11 @@ MonstersIgnoreDisguises: false
|
|||||||
# This will blow all disguises he has on him
|
# This will blow all disguises he has on him
|
||||||
BlowDisguises: false
|
BlowDisguises: false
|
||||||
BlownDisguiseMessage: '&cYour disguise was blown!'
|
BlownDisguiseMessage: '&cYour disguise was blown!'
|
||||||
|
|
||||||
|
# This I don't really recommend turning on as it can make a memory leak..
|
||||||
|
# These disguises, as normal will not persist after a server restart.
|
||||||
|
# There is also no EntityDeath option as entities do not revive after death.
|
||||||
|
KeepDisguises:
|
||||||
|
PlayerDeath: false
|
||||||
|
PlayerLogout: false
|
||||||
|
EntityDespawn: false
|
@ -9,6 +9,9 @@ public class DisguiseConfig {
|
|||||||
private static boolean hearSelfDisguise;
|
private static boolean hearSelfDisguise;
|
||||||
private static boolean hidingArmor;
|
private static boolean hidingArmor;
|
||||||
private static boolean hidingHeldItem;
|
private static boolean hidingHeldItem;
|
||||||
|
private static boolean keepDisguiseEntityDespawn;
|
||||||
|
private static boolean keepDisguisePlayerDeath;
|
||||||
|
private static boolean keepDisguisePlayerLogout;
|
||||||
private static boolean modifyBoundingBox;
|
private static boolean modifyBoundingBox;
|
||||||
private static boolean removeUnseenDisguises;
|
private static boolean removeUnseenDisguises;
|
||||||
private static boolean sendVelocity;
|
private static boolean sendVelocity;
|
||||||
@ -47,6 +50,18 @@ public class DisguiseConfig {
|
|||||||
return hidingHeldItem;
|
return hidingHeldItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isKeepDisguiseOnEntityDespawn() {
|
||||||
|
return keepDisguiseEntityDespawn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isKeepDisguiseOnPlayerDeath() {
|
||||||
|
return keepDisguisePlayerDeath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isKeepDisguiseOnPlayerLogout() {
|
||||||
|
return keepDisguisePlayerLogout;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isModifyBoundingBox() {
|
public static boolean isModifyBoundingBox() {
|
||||||
return modifyBoundingBox;
|
return modifyBoundingBox;
|
||||||
}
|
}
|
||||||
@ -133,6 +148,18 @@ public class DisguiseConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
||||||
|
keepDisguiseEntityDespawn = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||||
|
keepDisguisePlayerDeath = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setKeepDisguiseOnPlayerLogout(boolean keepDisguise) {
|
||||||
|
keepDisguisePlayerLogout = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
public static void setModifyBoundingBox(boolean modifyBounding) {
|
public static void setModifyBoundingBox(boolean modifyBounding) {
|
||||||
modifyBoundingBox = modifyBounding;
|
modifyBoundingBox = modifyBounding;
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,9 @@ public class LibsDisguises extends JavaPlugin {
|
|||||||
DisguiseConfig.setDisguiseBlownOnAttack(getConfig().getBoolean("BlowDisguises"));
|
DisguiseConfig.setDisguiseBlownOnAttack(getConfig().getBoolean("BlowDisguises"));
|
||||||
DisguiseConfig.setDisguiseBlownMessage(ChatColor.translateAlternateColorCodes('&',
|
DisguiseConfig.setDisguiseBlownMessage(ChatColor.translateAlternateColorCodes('&',
|
||||||
getConfig().getString("BlownDisguiseMessage")));
|
getConfig().getString("BlownDisguiseMessage")));
|
||||||
|
DisguiseConfig.setKeepDisguiseOnPlayerDeath(getConfig().getBoolean("KeepDisguises.PlayerDeath"));
|
||||||
|
DisguiseConfig.setKeepDisguiseOnPlayerLogout(getConfig().getBoolean("KeepDisguises.PlayerLogout"));
|
||||||
|
DisguiseConfig.setKeepDisguiseOnEntityDespawn(getConfig().getBoolean("KeepDisguises.EntityDespawn"));
|
||||||
try {
|
try {
|
||||||
// Here I use reflection to set the plugin for Disguise..
|
// Here I use reflection to set the plugin for Disguise..
|
||||||
// Kind of stupid but I don't want open API calls for a commonly used object.
|
// Kind of stupid but I don't want open API calls for a commonly used object.
|
||||||
|
@ -17,6 +17,7 @@ import me.libraryaddict.disguise.utilities.PacketsManager;
|
|||||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Horse.Variant;
|
import org.bukkit.entity.Horse.Variant;
|
||||||
@ -37,8 +38,10 @@ public abstract class Disguise {
|
|||||||
private boolean hearSelfDisguise = DisguiseConfig.isSelfDisguisesSoundsReplaced();
|
private boolean hearSelfDisguise = DisguiseConfig.isSelfDisguisesSoundsReplaced();
|
||||||
private boolean hideArmorFromSelf = DisguiseConfig.isHidingArmorFromSelf();
|
private boolean hideArmorFromSelf = DisguiseConfig.isHidingArmorFromSelf();
|
||||||
private boolean hideHeldItemFromSelf = DisguiseConfig.isHidingHeldItemFromSelf();
|
private boolean hideHeldItemFromSelf = DisguiseConfig.isHidingHeldItemFromSelf();
|
||||||
|
private boolean keepDisguiseEntityDespawn = DisguiseConfig.isKeepDisguiseOnEntityDespawn();
|
||||||
|
private boolean keepDisguisePlayerDeath = DisguiseConfig.isKeepDisguiseOnPlayerDeath();
|
||||||
|
private boolean keepDisguisePlayerLogout = DisguiseConfig.isKeepDisguiseOnPlayerLogout();
|
||||||
private boolean modifyBoundingBox = DisguiseConfig.isModifyBoundingBox();
|
private boolean modifyBoundingBox = DisguiseConfig.isModifyBoundingBox();
|
||||||
private boolean removeWhenInvalid = true;
|
|
||||||
private boolean replaceSounds = DisguiseConfig.isSoundEnabled();
|
private boolean replaceSounds = DisguiseConfig.isSoundEnabled();
|
||||||
private BukkitRunnable velocityRunnable;
|
private BukkitRunnable velocityRunnable;
|
||||||
private boolean velocitySent = DisguiseConfig.isVelocitySent();
|
private boolean velocitySent = DisguiseConfig.isVelocitySent();
|
||||||
@ -186,7 +189,15 @@ public abstract class Disguise {
|
|||||||
public void run() {
|
public void run() {
|
||||||
// If entity is no longer valid. Remove it.
|
// If entity is no longer valid. Remove it.
|
||||||
if (!getEntity().isValid()) {
|
if (!getEntity().isValid()) {
|
||||||
if (isRemoveWhenInvalid()) {
|
|
||||||
|
if (getEntity() instanceof Player ?
|
||||||
|
|
||||||
|
(Bukkit.getPlayerExact(((Player) getEntity()).getName()) == null ? !isKeepDisguiseOnPlayerLogout()
|
||||||
|
: !isKeepDisguiseOnPlayerDeath())
|
||||||
|
|
||||||
|
:
|
||||||
|
|
||||||
|
(!isKeepDisguiseOnEntityDespawn() || getEntity().isDead())) {
|
||||||
removeDisguise();
|
removeDisguise();
|
||||||
} else {
|
} else {
|
||||||
entity = null;
|
entity = null;
|
||||||
@ -327,6 +338,18 @@ public abstract class Disguise {
|
|||||||
return hideHeldItemFromSelf;
|
return hideHeldItemFromSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isKeepDisguiseOnEntityDespawn() {
|
||||||
|
return this.keepDisguiseEntityDespawn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isKeepDisguiseOnPlayerDeath() {
|
||||||
|
return this.keepDisguisePlayerDeath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isKeepDisguiseOnPlayerLogout() {
|
||||||
|
return this.keepDisguisePlayerLogout;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isMiscDisguise() {
|
public boolean isMiscDisguise() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -343,13 +366,6 @@ public abstract class Disguise {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the disguise removed when the disguised entity is invalid?
|
|
||||||
*/
|
|
||||||
public boolean isRemoveWhenInvalid() {
|
|
||||||
return removeWhenInvalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSelfDisguiseSoundsReplaced() {
|
public boolean isSelfDisguiseSoundsReplaced() {
|
||||||
return hearSelfDisguise;
|
return hearSelfDisguise;
|
||||||
}
|
}
|
||||||
@ -443,6 +459,18 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
||||||
|
this.keepDisguiseEntityDespawn = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||||
|
this.keepDisguisePlayerDeath = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeepDisguiseOnPlayerLogout(boolean keepDisguise) {
|
||||||
|
this.keepDisguisePlayerLogout = keepDisguise;
|
||||||
|
}
|
||||||
|
|
||||||
public void setModifyBoundingBox(boolean modifyBox) {
|
public void setModifyBoundingBox(boolean modifyBox) {
|
||||||
if (((TargetedDisguise) this).getDisguiseTarget() != TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) {
|
if (((TargetedDisguise) this).getDisguiseTarget() != TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
@ -456,10 +484,6 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRemoveDisguiseWhenInvalid(boolean removeWhenInvalid) {
|
|
||||||
this.removeWhenInvalid = removeWhenInvalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReplaceSounds(boolean areSoundsReplaced) {
|
public void setReplaceSounds(boolean areSoundsReplaced) {
|
||||||
replaceSounds = areSoundsReplaced;
|
replaceSounds = areSoundsReplaced;
|
||||||
}
|
}
|
||||||
|
@ -37,20 +37,13 @@ import com.comphenix.protocol.events.PacketContainer;
|
|||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||||
|
|
||||||
public class DisguiseUtilities {
|
public class DisguiseUtilities {
|
||||||
|
private static HashMap<Integer, HashSet<TargetedDisguise>> futureDisguises = new HashMap<Integer, HashSet<TargetedDisguise>>();
|
||||||
private static LibsDisguises libsDisguises;
|
private static LibsDisguises libsDisguises;
|
||||||
// A internal storage of fake entity ID's I can use.
|
// A internal storage of fake entity ID's I can use.
|
||||||
// Realistically I could probably use a ID like "4" for everyone, seeing as no one shares the ID
|
// Realistically I could probably use a ID like "4" for everyone, seeing as no one shares the ID
|
||||||
private static HashMap<UUID, Integer> selfDisguisesIds = new HashMap<UUID, Integer>();
|
private static HashMap<UUID, Integer> selfDisguisesIds = new HashMap<UUID, Integer>();
|
||||||
// Store the entity IDs instead of entitys because then I can disguise entitys even before they exist
|
// Store the entity IDs instead of entitys because then I can disguise entitys even before they exist
|
||||||
private static HashMap<UUID, HashSet<TargetedDisguise>> targetedDisguises = new HashMap<UUID, HashSet<TargetedDisguise>>();
|
private static HashMap<UUID, HashSet<TargetedDisguise>> targetedDisguises = new HashMap<UUID, HashSet<TargetedDisguise>>();
|
||||||
private static HashMap<Integer, HashSet<TargetedDisguise>> futureDisguises = new HashMap<Integer, HashSet<TargetedDisguise>>();
|
|
||||||
|
|
||||||
public static void addFutureDisguise(int entityId, TargetedDisguise disguise) {
|
|
||||||
if (!futureDisguises.containsKey(entityId)) {
|
|
||||||
futureDisguises.put(entityId, new HashSet<TargetedDisguise>());
|
|
||||||
}
|
|
||||||
futureDisguises.get(entityId).add(disguise);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void addDisguise(UUID entityId, TargetedDisguise disguise) {
|
public static void addDisguise(UUID entityId, TargetedDisguise disguise) {
|
||||||
if (!getDisguises().containsKey(entityId)) {
|
if (!getDisguises().containsKey(entityId)) {
|
||||||
@ -63,6 +56,13 @@ public class DisguiseUtilities {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void addFutureDisguise(int entityId, TargetedDisguise disguise) {
|
||||||
|
if (!futureDisguises.containsKey(entityId)) {
|
||||||
|
futureDisguises.put(entityId, new HashSet<TargetedDisguise>());
|
||||||
|
}
|
||||||
|
futureDisguises.get(entityId).add(disguise);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If name isn't null. Make sure that the name doesn't see any other disguise. Else if name is null. Make sure that the
|
* If name isn't null. Make sure that the name doesn't see any other disguise. Else if name is null. Make sure that the
|
||||||
* observers in the disguise don't see any other disguise.
|
* observers in the disguise don't see any other disguise.
|
||||||
|
Loading…
Reference in New Issue
Block a user