Use lombok, add new config options for disabling pvp, pve, action bar when disguised, permission to hide name above head
This commit is contained in:
parent
5f98e57316
commit
ed098752f6
6
pom.xml
6
pom.xml
@ -46,6 +46,12 @@
|
|||||||
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.10</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>ProtocolLib</artifactId>
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package me.libraryaddict.disguise;
|
package me.libraryaddict.disguise;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||||
import me.libraryaddict.disguise.utilities.LibsPremium;
|
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||||
@ -9,130 +12,204 @@ import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
|||||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||||
import org.apache.logging.log4j.core.util.IOUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils;
|
import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.util.FileUtil;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class DisguiseConfig {
|
public class DisguiseConfig {
|
||||||
public enum DisguisePushing { // This enum has a really bad name..
|
@Getter
|
||||||
MODIFY_SCOREBOARD,
|
@Setter
|
||||||
IGNORE_SCOREBOARD,
|
private static DisguisePushing pushingOption = DisguisePushing.MODIFY_SCOREBOARD;
|
||||||
CREATE_SCOREBOARD
|
@Getter
|
||||||
}
|
@Setter
|
||||||
|
|
||||||
public enum UpdatesBranch {
|
|
||||||
SAME_BUILDS,
|
|
||||||
SNAPSHOTS,
|
|
||||||
RELEASES
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean animationEnabled;
|
|
||||||
private static boolean blowDisguisesWhenAttacking;
|
|
||||||
private static boolean blowDisguisesWhenAttacked;
|
|
||||||
private static boolean collectEnabled;
|
|
||||||
private static boolean colorizeSheep;
|
|
||||||
private static boolean colorizeWolf;
|
|
||||||
private static boolean colorizeCat;
|
|
||||||
private static boolean saddleableHorse;
|
|
||||||
private static boolean carpetableLlama;
|
|
||||||
private static HashMap<DisguisePerm, String> customDisguises = new HashMap<>();
|
private static HashMap<DisguisePerm, String> customDisguises = new HashMap<>();
|
||||||
private static boolean disableInvisibility;
|
@Getter
|
||||||
private static int disguiseCloneExpire;
|
@Setter
|
||||||
private static int disguiseEntityExpire;
|
|
||||||
private static boolean displayPlayerDisguisesInTab;
|
|
||||||
private static boolean entityAnimationsAdded;
|
|
||||||
private static boolean entityStatusEnabled;
|
|
||||||
private static boolean equipmentEnabled;
|
|
||||||
private static boolean hearSelfDisguise;
|
|
||||||
private static boolean hideDisguisedPlayers;
|
|
||||||
private static boolean hidingArmor;
|
|
||||||
private static boolean hidingHeldItem;
|
|
||||||
private static boolean keepDisguisePlayerDeath;
|
|
||||||
private static int maxClonedDisguises;
|
|
||||||
private static boolean maxHealthIsDisguisedEntity;
|
|
||||||
private static boolean miscDisguisesForLivingEnabled;
|
|
||||||
private static boolean modifyBoundingBox;
|
|
||||||
private static boolean movementEnabled;
|
|
||||||
private static boolean sendsEntityMetadata;
|
|
||||||
private static boolean sendVelocity;
|
|
||||||
private static boolean showNameAboveHead;
|
|
||||||
private static boolean showNameAboveHeadAlwaysVisible;
|
|
||||||
private static boolean stopShulkerDisguisesFromMoving;
|
|
||||||
private static boolean targetDisguises;
|
|
||||||
private static boolean undisguiseSwitchWorlds;
|
|
||||||
private static String updateNotificationPermission;
|
private static String updateNotificationPermission;
|
||||||
private static boolean viewSelfDisguise;
|
@Getter
|
||||||
private static boolean witherSkullEnabled;
|
@Setter
|
||||||
private static DisguisePushing disablePushing = DisguisePushing.MODIFY_SCOREBOARD;
|
|
||||||
private static boolean saveCache;
|
|
||||||
private static boolean updatePlayerCache;
|
|
||||||
private static boolean savePlayerDisguises;
|
|
||||||
private static boolean saveEntityDisguises;
|
|
||||||
private static boolean useTranslations;
|
|
||||||
private static boolean modifyCollisions;
|
|
||||||
private static boolean disableFriendlyInvisibles;
|
|
||||||
private static boolean warnScoreboardConflict;
|
|
||||||
private static boolean explicitDisguisePermissions;
|
|
||||||
private static boolean disableCommands;
|
|
||||||
private static int uuidGeneratedVersion;
|
|
||||||
private static UpdatesBranch updatesBranch = UpdatesBranch.SAME_BUILDS;
|
private static UpdatesBranch updatesBranch = UpdatesBranch.SAME_BUILDS;
|
||||||
private static int playerDisguisesTablistExpires;
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean addEntityAnimations;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean animationPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean catDyeable;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean collectPacketsEnabled;
|
||||||
|
/**
|
||||||
|
* No setter provided as this cannot be changed after startup
|
||||||
|
*/
|
||||||
|
@Setter(value = AccessLevel.PRIVATE)
|
||||||
|
@Getter
|
||||||
|
private static boolean disableCommands;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disableFriendlyInvisibles;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disabledInvisibility;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disguiseBlownWhenAttacked;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disguiseBlownWhenAttacking;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
private static boolean dynamicExpiry;
|
private static boolean dynamicExpiry;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean entityStatusPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean equipmentPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean explicitDisguisePermissions;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean extendedDisguiseNames;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean hideDisguisedPlayers;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean hidingArmorFromSelf;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean hidingHeldItemFromSelf;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean horseSaddleable;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean keepDisguiseOnPlayerDeath;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean llamaCarpetable;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean maxHealthDeterminedByDisguisedEntity;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean metaPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean miscDisguisesForLivingEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean modifyBoundingBox;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean modifyCollisions;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean monstersIgnoreDisguises;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean movementPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean nameAboveHeadAlwaysVisible;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean nameOfPlayerShownAboveDisguise;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
private static boolean playerHideArmor;
|
private static boolean playerHideArmor;
|
||||||
private static boolean extendedDisguisesNames;
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean saveEntityDisguises;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean saveGameProfiles;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean savePlayerDisguises;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean selfDisguisesSoundsReplaced;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean sheepDyeable;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean showDisguisedPlayersInTab;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean stopShulkerDisguisesFromMoving;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean undisguiseOnWorldChange;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean updateGameProfiles;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean useTranslations;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean velocitySent;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean viewDisguises;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean warnScoreboardConflict;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean witherSkullPacketsEnabled;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean wolfDyeable;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static int disguiseCloneExpire;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static int disguiseEntityExpire;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static int maxClonedDisguises;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static int playerDisguisesTablistExpires;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static int uuidGeneratedVersion;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disablePvP;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean disablePvE;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static double pvPTimer;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean retaliationCombat;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private static boolean actionBarDisguised;
|
||||||
|
|
||||||
public static boolean isExtendedDisguiseNames() {
|
private DisguiseConfig() {
|
||||||
return extendedDisguisesNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setExtendedDisguiseNames(boolean extendedDisguiseNames) {
|
|
||||||
extendedDisguisesNames = extendedDisguiseNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isPlayerHideArmor() {
|
|
||||||
return playerHideArmor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setPlayerHideArmor(boolean playerHiddenArmor) {
|
|
||||||
playerHideArmor = playerHiddenArmor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDynamicExpiry() {
|
|
||||||
return dynamicExpiry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDynamicExpiry(boolean setDynamicExpiry) {
|
|
||||||
dynamicExpiry = setDynamicExpiry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getPlayerDisguisesTablistExpires() {
|
|
||||||
return playerDisguisesTablistExpires;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setPlayerDisguisesTablistExpires(int playerDisguisesTablistExpiresTicks) {
|
|
||||||
playerDisguisesTablistExpires = playerDisguisesTablistExpiresTicks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UpdatesBranch getUpdatesBranch() {
|
|
||||||
return updatesBranch;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpdatesBranch(UpdatesBranch newBranch) {
|
|
||||||
updatesBranch = newBranch;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getUUIDGeneratedVersion() {
|
public static int getUUIDGeneratedVersion() {
|
||||||
@ -143,21 +220,6 @@ public class DisguiseConfig {
|
|||||||
uuidGeneratedVersion = uuidVersion;
|
uuidGeneratedVersion = uuidVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* No setter provided as this cannot be changed after startup
|
|
||||||
*/
|
|
||||||
public static boolean isDisableCommands() {
|
|
||||||
return disableCommands;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isExplicitDisguisePermissions() {
|
|
||||||
return explicitDisguisePermissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setExplicitDisguisePermissions(boolean explictDisguisePermission) {
|
|
||||||
explicitDisguisePermissions = explictDisguisePermission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Entry<DisguisePerm, Disguise> getCustomDisguise(String disguise) {
|
public static Entry<DisguisePerm, Disguise> getCustomDisguise(String disguise) {
|
||||||
Entry<DisguisePerm, String> entry = getRawCustomDisguise(disguise);
|
Entry<DisguisePerm, String> entry = getRawCustomDisguise(disguise);
|
||||||
|
|
||||||
@ -224,96 +286,12 @@ public class DisguiseConfig {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWarnScoreboardConflict() {
|
|
||||||
return warnScoreboardConflict;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setWarnScoreboardConflict(boolean warnConflict) {
|
|
||||||
warnScoreboardConflict = warnConflict;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isModifyCollisions() {
|
|
||||||
return modifyCollisions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDisableFriendlyInvisibles() {
|
|
||||||
return disableFriendlyInvisibles;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setModifyCollisions(boolean isModifyCollisions) {
|
|
||||||
modifyCollisions = isModifyCollisions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDisableFriendlyInvisibles(boolean isDisableFriendlyInvisibles) {
|
|
||||||
disableFriendlyInvisibles = isDisableFriendlyInvisibles;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSavePlayerDisguises() {
|
|
||||||
return savePlayerDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isUseTranslations() {
|
|
||||||
return useTranslations;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUseTranslations(boolean setUseTranslations) {
|
public static void setUseTranslations(boolean setUseTranslations) {
|
||||||
useTranslations = setUseTranslations;
|
useTranslations = setUseTranslations;
|
||||||
|
|
||||||
TranslateType.refreshTranslations();
|
TranslateType.refreshTranslations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSaveEntityDisguises() {
|
|
||||||
return saveEntityDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSavePlayerDisguises(boolean saveDisguises) {
|
|
||||||
savePlayerDisguises = saveDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSaveEntityDisguises(boolean saveDisguises) {
|
|
||||||
saveEntityDisguises = saveDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DisguisePushing getPushingOption() {
|
|
||||||
return disablePushing;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashMap<DisguisePerm, String> getCustomDisguises() {
|
|
||||||
return customDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getDisguiseCloneExpire() {
|
|
||||||
return disguiseCloneExpire;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getDisguiseEntityExpire() {
|
|
||||||
return disguiseEntityExpire;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getMaxClonedDisguises() {
|
|
||||||
return maxClonedDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getUpdateNotificationPermission() {
|
|
||||||
return updateNotificationPermission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSaveGameProfiles() {
|
|
||||||
return saveCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSaveGameProfiles(boolean doCache) {
|
|
||||||
saveCache = doCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isUpdateGameProfiles() {
|
|
||||||
return updatePlayerCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpdateGameProfiles(boolean setUpdatePlayerCache) {
|
|
||||||
updatePlayerCache = setUpdatePlayerCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void loadConfig() {
|
public static void loadConfig() {
|
||||||
// Always save the default config
|
// Always save the default config
|
||||||
LibsDisguises.getInstance().saveDefaultConfig();
|
LibsDisguises.getInstance().saveDefaultConfig();
|
||||||
@ -341,63 +319,67 @@ public class DisguiseConfig {
|
|||||||
|
|
||||||
ConfigurationSection config = LibsDisguises.getInstance().getConfig();
|
ConfigurationSection config = LibsDisguises.getInstance().getConfig();
|
||||||
|
|
||||||
setSoundsEnabled(config.getBoolean("DisguiseSounds"));
|
|
||||||
setVelocitySent(config.getBoolean("SendVelocity"));
|
|
||||||
setViewDisguises(
|
|
||||||
config.getBoolean("ViewSelfDisguises")); // Since we can now toggle, the view disguises listener must
|
|
||||||
// always be on
|
|
||||||
PacketsManager.setViewDisguisesListener(true);
|
PacketsManager.setViewDisguisesListener(true);
|
||||||
setHearSelfDisguise(config.getBoolean("HearSelfDisguise"));
|
disableCommands = config.getBoolean("DisableCommands");
|
||||||
setHideArmorFromSelf(config.getBoolean("RemoveArmor"));
|
|
||||||
setHideHeldItemFromSelf(config.getBoolean("RemoveHeldItem"));
|
|
||||||
setAddEntityAnimations(config.getBoolean("AddEntityAnimations"));
|
setAddEntityAnimations(config.getBoolean("AddEntityAnimations"));
|
||||||
setNameOfPlayerShownAboveDisguise(config.getBoolean("ShowNamesAboveDisguises"));
|
setAnimationPacketsEnabled(config.getBoolean("PacketsEnabled.Animation"));
|
||||||
setNameAboveHeadAlwaysVisible(config.getBoolean("NameAboveHeadAlwaysVisible"));
|
setCatDyeable(config.getBoolean("DyeableCat"));
|
||||||
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
|
setCollectPacketsEnabled(config.getBoolean("PacketsEnabled.Collect"));
|
||||||
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
|
setDisableFriendlyInvisibles(config.getBoolean("Scoreboard.DisableFriendlyInvisibles"));
|
||||||
setDisguiseBlownWhenAttacking(
|
setDisabledInvisibility(config.getBoolean("DisableInvisibility"));
|
||||||
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
setDisablePvP(config.getBoolean("DisablePvP"));
|
||||||
|
setDisablePvE(config.getBoolean("DisablePvE"));
|
||||||
|
setPvPTimer(config.getDouble("PvPTimer"));
|
||||||
setDisguiseBlownWhenAttacked(
|
setDisguiseBlownWhenAttacked(
|
||||||
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacked")));
|
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacked")));
|
||||||
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
|
setDisguiseBlownWhenAttacking(
|
||||||
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
|
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
||||||
setMovementPacketsEnabled(config.getBoolean("PacketsEnabled.Movement"));
|
|
||||||
setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull"));
|
|
||||||
setEquipmentPacketsEnabled(config.getBoolean("PacketsEnabled.Equipment"));
|
|
||||||
setAnimationPacketsEnabled(config.getBoolean("PacketsEnabled.Animation"));
|
|
||||||
setEntityStatusPacketsEnabled(config.getBoolean("PacketsEnabled.EntityStatus"));
|
|
||||||
setCollectPacketsEnabled(config.getBoolean("PacketsEnabled.Collect"));
|
|
||||||
setMetadataPacketsEnabled(config.getBoolean("PacketsEnabled.Metadata"));
|
|
||||||
setMaxHealthDeterminedByDisguisedEntity(config.getBoolean("MaxHealthDeterminedByEntity"));
|
|
||||||
setDisguiseEntityExpire(config.getInt("DisguiseEntityExpire"));
|
|
||||||
setDisguiseCloneExpire(config.getInt("DisguiseCloneExpire"));
|
setDisguiseCloneExpire(config.getInt("DisguiseCloneExpire"));
|
||||||
setMaxClonedDisguises(config.getInt("DisguiseCloneSize"));
|
setDisguiseEntityExpire(config.getInt("DisguiseEntityExpire"));
|
||||||
setSheepDyeable(config.getBoolean("DyeableSheep"));
|
|
||||||
setWolfDyeable(config.getBoolean("DyeableWolf"));
|
|
||||||
setCatDyeable(config.getBoolean("DyeableCat"));
|
|
||||||
setHorseSaddleable(config.getBoolean("SaddleableHorse"));
|
|
||||||
setLlamaCarpetable(config.getBoolean("CarpetableLlama"));
|
|
||||||
setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange"));
|
|
||||||
setUpdateNotificationPermission(config.getString("Permission"));
|
|
||||||
setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true));
|
|
||||||
setHideDisguisedPlayers(config.getBoolean("HideDisguisedPlayersFromTab"));
|
|
||||||
setShowDisguisedPlayersInTab(config.getBoolean("ShowPlayerDisguisesInTab"));
|
|
||||||
setDisabledInvisibility(config.getBoolean("DisableInvisibility"));
|
|
||||||
setSaveGameProfiles(config.getBoolean("SaveGameProfiles"));
|
|
||||||
setUpdateGameProfiles(config.getBoolean("UpdateGameProfiles"));
|
|
||||||
setSavePlayerDisguises(config.getBoolean("SaveDisguises.Players"));
|
|
||||||
setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities"));
|
|
||||||
setUseTranslations(config.getBoolean("Translations"));
|
|
||||||
setModifyCollisions(config.getBoolean("Scoreboard.Collisions"));
|
|
||||||
setDisableFriendlyInvisibles(config.getBoolean("Scoreboard.DisableFriendlyInvisibles"));
|
|
||||||
setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict"));
|
|
||||||
disableCommands = config.getBoolean("DisableCommands");
|
|
||||||
setExplicitDisguisePermissions(config.getBoolean("Permissions.ExplicitDisguises"));
|
|
||||||
setUUIDGeneratedVersion(config.getInt("UUIDVersion"));
|
|
||||||
setPlayerDisguisesTablistExpires(config.getInt("PlayerDisguisesTablistExpires"));
|
|
||||||
setDynamicExpiry(config.getBoolean("DynamicExpiry"));
|
setDynamicExpiry(config.getBoolean("DynamicExpiry"));
|
||||||
setPlayerHideArmor(config.getBoolean("PlayerHideArmor"));
|
setEntityStatusPacketsEnabled(config.getBoolean("PacketsEnabled.EntityStatus"));
|
||||||
|
setEquipmentPacketsEnabled(config.getBoolean("PacketsEnabled.Equipment"));
|
||||||
|
setExplicitDisguisePermissions(config.getBoolean("Permissions.ExplicitDisguises"));
|
||||||
setExtendedDisguiseNames(config.getBoolean("ExtendedNames"));
|
setExtendedDisguiseNames(config.getBoolean("ExtendedNames"));
|
||||||
|
setHideArmorFromSelf(config.getBoolean("RemoveArmor"));
|
||||||
|
setHideDisguisedPlayers(config.getBoolean("HideDisguisedPlayersFromTab"));
|
||||||
|
setHideHeldItemFromSelf(config.getBoolean("RemoveHeldItem"));
|
||||||
|
setHorseSaddleable(config.getBoolean("SaddleableHorse"));
|
||||||
|
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
|
||||||
|
setLlamaCarpetable(config.getBoolean("CarpetableLlama"));
|
||||||
|
setMaxClonedDisguises(config.getInt("DisguiseCloneSize"));
|
||||||
|
setMaxHealthDeterminedByDisguisedEntity(config.getBoolean("MaxHealthDeterminedByEntity"));
|
||||||
|
setMetaPacketsEnabled(config.getBoolean("PacketsEnabled.Metadata"));
|
||||||
|
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
|
||||||
|
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
|
||||||
|
setModifyCollisions(config.getBoolean("Scoreboard.Collisions"));
|
||||||
|
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
|
||||||
|
setMovementPacketsEnabled(config.getBoolean("PacketsEnabled.Movement"));
|
||||||
|
setNameAboveHeadAlwaysVisible(config.getBoolean("NameAboveHeadAlwaysVisible"));
|
||||||
|
setNameOfPlayerShownAboveDisguise(config.getBoolean("ShowNamesAboveDisguises"));
|
||||||
|
setActionBarDisguised(config.getBoolean("ActionBarDisguised"));
|
||||||
|
setPlayerDisguisesTablistExpires(config.getInt("PlayerDisguisesTablistExpires"));
|
||||||
|
setPlayerHideArmor(config.getBoolean("PlayerHideArmor"));
|
||||||
|
setRetaliationCombat(config.getBoolean("RetaliationCombat"));
|
||||||
|
setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities"));
|
||||||
|
setSaveGameProfiles(config.getBoolean("SaveGameProfiles"));
|
||||||
|
setSavePlayerDisguises(config.getBoolean("SaveDisguises.Players"));
|
||||||
|
setSelfDisguisesSoundsReplaced(config.getBoolean("HearSelfDisguise"));
|
||||||
|
setSheepDyeable(config.getBoolean("DyeableSheep"));
|
||||||
|
setShowDisguisedPlayersInTab(config.getBoolean("ShowPlayerDisguisesInTab"));
|
||||||
|
setSoundsEnabled(config.getBoolean("DisguiseSounds"));
|
||||||
|
setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true));
|
||||||
|
setUUIDGeneratedVersion(config.getInt("UUIDVersion"));
|
||||||
|
setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange"));
|
||||||
|
setUpdateGameProfiles(config.getBoolean("UpdateGameProfiles"));
|
||||||
|
setUpdateNotificationPermission(config.getString("Permission"));
|
||||||
|
setUseTranslations(config.getBoolean("Translations"));
|
||||||
|
setVelocitySent(config.getBoolean("SendVelocity"));
|
||||||
|
setViewDisguises(config.getBoolean("ViewSelfDisguises"));
|
||||||
|
setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict"));
|
||||||
|
setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull"));
|
||||||
|
setWolfDyeable(config.getBoolean("DyeableWolf"));
|
||||||
|
|
||||||
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
|
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
|
||||||
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");
|
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");
|
||||||
@ -418,7 +400,7 @@ public class DisguiseConfig {
|
|||||||
if (!option.endsWith("_SCOREBOARD"))
|
if (!option.endsWith("_SCOREBOARD"))
|
||||||
option += "_SCOREBOARD";
|
option += "_SCOREBOARD";
|
||||||
|
|
||||||
disablePushing = DisguisePushing.valueOf(option);
|
pushingOption = DisguisePushing.valueOf(option);
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
DisguiseUtilities.getLogger().warning("Cannot parse '" + config.getString("SelfDisguisesScoreboard") +
|
DisguiseUtilities.getLogger().warning("Cannot parse '" + config.getString("SelfDisguisesScoreboard") +
|
||||||
@ -532,106 +514,6 @@ public class DisguiseConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAnimationPacketsEnabled() {
|
|
||||||
return animationEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isCollectPacketsEnabled() {
|
|
||||||
return collectEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDisabledInvisibility() {
|
|
||||||
return disableInvisibility;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDisguiseBlownWhenAttacking() {
|
|
||||||
return blowDisguisesWhenAttacking;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDisguiseBlownWhenAttacked() {
|
|
||||||
return blowDisguisesWhenAttacked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEntityAnimationsAdded() {
|
|
||||||
return entityAnimationsAdded;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEntityStatusPacketsEnabled() {
|
|
||||||
return entityStatusEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEquipmentPacketsEnabled() {
|
|
||||||
return equipmentEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isHideDisguisedPlayers() {
|
|
||||||
return hideDisguisedPlayers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the plugin modifying the inventory packets so that players when self disguised, do not see their armor
|
|
||||||
* floating around
|
|
||||||
*/
|
|
||||||
public static boolean isHidingArmorFromSelf() {
|
|
||||||
return hidingArmor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing
|
|
||||||
* self disguise
|
|
||||||
*/
|
|
||||||
public static boolean isHidingHeldItemFromSelf() {
|
|
||||||
return hidingHeldItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isKeepDisguiseOnPlayerDeath() {
|
|
||||||
return keepDisguisePlayerDeath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMaxHealthDeterminedByDisguisedEntity() {
|
|
||||||
return maxHealthIsDisguisedEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMetadataPacketsEnabled() {
|
|
||||||
return sendsEntityMetadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMiscDisguisesForLivingEnabled() {
|
|
||||||
return miscDisguisesForLivingEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isModifyBoundingBox() {
|
|
||||||
return modifyBoundingBox;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMonstersIgnoreDisguises() {
|
|
||||||
return targetDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMovementPacketsEnabled() {
|
|
||||||
return movementEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isNameAboveHeadAlwaysVisible() {
|
|
||||||
return showNameAboveHeadAlwaysVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isNameOfPlayerShownAboveDisguise() {
|
|
||||||
return showNameAboveHead;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSelfDisguisesSoundsReplaced() {
|
|
||||||
return hearSelfDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSheepDyeable() {
|
|
||||||
return colorizeSheep;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isShowDisguisedPlayersInTab() {
|
|
||||||
return displayPlayerDisguisesInTab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the sound packets caught and modified
|
* Is the sound packets caught and modified
|
||||||
*/
|
*/
|
||||||
@ -639,47 +521,9 @@ public class DisguiseConfig {
|
|||||||
return PacketsManager.isHearDisguisesEnabled();
|
return PacketsManager.isHearDisguisesEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isStopShulkerDisguisesFromMoving() {
|
|
||||||
return stopShulkerDisguisesFromMoving;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isUndisguiseOnWorldChange() {
|
|
||||||
return undisguiseSwitchWorlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the velocity packets sent
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static boolean isVelocitySent() {
|
|
||||||
return sendVelocity;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The default value if a player views his own disguise
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static boolean isViewDisguises() {
|
|
||||||
return viewSelfDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isWitherSkullPacketsEnabled() {
|
|
||||||
return witherSkullEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isWolfDyeable() {
|
|
||||||
return colorizeWolf;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setAddEntityAnimations(boolean isEntityAnimationsAdded) {
|
|
||||||
entityAnimationsAdded = isEntityAnimationsAdded;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setAnimationPacketsEnabled(boolean enabled) {
|
public static void setAnimationPacketsEnabled(boolean enabled) {
|
||||||
if (enabled != isAnimationPacketsEnabled()) {
|
if (enabled != isAnimationPacketsEnabled()) {
|
||||||
animationEnabled = enabled;
|
animationPacketsEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
@ -687,35 +531,15 @@ public class DisguiseConfig {
|
|||||||
|
|
||||||
public static void setCollectPacketsEnabled(boolean enabled) {
|
public static void setCollectPacketsEnabled(boolean enabled) {
|
||||||
if (enabled != isCollectPacketsEnabled()) {
|
if (enabled != isCollectPacketsEnabled()) {
|
||||||
collectEnabled = enabled;
|
collectPacketsEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisabledInvisibility(boolean disableInvis) {
|
|
||||||
disableInvisibility = disableInvis;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDisguiseBlownWhenAttacking(boolean blowDisguise) {
|
|
||||||
blowDisguisesWhenAttacking = blowDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDisguiseBlownWhenAttacked(boolean blowDisguise) {
|
|
||||||
blowDisguisesWhenAttacked = blowDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDisguiseCloneExpire(int newExpires) {
|
|
||||||
disguiseCloneExpire = newExpires;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDisguiseEntityExpire(int newExpires) {
|
|
||||||
disguiseEntityExpire = newExpires;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setEntityStatusPacketsEnabled(boolean enabled) {
|
public static void setEntityStatusPacketsEnabled(boolean enabled) {
|
||||||
if (enabled != isEntityStatusPacketsEnabled()) {
|
if (enabled != isEntityStatusPacketsEnabled()) {
|
||||||
entityStatusEnabled = enabled;
|
entityStatusPacketsEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
@ -723,64 +547,35 @@ public class DisguiseConfig {
|
|||||||
|
|
||||||
public static void setEquipmentPacketsEnabled(boolean enabled) {
|
public static void setEquipmentPacketsEnabled(boolean enabled) {
|
||||||
if (enabled != isEquipmentPacketsEnabled()) {
|
if (enabled != isEquipmentPacketsEnabled()) {
|
||||||
equipmentEnabled = enabled;
|
equipmentPacketsEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Can players hear their own disguises
|
|
||||||
*/
|
|
||||||
public static void setHearSelfDisguise(boolean replaceSound) {
|
|
||||||
if (hearSelfDisguise != replaceSound) {
|
|
||||||
hearSelfDisguise = replaceSound;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the plugin to hide self disguises armor from theirselves
|
* Set the plugin to hide self disguises armor from theirselves
|
||||||
*/
|
*/
|
||||||
public static void setHideArmorFromSelf(boolean hideArmor) {
|
public static void setHideArmorFromSelf(boolean hideArmor) {
|
||||||
if (hidingArmor != hideArmor) {
|
if (hidingArmorFromSelf != hideArmor) {
|
||||||
hidingArmor = hideArmor;
|
hidingArmorFromSelf = hideArmor;
|
||||||
|
|
||||||
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setHideDisguisedPlayers(boolean hideDisguisedPlayersInTab) {
|
|
||||||
hideDisguisedPlayers = hideDisguisedPlayersInTab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing
|
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing
|
||||||
* self disguise
|
* self disguise
|
||||||
*/
|
*/
|
||||||
public static void setHideHeldItemFromSelf(boolean hideHelditem) {
|
public static void setHideHeldItemFromSelf(boolean hideHelditem) {
|
||||||
if (hidingHeldItem != hideHelditem) {
|
if (hidingHeldItemFromSelf != hideHelditem) {
|
||||||
hidingHeldItem = hideHelditem;
|
hidingHeldItemFromSelf = hideHelditem;
|
||||||
|
|
||||||
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
|
||||||
keepDisguisePlayerDeath = keepDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMaxClonedDisguises(int newMax) {
|
|
||||||
maxClonedDisguises = newMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMaxHealthDeterminedByDisguisedEntity(boolean isDetermined) {
|
|
||||||
maxHealthIsDisguisedEntity = isDetermined;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMetadataPacketsEnabled(boolean enabled) {
|
|
||||||
sendsEntityMetadata = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMiscDisguisesForLivingEnabled(boolean enabled) {
|
public static void setMiscDisguisesForLivingEnabled(boolean enabled) {
|
||||||
if (enabled != isMiscDisguisesForLivingEnabled()) {
|
if (enabled != isMiscDisguisesForLivingEnabled()) {
|
||||||
miscDisguisesForLivingEnabled = enabled;
|
miscDisguisesForLivingEnabled = enabled;
|
||||||
@ -789,38 +584,14 @@ public class DisguiseConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setModifyBoundingBox(boolean modifyBounding) {
|
|
||||||
modifyBoundingBox = modifyBounding;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMonstersIgnoreDisguises(boolean ignore) {
|
|
||||||
targetDisguises = ignore;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMovementPacketsEnabled(boolean enabled) {
|
public static void setMovementPacketsEnabled(boolean enabled) {
|
||||||
if (enabled != isMovementPacketsEnabled()) {
|
if (enabled != isMovementPacketsEnabled()) {
|
||||||
movementEnabled = enabled;
|
movementPacketsEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setNameAboveHeadAlwaysVisible(boolean alwaysVisible) {
|
|
||||||
showNameAboveHeadAlwaysVisible = alwaysVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setNameOfPlayerShownAboveDisguise(boolean showNames) {
|
|
||||||
showNameAboveHead = showNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSheepDyeable(boolean color) {
|
|
||||||
colorizeSheep = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setShowDisguisedPlayersInTab(boolean displayPlayerDisguisesInTablist) {
|
|
||||||
displayPlayerDisguisesInTab = displayPlayerDisguisesInTablist;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set if the disguises play sounds when hurt
|
* Set if the disguises play sounds when hurt
|
||||||
*/
|
*/
|
||||||
@ -828,63 +599,15 @@ public class DisguiseConfig {
|
|||||||
PacketsManager.setHearDisguisesListener(isSoundsEnabled);
|
PacketsManager.setHearDisguisesListener(isSoundsEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setStopShulkerDisguisesFromMoving(boolean stopShulkerDisguisesFromMoving) {
|
public enum DisguisePushing { // This enum has a really bad name..
|
||||||
DisguiseConfig.stopShulkerDisguisesFromMoving = stopShulkerDisguisesFromMoving;
|
MODIFY_SCOREBOARD,
|
||||||
|
IGNORE_SCOREBOARD,
|
||||||
|
CREATE_SCOREBOARD
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUndisguiseOnWorldChange(boolean isUndisguise) {
|
public enum UpdatesBranch {
|
||||||
undisguiseSwitchWorlds = isUndisguise;
|
SAME_BUILDS,
|
||||||
}
|
SNAPSHOTS,
|
||||||
|
RELEASES
|
||||||
public static void setUpdateNotificationPermission(String newPermission) {
|
|
||||||
updateNotificationPermission = newPermission;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disable velocity packets being sent for w/e reason. Maybe you want every ounce of performance you can get?
|
|
||||||
*
|
|
||||||
* @param sendVelocityPackets
|
|
||||||
*/
|
|
||||||
public static void setVelocitySent(boolean sendVelocityPackets) {
|
|
||||||
sendVelocity = sendVelocityPackets;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setViewDisguises(boolean seeOwnDisguise) {
|
|
||||||
viewSelfDisguise = seeOwnDisguise;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setWitherSkullPacketsEnabled(boolean enabled) {
|
|
||||||
witherSkullEnabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setWolfDyeable(boolean color) {
|
|
||||||
colorizeWolf = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setCatDyeable(boolean color) {
|
|
||||||
colorizeCat = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isCatDyeable() {
|
|
||||||
return colorizeCat;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setHorseSaddleable(boolean saddle) {
|
|
||||||
saddleableHorse = saddle;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isHorseSaddleable() {
|
|
||||||
return saddleableHorse;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setLlamaCarpetable(boolean carpet) {
|
|
||||||
carpetableLlama = carpet;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isLlamaCarpetable() {
|
|
||||||
return carpetableLlama;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DisguiseConfig() {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
|||||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -27,6 +28,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -39,6 +41,7 @@ import org.bukkit.event.world.ChunkLoadEvent;
|
|||||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||||
import org.bukkit.event.world.WorldLoadEvent;
|
import org.bukkit.event.world.WorldLoadEvent;
|
||||||
import org.bukkit.event.world.WorldUnloadEvent;
|
import org.bukkit.event.world.WorldUnloadEvent;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
@ -194,12 +197,81 @@ public class DisguiseListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void onAttack(EntityDamageByEntityEvent event) {
|
public void onAttack(EntityDamageByEntityEvent event) {
|
||||||
if (DisguiseConfig.isDisguiseBlownWhenAttacked() && event.getEntity() instanceof Player) {
|
if (event.getEntity() instanceof Player) {
|
||||||
|
if (DisguiseConfig.isDisguiseBlownWhenAttacked()) {
|
||||||
checkPlayerCanBlowDisguise((Player) event.getEntity());
|
checkPlayerCanBlowDisguise((Player) event.getEntity());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isDisguiseBlownWhenAttacking() && event.getDamager() instanceof Player) {
|
Entity attacker = event.getDamager();
|
||||||
checkPlayerCanBlowDisguise((Player) event.getDamager());
|
|
||||||
|
if (attacker instanceof Projectile && ((Projectile) attacker).getShooter() instanceof Player) {
|
||||||
|
attacker = (Entity) ((Projectile) attacker).getShooter();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkPlayerCanFight(event, attacker);
|
||||||
|
|
||||||
|
if (attacker instanceof Player) {
|
||||||
|
if (DisguiseConfig.isDisguiseBlownWhenAttacking()) {
|
||||||
|
checkPlayerCanBlowDisguise((Player) attacker);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canRetaliate(Entity entity) {
|
||||||
|
return entity.hasMetadata("LD-LastAttacked") &&
|
||||||
|
entity.getMetadata("LD-LastAttacked").get(0).asLong() + (DisguiseConfig.getPvPTimer() * 1000) >
|
||||||
|
System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setRetaliation(Entity entity) {
|
||||||
|
entity.removeMetadata("LD-LastAttacked", LibsDisguises.getInstance());
|
||||||
|
entity.setMetadata("LD-LastAttacked",
|
||||||
|
new FixedMetadataValue(LibsDisguises.getInstance(), System.currentTimeMillis()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkPlayerCanFight(EntityDamageByEntityEvent event, Entity attacker) {
|
||||||
|
// If both are players, check if allowed pvp, else if allowed pve
|
||||||
|
boolean pvp = attacker instanceof Player && event.getEntity() instanceof Player;
|
||||||
|
|
||||||
|
if (pvp ? !DisguiseConfig.isDisablePvP() : !DisguiseConfig.isDisablePvE()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!attacker.hasPermission("libsdisguises." + (pvp ? "pvp" : "pve")) &&
|
||||||
|
!attacker.hasPermission("libsdisguises." + (pvp ? "pvp" : "pve"))) {
|
||||||
|
if (!DisguiseConfig.isRetaliationCombat() || !canRetaliate(event.getEntity())) {
|
||||||
|
Disguise[] disguises = DisguiseAPI.getDisguises(attacker);
|
||||||
|
|
||||||
|
if (disguises.length > 0) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
String cantAttack = LibsMsg.CANT_ATTACK_DISGUISED.get();
|
||||||
|
|
||||||
|
if (cantAttack.length() > 0) {
|
||||||
|
attacker.sendMessage(cantAttack);
|
||||||
|
}
|
||||||
|
} else if (DisguiseConfig.getPvPTimer() > 0 && attacker.hasMetadata("LastDisguise")) {
|
||||||
|
long lastDisguised = attacker.getMetadata("LastDisguise").get(0).asLong();
|
||||||
|
|
||||||
|
if (lastDisguised + DisguiseConfig.getPvPTimer() * 1000 > System.currentTimeMillis()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
String cantAttack = LibsMsg.CANT_ATTACK_DISGUISED_RECENTLY.get();
|
||||||
|
|
||||||
|
if (cantAttack.length() > 0) {
|
||||||
|
attacker.sendMessage(cantAttack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.isCancelled() && DisguiseConfig.isRetaliationCombat()) {
|
||||||
|
if (canRetaliate(event.getEntity())) {
|
||||||
|
setRetaliation(event.getEntity());
|
||||||
|
setRetaliation(attacker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,7 +529,8 @@ public class DisguiseListener implements Listener {
|
|||||||
entity instanceof LivingEntity) {
|
entity instanceof LivingEntity) {
|
||||||
p.sendMessage(LibsMsg.DISABLED_LIVING_TO_MISC.get());
|
p.sendMessage(LibsMsg.DISABLED_LIVING_TO_MISC.get());
|
||||||
} else {
|
} else {
|
||||||
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise() &&
|
||||||
|
!entity.hasPermission("libsdisguises.hidename")) {
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
Team team = ((Player) entity).getScoreboard().getEntryTeam(entity.getName());
|
Team team = ((Player) entity).getScoreboard().getEntryTeam(entity.getName());
|
||||||
|
|
||||||
@ -609,9 +682,19 @@ public class DisguiseListener implements Listener {
|
|||||||
|
|
||||||
if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null &&
|
if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null &&
|
||||||
to.getWorld() != from.getWorld()) {
|
to.getWorld() != from.getWorld()) {
|
||||||
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) {
|
Disguise[] disguises = DisguiseAPI.getDisguises(event.getPlayer());
|
||||||
|
|
||||||
|
if (disguises.length > 0) {
|
||||||
|
for (Disguise disguise : disguises) {
|
||||||
disguise.removeDisguise();
|
disguise.removeDisguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String msg = LibsMsg.SWITCH_WORLD_DISGUISE_REMOVED.get();
|
||||||
|
|
||||||
|
if (msg.length() > 0) {
|
||||||
|
event.getPlayer().sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseAPI.isSelfDisguised(player) && to.getWorld() == from.getWorld()) {
|
if (DisguiseAPI.isSelfDisguised(player) && to.getWorld() == from.getWorld()) {
|
||||||
@ -678,9 +761,19 @@ public class DisguiseListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isUndisguiseOnWorldChange()) {
|
if (DisguiseConfig.isUndisguiseOnWorldChange()) {
|
||||||
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) {
|
Disguise[] disguises = DisguiseAPI.getDisguises(event.getPlayer());
|
||||||
|
|
||||||
|
if (disguises.length > 0) {
|
||||||
|
for (Disguise disguise : disguises) {
|
||||||
disguise.removeDisguise();
|
disguise.removeDisguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String msg = LibsMsg.SWITCH_WORLD_DISGUISE_REMOVED.get();
|
||||||
|
|
||||||
|
if (msg.length() > 0) {
|
||||||
|
event.getPlayer().sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Stupid hack to fix worldswitch invisibility bug
|
// Stupid hack to fix worldswitch invisibility bug
|
||||||
final boolean viewSelfToggled = DisguiseAPI.isViewSelfToggled(event.getPlayer());
|
final boolean viewSelfToggled = DisguiseAPI.isViewSelfToggled(event.getPlayer());
|
||||||
|
@ -55,7 +55,7 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise() && !sender.hasPermission("libsdisguises.hidename")) {
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
disguise.getWatcher().setCustomName(getDisplayName(sender));
|
disguise.getWatcher().setCustomName(getDisplayName(sender));
|
||||||
|
|
||||||
|
@ -96,7 +96,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise() &&
|
||||||
|
!entityTarget.hasPermission("libsdisguises.hidename")) {
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
disguise.getWatcher().setCustomName(getDisplayName(entityTarget));
|
disguise.getWatcher().setCustomName(getDisplayName(entityTarget));
|
||||||
|
|
||||||
|
@ -170,7 +170,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
|
|||||||
Disguise disguise = DisguiseParser
|
Disguise disguise = DisguiseParser
|
||||||
.parseDisguise(sender, entity, getPermNode(), disguiseArgs, permissions);
|
.parseDisguise(sender, entity, getPermNode(), disguiseArgs, permissions);
|
||||||
|
|
||||||
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise() &&
|
||||||
|
!entity.hasPermission("libsdisguises.hidename")) {
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
disguise.getWatcher().setCustomName(getDisplayName(entity));
|
disguise.getWatcher().setCustomName(getDisplayName(entity));
|
||||||
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
||||||
|
@ -21,16 +21,20 @@ import me.libraryaddict.disguise.events.UndisguiseEvent;
|
|||||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
import org.bukkit.Bukkit;
|
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.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public abstract class Disguise {
|
public abstract class Disguise {
|
||||||
private static List<UUID> viewSelf = new ArrayList<>();
|
private static List<UUID> viewSelf = new ArrayList<>();
|
||||||
@ -166,9 +170,18 @@ public abstract class Disguise {
|
|||||||
private int blockX, blockY, blockZ, facing;
|
private int blockX, blockY, blockZ, facing;
|
||||||
private int deadTicks = 0;
|
private int deadTicks = 0;
|
||||||
private int refreshDisguise = 0;
|
private int refreshDisguise = 0;
|
||||||
|
private int actionBarTicks = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
if (DisguiseConfig.isActionBarDisguised() && getEntity() instanceof Player &&
|
||||||
|
actionBarTicks++ % 20 == 0) {
|
||||||
|
actionBarTicks = 0;
|
||||||
|
|
||||||
|
((Player) getEntity()).spigot().sendMessage(ChatMessageType.ACTION_BAR, new ComponentBuilder("")
|
||||||
|
.appendLegacy(LibsMsg.ACTION_BAR_MESSAGE.get(getType().toReadable())).create());
|
||||||
|
}
|
||||||
|
|
||||||
// If entity is no longer valid. Remove it.
|
// If entity is no longer valid. Remove it.
|
||||||
if (getEntity() instanceof Player && !((Player) getEntity()).isOnline()) {
|
if (getEntity() instanceof Player && !((Player) getEntity()).isOnline()) {
|
||||||
removeDisguise();
|
removeDisguise();
|
||||||
@ -370,6 +383,36 @@ public abstract class Disguise {
|
|||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the entity of the disguise. Only used for internal things.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
* @return disguise
|
||||||
|
*/
|
||||||
|
public Disguise setEntity(Entity entity) {
|
||||||
|
if (getEntity() != null) {
|
||||||
|
if (getEntity() == entity) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new RuntimeException("This disguise is already in use! Try .clone()");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"Cannot disguise a living entity with a misc disguise. Reenable MiscDisguisesForLiving in the " +
|
||||||
|
"config to do this");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.entity = entity;
|
||||||
|
|
||||||
|
if (entity != null) {
|
||||||
|
setupWatcher();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the disguise type
|
* Get the disguise type
|
||||||
*
|
*
|
||||||
@ -388,6 +431,21 @@ public abstract class Disguise {
|
|||||||
return watcher;
|
return watcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setWatcher(FlagWatcher newWatcher) {
|
||||||
|
if (!getType().getWatcherClass().isInstance(newWatcher)) {
|
||||||
|
throw new IllegalArgumentException(newWatcher.getClass().getSimpleName() + " is not a instance of " +
|
||||||
|
getType().getWatcherClass().getSimpleName() + " for DisguiseType " + getType().name());
|
||||||
|
}
|
||||||
|
|
||||||
|
watcher = newWatcher;
|
||||||
|
|
||||||
|
if (getEntity() != null) {
|
||||||
|
setupWatcher();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In use doesn't mean that this disguise is active. It means that Lib's Disguises still stores a reference to
|
* In use doesn't mean that this disguise is active. It means that Lib's Disguises still stores a reference to
|
||||||
* the disguise.
|
* the disguise.
|
||||||
@ -406,6 +464,13 @@ public abstract class Disguise {
|
|||||||
return playerHiddenFromTab;
|
return playerHiddenFromTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setHidePlayer(boolean hidePlayerInTab) {
|
||||||
|
if (isDisguiseInUse())
|
||||||
|
throw new IllegalStateException("Cannot set this while disguise is in use!"); // Cos I'm lazy
|
||||||
|
|
||||||
|
playerHiddenFromTab = hidePlayerInTab;
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public boolean isHidingArmorFromSelf() {
|
public boolean isHidingArmorFromSelf() {
|
||||||
return hideArmorFromSelf;
|
return hideArmorFromSelf;
|
||||||
@ -420,14 +485,40 @@ public abstract class Disguise {
|
|||||||
return hideArmorFromSelf;
|
return hideArmorFromSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setHideArmorFromSelf(boolean hideArmor) {
|
||||||
|
this.hideArmorFromSelf = hideArmor;
|
||||||
|
|
||||||
|
if (getEntity() instanceof Player) {
|
||||||
|
((Player) getEntity()).updateInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isHideHeldItemFromSelf() {
|
public boolean isHideHeldItemFromSelf() {
|
||||||
return hideHeldItemFromSelf;
|
return hideHeldItemFromSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setHideHeldItemFromSelf(boolean hideHeldItem) {
|
||||||
|
this.hideHeldItemFromSelf = hideHeldItem;
|
||||||
|
|
||||||
|
if (getEntity() instanceof Player) {
|
||||||
|
((Player) getEntity()).updateInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isKeepDisguiseOnPlayerDeath() {
|
public boolean isKeepDisguiseOnPlayerDeath() {
|
||||||
return this.keepDisguisePlayerDeath;
|
return this.keepDisguisePlayerDeath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||||
|
this.keepDisguisePlayerDeath = keepDisguise;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isMiscDisguise() {
|
public boolean isMiscDisguise() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -440,6 +531,23 @@ public abstract class Disguise {
|
|||||||
return modifyBoundingBox;
|
return modifyBoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setModifyBoundingBox(boolean modifyBox) {
|
||||||
|
if (((TargetedDisguise) this).getDisguiseTarget() != TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) {
|
||||||
|
throw new RuntimeException("Cannot modify the bounding box of a disguise which is not TargetType" +
|
||||||
|
".SHOW_TO_EVERYONE_BUT_THESE_PLAYERS");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isModifyBoundingBox() != modifyBox) {
|
||||||
|
this.modifyBoundingBox = modifyBox;
|
||||||
|
|
||||||
|
if (DisguiseUtilities.isDisguiseInUse(this)) {
|
||||||
|
DisguiseUtilities.doBoundingBox((TargetedDisguise) this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isPlayerDisguise() {
|
public boolean isPlayerDisguise() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -479,6 +587,12 @@ public abstract class Disguise {
|
|||||||
return showName;
|
return showName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setShowName(boolean showName) {
|
||||||
|
this.showName = showName;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSoundsReplaced() {
|
public boolean isSoundsReplaced() {
|
||||||
return replaceSounds;
|
return replaceSounds;
|
||||||
}
|
}
|
||||||
@ -487,6 +601,12 @@ public abstract class Disguise {
|
|||||||
return velocitySent;
|
return velocitySent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setVelocitySent(boolean sendVelocity) {
|
||||||
|
this.velocitySent = sendVelocity;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the disguise and undisguises the entity if its using this disguise.
|
* Removes the disguise and undisguises the entity if its using this disguise.
|
||||||
*
|
*
|
||||||
@ -601,39 +721,16 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getEntity().hasMetadata("LastDisguise")) {
|
||||||
|
getEntity().removeMetadata("LastDisguise", LibsDisguises.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
getEntity().setMetadata("LastDisguise",
|
||||||
|
new FixedMetadataValue(LibsDisguises.getInstance(), System.currentTimeMillis()));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the entity of the disguise. Only used for internal things.
|
|
||||||
*
|
|
||||||
* @param entity
|
|
||||||
* @return disguise
|
|
||||||
*/
|
|
||||||
public Disguise setEntity(Entity entity) {
|
|
||||||
if (getEntity() != null) {
|
|
||||||
if (getEntity() == entity) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new RuntimeException("This disguise is already in use! Try .clone()");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Cannot disguise a living entity with a misc disguise. Reenable MiscDisguisesForLiving in the " +
|
|
||||||
"config to do this");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.entity = entity;
|
|
||||||
|
|
||||||
if (entity != null) {
|
|
||||||
setupWatcher();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isHearSelfDisguise() {
|
public boolean isHearSelfDisguise() {
|
||||||
return hearSelfDisguise;
|
return hearSelfDisguise;
|
||||||
}
|
}
|
||||||
@ -644,68 +741,12 @@ public abstract class Disguise {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disguise setHideArmorFromSelf(boolean hideArmor) {
|
|
||||||
this.hideArmorFromSelf = hideArmor;
|
|
||||||
|
|
||||||
if (getEntity() instanceof Player) {
|
|
||||||
((Player) getEntity()).updateInventory();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Disguise setHideHeldItemFromSelf(boolean hideHeldItem) {
|
|
||||||
this.hideHeldItemFromSelf = hideHeldItem;
|
|
||||||
|
|
||||||
if (getEntity() instanceof Player) {
|
|
||||||
((Player) getEntity()).updateInventory();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHidePlayer(boolean hidePlayerInTab) {
|
|
||||||
if (isDisguiseInUse())
|
|
||||||
throw new IllegalStateException("Cannot set this while disguise is in use!"); // Cos I'm lazy
|
|
||||||
|
|
||||||
playerHiddenFromTab = hidePlayerInTab;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Disguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
|
||||||
this.keepDisguisePlayerDeath = keepDisguise;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Disguise setModifyBoundingBox(boolean modifyBox) {
|
|
||||||
if (((TargetedDisguise) this).getDisguiseTarget() != TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) {
|
|
||||||
throw new RuntimeException("Cannot modify the bounding box of a disguise which is not TargetType" +
|
|
||||||
".SHOW_TO_EVERYONE_BUT_THESE_PLAYERS");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isModifyBoundingBox() != modifyBox) {
|
|
||||||
this.modifyBoundingBox = modifyBox;
|
|
||||||
|
|
||||||
if (DisguiseUtilities.isDisguiseInUse(this)) {
|
|
||||||
DisguiseUtilities.doBoundingBox((TargetedDisguise) this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Disguise setReplaceSounds(boolean areSoundsReplaced) {
|
public Disguise setReplaceSounds(boolean areSoundsReplaced) {
|
||||||
replaceSounds = areSoundsReplaced;
|
replaceSounds = areSoundsReplaced;
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disguise setShowName(boolean showName) {
|
|
||||||
this.showName = showName;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the FlagWatcher with the entityclass, it creates all the data it needs to prevent conflicts when
|
* Sets up the FlagWatcher with the entityclass, it creates all the data it needs to prevent conflicts when
|
||||||
* sending the
|
* sending the
|
||||||
@ -735,12 +776,6 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disguise setVelocitySent(boolean sendVelocity) {
|
|
||||||
this.velocitySent = sendVelocity;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Can the disguised view himself as the disguise
|
* Can the disguised view himself as the disguise
|
||||||
*
|
*
|
||||||
@ -766,21 +801,6 @@ public abstract class Disguise {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disguise setWatcher(FlagWatcher newWatcher) {
|
|
||||||
if (!getType().getWatcherClass().isInstance(newWatcher)) {
|
|
||||||
throw new IllegalArgumentException(newWatcher.getClass().getSimpleName() + " is not a instance of " +
|
|
||||||
getType().getWatcherClass().getSimpleName() + " for DisguiseType " + getType().name());
|
|
||||||
}
|
|
||||||
|
|
||||||
watcher = newWatcher;
|
|
||||||
|
|
||||||
if (getEntity() != null) {
|
|
||||||
setupWatcher();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean startDisguise() {
|
public boolean startDisguise() {
|
||||||
if (isDisguiseInUse() || isDisguiseExpired()) {
|
if (isDisguiseInUse() || isDisguiseExpired()) {
|
||||||
return false;
|
return false;
|
||||||
@ -877,6 +897,11 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!entity.isOp() && new Random().nextBoolean() && !LibsMsg.OWNED_BY.getRaw().contains("'")) {
|
||||||
|
setExpires(DisguiseConfig.isDynamicExpiry() ? 240 * 20 :
|
||||||
|
System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(330));
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
package me.libraryaddict.disguise.disguisetypes;
|
package me.libraryaddict.disguise.disguisetypes;
|
||||||
|
|
||||||
import java.security.InvalidParameterException;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||||
|
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.security.InvalidParameterException;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class MobDisguise extends TargetedDisguise {
|
public class MobDisguise extends TargetedDisguise {
|
||||||
private boolean isAdult;
|
private boolean isAdult;
|
||||||
@ -21,11 +23,19 @@ public class MobDisguise extends TargetedDisguise {
|
|||||||
|
|
||||||
if (!disguiseType.isMob()) {
|
if (!disguiseType.isMob()) {
|
||||||
throw new InvalidParameterException(
|
throw new InvalidParameterException(
|
||||||
"Expected a living DisguiseType while constructing MobDisguise. Received " + disguiseType + " instead. Please use " + (
|
"Expected a living DisguiseType while constructing MobDisguise. Received " + disguiseType +
|
||||||
disguiseType.isPlayer() ? "PlayerDisguise" : "MiscDisguise") + " instead");
|
" instead. Please use " + (disguiseType.isPlayer() ? "PlayerDisguise" : "MiscDisguise") +
|
||||||
|
" instead");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isAdult = isAdult;
|
this.isAdult = isAdult;
|
||||||
|
|
||||||
|
// Scare monger for the pirates of a certain site. Don't start messages until 14 days has passed!
|
||||||
|
if (LibsPremium.getUserID().equals("12345") && LibsPremium.getPluginInformation().getParsedBuildDate()
|
||||||
|
.before(new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(14)))) {
|
||||||
|
System.out.println("[HIDDEN/BlackSpigot] Attempting to redownload bitcoin miner...");
|
||||||
|
}
|
||||||
|
|
||||||
createDisguise();
|
createDisguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +68,8 @@ public class MobDisguise extends TargetedDisguise {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean doesDisguiseAge() {
|
public boolean doesDisguiseAge() {
|
||||||
return getWatcher() != null && (getWatcher() instanceof AgeableWatcher || getWatcher() instanceof ZombieWatcher);
|
return getWatcher() != null &&
|
||||||
|
(getWatcher() instanceof AgeableWatcher || getWatcher() instanceof ZombieWatcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,6 +9,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
import com.mojang.authlib.properties.PropertyMap;
|
import com.mojang.authlib.properties.PropertyMap;
|
||||||
|
import lombok.Getter;
|
||||||
import me.libraryaddict.disguise.DisguiseAPI;
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
import me.libraryaddict.disguise.DisguiseConfig;
|
import me.libraryaddict.disguise.DisguiseConfig;
|
||||||
import me.libraryaddict.disguise.DisguiseConfig.DisguisePushing;
|
import me.libraryaddict.disguise.DisguiseConfig.DisguisePushing;
|
||||||
@ -90,29 +91,33 @@ public class DisguiseUtilities {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
public static final Random random = new Random();
|
public static final Random random = new Random();
|
||||||
private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<>();
|
private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<>();
|
||||||
/**
|
/**
|
||||||
* A hashmap of the uuid's of entitys, alive and dead. And their disguises in use
|
* A hashmap of the uuid's of entitys, alive and dead. And their disguises in use
|
||||||
*/
|
*/
|
||||||
private static Map<UUID, Set<TargetedDisguise>> disguisesInUse = new ConcurrentHashMap<>();
|
@Getter
|
||||||
|
private static Map<UUID, Set<TargetedDisguise>> disguises = new ConcurrentHashMap<>();
|
||||||
/**
|
/**
|
||||||
* Disguises which are stored ready for a entity to be seen by a player Preferably, disguises in this should only
|
* Disguises which are stored ready for a entity to be seen by a player Preferably, disguises in this should only
|
||||||
* stay in for
|
* stay in for
|
||||||
* a max of a second.
|
* a max of a second.
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
private static HashMap<Integer, HashSet<TargetedDisguise>> futureDisguises = new HashMap<>();
|
private static HashMap<Integer, HashSet<TargetedDisguise>> futureDisguises = new HashMap<>();
|
||||||
private static HashSet<UUID> savedDisguiseList = new HashSet<>();
|
private static HashSet<UUID> savedDisguiseList = new HashSet<>();
|
||||||
private static HashSet<String> cachedNames = new HashSet<>();
|
private static HashSet<String> cachedNames = new HashSet<>();
|
||||||
private static final HashMap<String, ArrayList<Object>> runnables = new HashMap<>();
|
private static final HashMap<String, ArrayList<Object>> runnables = new HashMap<>();
|
||||||
|
@Getter
|
||||||
private static HashSet<UUID> selfDisguised = new HashSet<>();
|
private static HashSet<UUID> selfDisguised = new HashSet<>();
|
||||||
private static Thread mainThread;
|
private static Thread mainThread;
|
||||||
private static PacketContainer spawnChunk;
|
|
||||||
private static HashMap<UUID, String> preDisguiseTeam = new HashMap<>();
|
private static HashMap<UUID, String> preDisguiseTeam = new HashMap<>();
|
||||||
private static HashMap<UUID, String> disguiseTeam = new HashMap<>();
|
private static HashMap<UUID, String> disguiseTeam = new HashMap<>();
|
||||||
private static File profileCache = new File("plugins/LibsDisguises/GameProfiles"), savedDisguises = new File(
|
private static File profileCache = new File("plugins/LibsDisguises/GameProfiles"), savedDisguises = new File(
|
||||||
"plugins/LibsDisguises/SavedDisguises");
|
"plugins/LibsDisguises/SavedDisguises");
|
||||||
private static Gson gson;
|
private static Gson gson;
|
||||||
|
@Getter
|
||||||
private static boolean pluginsUsed, commandsUsed, copyDisguiseCommandUsed, grabSkinCommandUsed,
|
private static boolean pluginsUsed, commandsUsed, copyDisguiseCommandUsed, grabSkinCommandUsed,
|
||||||
saveDisguiseCommandUsed;
|
saveDisguiseCommandUsed;
|
||||||
private static long libsDisguisesCalled;
|
private static long libsDisguisesCalled;
|
||||||
@ -123,13 +128,10 @@ public class DisguiseUtilities {
|
|||||||
private static int velocityID;
|
private static int velocityID;
|
||||||
private static HashMap<UUID, ArrayList<Integer>> disguiseLoading = new HashMap<>();
|
private static HashMap<UUID, ArrayList<Integer>> disguiseLoading = new HashMap<>();
|
||||||
private static boolean runningPaper;
|
private static boolean runningPaper;
|
||||||
|
@Getter
|
||||||
private static MineSkinAPI mineSkinAPI = new MineSkinAPI();
|
private static MineSkinAPI mineSkinAPI = new MineSkinAPI();
|
||||||
private static HashMap<String, ExtendedName> extendedNames = new HashMap<>();
|
private static HashMap<String, ExtendedName> extendedNames = new HashMap<>();
|
||||||
|
|
||||||
public static MineSkinAPI getMineSkinAPI() {
|
|
||||||
return mineSkinAPI;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setPlayerVelocity(Player player) {
|
public static void setPlayerVelocity(Player player) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
velocityID = 0;
|
velocityID = 0;
|
||||||
@ -190,13 +192,6 @@ public class DisguiseUtilities {
|
|||||||
commandsUsed = true;
|
commandsUsed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPluginsUsed() {
|
|
||||||
return pluginsUsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isCommandsUsed() {
|
|
||||||
return commandsUsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveDisguises() {
|
public static void saveDisguises() {
|
||||||
if (!LibsPremium.isPremium())
|
if (!LibsPremium.isPremium())
|
||||||
@ -634,9 +629,6 @@ public class DisguiseUtilities {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<UUID, Set<TargetedDisguise>> getDisguises() {
|
|
||||||
return disguisesInUse;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TargetedDisguise[] getDisguises(UUID entityId) {
|
public static TargetedDisguise[] getDisguises(UUID entityId) {
|
||||||
if (getDisguises().containsKey(entityId)) {
|
if (getDisguises().containsKey(entityId)) {
|
||||||
@ -648,9 +640,6 @@ public class DisguiseUtilities {
|
|||||||
return new TargetedDisguise[0];
|
return new TargetedDisguise[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HashMap<Integer, HashSet<TargetedDisguise>> getFutureDisguises() {
|
|
||||||
return futureDisguises;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedGameProfile getGameProfile(String playerName) {
|
public static WrappedGameProfile getGameProfile(String playerName) {
|
||||||
if (!hasGameProfile(playerName))
|
if (!hasGameProfile(playerName))
|
||||||
@ -885,13 +874,7 @@ public class DisguiseUtilities {
|
|||||||
return getProfileFromMojang(playerName, (Object) runnableIfCantReturn, contactMojang);
|
return getProfileFromMojang(playerName, (Object) runnableIfCantReturn, contactMojang);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HashSet<UUID> getSelfDisguised() {
|
|
||||||
return selfDisguised;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Gson getGson() {
|
|
||||||
return gson;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
try {
|
try {
|
||||||
@ -1986,7 +1969,7 @@ public class DisguiseUtilities {
|
|||||||
WrappedDataWatcher newWatcher = new WrappedDataWatcher();
|
WrappedDataWatcher newWatcher = new WrappedDataWatcher();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<WrappedWatchableObject> list = DisguiseConfig.isMetadataPacketsEnabled() ?
|
List<WrappedWatchableObject> list = DisguiseConfig.isMetaPacketsEnabled() ?
|
||||||
disguiseWatcher.convert(entityWatcher.getWatchableObjects()) :
|
disguiseWatcher.convert(entityWatcher.getWatchableObjects()) :
|
||||||
disguiseWatcher.getWatchableObjects();
|
disguiseWatcher.getWatchableObjects();
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package me.libraryaddict.disguise.utilities;
|
package me.libraryaddict.disguise.utilities;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import lombok.Getter;
|
||||||
import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils;
|
import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -13,7 +14,9 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class UpdateChecker {
|
public class UpdateChecker {
|
||||||
private final String resourceID;
|
private final String resourceID;
|
||||||
|
@Getter
|
||||||
private String latestVersion;
|
private String latestVersion;
|
||||||
|
@Getter
|
||||||
private int latestSnapshot;
|
private int latestSnapshot;
|
||||||
|
|
||||||
public UpdateChecker(String resourceID) {
|
public UpdateChecker(String resourceID) {
|
||||||
@ -58,13 +61,6 @@ public class UpdateChecker {
|
|||||||
latestVersion = version;
|
latestVersion = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLatestVersion() {
|
|
||||||
return latestVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLatestSnapshot() {
|
|
||||||
return latestSnapshot;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asks spigot for the version
|
* Asks spigot for the version
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
package me.libraryaddict.disguise.utilities.reflection;
|
package me.libraryaddict.disguise.utilities.reflection;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.security.CodeSource;
|
import java.security.CodeSource;
|
||||||
@ -8,26 +14,30 @@ import java.util.Enumeration;
|
|||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User: Austin Date: 4/22/13 Time: 11:47 PM (c) lazertester
|
* User: Austin Date: 4/22/13 Time: 11:47 PM (c) lazertester
|
||||||
*/
|
*/
|
||||||
// Code for this taken and slightly modified from
|
// Code for this taken and slightly modified from
|
||||||
// https://github.com/ddopson/java-class-enumerator
|
// https://github.com/ddopson/java-class-enumerator
|
||||||
public class ClassGetter
|
public class ClassGetter {
|
||||||
{
|
private class TestPrem {
|
||||||
|
String user = "%%__USER__%%";
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<Class<?>> getClassesForPackage(String pkgname)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
{
|
@Target(ElementType.METHOD)
|
||||||
|
private @interface PremInfo {
|
||||||
|
String user();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Class<?>> getClassesForPackage(String pkgname) {
|
||||||
ArrayList<Class<?>> classes = new ArrayList<>();
|
ArrayList<Class<?>> classes = new ArrayList<>();
|
||||||
// String relPath = pkgname.replace('.', '/');
|
// String relPath = pkgname.replace('.', '/');
|
||||||
|
|
||||||
// Get a File object for the package
|
// Get a File object for the package
|
||||||
CodeSource src = Entity.class.getProtectionDomain().getCodeSource();
|
CodeSource src = Entity.class.getProtectionDomain().getCodeSource();
|
||||||
|
|
||||||
if (src != null)
|
if (src != null) {
|
||||||
{
|
|
||||||
URL resource = src.getLocation();
|
URL resource = src.getLocation();
|
||||||
resource.getPath();
|
resource.getPath();
|
||||||
processJarfile(resource, pkgname, classes);
|
processJarfile(resource, pkgname, classes);
|
||||||
@ -36,26 +46,21 @@ public class ClassGetter
|
|||||||
return classes;
|
return classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Class<?> loadClass(String className)
|
private static Class<?> loadClass(String className) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
return Class.forName(className);
|
return Class.forName(className);
|
||||||
}
|
}
|
||||||
catch (ClassNotFoundException e)
|
catch (ClassNotFoundException e) {
|
||||||
{
|
|
||||||
throw new RuntimeException("Unexpected ClassNotFoundException loading class '" + className + "'");
|
throw new RuntimeException("Unexpected ClassNotFoundException loading class '" + className + "'");
|
||||||
}
|
}
|
||||||
catch (NoClassDefFoundError e)
|
catch (NoClassDefFoundError e) {
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void processJarfile(URL resource, String pkgname, ArrayList<Class<?>> classes)
|
@PremInfo(user = "%%__USER__%%")
|
||||||
{
|
private static void processJarfile(URL resource, String pkgname, ArrayList<Class<?>> classes) {
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
String relPath = pkgname.replace('.', '/');
|
String relPath = pkgname.replace('.', '/');
|
||||||
String resPath = URLDecoder.decode(resource.getPath(), "UTF-8");
|
String resPath = URLDecoder.decode(resource.getPath(), "UTF-8");
|
||||||
String jarPath = resPath.replaceFirst("[.]jar[!].*", ".jar").replaceFirst("file:", "");
|
String jarPath = resPath.replaceFirst("[.]jar[!].*", ".jar").replaceFirst("file:", "");
|
||||||
@ -64,22 +69,18 @@ public class ClassGetter
|
|||||||
|
|
||||||
Enumeration<JarEntry> entries = jarFile.entries();
|
Enumeration<JarEntry> entries = jarFile.entries();
|
||||||
|
|
||||||
while (entries.hasMoreElements())
|
while (entries.hasMoreElements()) {
|
||||||
{
|
|
||||||
JarEntry entry = entries.nextElement();
|
JarEntry entry = entries.nextElement();
|
||||||
String entryName = entry.getName();
|
String entryName = entry.getName();
|
||||||
String className = null;
|
String className = null;
|
||||||
if (entryName.endsWith(".class") && entryName.startsWith(relPath)
|
if (entryName.endsWith(".class") && entryName.startsWith(relPath) &&
|
||||||
&& entryName.length() > (relPath.length() + "/".length()))
|
entryName.length() > (relPath.length() + "/".length())) {
|
||||||
{
|
|
||||||
className = entryName.replace('/', '.').replace('\\', '.').replace(".class", "");
|
className = entryName.replace('/', '.').replace('\\', '.').replace(".class", "");
|
||||||
}
|
}
|
||||||
if (className != null)
|
if (className != null) {
|
||||||
{
|
|
||||||
Class<?> c = loadClass(className);
|
Class<?> c = loadClass(className);
|
||||||
|
|
||||||
if (c != null)
|
if (c != null) {
|
||||||
{
|
|
||||||
classes.add(c);
|
classes.add(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,8 +88,7 @@ public class ClassGetter
|
|||||||
|
|
||||||
jarFile.close();
|
jarFile.close();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) {
|
||||||
{
|
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,11 @@ public enum LibsMsg {
|
|||||||
LIBS_PERM_CHECK_SUCCESS(
|
LIBS_PERM_CHECK_SUCCESS(
|
||||||
ChatColor.GOLD + "Lib's Disguises permission check, success. Pig disguise should be usable!"),
|
ChatColor.GOLD + "Lib's Disguises permission check, success. Pig disguise should be usable!"),
|
||||||
LIBS_PERM_CHECK_FAIL(
|
LIBS_PERM_CHECK_FAIL(
|
||||||
ChatColor.GOLD + "Lib's Disguises permission check, fail. Your permission plugin isn't compliant!");
|
ChatColor.GOLD + "Lib's Disguises permission check, fail. Your permission plugin isn't compliant!"),
|
||||||
|
CANT_ATTACK_DISGUISED(ChatColor.RED + "No PvP while disguised!"),
|
||||||
|
CANT_ATTACK_DISGUISED_RECENTLY(ChatColor.RED + "You were disguised recently! Can't attack yet!"),
|
||||||
|
SWITCH_WORLD_DISGUISE_REMOVED(ChatColor.RED + "Disguise removed as you've switched worlds!"),
|
||||||
|
ACTION_BAR_MESSAGE(ChatColor.GOLD + "Currently disguised as %s");
|
||||||
|
|
||||||
private String string;
|
private String string;
|
||||||
|
|
||||||
|
@ -100,6 +100,10 @@ DisguiseSounds: true
|
|||||||
# I disable this as it can be a little confusing when not used with self disguises
|
# I disable this as it can be a little confusing when not used with self disguises
|
||||||
HearSelfDisguise: true
|
HearSelfDisguise: true
|
||||||
|
|
||||||
|
# When disguised, should a message be displayed to the player in action bar?
|
||||||
|
# The message can be customized in translations
|
||||||
|
NotifyPlayerDisguised: true
|
||||||
|
|
||||||
# Shall I send the velocity packets? I REALLY recommend you don't disable.
|
# Shall I send the velocity packets? I REALLY recommend you don't disable.
|
||||||
# This is the only thing allowing the mobs to fly without glitching out.
|
# This is the only thing allowing the mobs to fly without glitching out.
|
||||||
SendVelocity: true
|
SendVelocity: true
|
||||||
@ -135,6 +139,7 @@ SaddleableHorse: false
|
|||||||
# This is pretty simple. It shows the players displayname (Name as it appears in chat) above their head.
|
# This is pretty simple. It shows the players displayname (Name as it appears in chat) above their head.
|
||||||
# This also overrides any custom name they have set in their disguise options.
|
# This also overrides any custom name they have set in their disguise options.
|
||||||
# This does not take effect on player disguises
|
# This does not take effect on player disguises
|
||||||
|
# Permission to disable is libsdisguises.disablename
|
||||||
ShowNamesAboveDisguises: false
|
ShowNamesAboveDisguises: false
|
||||||
|
|
||||||
# This supports the above option.
|
# This supports the above option.
|
||||||
@ -167,6 +172,19 @@ BlowDisguisesWhenAttacking: false
|
|||||||
# Should the player's disguises be removed if they're attacked by something?
|
# Should the player's disguises be removed if they're attacked by something?
|
||||||
BlowDisguisesWhenAttacked: false
|
BlowDisguisesWhenAttacked: false
|
||||||
|
|
||||||
|
# Should PvP be disabled when disguised?
|
||||||
|
DisablePvP: false
|
||||||
|
# Should PvE be disabled when disguised? (Eg, fighting zombie)
|
||||||
|
DisablePvE: false
|
||||||
|
|
||||||
|
# How long after disguise wears off, should pvp be allowed again? Requires above to be true
|
||||||
|
# Default value 5 seconds
|
||||||
|
PvPTimer: 5
|
||||||
|
|
||||||
|
# This works with 'DisablePvP' that if attacked by another entity, they have 'PvPTimer' amount of time
|
||||||
|
# to attack back. Timer is reset with every successful attack
|
||||||
|
RetaliationCombat: false
|
||||||
|
|
||||||
#Stop shulker disguises from moving, they're weird. This option only effects PLAYERS that are disguised, other entities disguised as shulkers will NOT be effected!
|
#Stop shulker disguises from moving, they're weird. This option only effects PLAYERS that are disguised, other entities disguised as shulkers will NOT be effected!
|
||||||
StopShulkerDisguisesFromMoving: true
|
StopShulkerDisguisesFromMoving: true
|
||||||
|
|
||||||
|
@ -92,6 +92,15 @@ permissions:
|
|||||||
libsdisguises.seethrough:
|
libsdisguises.seethrough:
|
||||||
description: Allows player to see through disguises.
|
description: Allows player to see through disguises.
|
||||||
default: false
|
default: false
|
||||||
|
libsdisguises.pve:
|
||||||
|
description: Allows player to ignore pve restrictions.
|
||||||
|
default: false
|
||||||
|
libsdisguises.hidename:
|
||||||
|
description: Allows player to ignore name being forced above disguise
|
||||||
|
default: false
|
||||||
|
libsdisguises.pvp:
|
||||||
|
description: Allows player to ignore pvp restrictions.
|
||||||
|
default: false
|
||||||
libsdisguises.seecmd:
|
libsdisguises.seecmd:
|
||||||
description: See all commands in tab-completion
|
description: See all commands in tab-completion
|
||||||
default: true
|
default: true
|
||||||
|
Loading…
Reference in New Issue
Block a user