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>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.10</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
|
@ -1,5 +1,8 @@
|
||||
package me.libraryaddict.disguise;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
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.translations.LibsMsg;
|
||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||
import org.apache.logging.log4j.core.util.IOUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.util.FileUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
|
||||
public class DisguiseConfig {
|
||||
public enum DisguisePushing { // This enum has a really bad name..
|
||||
MODIFY_SCOREBOARD,
|
||||
IGNORE_SCOREBOARD,
|
||||
CREATE_SCOREBOARD
|
||||
}
|
||||
|
||||
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;
|
||||
@Getter
|
||||
@Setter
|
||||
private static DisguisePushing pushingOption = DisguisePushing.MODIFY_SCOREBOARD;
|
||||
@Getter
|
||||
@Setter
|
||||
private static HashMap<DisguisePerm, String> customDisguises = new HashMap<>();
|
||||
private static boolean disableInvisibility;
|
||||
private static int disguiseCloneExpire;
|
||||
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;
|
||||
@Getter
|
||||
@Setter
|
||||
private static String updateNotificationPermission;
|
||||
private static boolean viewSelfDisguise;
|
||||
private static boolean witherSkullEnabled;
|
||||
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;
|
||||
@Getter
|
||||
@Setter
|
||||
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;
|
||||
@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 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() {
|
||||
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;
|
||||
private DisguiseConfig() {
|
||||
}
|
||||
|
||||
public static int getUUIDGeneratedVersion() {
|
||||
@ -143,21 +220,6 @@ public class DisguiseConfig {
|
||||
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) {
|
||||
Entry<DisguisePerm, String> entry = getRawCustomDisguise(disguise);
|
||||
|
||||
@ -224,96 +286,12 @@ public class DisguiseConfig {
|
||||
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) {
|
||||
useTranslations = setUseTranslations;
|
||||
|
||||
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() {
|
||||
// Always save the default config
|
||||
LibsDisguises.getInstance().saveDefaultConfig();
|
||||
@ -341,63 +319,67 @@ public class DisguiseConfig {
|
||||
|
||||
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);
|
||||
setHearSelfDisguise(config.getBoolean("HearSelfDisguise"));
|
||||
setHideArmorFromSelf(config.getBoolean("RemoveArmor"));
|
||||
setHideHeldItemFromSelf(config.getBoolean("RemoveHeldItem"));
|
||||
disableCommands = config.getBoolean("DisableCommands");
|
||||
|
||||
setAddEntityAnimations(config.getBoolean("AddEntityAnimations"));
|
||||
setNameOfPlayerShownAboveDisguise(config.getBoolean("ShowNamesAboveDisguises"));
|
||||
setNameAboveHeadAlwaysVisible(config.getBoolean("NameAboveHeadAlwaysVisible"));
|
||||
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
|
||||
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
|
||||
setDisguiseBlownWhenAttacking(
|
||||
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
||||
setAnimationPacketsEnabled(config.getBoolean("PacketsEnabled.Animation"));
|
||||
setCatDyeable(config.getBoolean("DyeableCat"));
|
||||
setCollectPacketsEnabled(config.getBoolean("PacketsEnabled.Collect"));
|
||||
setDisableFriendlyInvisibles(config.getBoolean("Scoreboard.DisableFriendlyInvisibles"));
|
||||
setDisabledInvisibility(config.getBoolean("DisableInvisibility"));
|
||||
setDisablePvP(config.getBoolean("DisablePvP"));
|
||||
setDisablePvE(config.getBoolean("DisablePvE"));
|
||||
setPvPTimer(config.getDouble("PvPTimer"));
|
||||
setDisguiseBlownWhenAttacked(
|
||||
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacked")));
|
||||
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
|
||||
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
|
||||
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"));
|
||||
setDisguiseBlownWhenAttacking(
|
||||
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
||||
setDisguiseCloneExpire(config.getInt("DisguiseCloneExpire"));
|
||||
setMaxClonedDisguises(config.getInt("DisguiseCloneSize"));
|
||||
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"));
|
||||
setDisguiseEntityExpire(config.getInt("DisguiseEntityExpire"));
|
||||
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"));
|
||||
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())) {
|
||||
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");
|
||||
@ -418,7 +400,7 @@ public class DisguiseConfig {
|
||||
if (!option.endsWith("_SCOREBOARD"))
|
||||
option += "_SCOREBOARD";
|
||||
|
||||
disablePushing = DisguisePushing.valueOf(option);
|
||||
pushingOption = DisguisePushing.valueOf(option);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
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
|
||||
*/
|
||||
@ -639,47 +521,9 @@ public class DisguiseConfig {
|
||||
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) {
|
||||
if (enabled != isAnimationPacketsEnabled()) {
|
||||
animationEnabled = enabled;
|
||||
animationPacketsEnabled = enabled;
|
||||
|
||||
PacketsManager.setupMainPacketsListener();
|
||||
}
|
||||
@ -687,35 +531,15 @@ public class DisguiseConfig {
|
||||
|
||||
public static void setCollectPacketsEnabled(boolean enabled) {
|
||||
if (enabled != isCollectPacketsEnabled()) {
|
||||
collectEnabled = enabled;
|
||||
collectPacketsEnabled = enabled;
|
||||
|
||||
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) {
|
||||
if (enabled != isEntityStatusPacketsEnabled()) {
|
||||
entityStatusEnabled = enabled;
|
||||
entityStatusPacketsEnabled = enabled;
|
||||
|
||||
PacketsManager.setupMainPacketsListener();
|
||||
}
|
||||
@ -723,64 +547,35 @@ public class DisguiseConfig {
|
||||
|
||||
public static void setEquipmentPacketsEnabled(boolean enabled) {
|
||||
if (enabled != isEquipmentPacketsEnabled()) {
|
||||
equipmentEnabled = enabled;
|
||||
equipmentPacketsEnabled = enabled;
|
||||
|
||||
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
|
||||
*/
|
||||
public static void setHideArmorFromSelf(boolean hideArmor) {
|
||||
if (hidingArmor != hideArmor) {
|
||||
hidingArmor = hideArmor;
|
||||
if (hidingArmorFromSelf != hideArmor) {
|
||||
hidingArmorFromSelf = hideArmor;
|
||||
|
||||
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
|
||||
* self disguise
|
||||
*/
|
||||
public static void setHideHeldItemFromSelf(boolean hideHelditem) {
|
||||
if (hidingHeldItem != hideHelditem) {
|
||||
hidingHeldItem = hideHelditem;
|
||||
if (hidingHeldItemFromSelf != hideHelditem) {
|
||||
hidingHeldItemFromSelf = hideHelditem;
|
||||
|
||||
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) {
|
||||
if (enabled != isMiscDisguisesForLivingEnabled()) {
|
||||
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) {
|
||||
if (enabled != isMovementPacketsEnabled()) {
|
||||
movementEnabled = enabled;
|
||||
movementPacketsEnabled = enabled;
|
||||
|
||||
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
|
||||
*/
|
||||
@ -828,63 +599,15 @@ public class DisguiseConfig {
|
||||
PacketsManager.setHearDisguisesListener(isSoundsEnabled);
|
||||
}
|
||||
|
||||
public static void setStopShulkerDisguisesFromMoving(boolean stopShulkerDisguisesFromMoving) {
|
||||
DisguiseConfig.stopShulkerDisguisesFromMoving = stopShulkerDisguisesFromMoving;
|
||||
public enum DisguisePushing { // This enum has a really bad name..
|
||||
MODIFY_SCOREBOARD,
|
||||
IGNORE_SCOREBOARD,
|
||||
CREATE_SCOREBOARD
|
||||
}
|
||||
|
||||
public static void setUndisguiseOnWorldChange(boolean isUndisguise) {
|
||||
undisguiseSwitchWorlds = isUndisguise;
|
||||
}
|
||||
|
||||
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() {
|
||||
public enum UpdatesBranch {
|
||||
SAME_BUILDS,
|
||||
SNAPSHOTS,
|
||||
RELEASES
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -27,6 +28,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
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.WorldLoadEvent;
|
||||
import org.bukkit.event.world.WorldUnloadEvent;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
@ -194,12 +197,81 @@ public class DisguiseListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onAttack(EntityDamageByEntityEvent event) {
|
||||
if (DisguiseConfig.isDisguiseBlownWhenAttacked() && event.getEntity() instanceof Player) {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
if (DisguiseConfig.isDisguiseBlownWhenAttacked()) {
|
||||
checkPlayerCanBlowDisguise((Player) event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
if (DisguiseConfig.isDisguiseBlownWhenAttacking() && event.getDamager() instanceof Player) {
|
||||
checkPlayerCanBlowDisguise((Player) event.getDamager());
|
||||
Entity attacker = 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) {
|
||||
p.sendMessage(LibsMsg.DISABLED_LIVING_TO_MISC.get());
|
||||
} else {
|
||||
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
||||
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise() &&
|
||||
!entity.hasPermission("libsdisguises.hidename")) {
|
||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||
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 &&
|
||||
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();
|
||||
}
|
||||
|
||||
String msg = LibsMsg.SWITCH_WORLD_DISGUISE_REMOVED.get();
|
||||
|
||||
if (msg.length() > 0) {
|
||||
event.getPlayer().sendMessage(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (DisguiseAPI.isSelfDisguised(player) && to.getWorld() == from.getWorld()) {
|
||||
@ -678,9 +761,19 @@ public class DisguiseListener implements Listener {
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
String msg = LibsMsg.SWITCH_WORLD_DISGUISE_REMOVED.get();
|
||||
|
||||
if (msg.length() > 0) {
|
||||
event.getPlayer().sendMessage(msg);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Stupid hack to fix worldswitch invisibility bug
|
||||
final boolean viewSelfToggled = DisguiseAPI.isViewSelfToggled(event.getPlayer());
|
||||
|
@ -55,7 +55,7 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
|
||||
return true;
|
||||
}
|
||||
|
||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise() && !sender.hasPermission("libsdisguises.hidename")) {
|
||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||
disguise.getWatcher().setCustomName(getDisplayName(sender));
|
||||
|
||||
|
@ -96,7 +96,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
|
||||
return true;
|
||||
}
|
||||
|
||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
||||
if (DisguiseConfig.isNameOfPlayerShownAboveDisguise() &&
|
||||
!entityTarget.hasPermission("libsdisguises.hidename")) {
|
||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||
disguise.getWatcher().setCustomName(getDisplayName(entityTarget));
|
||||
|
||||
|
@ -170,7 +170,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
|
||||
Disguise disguise = DisguiseParser
|
||||
.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) {
|
||||
disguise.getWatcher().setCustomName(getDisplayName(entity));
|
||||
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
||||
|
@ -21,16 +21,20 @@ import me.libraryaddict.disguise.events.UndisguiseEvent;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
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.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public abstract class Disguise {
|
||||
private static List<UUID> viewSelf = new ArrayList<>();
|
||||
@ -166,9 +170,18 @@ public abstract class Disguise {
|
||||
private int blockX, blockY, blockZ, facing;
|
||||
private int deadTicks = 0;
|
||||
private int refreshDisguise = 0;
|
||||
private int actionBarTicks = 0;
|
||||
|
||||
@Override
|
||||
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 (getEntity() instanceof Player && !((Player) getEntity()).isOnline()) {
|
||||
removeDisguise();
|
||||
@ -370,6 +383,36 @@ public abstract class Disguise {
|
||||
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
|
||||
*
|
||||
@ -388,6 +431,21 @@ public abstract class Disguise {
|
||||
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
|
||||
* the disguise.
|
||||
@ -406,6 +464,13 @@ public abstract class Disguise {
|
||||
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
|
||||
public boolean isHidingArmorFromSelf() {
|
||||
return hideArmorFromSelf;
|
||||
@ -420,14 +485,40 @@ public abstract class Disguise {
|
||||
return hideArmorFromSelf;
|
||||
}
|
||||
|
||||
public Disguise setHideArmorFromSelf(boolean hideArmor) {
|
||||
this.hideArmorFromSelf = hideArmor;
|
||||
|
||||
if (getEntity() instanceof Player) {
|
||||
((Player) getEntity()).updateInventory();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isHideHeldItemFromSelf() {
|
||||
return hideHeldItemFromSelf;
|
||||
}
|
||||
|
||||
public Disguise setHideHeldItemFromSelf(boolean hideHeldItem) {
|
||||
this.hideHeldItemFromSelf = hideHeldItem;
|
||||
|
||||
if (getEntity() instanceof Player) {
|
||||
((Player) getEntity()).updateInventory();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isKeepDisguiseOnPlayerDeath() {
|
||||
return this.keepDisguisePlayerDeath;
|
||||
}
|
||||
|
||||
public Disguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||
this.keepDisguisePlayerDeath = keepDisguise;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isMiscDisguise() {
|
||||
return false;
|
||||
}
|
||||
@ -440,6 +531,23 @@ public abstract class Disguise {
|
||||
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() {
|
||||
return false;
|
||||
}
|
||||
@ -479,6 +587,12 @@ public abstract class Disguise {
|
||||
return showName;
|
||||
}
|
||||
|
||||
public Disguise setShowName(boolean showName) {
|
||||
this.showName = showName;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isSoundsReplaced() {
|
||||
return replaceSounds;
|
||||
}
|
||||
@ -487,6 +601,12 @@ public abstract class Disguise {
|
||||
return velocitySent;
|
||||
}
|
||||
|
||||
public Disguise setVelocitySent(boolean sendVelocity) {
|
||||
this.velocitySent = sendVelocity;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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() {
|
||||
return hearSelfDisguise;
|
||||
}
|
||||
@ -644,68 +741,12 @@ public abstract class Disguise {
|
||||
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) {
|
||||
replaceSounds = areSoundsReplaced;
|
||||
|
||||
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
|
||||
* 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
|
||||
*
|
||||
@ -766,21 +801,6 @@ public abstract class Disguise {
|
||||
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() {
|
||||
if (isDisguiseInUse() || isDisguiseExpired()) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,15 @@
|
||||
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.LivingWatcher;
|
||||
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 {
|
||||
private boolean isAdult;
|
||||
@ -21,11 +23,19 @@ public class MobDisguise extends TargetedDisguise {
|
||||
|
||||
if (!disguiseType.isMob()) {
|
||||
throw new InvalidParameterException(
|
||||
"Expected a living DisguiseType while constructing MobDisguise. Received " + disguiseType + " instead. Please use " + (
|
||||
disguiseType.isPlayer() ? "PlayerDisguise" : "MiscDisguise") + " instead");
|
||||
"Expected a living DisguiseType while constructing MobDisguise. Received " + disguiseType +
|
||||
" instead. Please use " + (disguiseType.isPlayer() ? "PlayerDisguise" : "MiscDisguise") +
|
||||
" instead");
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -58,7 +68,8 @@ public class MobDisguise extends TargetedDisguise {
|
||||
}
|
||||
|
||||
public boolean doesDisguiseAge() {
|
||||
return getWatcher() != null && (getWatcher() instanceof AgeableWatcher || getWatcher() instanceof ZombieWatcher);
|
||||
return getWatcher() != null &&
|
||||
(getWatcher() instanceof AgeableWatcher || getWatcher() instanceof ZombieWatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -9,6 +9,7 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import com.mojang.authlib.properties.PropertyMap;
|
||||
import lombok.Getter;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.DisguiseConfig.DisguisePushing;
|
||||
@ -90,29 +91,33 @@ public class DisguiseUtilities {
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
public static final Random random = new Random();
|
||||
private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<>();
|
||||
/**
|
||||
* 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
|
||||
* stay in for
|
||||
* a max of a second.
|
||||
*/
|
||||
@Getter
|
||||
private static HashMap<Integer, HashSet<TargetedDisguise>> futureDisguises = new HashMap<>();
|
||||
private static HashSet<UUID> savedDisguiseList = new HashSet<>();
|
||||
private static HashSet<String> cachedNames = new HashSet<>();
|
||||
private static final HashMap<String, ArrayList<Object>> runnables = new HashMap<>();
|
||||
@Getter
|
||||
private static HashSet<UUID> selfDisguised = new HashSet<>();
|
||||
private static Thread mainThread;
|
||||
private static PacketContainer spawnChunk;
|
||||
private static HashMap<UUID, String> preDisguiseTeam = new HashMap<>();
|
||||
private static HashMap<UUID, String> disguiseTeam = new HashMap<>();
|
||||
private static File profileCache = new File("plugins/LibsDisguises/GameProfiles"), savedDisguises = new File(
|
||||
"plugins/LibsDisguises/SavedDisguises");
|
||||
private static Gson gson;
|
||||
@Getter
|
||||
private static boolean pluginsUsed, commandsUsed, copyDisguiseCommandUsed, grabSkinCommandUsed,
|
||||
saveDisguiseCommandUsed;
|
||||
private static long libsDisguisesCalled;
|
||||
@ -123,13 +128,10 @@ public class DisguiseUtilities {
|
||||
private static int velocityID;
|
||||
private static HashMap<UUID, ArrayList<Integer>> disguiseLoading = new HashMap<>();
|
||||
private static boolean runningPaper;
|
||||
@Getter
|
||||
private static MineSkinAPI mineSkinAPI = new MineSkinAPI();
|
||||
private static HashMap<String, ExtendedName> extendedNames = new HashMap<>();
|
||||
|
||||
public static MineSkinAPI getMineSkinAPI() {
|
||||
return mineSkinAPI;
|
||||
}
|
||||
|
||||
public static void setPlayerVelocity(Player player) {
|
||||
if (player == null) {
|
||||
velocityID = 0;
|
||||
@ -190,13 +192,6 @@ public class DisguiseUtilities {
|
||||
commandsUsed = true;
|
||||
}
|
||||
|
||||
public static boolean isPluginsUsed() {
|
||||
return pluginsUsed;
|
||||
}
|
||||
|
||||
public static boolean isCommandsUsed() {
|
||||
return commandsUsed;
|
||||
}
|
||||
|
||||
public static void saveDisguises() {
|
||||
if (!LibsPremium.isPremium())
|
||||
@ -634,9 +629,6 @@ public class DisguiseUtilities {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Map<UUID, Set<TargetedDisguise>> getDisguises() {
|
||||
return disguisesInUse;
|
||||
}
|
||||
|
||||
public static TargetedDisguise[] getDisguises(UUID entityId) {
|
||||
if (getDisguises().containsKey(entityId)) {
|
||||
@ -648,9 +640,6 @@ public class DisguiseUtilities {
|
||||
return new TargetedDisguise[0];
|
||||
}
|
||||
|
||||
public static HashMap<Integer, HashSet<TargetedDisguise>> getFutureDisguises() {
|
||||
return futureDisguises;
|
||||
}
|
||||
|
||||
public static WrappedGameProfile getGameProfile(String playerName) {
|
||||
if (!hasGameProfile(playerName))
|
||||
@ -885,13 +874,7 @@ public class DisguiseUtilities {
|
||||
return getProfileFromMojang(playerName, (Object) runnableIfCantReturn, contactMojang);
|
||||
}
|
||||
|
||||
public static HashSet<UUID> getSelfDisguised() {
|
||||
return selfDisguised;
|
||||
}
|
||||
|
||||
public static Gson getGson() {
|
||||
return gson;
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
try {
|
||||
@ -1986,7 +1969,7 @@ public class DisguiseUtilities {
|
||||
WrappedDataWatcher newWatcher = new WrappedDataWatcher();
|
||||
|
||||
try {
|
||||
List<WrappedWatchableObject> list = DisguiseConfig.isMetadataPacketsEnabled() ?
|
||||
List<WrappedWatchableObject> list = DisguiseConfig.isMetaPacketsEnabled() ?
|
||||
disguiseWatcher.convert(entityWatcher.getWatchableObjects()) :
|
||||
disguiseWatcher.getWatchableObjects();
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package me.libraryaddict.disguise.utilities;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils;
|
||||
|
||||
import java.io.InputStream;
|
||||
@ -13,7 +14,9 @@ import java.util.Map;
|
||||
|
||||
public class UpdateChecker {
|
||||
private final String resourceID;
|
||||
@Getter
|
||||
private String latestVersion;
|
||||
@Getter
|
||||
private int latestSnapshot;
|
||||
|
||||
public UpdateChecker(String resourceID) {
|
||||
@ -58,13 +61,6 @@ public class UpdateChecker {
|
||||
latestVersion = version;
|
||||
}
|
||||
|
||||
public String getLatestVersion() {
|
||||
return latestVersion;
|
||||
}
|
||||
|
||||
public int getLatestSnapshot() {
|
||||
return latestSnapshot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Asks spigot for the version
|
||||
|
@ -1,5 +1,11 @@
|
||||
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.URLDecoder;
|
||||
import java.security.CodeSource;
|
||||
@ -8,26 +14,30 @@ import java.util.Enumeration;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
/**
|
||||
* User: Austin Date: 4/22/13 Time: 11:47 PM (c) lazertester
|
||||
*/
|
||||
// Code for this taken and slightly modified from
|
||||
// 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<>();
|
||||
// String relPath = pkgname.replace('.', '/');
|
||||
|
||||
// Get a File object for the package
|
||||
CodeSource src = Entity.class.getProtectionDomain().getCodeSource();
|
||||
|
||||
if (src != null)
|
||||
{
|
||||
if (src != null) {
|
||||
URL resource = src.getLocation();
|
||||
resource.getPath();
|
||||
processJarfile(resource, pkgname, classes);
|
||||
@ -36,26 +46,21 @@ public class ClassGetter
|
||||
return classes;
|
||||
}
|
||||
|
||||
private static Class<?> loadClass(String className)
|
||||
{
|
||||
try
|
||||
{
|
||||
private static Class<?> loadClass(String className) {
|
||||
try {
|
||||
return Class.forName(className);
|
||||
}
|
||||
catch (ClassNotFoundException e)
|
||||
{
|
||||
catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException("Unexpected ClassNotFoundException loading class '" + className + "'");
|
||||
}
|
||||
catch (NoClassDefFoundError e)
|
||||
{
|
||||
catch (NoClassDefFoundError e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void processJarfile(URL resource, String pkgname, ArrayList<Class<?>> classes)
|
||||
{
|
||||
try
|
||||
{
|
||||
@PremInfo(user = "%%__USER__%%")
|
||||
private static void processJarfile(URL resource, String pkgname, ArrayList<Class<?>> classes) {
|
||||
try {
|
||||
String relPath = pkgname.replace('.', '/');
|
||||
String resPath = URLDecoder.decode(resource.getPath(), "UTF-8");
|
||||
String jarPath = resPath.replaceFirst("[.]jar[!].*", ".jar").replaceFirst("file:", "");
|
||||
@ -64,22 +69,18 @@ public class ClassGetter
|
||||
|
||||
Enumeration<JarEntry> entries = jarFile.entries();
|
||||
|
||||
while (entries.hasMoreElements())
|
||||
{
|
||||
while (entries.hasMoreElements()) {
|
||||
JarEntry entry = entries.nextElement();
|
||||
String entryName = entry.getName();
|
||||
String className = null;
|
||||
if (entryName.endsWith(".class") && entryName.startsWith(relPath)
|
||||
&& entryName.length() > (relPath.length() + "/".length()))
|
||||
{
|
||||
if (entryName.endsWith(".class") && entryName.startsWith(relPath) &&
|
||||
entryName.length() > (relPath.length() + "/".length())) {
|
||||
className = entryName.replace('/', '.').replace('\\', '.').replace(".class", "");
|
||||
}
|
||||
if (className != null)
|
||||
{
|
||||
if (className != null) {
|
||||
Class<?> c = loadClass(className);
|
||||
|
||||
if (c != null)
|
||||
{
|
||||
if (c != null) {
|
||||
classes.add(c);
|
||||
}
|
||||
}
|
||||
@ -87,8 +88,7 @@ public class ClassGetter
|
||||
|
||||
jarFile.close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -244,7 +244,11 @@ public enum LibsMsg {
|
||||
LIBS_PERM_CHECK_SUCCESS(
|
||||
ChatColor.GOLD + "Lib's Disguises permission check, success. Pig disguise should be usable!"),
|
||||
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;
|
||||
|
||||
|
@ -100,6 +100,10 @@ DisguiseSounds: true
|
||||
# I disable this as it can be a little confusing when not used with self disguises
|
||||
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.
|
||||
# This is the only thing allowing the mobs to fly without glitching out.
|
||||
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 also overrides any custom name they have set in their disguise options.
|
||||
# This does not take effect on player disguises
|
||||
# Permission to disable is libsdisguises.disablename
|
||||
ShowNamesAboveDisguises: false
|
||||
|
||||
# This supports the above option.
|
||||
@ -167,6 +172,19 @@ BlowDisguisesWhenAttacking: false
|
||||
# Should the player's disguises be removed if they're attacked by something?
|
||||
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!
|
||||
StopShulkerDisguisesFromMoving: true
|
||||
|
||||
|
@ -92,6 +92,15 @@ permissions:
|
||||
libsdisguises.seethrough:
|
||||
description: Allows player to see through disguises.
|
||||
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:
|
||||
description: See all commands in tab-completion
|
||||
default: true
|
||||
|
Loading…
Reference in New Issue
Block a user