Merge pull request #229 from libraryaddict/translate

Add translations, cleanups and a few bugfixes
This commit is contained in:
libraryaddict 2017-06-20 06:12:08 +12:00 committed by GitHub
commit d1ad0098b1
30 changed files with 1095 additions and 746 deletions

View File

@ -28,6 +28,9 @@ SaveDisguises:
KeepDisguises: KeepDisguises:
PlayerDeath: false PlayerDeath: false
# Should the plugin use translations? Note that a player must see the message before it will appear in translations.yml
Translations: false
# How should the plugin handle self disguises scoreboards? # How should the plugin handle self disguises scoreboards?
# MODIFY_SCOREBOARD - Modifies the player's current team if possible, otherwise assigns them to a new scoreboard team # MODIFY_SCOREBOARD - Modifies the player's current team if possible, otherwise assigns them to a new scoreboard team
# IGNORE_SCOREBOARD - Doesn't touch scoreboards at all, effectively means that if you didn't disable pushing in their scoreboard team; They will still be pushed around # IGNORE_SCOREBOARD - Doesn't touch scoreboards at all, effectively means that if you didn't disable pushing in their scoreboard team; They will still be pushed around
@ -108,7 +111,6 @@ MonstersIgnoreDisguises: false
# Works only for disguised players when attacked by a entity (arrow, monster. etc) # Works only for disguised players when attacked by a entity (arrow, monster. etc)
# This will blow all disguises he has on him # This will blow all disguises he has on him
BlowDisguises: false BlowDisguises: false
BlownDisguiseMessage: '&cYour disguise was blown!'
#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

View File

@ -54,19 +54,19 @@ commands:
permission: libsdisguises.seecmd.viewself permission: libsdisguises.seecmd.viewself
description: Toggle seeing your own disguise on or off. description: Toggle seeing your own disguise on or off.
disguisemodify: disguisemodify:
aliases: [dmodify] aliases: [dmodify, dmod]
permission: libsdisguises.seecmd.disguisemodify permission: libsdisguises.seecmd.disguisemodify
description: Modify your own disguise description: Modify your own disguise
disguisemodifyplayer: disguisemodifyplayer:
aliases: [dmodifyplayer] aliases: [dmodifyplayer, dmodplayer]
permission: libsdisguises.seecmd.disguisemodifyplayer permission: libsdisguises.seecmd.disguisemodifyplayer
description: Modify the disguise of a player description: Modify the disguise of a player
disguisemodifyradius: disguisemodifyradius:
aliases: [dmodifyradius] aliases: [dmodifyradius, dmodradius]
permission: libsdisguises.seecmd.disguisemodifyradius permission: libsdisguises.seecmd.disguisemodifyradius
description: Modify disguises in a radius description: Modify disguises in a radius
disguisemodifyentity: disguisemodifyentity:
aliases: [dmodifyentity] aliases: [dmodifyentity, dmodentity]
permission: libsdisguises.seecmd.disguisemodifyentity permission: libsdisguises.seecmd.disguisemodifyentity
description: Modify a disguise by right clicking them description: Modify a disguise by right clicking them

View File

@ -4,6 +4,7 @@ import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map.Entry; import java.util.Map.Entry;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -25,9 +26,8 @@ public class DisguiseConfig {
private static boolean collectEnabled; private static boolean collectEnabled;
private static boolean colorizeSheep; private static boolean colorizeSheep;
private static boolean colorizeWolf; private static boolean colorizeWolf;
private static HashMap<String, Disguise> customDisguises = new HashMap<String, Disguise>(); private static HashMap<String, Disguise> customDisguises = new HashMap<>();
private static boolean disableInvisibility; private static boolean disableInvisibility;
private static String disguiseBlownMessage;
private static int disguiseCloneExpire; private static int disguiseCloneExpire;
private static int disguiseEntityExpire; private static int disguiseEntityExpire;
private static boolean displayPlayerDisguisesInTab; private static boolean displayPlayerDisguisesInTab;
@ -51,7 +51,6 @@ public class DisguiseConfig {
private static boolean stopShulkerDisguisesFromMoving; private static boolean stopShulkerDisguisesFromMoving;
private static boolean targetDisguises; private static boolean targetDisguises;
private static boolean undisguiseSwitchWorlds; private static boolean undisguiseSwitchWorlds;
private static String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED + "There is a update ready to be downloaded! You are using " + ChatColor.RED + "v%s" + ChatColor.DARK_RED + ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!";
private static String updateNotificationPermission; private static String updateNotificationPermission;
private static boolean viewSelfDisguise; private static boolean viewSelfDisguise;
private static boolean witherSkullEnabled; private static boolean witherSkullEnabled;
@ -60,11 +59,12 @@ public class DisguiseConfig {
private static boolean updatePlayerCache; private static boolean updatePlayerCache;
private static boolean savePlayerDisguises; private static boolean savePlayerDisguises;
private static boolean saveEntityDisguises; private static boolean saveEntityDisguises;
private static boolean useTranslations;
public static Entry<String, Disguise> getCustomDisguise(String disguise) { public static Entry<String, Disguise> getCustomDisguise(String disguise) {
for (Entry<String, Disguise> entry : customDisguises.entrySet()) { for (Entry<String, Disguise> entry : customDisguises.entrySet()) {
if (!entry.getKey().equalsIgnoreCase(disguise) && !entry.getKey().replaceAll("_", "").equalsIgnoreCase( if (!entry.getKey().equalsIgnoreCase(disguise) && !entry.getKey().replaceAll("_", "")
disguise)) .equalsIgnoreCase(disguise))
continue; continue;
return entry; return entry;
@ -77,6 +77,16 @@ public class DisguiseConfig {
return savePlayerDisguises; return savePlayerDisguises;
} }
public static boolean isUseTranslations() {
return useTranslations;
}
public static void setUseTranslations(boolean setUseTranslations) {
useTranslations = setUseTranslations;
TranslateType.reloadTranslations();
}
public static boolean isSaveEntityDisguises() { public static boolean isSaveEntityDisguises() {
return saveEntityDisguises; return saveEntityDisguises;
} }
@ -97,10 +107,6 @@ public class DisguiseConfig {
return customDisguises; return customDisguises;
} }
public static String getDisguiseBlownMessage() {
return disguiseBlownMessage;
}
public static int getDisguiseCloneExpire() { public static int getDisguiseCloneExpire() {
return disguiseCloneExpire; return disguiseCloneExpire;
} }
@ -113,10 +119,6 @@ public class DisguiseConfig {
return maxClonedDisguises; return maxClonedDisguises;
} }
public static String getUpdateMessage() {
return updateMessage;
}
public static String getUpdateNotificationPermission() { public static String getUpdateNotificationPermission() {
return updateNotificationPermission; return updateNotificationPermission;
} }
@ -153,7 +155,6 @@ public class DisguiseConfig {
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox")); setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises")); setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
setDisguiseBlownOnAttack(config.getBoolean("BlowDisguises")); setDisguiseBlownOnAttack(config.getBoolean("BlowDisguises"));
setDisguiseBlownMessage(ChatColor.translateAlternateColorCodes('&', config.getString("BlownDisguiseMessage")));
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath")); setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving")); setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
setMovementPacketsEnabled(config.getBoolean("PacketsEnabled.Movement")); setMovementPacketsEnabled(config.getBoolean("PacketsEnabled.Movement"));
@ -180,10 +181,11 @@ public class DisguiseConfig {
setUpdateGameProfiles(config.getBoolean("UpdateGameProfiles")); setUpdateGameProfiles(config.getBoolean("UpdateGameProfiles"));
setSavePlayerDisguises(config.getBoolean("SaveDisguises.Players")); setSavePlayerDisguises(config.getBoolean("SaveDisguises.Players"));
setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities")); setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities"));
setUseTranslations(config.getBoolean("Translations"));
try { try {
String option = config.getString("SelfDisguisesScoreboard", String option = config.getString("SelfDisguisesScoreboard", DisguisePushing.MODIFY_SCOREBOARD.name())
DisguisePushing.MODIFY_SCOREBOARD.name()).toUpperCase(); .toUpperCase();
if (!option.endsWith("_SCOREBOARD")) if (!option.endsWith("_SCOREBOARD"))
option += "_SCOREBOARD"; option += "_SCOREBOARD";
@ -191,8 +193,8 @@ public class DisguiseConfig {
disablePushing = DisguisePushing.valueOf(option); disablePushing = DisguisePushing.valueOf(option);
} }
catch (Exception ex) { catch (Exception ex) {
System.out.println("[LibsDisguises] Cannot parse '" + config.getString( System.out.println("[LibsDisguises] Cannot parse '" + config
"SelfDisguisesScoreboard") + "' to a valid option for SelfDisguisesTeam"); .getString("SelfDisguisesScoreboard") + "' to a valid option for SelfDisguisesTeam");
} }
customDisguises.clear(); customDisguises.clear();
@ -220,8 +222,9 @@ public class DisguiseConfig {
} }
try { try {
Disguise disguise = DisguiseParser.parseDisguise(Bukkit.getConsoleSender(), "disguise", Disguise disguise = DisguiseParser
toParse.split(" "), DisguiseParser.getPermissions(Bukkit.getConsoleSender(), "disguise")); .parseDisguise(Bukkit.getConsoleSender(), "disguise", toParse.split(" "),
DisguiseParser.getPermissions(Bukkit.getConsoleSender(), "disguise"));
customDisguises.put(key, disguise); customDisguises.put(key, disguise);
@ -416,10 +419,6 @@ public class DisguiseConfig {
disableInvisibility = disableInvis; disableInvisibility = disableInvis;
} }
public static void setDisguiseBlownMessage(String newMessage) {
disguiseBlownMessage = newMessage;
}
public static void setDisguiseBlownOnAttack(boolean blowDisguise) { public static void setDisguiseBlownOnAttack(boolean blowDisguise) {
blowDisguisesOnAttack = blowDisguise; blowDisguisesOnAttack = blowDisguise;
} }
@ -554,10 +553,6 @@ public class DisguiseConfig {
undisguiseSwitchWorlds = isUndisguise; undisguiseSwitchWorlds = isUndisguise;
} }
public static void setUpdateMessage(String newMessage) {
updateMessage = newMessage;
}
public static void setUpdateNotificationPermission(String newPermission) { public static void setUpdateNotificationPermission(String newPermission) {
updateNotificationPermission = newPermission; updateNotificationPermission = newPermission;
} }

View File

@ -17,6 +17,7 @@ import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.UpdateChecker; import me.libraryaddict.disguise.utilities.UpdateChecker;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -86,15 +87,14 @@ public class DisguiseListener implements Listener {
continue; continue;
} }
p.sendMessage(String.format(DisguiseConfig.getUpdateMessage(), currentVersion, p.sendMessage(LibsMsg.UPDATE_READY.get(currentVersion, latestVersion));
latestVersion));
} }
} }
}); });
} }
catch (Exception ex) { catch (Exception ex) {
System.out.print( System.out.print(String
String.format("[LibsDisguises] Failed to check for update: %s", ex.getMessage())); .format("[LibsDisguises] Failed to check for update: %s", ex.getMessage()));
} }
} }
}, 0, (20 * 60 * 60 * 6)); // Check every 6 hours }, 0, (20 * 60 * 60 * 6)); // Check every 6 hours
@ -138,8 +138,10 @@ public class DisguiseListener implements Listener {
if (disguises.length > 0) { if (disguises.length > 0) {
DisguiseAPI.undisguiseToAll(entity); DisguiseAPI.undisguiseToAll(entity);
if (DisguiseConfig.getDisguiseBlownMessage().length() > 0) { String blown = LibsMsg.BLOWN_DISGUISE.get();
entity.sendMessage(DisguiseConfig.getDisguiseBlownMessage());
if (blown.length() > 0) {
entity.sendMessage(blown);
} }
} }
} }
@ -278,15 +280,15 @@ public class DisguiseListener implements Listener {
Player p = event.getPlayer(); Player p = event.getPlayer();
if (latestVersion != null && p.hasPermission(DisguiseConfig.getUpdateNotificationPermission())) { if (latestVersion != null && p.hasPermission(DisguiseConfig.getUpdateNotificationPermission())) {
p.sendMessage(String.format(DisguiseConfig.getUpdateMessage(), currentVersion, latestVersion)); p.sendMessage(LibsMsg.UPDATE_READY.get(currentVersion, latestVersion));
} }
if (DisguiseConfig.isBedPacketsEnabled()) { if (DisguiseConfig.isBedPacketsEnabled()) {
chunkMove(p, p.getLocation(), null); chunkMove(p, p.getLocation(), null);
} }
if (DisguiseConfig.isSaveGameProfiles() && DisguiseConfig.isUpdateGameProfiles() && DisguiseUtilities.hasGameProfile( if (DisguiseConfig.isSaveGameProfiles() && DisguiseConfig.isUpdateGameProfiles() && DisguiseUtilities
p.getName())) { .hasGameProfile(p.getName())) {
WrappedGameProfile profile = WrappedGameProfile.fromPlayer(p); WrappedGameProfile profile = WrappedGameProfile.fromPlayer(p);
if (!profile.getProperties().isEmpty()) { if (!profile.getProperties().isEmpty()) {
@ -364,9 +366,9 @@ public class DisguiseListener implements Listener {
Location to = event.getTo(); Location to = event.getTo();
Location from = event.getFrom(); Location from = event.getFrom();
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord( if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities
from.getBlockX()) || DisguiseUtilities.getChunkCord( .getChunkCord(from.getBlockX()) || DisguiseUtilities
to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) { .getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) {
chunkMove(event.getPlayer(), to, from); chunkMove(event.getPlayer(), to, from);
} }
} }
@ -375,7 +377,8 @@ public class DisguiseListener implements Listener {
Disguise disguise; Disguise disguise;
if ((disguise = DisguiseAPI.getDisguise(event.getPlayer())) != null) { if ((disguise = DisguiseAPI.getDisguise(event.getPlayer())) != null) {
if (disguise.getType() == DisguiseType.SHULKER) { // Stop Shulker disguises from moving their coordinates if (disguise
.getType() == DisguiseType.SHULKER) { // Stop Shulker disguises from moving their coordinates
Location from = event.getFrom(); Location from = event.getFrom();
Location to = event.getTo(); Location to = event.getTo();
@ -429,8 +432,8 @@ public class DisguiseListener implements Listener {
@EventHandler @EventHandler
public void onRightClick(PlayerInteractEntityEvent event) { public void onRightClick(PlayerInteractEntityEvent event) {
if (!disguiseEntity.containsKey(event.getPlayer().getName()) && !disguiseClone.containsKey( if (!disguiseEntity.containsKey(event.getPlayer().getName()) && !disguiseClone
event.getPlayer().getName())) { .containsKey(event.getPlayer().getName())) {
return; return;
} }
@ -456,9 +459,9 @@ public class DisguiseListener implements Listener {
Disguise disguise = disguiseEntity.remove(p.getName()); Disguise disguise = disguiseEntity.remove(p.getName());
if (disguise != null) { if (disguise != null) {
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) { if (disguise.isMiscDisguise() && !DisguiseConfig
p.sendMessage( .isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) {
ChatColor.RED + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!"); p.sendMessage(LibsMsg.DISABLED_LIVING_TO_MISC.get());
} else { } else {
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) { if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
if (disguise.getWatcher() instanceof LivingWatcher) { if (disguise.getWatcher() instanceof LivingWatcher) {
@ -472,31 +475,62 @@ public class DisguiseListener implements Listener {
DisguiseAPI.disguiseToAll(entity, disguise); DisguiseAPI.disguiseToAll(entity, disguise);
String disguiseName = "a "; String disguiseName;
if (disguise instanceof PlayerDisguise) { if (disguise instanceof PlayerDisguise) {
disguiseName = "the player " + ((PlayerDisguise) disguise).getName(); disguiseName = ((PlayerDisguise) disguise).getName();
} else { } else {
disguiseName += disguise.getType().toReadable(); disguiseName = disguise.getType().toReadable();
} }
// Jeez, maybe I should redo my messages here
if (disguise.isDisguiseInUse()) { if (disguise.isDisguiseInUse()) {
p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : if (disguise.isPlayerDisguise()) {
"the ") + entityName + " as " + disguiseName + "!"); if (entity instanceof Player) {
p.sendMessage(LibsMsg.LISTEN_ENTITY_PLAYER_DISG_PLAYER.get(entityName, disguiseName));
} else {
p.sendMessage(LibsMsg.LISTEN_ENTITY_ENTITY_DISG_PLAYER.get(entityName, disguiseName));
}
} else {
if (entity instanceof Player) {
p.sendMessage(LibsMsg.LISTEN_ENTITY_PLAYER_DISG_ENTITY.get(entityName, disguiseName));
} else {
p.sendMessage(LibsMsg.LISTEN_ENTITY_ENTITY_DISG_ENTITY.get(entityName, disguiseName));
}
}
} else { } else {
p.sendMessage(ChatColor.RED + "Failed to disguise " + (entity instanceof Player ? "" : if (disguise.isPlayerDisguise()) {
"the ") + entityName + " as " + disguiseName + "!"); if (entity instanceof Player) {
p.sendMessage(
LibsMsg.LISTEN_ENTITY_PLAYER_DISG_PLAYER_FAIL.get(entityName, disguiseName));
} else {
p.sendMessage(
LibsMsg.LISTEN_ENTITY_ENTITY_DISG_PLAYER_FAIL.get(entityName, disguiseName));
}
} else {
if (entity instanceof Player) {
p.sendMessage(
LibsMsg.LISTEN_ENTITY_PLAYER_DISG_ENTITY_FAIL.get(entityName, disguiseName));
} else {
p.sendMessage(
LibsMsg.LISTEN_ENTITY_ENTITY_DISG_ENTITY_FAIL.get(entityName, disguiseName));
}
}
} }
} }
} else { } else {
if (DisguiseAPI.isDisguised(entity)) { if (DisguiseAPI.isDisguised(entity)) {
DisguiseAPI.undisguiseToAll(entity); DisguiseAPI.undisguiseToAll(entity);
p.sendMessage( if (entity instanceof Player)
ChatColor.RED + "Undisguised " + (entity instanceof Player ? "" : "the ") + entityName); p.sendMessage(LibsMsg.LISTEN_UNDISG_PLAYER.get(entityName));
else
p.sendMessage(LibsMsg.LISTEN_UNDISG_ENT.get(entityName));
} else { } else {
p.sendMessage( if (entity instanceof Player)
ChatColor.RED + (entity instanceof Player ? "" : "the") + entityName + " isn't disguised!"); p.sendMessage(LibsMsg.LISTEN_UNDISG_PLAYER_FAIL.get(entityName));
else
p.sendMessage(LibsMsg.LISTEN_UNDISG_ENT_FAIL.get(entityName));
} }
} }
} else if (disguiseModify.containsKey(p.getName())) { } else if (disguiseModify.containsKey(p.getName())) {
@ -505,22 +539,22 @@ public class DisguiseListener implements Listener {
Disguise disguise = DisguiseAPI.getDisguise(p, entity); Disguise disguise = DisguiseAPI.getDisguise(p, entity);
if (disguise == null) { if (disguise == null) {
p.sendMessage(ChatColor.RED + entityName + " is not disguised!"); p.sendMessage(LibsMsg.UNDISG_PLAYER_FAIL.get(entityName));
return; return;
} }
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = DisguiseParser.getPermissions(p, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = DisguiseParser
"libsdisguises.disguiseentitymodify."); .getPermissions(p, "libsdisguises.disguiseentitymodify.");
if (!perms.containsKey(new DisguisePerm(disguise.getType()))) { if (!perms.containsKey(new DisguisePerm(disguise.getType()))) {
p.sendMessage(ChatColor.RED + "You do not have permission to modify this disguise"); p.sendMessage(LibsMsg.DMODPLAYER_NOPERM.get());
return; return;
} }
try { try {
DisguiseParser.callMethods(p, disguise, perms.get(new DisguisePerm(disguise.getType())), DisguiseParser.callMethods(p, disguise, perms.get(new DisguisePerm(disguise.getType())),
new ArrayList<String>(), options); new ArrayList<String>(), options);
p.sendMessage(ChatColor.RED + "Modified the disguise!"); p.sendMessage(LibsMsg.LISTENER_MODIFIED_DISG.get());
} }
catch (DisguiseParseException ex) { catch (DisguiseParseException ex) {
if (ex.getMessage() != null) { if (ex.getMessage() != null) {
@ -535,8 +569,8 @@ public class DisguiseListener implements Listener {
@EventHandler @EventHandler
public void onTarget(EntityTargetEvent event) { public void onTarget(EntityTargetEvent event) {
if (DisguiseConfig.isMonstersIgnoreDisguises() && event.getTarget() != null && event.getTarget() instanceof Player && DisguiseAPI.isDisguised( if (DisguiseConfig.isMonstersIgnoreDisguises() && event.getTarget() != null && event
event.getTarget())) { .getTarget() instanceof Player && DisguiseAPI.isDisguised(event.getTarget())) {
switch (event.getReason()) { switch (event.getReason()) {
case TARGET_ATTACKED_ENTITY: case TARGET_ATTACKED_ENTITY:
case TARGET_ATTACKED_OWNER: case TARGET_ATTACKED_OWNER:
@ -557,9 +591,9 @@ public class DisguiseListener implements Listener {
Location from = event.getFrom(); Location from = event.getFrom();
if (DisguiseConfig.isBedPacketsEnabled()) { if (DisguiseConfig.isBedPacketsEnabled()) {
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord( if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities
from.getBlockX()) || DisguiseUtilities.getChunkCord( .getChunkCord(from.getBlockX()) || DisguiseUtilities
to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) { .getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) {
chunkMove(player, null, from); chunkMove(player, null, from);
Bukkit.getScheduler().runTask(plugin, new Runnable() { Bukkit.getScheduler().runTask(plugin, new Runnable() {
@ -575,7 +609,8 @@ public class DisguiseListener implements Listener {
return; return;
} }
if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null && to.getWorld() != from.getWorld()) { if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null && to
.getWorld() != from.getWorld()) {
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) { for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) {
disguise.removeDisguise(); disguise.removeDisguise();
} }
@ -584,8 +619,8 @@ public class DisguiseListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onVehicleEnter(VehicleEnterEvent event) { public void onVehicleEnter(VehicleEnterEvent event) {
if (event.getEntered() instanceof Player && DisguiseAPI.isDisguised((Player) event.getEntered(), if (event.getEntered() instanceof Player && DisguiseAPI
event.getEntered())) { .isDisguised((Player) event.getEntered(), event.getEntered())) {
DisguiseUtilities.removeSelfDisguise((Player) event.getEntered()); DisguiseUtilities.removeSelfDisguise((Player) event.getEntered());
((Player) event.getEntered()).updateInventory(); ((Player) event.getEntered()).updateInventory();

View File

@ -4,10 +4,9 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import me.libraryaddict.disguise.disguisetypes.watchers.*; import me.libraryaddict.disguise.disguisetypes.watchers.*;
import me.libraryaddict.disguise.utilities.*;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
@ -19,7 +18,6 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.entity.Zombie; import org.bukkit.entity.Zombie;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.comphenix.protocol.reflect.FieldAccessException; import com.comphenix.protocol.reflect.FieldAccessException;
@ -45,13 +43,6 @@ import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand;
import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.MetaIndex;
import me.libraryaddict.disguise.utilities.DisguiseSound;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.DisguiseValues;
import me.libraryaddict.disguise.utilities.FakeBoundingBox;
import me.libraryaddict.disguise.utilities.Metrics;
import me.libraryaddict.disguise.utilities.PacketsManager;
import me.libraryaddict.disguise.utilities.ReflectionManager;
public class LibsDisguises extends JavaPlugin { public class LibsDisguises extends JavaPlugin {
private static LibsDisguises instance; private static LibsDisguises instance;
@ -87,6 +78,8 @@ public class LibsDisguises extends JavaPlugin {
PacketsManager.addPacketListeners(); PacketsManager.addPacketListeners();
TranslateType.MESSAGES.name(); // Call the static loader
listener = new DisguiseListener(this); listener = new DisguiseListener(this);
Bukkit.getPluginManager().registerEvents(listener, this); Bukkit.getPluginManager().registerEvents(listener, this);
@ -137,8 +130,6 @@ public class LibsDisguises extends JavaPlugin {
* Reloads the config with new config options. * Reloads the config with new config options.
*/ */
public void reload() { public void reload() {
HandlerList.unregisterAll(listener);
reloadConfig(); reloadConfig();
DisguiseConfig.initConfig(getConfig()); DisguiseConfig.initConfig(getConfig());
} }

View File

@ -33,10 +33,11 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
itel.remove(); itel.remove();
} }
return new ArrayList<String>(new HashSet<String>(list)); return new ArrayList<>(new HashSet<>(list));
} }
protected ArrayList<String> getAllowedDisguises(HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> hashMap) { protected ArrayList<String> getAllowedDisguises(
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> hashMap) {
ArrayList<String> allowedDisguises = new ArrayList<>(); ArrayList<String> allowedDisguises = new ArrayList<>();
for (DisguisePerm type : hashMap.keySet()) { for (DisguisePerm type : hashMap.keySet()) {
@ -52,7 +53,7 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
} }
protected String[] getArgs(String[] args) { protected String[] getArgs(String[] args) {
ArrayList<String> newArgs = new ArrayList<String>(); ArrayList<String> newArgs = new ArrayList<>();
for (int i = 0; i < args.length - 1; i++) { for (int i = 0; i < args.length - 1; i++) {
String s = args[i]; String s = args[i];
@ -69,29 +70,21 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
public final String getPermNode() { public final String getPermNode() {
if (this instanceof DisguiseCommand) { if (this instanceof DisguiseCommand) {
return "disguise"; return "disguise";
} } else if (this instanceof DisguiseEntityCommand) {
else if (this instanceof DisguiseEntityCommand) {
return "disguiseentity"; return "disguiseentity";
} } else if (this instanceof DisguisePlayerCommand) {
else if (this instanceof DisguisePlayerCommand) {
return "disguiseplayer"; return "disguiseplayer";
} } else if (this instanceof DisguiseRadiusCommand) {
else if (this instanceof DisguiseRadiusCommand) {
return "disguiseradius"; return "disguiseradius";
} } else if (this instanceof DisguiseModifyCommand) {
else if (this instanceof DisguiseModifyCommand) {
return "disguisemodify"; return "disguisemodify";
} } else if (this instanceof DisguiseModifyEntityCommand) {
else if (this instanceof DisguiseModifyEntityCommand) {
return "disguisemodifyentity"; return "disguisemodifyentity";
} } else if (this instanceof DisguiseModifyPlayerCommand) {
else if (this instanceof DisguiseModifyPlayerCommand) {
return "disguisemodifyplayer"; return "disguisemodifyplayer";
} } else if (this instanceof DisguiseModifyRadiusCommand) {
else if (this instanceof DisguiseModifyRadiusCommand) {
return "disguisemodifyradius"; return "disguisemodifyradius";
} } else {
else {
throw new UnsupportedOperationException("Unknown disguise command, perm node not found"); throw new UnsupportedOperationException("Unknown disguise command, perm node not found");
} }
} }

View File

@ -1,9 +1,11 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.util.ArrayList; import me.libraryaddict.disguise.DisguiseConfig;
import java.util.HashMap; import me.libraryaddict.disguise.LibsDisguises;
import java.util.List; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -12,16 +14,15 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseConfig; import java.util.ArrayList;
import me.libraryaddict.disguise.LibsDisguises; import java.util.HashMap;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import java.util.List;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender.getName().equals("CONSOLE")) { if (sender.getName().equals("CONSOLE")) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
@ -37,43 +38,33 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
for (int i = player == null ? 0 : 1; i < args.length; i++) { for (int i = player == null ? 0 : 1; i < args.length; i++) {
String option = args[i]; String option = args[i];
if (StringUtils.startsWithIgnoreCase(option, "ignoreEquip") if (StringUtils.startsWithIgnoreCase(option, "ignoreEquip") || StringUtils
|| StringUtils.startsWithIgnoreCase(option, "ignoreEnquip")) { .startsWithIgnoreCase(option, "ignoreEnquip")) {
doEquipment = false; doEquipment = false;
} } else if (option.equalsIgnoreCase("doSneakSprint")) {
else if (option.equalsIgnoreCase("doSneakSprint")) {
doSneak = true; doSneak = true;
doSprint = true; doSprint = true;
} } else if (option.equalsIgnoreCase("doSneak")) {
else if (option.equalsIgnoreCase("doSneak")) {
doSneak = true; doSneak = true;
} } else if (option.equalsIgnoreCase("doSprint")) {
else if (option.equalsIgnoreCase("doSprint")) {
doSprint = true; doSprint = true;
} } else {
else { sender.sendMessage(LibsMsg.INVALID_CLONE.get(option));
sender.sendMessage(ChatColor.DARK_RED + "Unknown option '" + option
+ "' - Valid options are 'IgnoreEquipment' 'DoSneakSprint' 'DoSneak' 'DoSprint'");
return true; return true;
} }
} }
Boolean[] options = new Boolean[] { Boolean[] options = new Boolean[]{doEquipment, doSneak, doSprint};
doEquipment, doSneak, doSprint
};
if (player != null) { if (player != null) {
DisguiseUtilities.createClonedDisguise((Player) sender, player, options); DisguiseUtilities.createClonedDisguise((Player) sender, player, options);
} } else {
else {
LibsDisguises.getInstance().getListener().setDisguiseClone(sender.getName(), options); LibsDisguises.getInstance().getListener().setDisguiseClone(sender.getName(), options);
sender.sendMessage(ChatColor.RED + "Right click a entity in the next " + DisguiseConfig.getDisguiseCloneExpire() sender.sendMessage(LibsMsg.CLICK_TIMER.get(DisguiseConfig.getDisguiseCloneExpire()));
+ " seconds to grab the disguise reference!");
} }
} } else {
else { sender.sendMessage(LibsMsg.NO_PERM.get());
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
} }
return true; return true;
@ -81,7 +72,7 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
@ -103,12 +94,10 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
sender.sendMessage(ChatColor.DARK_GREEN HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
+ "Right click a entity to get a disguise reference you can pass to other disguise commands!"); sender.sendMessage(LibsMsg.CLONE_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN sender.sendMessage(LibsMsg.CLONE_HELP2.get());
+ "Security note: Any references you create will be available to all players able to use disguise references."); sender.sendMessage(LibsMsg.CLONE_HELP3.get());
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseclone IgnoreEquipment" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN
+ "Optional" + ChatColor.DARK_GREEN + ")");
} }
} }

View File

@ -10,8 +10,10 @@ import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.DisguiseParser; import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -30,7 +32,7 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Entity)) { if (!(sender instanceof Entity)) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
@ -69,9 +71,9 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
DisguiseAPI.disguiseToAll((Player) sender, disguise); DisguiseAPI.disguiseToAll((Player) sender, disguise);
if (disguise.isDisguiseInUse()) { if (disguise.isDisguiseInUse()) {
sender.sendMessage(ChatColor.RED + "Now disguised as a " + disguise.getType().toReadable()); sender.sendMessage(LibsMsg.DISGUISED.get(disguise.getType().toReadable()));
} else { } else {
sender.sendMessage(ChatColor.RED + "Failed to disguise as a " + disguise.getType().toReadable()); sender.sendMessage(LibsMsg.FAILED_DISGIUSE.get(disguise.getType().toReadable()));
} }
return true; return true;
@ -79,15 +81,13 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender);
if (args.length == 0) { if (args.length == 0) {
for (String type : getAllowedDisguises(perms)) { tabs.addAll(getAllowedDisguises(perms));
tabs.add(type);
}
} else { } else {
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]); DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]);
@ -100,7 +100,7 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
tabs.add(player.getName()); tabs.add(player.getName());
} }
} else { } else {
ArrayList<String> usedOptions = new ArrayList<String>(); ArrayList<String> usedOptions = new ArrayList<>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) { for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
@ -141,8 +141,8 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods( for (Method method : ReflectionFlagWatchers
disguiseType.getWatcherClass())) { .getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -160,18 +160,18 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
protected void sendCommandUsage(CommandSender sender, protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Choose a disguise to become the disguise!"); sender.sendMessage(LibsMsg.DISG_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN + StringUtils.join( sender.sendMessage(LibsMsg.CAN_USE_DISGS
allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
if (allowedDisguises.contains("player")) { if (allowedDisguises.contains("player")) {
sender.sendMessage(ChatColor.DARK_GREEN + "/disguise player <Name>"); sender.sendMessage(LibsMsg.DISG_HELP2.get());
} }
sender.sendMessage(ChatColor.DARK_GREEN + "/disguise <DisguiseType> <Baby>"); sender.sendMessage(LibsMsg.DISG_HELP3.get());
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseplayer <Dropped_Item/Falling_Block> <Id> <Durability>"); sender.sendMessage(LibsMsg.DISG_HELP4.get());
} }
} }
} }

View File

@ -1,19 +1,5 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.Disguise;
@ -21,19 +7,34 @@ import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.utilities.DisguiseParser; import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
if (getPermissions(sender).isEmpty()) { if (getPermissions(sender).isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -61,14 +62,14 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
LibsDisguises.getInstance().getListener().setDisguiseEntity(sender.getName(), disguise); LibsDisguises.getInstance().getListener().setDisguiseEntity(sender.getName(), disguise);
sender.sendMessage(ChatColor.RED + "Right click an entity in the next " + DisguiseConfig.getDisguiseEntityExpire() sender.sendMessage(
+ " seconds to disguise it as a " + disguise.getType().toReadable() + "!"); LibsMsg.DISG_ENT_CLICK.get(DisguiseConfig.getDisguiseEntityExpire(), disguise.getType().toReadable()));
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
return tabs; return tabs;
@ -82,8 +83,7 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
for (String type : getAllowedDisguises(perms)) { for (String type : getAllowedDisguises(perms)) {
tabs.add(type); tabs.add(type);
} }
} } else {
else {
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]); DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]);
if (disguiseType == null) if (disguiseType == null)
@ -93,9 +93,8 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
} }
} } else {
else { ArrayList<String> usedOptions = new ArrayList<>();
ArrayList<String> usedOptions = new ArrayList<String>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) { for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
@ -124,8 +123,7 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e); tabs.add(e);
} }
} } else {
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
@ -137,7 +135,8 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -155,22 +154,22 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
* @param map * @param map
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Choose a disguise then right click a entity to disguise it!"); sender.sendMessage(LibsMsg.DISG_ENT_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.CAN_USE_DISGS
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
if (allowedDisguises.contains("player")) { if (allowedDisguises.contains("player")) {
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseentity player <Name>"); sender.sendMessage(LibsMsg.DISG_ENT_HELP3.get());
} }
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseentity <DisguiseType> <Baby>"); sender.sendMessage(LibsMsg.DISG_ENT_HELP4.get());
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseentity <Dropped_Item/Falling_Block> <Id> <Durability>"); sender.sendMessage(LibsMsg.DISG_ENT_HELP5.get());
} }
} }
} }

View File

@ -1,40 +1,38 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
for (String node : new String[] { for (String node : new String[]{"disguise", "disguiseradius", "disguiseentity", "disguiseplayer"}) {
"disguise", "disguiseradius", "disguiseentity", "disguiseplayer" HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permMap = DisguiseParser
}) { .getPermissions(sender, "libsdisguises." + node + ".");
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permMap = DisguiseParser.getPermissions(sender,
"libsdisguises." + node + ".");
if (!permMap.isEmpty()) { if (!permMap.isEmpty()) {
if (args.length == 0) { if (args.length == 0) {
sendCommandUsage(sender, null); sendCommandUsage(sender, null);
return true; return true;
} } else {
else {
ParamInfo help = null; ParamInfo help = null;
for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) { for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) {
@ -47,20 +45,25 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
} }
if (help != null) { if (help != null) {
sender.sendMessage(ChatColor.RED + help.getName() + ": " + ChatColor.GREEN if (help.isEnums()) {
+ StringUtils.join(help.getEnums(""), ChatColor.RED + ", " + ChatColor.GREEN)); sender.sendMessage(ChatColor.RED + help.getName() + ": " + ChatColor.GREEN + StringUtils
.join(help.getEnums(""), ChatColor.RED + ", " + ChatColor.GREEN));
} else {
sender.sendMessage(
ChatColor.RED + help.getName() + ": " + ChatColor.GREEN + help.getDescription());
}
return true; return true;
} }
DisguisePerm type = DisguiseParser.getDisguisePerm(args[0]); DisguisePerm type = DisguiseParser.getDisguisePerm(args[0]);
if (type == null) { if (type == null) {
sender.sendMessage(ChatColor.RED + "Cannot find the disguise " + args[0]); sender.sendMessage(LibsMsg.DHELP_CANTFIND.get(args[0]));
return true; return true;
} }
if (!permMap.containsKey(type)) { if (!permMap.containsKey(type)) {
sender.sendMessage(ChatColor.RED + "You do not have permission for that disguise!"); sender.sendMessage(LibsMsg.NO_PERM_DISGUISE.get());
return true; return true;
} }
@ -80,8 +83,7 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
allowed = true; allowed = true;
break; break;
} }
} } else if (!key.contains(method.getName().toLowerCase())) {
else if (!key.contains(method.getName().toLowerCase())) {
allowed = true; allowed = true;
break; break;
} }
@ -105,13 +107,13 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
if (declaring == LivingWatcher.class) { if (declaring == LivingWatcher.class) {
methodColor = ChatColor.AQUA; methodColor = ChatColor.AQUA;
} } else if (!(FlagWatcher.class
else if (!(FlagWatcher.class.isAssignableFrom(declaring)) || declaring == FlagWatcher.class) { .isAssignableFrom(declaring)) || declaring == FlagWatcher.class) {
methodColor = ChatColor.GRAY; methodColor = ChatColor.GRAY;
} }
String str = method.getName() + ChatColor.DARK_RED + "(" + ChatColor.GREEN + info.getName() String str = method.getName() + ChatColor.DARK_RED + "(" + ChatColor.GREEN + info
+ ChatColor.DARK_RED + ")"; .getName() + ChatColor.DARK_RED + ")";
map.put(str, methodColor); map.put(str, methodColor);
methods.add(str); methods.add(str);
@ -131,12 +133,11 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
methods.add(ChatColor.RED + "No options with permission to use"); methods.add(ChatColor.RED + "No options with permission to use");
} }
sender.sendMessage(ChatColor.DARK_RED + type.toReadable() + " options: " sender.sendMessage(LibsMsg.DHELP_OPTIONS.get(ChatColor.DARK_RED + type.toReadable(),
+ StringUtils.join(methods, ChatColor.DARK_RED + ", ")); StringUtils.join(methods, ChatColor.DARK_RED + ", ")));
if (ignored > 0) { if (ignored > 0) {
sender.sendMessage(ChatColor.RED + "Ignored " + ignored sender.sendMessage(LibsMsg.NO_PERMS_USE_OPTIONS.get(ignored));
+ " options you do not have permission to use. Add 'show' to view unusable options.");
} }
return true; return true;
@ -144,20 +145,18 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
} }
} }
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
for (String node : new String[] { for (String node : new String[]{"disguise", "disguiseradius", "disguiseentity", "disguiseplayer"}) {
"disguise", "disguiseradius", "disguiseentity", "disguiseplayer" HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = DisguiseParser
}) { .getPermissions(sender, "libsdisguises." + node + ".");
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = DisguiseParser.getPermissions(sender,
"libsdisguises." + node + ".");
if (args.length == 0) { if (args.length == 0) {
for (DisguisePerm type : perms.keySet()) { for (DisguisePerm type : perms.keySet()) {
@ -170,8 +169,7 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) { for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) {
tabs.add(s.getName().replaceAll(" ", "")); tabs.add(s.getName().replaceAll(" ", ""));
} }
} } else if (DisguiseParser.getDisguisePerm(args[0]) == null) {
else if (DisguiseParser.getDisguisePerm(args[0]) == null) {
tabs.add("Show"); tabs.add("Show");
} }
} }
@ -183,13 +181,12 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
sender.sendMessage(ChatColor.RED + "/disguisehelp <DisguiseType> " + ChatColor.GREEN HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
+ "- View the options you can set on a disguise. Add 'show' to reveal the options you don't have permission to use"); sender.sendMessage(LibsMsg.DHELP_HELP1.get());
for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) { for (ParamInfo s : ReflectionFlagWatchers.getParamInfos()) {
sender.sendMessage(ChatColor.RED + "/disguisehelp " + s.getName().replaceAll(" ", "") + ChatColor.GREEN + " - " sender.sendMessage(LibsMsg.DHELP_HELP2.get(s.getName().replaceAll(" ", ""), s.getDescription()));
+ s.getDescription());
} }
} }
} }

View File

@ -1,10 +1,15 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.lang.reflect.Method; import me.libraryaddict.disguise.DisguiseAPI;
import java.util.ArrayList; import me.libraryaddict.disguise.disguisetypes.Disguise;
import java.util.HashMap; import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import java.util.List; import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -14,27 +19,23 @@ import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI; import java.lang.reflect.Method;
import me.libraryaddict.disguise.disguisetypes.Disguise; import java.util.ArrayList;
import me.libraryaddict.disguise.disguisetypes.DisguiseType; import java.util.HashMap;
import me.libraryaddict.disguise.utilities.DisguiseParser; import java.util.List;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Entity)) { if (!(sender instanceof Entity)) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender);
if (map.isEmpty()) { if (map.isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -46,18 +47,19 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
Disguise disguise = DisguiseAPI.getDisguise((Player) sender, (Entity) sender); Disguise disguise = DisguiseAPI.getDisguise((Player) sender, (Entity) sender);
if (disguise == null) { if (disguise == null) {
sender.sendMessage(ChatColor.RED + "You are not disguised!"); sender.sendMessage(LibsMsg.NOT_DISGUISED.get());
return true; return true;
} }
if (!map.containsKey(new DisguisePerm(disguise.getType()))) { if (!map.containsKey(new DisguisePerm(disguise.getType()))) {
sender.sendMessage(ChatColor.RED + "No permission to modify your disguise!"); sender.sendMessage(LibsMsg.DMODIFY_NO_PERM.get());
return true; return true;
} }
try { try {
DisguiseParser.callMethods(sender, disguise, getPermissions(sender).get(new DisguisePerm(disguise.getType())), DisguiseParser
new ArrayList<String>(), args); .callMethods(sender, disguise, getPermissions(sender).get(new DisguisePerm(disguise.getType())),
new ArrayList<String>(), args);
} }
catch (DisguiseParseException ex) { catch (DisguiseParseException ex) {
if (ex.getMessage() != null) { if (ex.getMessage() != null) {
@ -71,14 +73,14 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
return true; return true;
} }
sender.sendMessage(ChatColor.RED + "Your disguise has been modified!"); sender.sendMessage(LibsMsg.DMODIFY_MODIFIED.get());
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
if (!(sender instanceof Player)) if (!(sender instanceof Player))
return tabs; return tabs;
@ -94,7 +96,7 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
DisguisePerm disguiseType = new DisguisePerm(disguise.getType()); DisguisePerm disguiseType = new DisguisePerm(disguise.getType());
ArrayList<String> usedOptions = new ArrayList<String>(); ArrayList<String> usedOptions = new ArrayList<>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) { for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
@ -123,8 +125,7 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e); tabs.add(e);
} }
} } else {
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
@ -149,11 +150,12 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Modify your own disguise as you wear it!"); sender.sendMessage(LibsMsg.DMODIFY_HELP3.get());
sender.sendMessage(ChatColor.DARK_GREEN + "/disguisemodify setBaby true setSprinting true"); sender.sendMessage(LibsMsg.DMODIFY_HELP3.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.DMODIFY_HELP3
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
} }
} }

View File

@ -1,10 +1,12 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.lang.reflect.Method; import me.libraryaddict.disguise.DisguiseConfig;
import java.util.ArrayList; import me.libraryaddict.disguise.LibsDisguises;
import java.util.HashMap; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import java.util.List; import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -13,22 +15,21 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseConfig; import java.lang.reflect.Method;
import me.libraryaddict.disguise.LibsDisguises; import java.util.ArrayList;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import java.util.HashMap;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; import java.util.List;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
if (getPermissions(sender).isEmpty()) { if (getPermissions(sender).isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -39,14 +40,13 @@ public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements
LibsDisguises.getInstance().getListener().setDisguiseModify(sender.getName(), args); LibsDisguises.getInstance().getListener().setDisguiseModify(sender.getName(), args);
sender.sendMessage(ChatColor.RED + "Right click a disguised entity in the next " sender.sendMessage(LibsMsg.DMODIFYENT_CLICK.get(DisguiseConfig.getDisguiseEntityExpire()));
+ DisguiseConfig.getDisguiseEntityExpire() + " seconds to modify their disguise!");
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
return tabs; return tabs;
@ -75,8 +75,7 @@ public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e); tabs.add(e);
} }
} } else {
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
@ -88,7 +87,8 @@ public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(perm.getType().getWatcherClass())) { for (Method method : ReflectionFlagWatchers
.getDisguiseWatcherMethods(perm.getType().getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -104,12 +104,12 @@ public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements
* @param map * @param map
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Choose the options for a disguise then right click a entity to modify it!"); sender.sendMessage(LibsMsg.DMODENT_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.DMODIFY_HELP3
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
} }
} }

View File

@ -1,10 +1,13 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.lang.reflect.Method; import me.libraryaddict.disguise.DisguiseAPI;
import java.util.ArrayList; import me.libraryaddict.disguise.disguisetypes.Disguise;
import java.util.HashMap; import me.libraryaddict.disguise.utilities.DisguiseParser;
import java.util.List; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -13,13 +16,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI; import java.lang.reflect.Method;
import me.libraryaddict.disguise.disguisetypes.Disguise; import java.util.ArrayList;
import me.libraryaddict.disguise.utilities.DisguiseParser; import java.util.HashMap;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import java.util.List;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements TabCompleter {
@ -28,7 +28,7 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender);
if (map.isEmpty()) { if (map.isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -40,7 +40,7 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
Player player = Bukkit.getPlayer(args[0]); Player player = Bukkit.getPlayer(args[0]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.RED + "Cannot find the player '" + args[0] + "'"); sender.sendMessage(LibsMsg.CANNOT_FIND_PLAYER.get(args[0]));
return true; return true;
} }
@ -61,18 +61,18 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
disguise = DisguiseAPI.getDisguise(player); disguise = DisguiseAPI.getDisguise(player);
if (disguise == null) { if (disguise == null) {
sender.sendMessage(ChatColor.RED + "The player '" + player.getName() + "' is not disguised"); sender.sendMessage(LibsMsg.DMODPLAYER_NODISGUISE.get(player.getName()));
return true; return true;
} }
if (!map.containsKey(new DisguisePerm(disguise.getType()))) { if (!map.containsKey(new DisguisePerm(disguise.getType()))) {
sender.sendMessage(ChatColor.RED + "You do not have permission to modify this disguise"); sender.sendMessage(LibsMsg.DMODPLAYER_NOPERM.get());
return true; return true;
} }
try { try {
DisguiseParser.callMethods(sender, disguise, map.get(new DisguisePerm(disguise.getType())), new ArrayList<String>(), DisguiseParser.callMethods(sender, disguise, map.get(new DisguisePerm(disguise.getType())),
newArgs); new ArrayList<String>(), newArgs);
} }
catch (DisguiseParseException ex) { catch (DisguiseParseException ex) {
if (ex.getMessage() != null) { if (ex.getMessage() != null) {
@ -86,14 +86,14 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
return true; return true;
} }
sender.sendMessage(ChatColor.RED + "Modified the disguise of " + player.getName() + "!"); sender.sendMessage(LibsMsg.DMODPLAYER_MODIFIED.get(player.getName()));
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender);
@ -105,12 +105,11 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
} }
} } else {
else {
Player player = Bukkit.getPlayer(args[0]); Player player = Bukkit.getPlayer(args[0]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.RED + "Cannot find the player '" + args[0] + "'"); sender.sendMessage(LibsMsg.CANNOT_FIND_PLAYER.get(args[0]));
return tabs; return tabs;
} }
@ -123,13 +122,13 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
disguise = DisguiseAPI.getDisguise(player); disguise = DisguiseAPI.getDisguise(player);
if (disguise == null) { if (disguise == null) {
sender.sendMessage(ChatColor.RED + "The player '" + player.getName() + "' is not disguised"); sender.sendMessage(LibsMsg.DMODPLAYER_NODISGUISE.get(player.getName()));
return tabs; return tabs;
} }
DisguisePerm disguiseType = new DisguisePerm(disguise.getType()); DisguisePerm disguiseType = new DisguisePerm(disguise.getType());
ArrayList<String> usedOptions = new ArrayList<String>(); ArrayList<String> usedOptions = new ArrayList<>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = 1; i < args.length; i++) { for (int i = 1; i < args.length; i++) {
@ -158,8 +157,7 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e); tabs.add(e);
} }
} } else {
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player p : Bukkit.getOnlinePlayers()) { for (Player p : Bukkit.getOnlinePlayers()) {
tabs.add(p.getName()); tabs.add(p.getName());
@ -171,7 +169,8 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -185,11 +184,12 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Modify the disguise of another player!"); sender.sendMessage(LibsMsg.DMODPLAYER_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.DMODIFY_HELP3
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
} }
} }

View File

@ -3,11 +3,9 @@ package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.utilities.ClassGetter; import me.libraryaddict.disguise.utilities.*;
import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -42,8 +40,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
if (sender instanceof Player) { if (sender instanceof Player) {
center = ((Player) sender).getLocation(); center = ((Player) sender).getLocation();
} } else {
else {
center = ((BlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5); center = ((BlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5);
} }
@ -53,14 +50,14 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender.getName().equals("CONSOLE")) { if (sender.getName().equals("CONSOLE")) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender);
if (map.isEmpty()) { if (map.isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -78,8 +75,8 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
Collections.sort(classes); Collections.sort(classes);
sender.sendMessage(ChatColor.DARK_GREEN + "EntityTypes usable are: " + ChatColor.GREEN sender.sendMessage(LibsMsg.DMODRADIUS_USABLE
+ StringUtils.join(classes, ChatColor.DARK_GREEN + ", " + ChatColor.GREEN) + ChatColor.DARK_GREEN + "."); .get(ChatColor.GREEN + StringUtils.join(classes, ChatColor.DARK_GREEN + ", " + ChatColor.GREEN)));
return true; return true;
} }
@ -104,31 +101,30 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
} }
if (type == null) { if (type == null) {
sender.sendMessage(ChatColor.RED + "Unrecognised EntityType " + args[0]); sender.sendMessage(LibsMsg.DMODRADIUS_UNRECOGNIZED.get(args[0]));
return true; return true;
} }
} }
} }
if (args.length == starting + 1) { if (args.length == starting + 1) {
sender.sendMessage(ChatColor.RED + "You need to supply the disguise options as well as the radius" sender.sendMessage(
+ (starting != 0 ? " and EntityType" : "")); (starting == 0 ? LibsMsg.DMODRADIUS_NEEDOPTIONS : LibsMsg.DMODRADIUS_NEEDOPTIONS_ENTITY).get());
return true; return true;
} } else if (args.length < 2) {
else if (args.length < 2) { sender.sendMessage(LibsMsg.DMODRADIUS_NEEDOPTIONS.get());
sender.sendMessage(ChatColor.RED + "You need to supply a radius as well as the disguise options");
return true; return true;
} }
if (!isNumeric(args[starting])) { if (!isNumeric(args[starting])) {
sender.sendMessage(ChatColor.RED + args[starting] + " is not a number"); sender.sendMessage(LibsMsg.NOT_NUMBER.get(args[starting]));
return true; return true;
} }
int radius = Integer.parseInt(args[starting]); int radius = Integer.parseInt(args[starting]);
if (radius > maxRadius) { if (radius > maxRadius) {
sender.sendMessage(ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?"); sender.sendMessage(LibsMsg.LIMITED_RADIUS.get(maxRadius));
radius = maxRadius; radius = maxRadius;
} }
@ -184,14 +180,13 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
} }
if (noPermission > 0) { if (noPermission > 0) {
sender.sendMessage(ChatColor.RED + "No permission to modify " + noPermission + " disguises!"); sender.sendMessage(LibsMsg.DMODRADIUS_NOPERM.get(noPermission));
} }
if (modifiedDisguises > 0) { if (modifiedDisguises > 0) {
sender.sendMessage(ChatColor.RED + "Successfully modified the disguises of " + modifiedDisguises + " entities!"); sender.sendMessage(LibsMsg.DMODRADIUS.get(modifiedDisguises));
} } else {
else { sender.sendMessage(LibsMsg.DMODRADIUS_NOENTS.get());
sender.sendMessage(ChatColor.RED + "Couldn't find any disguised entities!");
} }
return true; return true;
@ -199,7 +194,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender);
@ -231,11 +226,11 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
int radius = Integer.parseInt(args[starting]); int radius = Integer.parseInt(args[starting]);
if (radius > maxRadius) { if (radius > maxRadius) {
sender.sendMessage(ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?"); sender.sendMessage(LibsMsg.LIMITED_RADIUS.get(maxRadius));
radius = maxRadius; radius = maxRadius;
} }
ArrayList<String> usedOptions = new ArrayList<String>(); ArrayList<String> usedOptions = new ArrayList<>();
for (Entity entity : getNearbyEntities(sender, radius)) { for (Entity entity : getNearbyEntities(sender, radius)) {
Disguise disguise = DisguiseAPI.getDisguise(entity); Disguise disguise = DisguiseAPI.getDisguise(entity);
@ -246,9 +241,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
DisguiseType disguiseType = disguise.getType(); DisguiseType disguiseType = disguise.getType();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = 0; i < args.length; i++) { for (String arg : args) {
String arg = args[i];
if (!method.getName().equalsIgnoreCase(arg)) if (!method.getName().equalsIgnoreCase(arg))
continue; continue;
@ -256,7 +249,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
} }
} }
if (passesCheck(sender, perms.get(disguiseType), usedOptions)) { if (passesCheck(sender, perms.get(new DisguisePerm(disguiseType)), usedOptions)) {
boolean addMethods = true; boolean addMethods = true;
if (args.length > 1 + starting) { if (args.length > 1 + starting) {
@ -272,8 +265,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { for (String e : info.getEnums(origArgs[origArgs.length - 1])) {
tabs.add(e); tabs.add(e);
} }
} } else {
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
@ -285,7 +277,8 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -299,31 +292,26 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Modify the disguises in a radius! Caps at " + maxRadius + " blocks!"); sender.sendMessage(LibsMsg.DMODRADIUS_HELP1.get(maxRadius));
sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.DMODIFY_HELP3
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
String optional = ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")"; String optional = ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")";
if (allowedDisguises.contains("player")) { if (allowedDisguises.contains("player")) {
sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> player <Name>") sender.sendMessage(LibsMsg.DRADIUS_HELP3.get());
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
} }
sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> <DisguiseType> <Baby" sender.sendMessage(LibsMsg.DMODRADIUS_HELP4.get());
+ optional + ">").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional sender.sendMessage(LibsMsg.DMODRADIUS_HELP5.get());
+ "> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + optional + ">")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
} }
sender.sendMessage( sender.sendMessage(LibsMsg.DMODRADIUS_HELP6.get());
ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes");
} }
} }

View File

@ -1,18 +1,5 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.Disguise;
@ -21,8 +8,23 @@ import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.DisguiseParser; import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCompleter {
@ -31,7 +33,7 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender);
if (map.isEmpty()) { if (map.isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -41,14 +43,14 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
} }
if (args.length == 1) { if (args.length == 1) {
sender.sendMessage(ChatColor.RED + "You need to supply a disguise as well as the player"); sender.sendMessage(LibsMsg.DPLAYER_SUPPLY.get());
return true; return true;
} }
Player player = Bukkit.getPlayer(args[0]); Player player = Bukkit.getPlayer(args[0]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.RED + "Cannot find the player '" + args[0] + "'"); sender.sendMessage(LibsMsg.CANNOT_FIND_PLAYER.get(args[0]));
return true; return true;
} }
@ -78,8 +80,7 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
} }
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()) { if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()) {
sender.sendMessage( sender.sendMessage(LibsMsg.DISABLED_LIVING_TO_MISC.get());
ChatColor.RED + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!");
return true; return true;
} }
@ -97,12 +98,9 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
DisguiseAPI.disguiseToAll(player, disguise); DisguiseAPI.disguiseToAll(player, disguise);
if (disguise.isDisguiseInUse()) { if (disguise.isDisguiseInUse()) {
sender.sendMessage(ChatColor.RED + "Successfully disguised " + player.getName() + " as a " sender.sendMessage(LibsMsg.DISG_PLAYER_AS_DISG.get(player.getName(), disguise.getType().toReadable()));
+ disguise.getType().toReadable() + "!"); } else {
} sender.sendMessage(LibsMsg.DISG_PLAYER_AS_DISG_FAIL.get(player.getName(), disguise.getType().toReadable()));
else {
sender.sendMessage(
ChatColor.RED + "Failed to disguise " + player.getName() + " as a " + disguise.getType().toReadable() + "!");
} }
return true; return true;
@ -110,7 +108,7 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender);
@ -119,13 +117,9 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
} }
} } else if (args.length == 1) {
else if (args.length == 1) { tabs.addAll(getAllowedDisguises(perms));
for (String type : getAllowedDisguises(perms)) { } else {
tabs.add(type);
}
}
else {
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[1]); DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[1]);
if (disguiseType == null) if (disguiseType == null)
@ -135,9 +129,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
} }
} } else {
else { ArrayList<String> usedOptions = new ArrayList<>();
ArrayList<String> usedOptions = new ArrayList<String>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 3 : 2; i < args.length; i++) { for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 3 : 2; i < args.length; i++) {
@ -163,11 +156,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
addMethods = false; addMethods = false;
if (info.isEnums()) { if (info.isEnums()) {
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { tabs.addAll(Arrays.asList(info.getEnums(origArgs[origArgs.length - 1])));
tabs.add(e); } else {
}
}
else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
tabs.add(player.getName()); tabs.add(player.getName());
@ -179,7 +169,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -194,22 +185,22 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
* Send the player the information * Send the player the information
*/ */
@Override @Override
protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { protected void sendCommandUsage(CommandSender sender,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage(ChatColor.DARK_GREEN + "Disguise another player!"); sender.sendMessage(LibsMsg.D_HELP1.get());
sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN sender.sendMessage(LibsMsg.CAN_USE_DISGS
+ StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
if (allowedDisguises.contains("player")) { if (allowedDisguises.contains("player")) {
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> player <Name>"); sender.sendMessage(LibsMsg.D_HELP3.get());
} }
sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <DisguiseType> <Baby>"); sender.sendMessage(LibsMsg.D_HELP4.get());
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
sender.sendMessage( sender.sendMessage(LibsMsg.D_HELP5.get());
ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <Dropped_Item/Falling_Block> <Id> <Durability>");
} }
} }
} }

View File

@ -5,11 +5,9 @@ import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.ClassGetter; import me.libraryaddict.disguise.utilities.*;
import me.libraryaddict.disguise.utilities.DisguiseParser;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers;
import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -25,10 +23,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCompleter { public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCompleter {
private int maxRadius = 30; private int maxRadius = 30;
@ -46,14 +41,14 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender.getName().equals("CONSOLE")) { if (sender.getName().equals("CONSOLE")) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender);
if (map.isEmpty()) { if (map.isEmpty()) {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
return true; return true;
} }
@ -71,9 +66,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
Collections.sort(classes); Collections.sort(classes);
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_ENTITIES
ChatColor.DARK_GREEN + "EntityTypes usable are: " + ChatColor.GREEN + StringUtils.join(classes, .get(ChatColor.GREEN + StringUtils.join(classes, ChatColor.DARK_GREEN + ", " + ChatColor.GREEN)));
ChatColor.DARK_GREEN + ", " + ChatColor.GREEN) + ChatColor.DARK_GREEN + ".");
return true; return true;
} }
@ -94,35 +88,34 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
try { try {
type = EntityType.valueOf(args[0].toUpperCase()); type = EntityType.valueOf(args[0].toUpperCase());
} }
catch (Exception ex) { catch (Exception ignored) {
} }
if (type == null) { if (type == null) {
sender.sendMessage(ChatColor.RED + "Unrecognised EntityType " + args[0]); sender.sendMessage(LibsMsg.DMODRADIUS_UNRECOGNIZED.get(args[0]));
return true; return true;
} }
} }
} }
if (args.length == starting + 1) { if (args.length == starting + 1) {
sender.sendMessage(ChatColor.RED + "You need to supply a disguise as well as the radius" + (starting != 0 ? sender.sendMessage(
" and EntityType" : "")); (starting == 0 ? LibsMsg.DRADIUS_NEEDOPTIONS : LibsMsg.DRADIUS_NEEDOPTIONS_ENTITY).get());
return true; return true;
} else if (args.length < 2) { } else if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "You need to supply a radius as well as the disguise"); sender.sendMessage(LibsMsg.DRADIUS_NEEDOPTIONS.get());
return true; return true;
} }
if (!isNumeric(args[starting])) { if (!isNumeric(args[starting])) {
sender.sendMessage(ChatColor.RED + args[starting] + " is not a number"); sender.sendMessage(LibsMsg.NOT_NUMBER.get(args[starting]));
return true; return true;
} }
int radius = Integer.parseInt(args[starting]); int radius = Integer.parseInt(args[starting]);
if (radius > maxRadius) { if (radius > maxRadius) {
sender.sendMessage( sender.sendMessage(LibsMsg.LIMITED_RADIUS.get(maxRadius));
ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?");
radius = maxRadius; radius = maxRadius;
} }
@ -168,7 +161,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
} }
if (type != null ? entity.getType() == type : entityClass.isAssignableFrom(entity.getClass())) { if (type != null ? entity.getType() == type : entityClass.isAssignableFrom(entity.getClass())) {
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) { if (disguise.isMiscDisguise() && !DisguiseConfig
.isMiscDisguisesForLivingEnabled() && entity instanceof LivingEntity) {
miscDisguises++; miscDisguises++;
continue; continue;
} }
@ -193,14 +187,13 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
} }
if (disguisedEntitys > 0) { if (disguisedEntitys > 0) {
sender.sendMessage(ChatColor.RED + "Successfully disguised " + disguisedEntitys + " entities!"); sender.sendMessage(LibsMsg.DISRADIUS.get(disguisedEntitys));
} else { } else {
sender.sendMessage(ChatColor.RED + "Couldn't find any entities to disguise!"); sender.sendMessage(LibsMsg.DISRADIUS_FAIL.get());
} }
if (miscDisguises > 0) { if (miscDisguises > 0) {
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_MISCDISG.get(miscDisguises));
ChatColor.RED + "Failed to disguise " + miscDisguises + " entities because the option to disguise a living entity as a non-living has been disabled in the config");
} }
return true; return true;
@ -208,7 +201,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender);
@ -238,9 +231,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
} }
if (args.length == starting) { if (args.length == starting) {
for (String type : getAllowedDisguises(perms)) { tabs.addAll(getAllowedDisguises(perms));
tabs.add(type);
}
} else { } else {
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[starting]); DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[starting]);
@ -253,7 +244,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
tabs.add(player.getName()); tabs.add(player.getName());
} }
} else { } else {
ArrayList<String> usedOptions = new ArrayList<String>(); ArrayList<String> usedOptions = new ArrayList<>();
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? starting + 2 : for (int i = disguiseType.getType() == DisguiseType.PLAYER ? starting + 2 :
@ -280,9 +271,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
addMethods = false; addMethods = false;
if (info.isEnums()) { if (info.isEnums()) {
for (String e : info.getEnums(origArgs[origArgs.length - 1])) { tabs.addAll(Arrays.asList(info.getEnums(origArgs[origArgs.length - 1])));
tabs.add(e);
}
} else { } else {
if (info.getParamClass() == String.class) { if (info.getParamClass() == String.class) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
@ -295,8 +284,8 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
if (addMethods) { if (addMethods) {
// If this is a method, add. Else if it can be a param of the previous argument, add. // If this is a method, add. Else if it can be a param of the previous argument, add.
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods( for (Method method : ReflectionFlagWatchers
disguiseType.getWatcherClass())) { .getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
tabs.add(method.getName()); tabs.add(method.getName());
} }
} }
@ -315,30 +304,20 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) {
ArrayList<String> allowedDisguises = getAllowedDisguises(map); ArrayList<String> allowedDisguises = getAllowedDisguises(map);
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_HELP1.get(maxRadius));
ChatColor.DARK_GREEN + "Disguise all entities in a radius! Caps at " + maxRadius + " blocks!"); sender.sendMessage(LibsMsg.CAN_USE_DISGS
sender.sendMessage(ChatColor.DARK_GREEN + "You can use the disguises: " + ChatColor.GREEN + StringUtils.join( .get(ChatColor.GREEN + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)));
allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN));
String optional = ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")";
if (allowedDisguises.contains("player")) { if (allowedDisguises.contains("player")) {
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_HELP3.get());
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> player <Name>").replace(
"<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
} }
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_HELP4.get());
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> <DisguiseType> <Baby" + optional + ">").replace(
"<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) {
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_HELP5.get());
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + optional + ">").replace(
"<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">"));
} }
sender.sendMessage( sender.sendMessage(LibsMsg.DRADIUS_HELP6.get());
ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes");
} }
} }

View File

@ -1,13 +1,14 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI;
/** /**
* @author Navid * @author Navid
*/ */
@ -16,7 +17,7 @@ public class DisguiseViewSelfCommand implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender.getName().equals("CONSOLE")) { if (sender.getName().equals("CONSOLE")) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
@ -24,14 +25,12 @@ public class DisguiseViewSelfCommand implements CommandExecutor {
if (DisguiseAPI.isViewSelfToggled(player)) { if (DisguiseAPI.isViewSelfToggled(player)) {
DisguiseAPI.setViewDisguiseToggled(player, false); DisguiseAPI.setViewDisguiseToggled(player, false);
sender.sendMessage(ChatColor.GREEN + "Toggled viewing own disguise off!"); sender.sendMessage(LibsMsg.VIEW_SELF_ON.get());
} } else {
else {
DisguiseAPI.setViewDisguiseToggled(player, true); DisguiseAPI.setViewDisguiseToggled(player, true);
sender.sendMessage(ChatColor.GREEN + "Toggled viewing own disguise on!"); sender.sendMessage(LibsMsg.VIEW_SELF_OFF.get());
} }
return true; return true;
} }
} }

View File

@ -1,10 +1,9 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.util.ArrayList; import me.libraryaddict.disguise.LibsDisguises;
import java.util.Iterator; import me.libraryaddict.disguise.utilities.LibsMsg;
import java.util.List;
import me.libraryaddict.disguise.utilities.LibsPremium; import me.libraryaddict.disguise.utilities.LibsPremium;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -12,7 +11,9 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import me.libraryaddict.disguise.LibsDisguises; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) {
@ -35,7 +36,7 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
} }
protected String[] getArgs(String[] args) { protected String[] getArgs(String[] args) {
ArrayList<String> newArgs = new ArrayList<String>(); ArrayList<String> newArgs = new ArrayList<>();
for (int i = 0; i < args.length - 1; i++) { for (int i = 0; i < args.length - 1; i++) {
String s = args[i]; String s = args[i];
@ -52,29 +53,28 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.DARK_GREEN + "This server is running " + "Lib's Disguises v" sender.sendMessage(
+ Bukkit.getPluginManager().getPlugin("LibsDisguises").getDescription().getVersion() ChatColor.DARK_GREEN + "This server is running " + "Lib's Disguises v" + Bukkit.getPluginManager()
+ " by libraryaddict, formerly maintained by Byteflux and NavidK0.\n" + "Use " + ChatColor.GREEN .getPlugin("LibsDisguises").getDescription()
+ "/libsdisguises reload" + ChatColor.DARK_GREEN .getVersion() + " by libraryaddict, formerly maintained " + "by Byteflux and NavidK0." + (
+ " to reload the config. All disguises will be blown by doing this."); sender.hasPermission("libsdisguises.reload") ?
"\nUse " + ChatColor.GREEN + "/libsdisguises " + "reload" + ChatColor.DARK_GREEN + " to reload the config. All disguises will be blown by doing this" + "." :
""));
if (LibsPremium.isPremium()) { if (LibsPremium.isPremium()) {
sender.sendMessage(ChatColor.DARK_GREEN + "This server supports the plugin developer!"); sender.sendMessage(ChatColor.DARK_GREEN + "This server supports the plugin developer!");
} }
} } else if (args.length > 0) {
else if (args.length > 0) {
if (sender.hasPermission("libsdisguises.reload")) { if (sender.hasPermission("libsdisguises.reload")) {
if (args[0].equalsIgnoreCase("reload")) { if (args[0].equalsIgnoreCase("reload")) {
LibsDisguises.getInstance().reload(); LibsDisguises.getInstance().reload();
sender.sendMessage(ChatColor.GREEN + "[LibsDisguises] Reloaded config."); sender.sendMessage(LibsMsg.RELOADED_CONFIG.get());
return true; return true;
} else {
sender.sendMessage(LibsMsg.LIBS_RELOAD_WRONG.get());
} }
else { } else {
sender.sendMessage(ChatColor.RED + "[LibsDisguises] That command doesn't exist!"); sender.sendMessage(LibsMsg.NO_PERM.get());
}
}
else {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
} }
} }
return true; return true;
@ -82,7 +82,7 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
if (args.length == 0) if (args.length == 0)

View File

@ -1,5 +1,8 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -7,35 +10,26 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI; public class UndisguiseCommand implements CommandExecutor {
public class UndisguiseCommand implements CommandExecutor
{
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
{ if (sender.getName().equals("CONSOLE")) {
if (sender.getName().equals("CONSOLE")) sender.sendMessage(LibsMsg.NO_CONSOLE.get());
{
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!");
return true; return true;
} }
if (sender.hasPermission("libsdisguises.undisguise"))
{ if (sender.hasPermission("libsdisguises.undisguise")) {
if (DisguiseAPI.isDisguised((Entity) sender)) if (DisguiseAPI.isDisguised((Entity) sender)) {
{
DisguiseAPI.undisguiseToAll((Player) sender); DisguiseAPI.undisguiseToAll((Player) sender);
sender.sendMessage(ChatColor.RED + "You are no longer disguised"); sender.sendMessage(LibsMsg.UNDISG.get());
} } else {
else sender.sendMessage(LibsMsg.NOT_DISGUISED.get());
{
sender.sendMessage(ChatColor.RED + "You are not disguised!");
} }
} else {
sender.sendMessage(LibsMsg.NO_PERM.get());
} }
else
{
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
}
return true; return true;
} }
} }

View File

@ -1,31 +1,26 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import me.libraryaddict.disguise.LibsDisguises; public class UndisguiseEntityCommand implements CommandExecutor {
public class UndisguiseEntityCommand implements CommandExecutor
{
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
{ if (sender.getName().equals("CONSOLE")) {
if (sender.getName().equals("CONSOLE")) sender.sendMessage(LibsMsg.NO_CONSOLE.get());
{
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!");
return true; return true;
} }
if (sender.hasPermission("libsdisguises.undisguiseentity")) if (sender.hasPermission("libsdisguises.undisguiseentity")) {
{
LibsDisguises.getInstance().getListener().setDisguiseEntity(sender.getName(), null); LibsDisguises.getInstance().getListener().setDisguiseEntity(sender.getName(), null);
sender.sendMessage(ChatColor.RED + "Right click a disguised entity to undisguise them!"); sender.sendMessage(LibsMsg.UND_ENTITY.get());
} } else {
else sender.sendMessage(LibsMsg.NO_PERM.get());
{
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
} }
return true; return true;
} }

View File

@ -1,18 +1,17 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import java.util.ArrayList; import me.libraryaddict.disguise.DisguiseAPI;
import java.util.Iterator; import me.libraryaddict.disguise.utilities.LibsMsg;
import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class UndisguisePlayerCommand implements CommandExecutor, TabCompleter { public class UndisguisePlayerCommand implements CommandExecutor, TabCompleter {
protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) {
@ -35,7 +34,7 @@ public class UndisguisePlayerCommand implements CommandExecutor, TabCompleter {
} }
protected String[] getArgs(String[] args) { protected String[] getArgs(String[] args) {
ArrayList<String> newArgs = new ArrayList<String>(); ArrayList<String> newArgs = new ArrayList<>();
for (int i = 0; i < args.length - 1; i++) { for (int i = 0; i < args.length - 1; i++) {
String s = args[i]; String s = args[i];
@ -57,29 +56,25 @@ public class UndisguisePlayerCommand implements CommandExecutor, TabCompleter {
if (p != null) { if (p != null) {
if (DisguiseAPI.isDisguised(p)) { if (DisguiseAPI.isDisguised(p)) {
DisguiseAPI.undisguiseToAll(p); DisguiseAPI.undisguiseToAll(p);
sender.sendMessage(ChatColor.RED + "The player is no longer disguised"); sender.sendMessage(LibsMsg.UNDISG_PLAYER.get(p.getName()));
} } else {
else { sender.sendMessage(LibsMsg.UNDISG_PLAYER_FAIL.get(p.getName()));
sender.sendMessage(ChatColor.RED + "The player is not disguised!");
} }
} else {
sender.sendMessage(LibsMsg.CANNOT_FIND_PLAYER.get(args[0]));
} }
else { } else {
sender.sendMessage(ChatColor.RED + "Player not found"); sender.sendMessage(LibsMsg.UNDISG_PLAYER_HELP.get());
}
} }
else { } else {
sender.sendMessage(ChatColor.RED + "/undisguiseplayer <Name>"); sender.sendMessage(LibsMsg.NO_PERM.get());
}
}
else {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
} }
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList<String> tabs = new ArrayList<String>(); ArrayList<String> tabs = new ArrayList<>();
String[] args = getArgs(origArgs); String[] args = getArgs(origArgs);
if (args.length != 0) if (args.length != 0)

View File

@ -1,5 +1,8 @@
package me.libraryaddict.disguise.commands; package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.utilities.LibsMsg;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -7,8 +10,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseAPI;
public class UndisguiseRadiusCommand implements CommandExecutor { public class UndisguiseRadiusCommand implements CommandExecutor {
private int maxRadius = 30; private int maxRadius = 30;
@ -29,24 +30,24 @@ public class UndisguiseRadiusCommand implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender.getName().equals("CONSOLE")) { if (sender.getName().equals("CONSOLE")) {
sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); sender.sendMessage(LibsMsg.NO_CONSOLE.get());
return true; return true;
} }
if (sender.hasPermission("libsdisguises.undisguiseradius")) { if (sender.hasPermission("libsdisguises.undisguiseradius")) {
int radius = maxRadius; int radius = maxRadius;
if (args.length > 0) { if (args.length > 0) {
if (!isNumeric(args[0])) { if (!isNumeric(args[0])) {
sender.sendMessage( sender.sendMessage(LibsMsg.NOT_NUMBER.get(args[0]));
ChatColor.RED + "Error! " + ChatColor.GREEN + args[0] + ChatColor.RED + " is not a number!");
return true; return true;
} }
radius = Integer.parseInt(args[0]); radius = Integer.parseInt(args[0]);
if (radius > maxRadius) { if (radius > maxRadius) {
sender.sendMessage( sender.sendMessage(LibsMsg.LIMITED_RADIUS.get(maxRadius));
ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?");
radius = maxRadius; radius = maxRadius;
} }
} }
int disguisedEntitys = 0; int disguisedEntitys = 0;
for (Entity entity : ((Player) sender).getNearbyEntities(radius, radius, radius)) { for (Entity entity : ((Player) sender).getNearbyEntities(radius, radius, radius)) {
if (entity == sender) { if (entity == sender) {
@ -57,10 +58,10 @@ public class UndisguiseRadiusCommand implements CommandExecutor {
disguisedEntitys++; disguisedEntitys++;
} }
} }
sender.sendMessage(ChatColor.RED + "Successfully undisguised " + disguisedEntitys + " entities!");
} sender.sendMessage(LibsMsg.UNDISRADIUS.get(disguisedEntitys));
else { } else {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); sender.sendMessage(LibsMsg.NO_PERM.get());
} }
return true; return true;
} }

View File

@ -1,9 +1,9 @@
package me.libraryaddict.disguise.disguisetypes; package me.libraryaddict.disguise.disguisetypes;
import me.libraryaddict.disguise.utilities.TranslateType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.omg.CORBA.UNKNOWN;
public enum DisguiseType { public enum DisguiseType {
AREA_EFFECT_CLOUD(3, 0), AREA_EFFECT_CLOUD(3, 0),
@ -322,6 +322,6 @@ public enum DisguiseType {
split[i] = split[i].substring(0, 1) + split[i].substring(1).toLowerCase(); split[i] = split[i].substring(0, 1) + split[i].substring(1).toLowerCase();
} }
return StringUtils.join(split, " "); return TranslateType.DISGUISES.get(StringUtils.join(split, " "), "Name for the " + name() + " disguise");
} }
} }

View File

@ -36,8 +36,8 @@ public class DisguiseParser {
super(); super();
} }
public DisguiseParseException(String string) { public DisguiseParseException(LibsMsg message, String... params) {
super(string); super(message.get((Object[]) params));
} }
} }
@ -145,9 +145,7 @@ public class DisguiseParser {
ArrayList<String> usedOptions) throws DisguiseParseException { ArrayList<String> usedOptions) throws DisguiseParseException {
if (!passesCheck(sender, optionPermissions, usedOptions)) { if (!passesCheck(sender, optionPermissions, usedOptions)) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.D_PARSE_NOPERM, usedOptions.get(usedOptions.size() - 1));
ChatColor.RED + "You do not have permission to use the option " + usedOptions.get(
usedOptions.size() - 1));
} }
} }
@ -201,7 +199,8 @@ public class DisguiseParser {
} }
public static DisguisePerm[] getDisguisePerms() { public static DisguisePerm[] getDisguisePerms() {
DisguisePerm[] perms = new DisguisePerm[DisguiseType.values().length + DisguiseConfig.getCustomDisguises().size()]; DisguisePerm[] perms = new DisguisePerm[DisguiseType.values().length + DisguiseConfig.getCustomDisguises()
.size()];
int i = 0; int i = 0;
for (DisguiseType disguiseType : DisguiseType.values()) { for (DisguiseType disguiseType : DisguiseType.values()) {
@ -256,10 +255,6 @@ public class DisguiseParser {
/** /**
* Get perms for the node. Returns a hashmap of allowed disguisetypes and their options * Get perms for the node. Returns a hashmap of allowed disguisetypes and their options
*
* @param sender
* @param permissionNode
* @return
*/ */
public static HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> getPermissions(CommandSender sender, public static HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> getPermissions(CommandSender sender,
String permissionNode) { String permissionNode) {
@ -456,22 +451,15 @@ public class DisguiseParser {
* Returns the disguise if it all parsed correctly. Returns a exception with a complete message if it didn't. The * Returns the disguise if it all parsed correctly. Returns a exception with a complete message if it didn't. The
* commandsender is purely used for checking permissions. Would defeat the purpose otherwise. To reach this point, the * commandsender is purely used for checking permissions. Would defeat the purpose otherwise. To reach this point, the
* disguise has been feed a proper disguisetype. * disguise has been feed a proper disguisetype.
*
* @param sender
* @param args
* @param permissionMap
* @return
* @throws java.lang.IllegalAccessException
* @throws java.lang.reflect.InvocationTargetException
*/ */
public static Disguise parseDisguise(CommandSender sender, String permNode, String[] args, public static Disguise parseDisguise(CommandSender sender, String permNode, String[] args,
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permissionMap) throws DisguiseParseException, IllegalAccessException, InvocationTargetException { HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permissionMap) throws DisguiseParseException, IllegalAccessException, InvocationTargetException {
if (permissionMap.isEmpty()) { if (permissionMap.isEmpty()) {
throw new DisguiseParseException(ChatColor.RED + "You are forbidden to use this command."); throw new DisguiseParseException(LibsMsg.NO_PERM);
} }
if (args.length == 0) { if (args.length == 0) {
throw new DisguiseParseException("No arguments defined"); throw new DisguiseParseException(LibsMsg.PARSE_NO_ARGS);
} }
// How many args to skip due to the disugise being constructed // How many args to skip due to the disugise being constructed
@ -487,15 +475,14 @@ public class DisguiseParser {
disguise = DisguiseUtilities.getClonedDisguise(args[0].toLowerCase()); disguise = DisguiseUtilities.getClonedDisguise(args[0].toLowerCase());
if (disguise == null) { if (disguise == null) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_NO_REF, args[0]);
ChatColor.RED + "Cannot find a disguise under the reference " + args[0]);
} }
} else { } else {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_NO_PERM_REF);
ChatColor.RED + "You do not have perimssion to use disguise references!");
} }
optionPermissions = (permissionMap.containsKey(disguise.getType()) ? permissionMap.get(disguise.getType()) : optionPermissions = (permissionMap.containsKey(new DisguisePerm(disguise.getType())) ?
permissionMap.get(new DisguisePerm(disguise.getType())) :
new HashMap<ArrayList<String>, Boolean>()); new HashMap<ArrayList<String>, Boolean>());
} else { } else {
DisguisePerm disguisePerm = getDisguisePerm(args[0]); DisguisePerm disguisePerm = getDisguisePerm(args[0]);
@ -506,21 +493,19 @@ public class DisguiseParser {
} }
if (disguisePerm == null) { if (disguisePerm == null) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_DISG_NO_EXIST, args[0]);
ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + args[0] + ChatColor.RED + " doesn't exist!");
} }
if (disguisePerm.isUnknown()) { if (disguisePerm.isUnknown()) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_CANT_DISG_UNKNOWN);
ChatColor.RED + "Error! You cannot disguise as " + ChatColor.GREEN + "Unknown!");
} }
if (disguisePerm.getEntityType() == null) { if (disguisePerm.getEntityType() == null) {
throw new DisguiseParseException(ChatColor.RED + "Error! This disguise couldn't be loaded!"); throw new DisguiseParseException(LibsMsg.PARSE_CANT_LOAD);
} }
if (!permissionMap.containsKey(disguisePerm)) { if (!permissionMap.containsKey(disguisePerm)) {
throw new DisguiseParseException(ChatColor.RED + "You are forbidden to use this disguise."); throw new DisguiseParseException(LibsMsg.NO_PERM_DISGUISE);
} }
optionPermissions = permissionMap.get(disguisePerm); optionPermissions = permissionMap.get(disguisePerm);
@ -532,12 +517,11 @@ public class DisguiseParser {
// If he is doing a player disguise // If he is doing a player disguise
if (args.length == 1) { if (args.length == 1) {
// He needs to give the player name // He needs to give the player name
throw new DisguiseParseException(ChatColor.RED + "Error! You need to give a player name!"); throw new DisguiseParseException(LibsMsg.PARSE_SUPPLY_PLAYER);
} else { } else {
if (!disguiseOptions.isEmpty() && (!disguiseOptions.containsKey( if (!disguiseOptions.isEmpty() && (!disguiseOptions
args[1].toLowerCase()) || !disguiseOptions.get(args[1].toLowerCase()))) { .containsKey(args[1].toLowerCase()) || !disguiseOptions.get(args[1].toLowerCase()))) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_NO_PERM_NAME);
ChatColor.RED + "Error! You don't have permission to use that name!");
} }
args[1] = args[1].replace("\\_", " "); args[1] = args[1].replace("\\_", " ");
@ -580,7 +564,8 @@ public class DisguiseParser {
if (isInteger(args[1])) { if (isInteger(args[1])) {
miscId = Integer.parseInt(args[1]); miscId = Integer.parseInt(args[1]);
} else { } else {
if (disguisePerm.getType() == DisguiseType.FALLING_BLOCK || disguisePerm.getType() == DisguiseType.DROPPED_ITEM) { if (disguisePerm.getType() == DisguiseType.FALLING_BLOCK || disguisePerm
.getType() == DisguiseType.DROPPED_ITEM) {
for (Material mat : Material.values()) { for (Material mat : Material.values()) {
if (mat.name().replace("_", "").equalsIgnoreCase(args[1].replace("_", ""))) { if (mat.name().replace("_", "").equalsIgnoreCase(args[1].replace("_", ""))) {
miscId = mat.getId(); miscId = mat.getId();
@ -604,8 +589,8 @@ public class DisguiseParser {
case WITHER_SKULL: case WITHER_SKULL:
break; break;
default: default:
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_TOO_MANY_ARGS,
ChatColor.RED + "Error! " + disguisePerm.toReadable() + " doesn't know what to do with " + args[1] + "!"); disguisePerm.toReadable(), args[1]);
} }
toSkip++; toSkip++;
// If they also defined a data value // If they also defined a data value
@ -614,9 +599,11 @@ public class DisguiseParser {
toSkip++; toSkip++;
} }
if (secondArg != null) { if (secondArg != null) {
if (disguisePerm.getType() != DisguiseType.FALLING_BLOCK && disguisePerm.getType() != DisguiseType.DROPPED_ITEM) { if (disguisePerm.getType() != DisguiseType.FALLING_BLOCK && disguisePerm
throw new DisguiseParseException( .getType() != DisguiseType.DROPPED_ITEM) {
ChatColor.RED + "Error! Only the disguises " + DisguiseType.FALLING_BLOCK.toReadable() + " and " + DisguiseType.DROPPED_ITEM.toReadable() + " uses a second number!"); throw new DisguiseParseException(LibsMsg.PARSE_USE_SECOND_NUM,
DisguiseType.FALLING_BLOCK.toReadable(),
DisguiseType.DROPPED_ITEM.toReadable());
} }
miscData = Integer.parseInt(secondArg); miscData = Integer.parseInt(secondArg);
} }
@ -635,8 +622,8 @@ public class DisguiseParser {
} }
if (!disguiseOptions.containsKey(toCheck) || !disguiseOptions.get(toCheck)) { if (!disguiseOptions.containsKey(toCheck) || !disguiseOptions.get(toCheck)) {
throw new DisguiseParseException( throw new DisguiseParseException(LibsMsg.PARSE_NO_PERM_PARAM, toCheck,
ChatColor.RED + "Error! You do not have permission to use the parameter " + toCheck + " on the " + disguisePerm.toReadable() + " disguise!"); disguisePerm.toReadable());
} }
} }
@ -677,8 +664,9 @@ public class DisguiseParser {
Method[] methods = ReflectionFlagWatchers.getDisguiseWatcherMethods(disguise.getWatcher().getClass()); Method[] methods = ReflectionFlagWatchers.getDisguiseWatcherMethods(disguise.getWatcher().getClass());
for (int i = 0; i < args.length; i += 2) { for (int i = 0; i < args.length; i += 2) {
String methodName = args[i]; String methodName = TranslateType.DISGUISE_OPTIONS.reverseGet(args[i]);
String valueString = (args.length - 1 == i ? null : args[i + 1]); String valueString = TranslateType.DISGUISE_OPTIONS_PARAMETERS
.reverseGet(args.length - 1 == i ? null : args[i + 1]);
Method methodToUse = null; Method methodToUse = null;
Object value = null; Object value = null;
DisguiseParseException storedEx = null; DisguiseParseException storedEx = null;
@ -749,12 +737,7 @@ public class DisguiseParser {
} }
} else if (param == ItemStack.class) { } else if (param == ItemStack.class) {
// Parse to itemstack // Parse to itemstack
try { value = parseToItemstack(methodName, valueString);
value = parseToItemstack(valueString);
}
catch (Exception ex) {
throw new DisguiseParseException(String.format(ex.getMessage(), methodName));
}
} else if (param == ItemStack[].class) { } else if (param == ItemStack[].class) {
// Parse to itemstack array // Parse to itemstack array
ItemStack[] items = new ItemStack[4]; ItemStack[] items = new ItemStack[4];
@ -764,7 +747,7 @@ public class DisguiseParser {
if (split.length == 4) { if (split.length == 4) {
for (int a = 0; a < 4; a++) { for (int a = 0; a < 4; a++) {
try { try {
items[a] = parseToItemstack(split[a]); items[a] = parseToItemstack(methodName, split[a]);
} }
catch (Exception ex) { catch (Exception ex) {
throw parseToException( throw parseToException(
@ -847,8 +830,8 @@ public class DisguiseParser {
} else if (param == RabbitType.class) { } else if (param == RabbitType.class) {
try { try {
for (RabbitType type : RabbitType.values()) { for (RabbitType type : RabbitType.values()) {
if (type.name().replace("_", "").equalsIgnoreCase( if (type.name().replace("_", "")
valueString.replace("_", "").replace(" ", ""))) { .equalsIgnoreCase(valueString.replace("_", "").replace(" ", ""))) {
value = type; value = type;
break; break;
@ -916,10 +899,10 @@ public class DisguiseParser {
throw storedEx; throw storedEx;
} }
throw new DisguiseParseException(ChatColor.RED + "Cannot find the option " + methodName); throw new DisguiseParseException(LibsMsg.PARSE_OPTION_NA, methodName);
} }
if (value == null) { if (value == null) {
throw new DisguiseParseException(ChatColor.RED + "No value was given for the option " + methodName); throw new DisguiseParseException(LibsMsg.PARSE_NO_OPTION_VALUE, methodName);
} }
if (!usedOptions.contains(methodName.toLowerCase())) { if (!usedOptions.contains(methodName.toLowerCase())) {
@ -938,11 +921,10 @@ public class DisguiseParser {
private static DisguiseParseException parseToException(String expectedValue, String receivedInstead, private static DisguiseParseException parseToException(String expectedValue, String receivedInstead,
String methodName) { String methodName) {
return new DisguiseParseException( return new DisguiseParseException(LibsMsg.PARSE_EXPECTED_RECEIVED, expectedValue, receivedInstead, methodName);
ChatColor.RED + "Expected " + ChatColor.GREEN + expectedValue + ChatColor.RED + ", received " + ChatColor.GREEN + receivedInstead + ChatColor.RED + " instead for " + ChatColor.GREEN + methodName);
} }
private static ItemStack parseToItemstack(String string) throws Exception { private static ItemStack parseToItemstack(String method, String string) throws DisguiseParseException {
String[] split = string.split(":", -1); String[] split = string.split(":", -1);
int itemId = -1; int itemId = -1;
@ -953,7 +935,7 @@ public class DisguiseParser {
try { try {
itemId = Material.valueOf(split[0].toUpperCase()).getId(); itemId = Material.valueOf(split[0].toUpperCase()).getId();
} }
catch (Exception ex) { catch (Exception ignored) {
} }
} }
@ -989,13 +971,13 @@ public class DisguiseParser {
boolean myPerms = true; boolean myPerms = true;
for (String option : usedOptions) { for (String option : usedOptions) {
if (!sender.getName().equals("CONSOLE") && option.equalsIgnoreCase( if (!sender.getName().equals("CONSOLE") && option.equalsIgnoreCase("setInvisible") && DisguiseConfig
"setInvisible") && DisguiseConfig.isDisabledInvisibility()) { .isDisabledInvisibility()) {
myPerms = false; myPerms = false;
} }
if (!(theirPermissions.get(list) && list.contains("*")) && (list.contains( if (!(theirPermissions.get(list) && list.contains("*")) && (list.contains(option) != theirPermissions
option) != theirPermissions.get(list))) { .get(list))) {
myPerms = false; myPerms = false;
break; break;
} }

View File

@ -121,12 +121,10 @@ public class DisguiseUtilities {
if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise)) { if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise)) {
String entityName = DisguiseType.getType(toClone).toReadable(); String entityName = DisguiseType.getType(toClone).toReadable();
player.sendMessage( player.sendMessage(LibsMsg.MADE_REF.get(entityName, reference));
ChatColor.RED + "Constructed a " + entityName + " disguise! Your reference is " + reference); player.sendMessage(LibsMsg.MADE_REF_EXAMPLE.get(reference));
player.sendMessage(ChatColor.RED + "Example usage: /disguise " + reference);
} else { } else {
player.sendMessage( player.sendMessage(LibsMsg.REF_TOO_MANY.get());
ChatColor.RED + "Failed to store the reference, too many cloned disguises. Please raise the " + "maximum cloned disguises, or lower the time they last");
} }
} }
@ -247,7 +245,8 @@ public class DisguiseUtilities {
checkConflicts(disguise, null); checkConflicts(disguise, null);
if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS && disguise.isModifyBoundingBox()) { if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS && disguise
.isModifyBoundingBox()) {
doBoundingBox(disguise); doBoundingBox(disguise);
} }
} }
@ -385,8 +384,8 @@ public class DisguiseUtilities {
if (entityTrackerEntry == null) if (entityTrackerEntry == null)
return; return;
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
// If the tracker exists. Remove himself from his tracker // If the tracker exists. Remove himself from his tracker
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
@ -418,7 +417,9 @@ public class DisguiseUtilities {
FakeBoundingBox disguiseBox = disguiseValues.getAdultBox(); FakeBoundingBox disguiseBox = disguiseValues.getAdultBox();
if (disguiseValues.getBabyBox() != null) { if (disguiseValues.getBabyBox() != null) {
if ((disguise.getWatcher() instanceof AgeableWatcher && ((AgeableWatcher) disguise.getWatcher()).isBaby()) || (disguise.getWatcher() instanceof ZombieWatcher && ((ZombieWatcher) disguise.getWatcher()).isBaby())) { if ((disguise.getWatcher() instanceof AgeableWatcher && ((AgeableWatcher) disguise.getWatcher())
.isBaby()) || (disguise.getWatcher() instanceof ZombieWatcher && ((ZombieWatcher) disguise
.getWatcher()).isBaby())) {
disguiseBox = disguiseValues.getBabyBox(); disguiseBox = disguiseValues.getBabyBox();
} }
} }
@ -430,7 +431,8 @@ public class DisguiseUtilities {
FakeBoundingBox entityBox = entityValues.getAdultBox(); FakeBoundingBox entityBox = entityValues.getAdultBox();
if (entityValues.getBabyBox() != null) { if (entityValues.getBabyBox() != null) {
if ((entity instanceof Ageable && !((Ageable) entity).isAdult()) || (entity instanceof Zombie && ((Zombie) entity).isBaby())) { if ((entity instanceof Ageable && !((Ageable) entity)
.isAdult()) || (entity instanceof Zombie && ((Zombie) entity).isBaby())) {
entityBox = entityValues.getBabyBox(); entityBox = entityValues.getBabyBox();
} }
} }
@ -622,8 +624,8 @@ public class DisguiseUtilities {
Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity()); Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity());
if (entityTrackerEntry != null) { if (entityTrackerEntry != null) {
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent
// ConcurrentModificationException // ConcurrentModificationException
for (Object p : trackedPlayers) { for (Object p : trackedPlayers) {
@ -649,9 +651,9 @@ public class DisguiseUtilities {
@Override @Override
public void onLookup(WrappedGameProfile gameProfile) { public void onLookup(WrappedGameProfile gameProfile) {
if (DisguiseAPI.isDisguiseInUse(disguise) && (!gameProfile.getName().equals( if (DisguiseAPI.isDisguiseInUse(disguise) && (!gameProfile.getName()
disguise.getSkin() != null ? disguise.getSkin() : .equals(disguise.getSkin() != null ? disguise.getSkin() : disguise.getName()) || !gameProfile
disguise.getName()) || !gameProfile.getProperties().isEmpty())) { .getProperties().isEmpty())) {
disguise.setGameProfile(gameProfile); disguise.setGameProfile(gameProfile);
DisguiseUtilities.refreshTrackers(disguise); DisguiseUtilities.refreshTrackers(disguise);
@ -743,8 +745,9 @@ public class DisguiseUtilities {
catch (Exception e) { catch (Exception e) {
runnables.remove(playerName); runnables.remove(playerName);
System.out.print( System.out
"[LibsDisguises] Error when fetching " + playerName + "'s uuid from mojang: " + e.getMessage()); .print("[LibsDisguises] Error when fetching " + playerName + "'s uuid from mojang: " + e
.getMessage());
} }
} }
}); });
@ -803,21 +806,22 @@ public class DisguiseUtilities {
Object server = ReflectionManager.getNmsMethod("MinecraftServer", "getServer").invoke(null); Object server = ReflectionManager.getNmsMethod("MinecraftServer", "getServer").invoke(null);
Object world = ((List) server.getClass().getField("worlds").get(server)).get(0); Object world = ((List) server.getClass().getField("worlds").get(server)).get(0);
Object bedChunk = ReflectionManager.getNmsClass("Chunk").getConstructor( Object bedChunk = ReflectionManager.getNmsClass("Chunk")
ReflectionManager.getNmsClass("World"), int.class, int.class).newInstance(world, 0, 0); .getConstructor(ReflectionManager.getNmsClass("World"), int.class, int.class)
.newInstance(world, 0, 0);
Field cSection = bedChunk.getClass().getDeclaredField("sections"); Field cSection = bedChunk.getClass().getDeclaredField("sections");
cSection.setAccessible(true); cSection.setAccessible(true);
Object chunkSection = ReflectionManager.getNmsClass("ChunkSection").getConstructor(int.class, Object chunkSection = ReflectionManager.getNmsClass("ChunkSection").getConstructor(int.class, boolean.class)
boolean.class).newInstance(0, true); .newInstance(0, true);
Object block = ReflectionManager.getNmsClass("Block").getMethod("getById", int.class).invoke(null, Object block = ReflectionManager.getNmsClass("Block").getMethod("getById", int.class)
Material.BED_BLOCK.getId()); .invoke(null, Material.BED_BLOCK.getId());
Method fromLegacyData = block.getClass().getMethod("fromLegacyData", int.class); Method fromLegacyData = block.getClass().getMethod("fromLegacyData", int.class);
Method setType = chunkSection.getClass().getMethod("setType", int.class, int.class, int.class, Method setType = chunkSection.getClass()
ReflectionManager.getNmsClass("IBlockData")); .getMethod("setType", int.class, int.class, int.class, ReflectionManager.getNmsClass("IBlockData"));
Method setSky = chunkSection.getClass().getMethod("a", int.class, int.class, int.class, int.class); Method setSky = chunkSection.getClass().getMethod("a", int.class, int.class, int.class, int.class);
Method setEmitted = chunkSection.getClass().getMethod("b", int.class, int.class, int.class, int.class); Method setEmitted = chunkSection.getClass().getMethod("b", int.class, int.class, int.class, int.class);
@ -835,8 +839,9 @@ public class DisguiseUtilities {
cSection.set(bedChunk, array); cSection.set(bedChunk, array);
spawnChunk = ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.MAP_CHUNK, spawnChunk = ProtocolLibrary.getProtocolManager()
bedChunk, 65535).createPacket(bedChunk, 65535); .createPacketConstructor(PacketType.Play.Server.MAP_CHUNK, bedChunk, 65535)
.createPacket(bedChunk, 65535);
Field threadField = ReflectionManager.getNmsField("MinecraftServer", "primaryThread"); Field threadField = ReflectionManager.getNmsField("MinecraftServer", "primaryThread");
threadField.setAccessible(true); threadField.setAccessible(true);
@ -863,9 +868,9 @@ public class DisguiseUtilities {
} }
public static boolean isDisguiseInUse(Disguise disguise) { public static boolean isDisguiseInUse(Disguise disguise) {
return disguise.getEntity() != null && getDisguises().containsKey( return disguise.getEntity() != null && getDisguises()
disguise.getEntity().getUniqueId()) && getDisguises().get(disguise.getEntity().getUniqueId()).contains( .containsKey(disguise.getEntity().getUniqueId()) && getDisguises()
disguise); .get(disguise.getEntity().getUniqueId()).contains(disguise);
} }
/** /**
@ -888,8 +893,8 @@ public class DisguiseUtilities {
try { try {
PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId());
if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player && disguise.getEntity().getName().equalsIgnoreCase( if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player && disguise.getEntity().getName()
player)) { .equalsIgnoreCase(player)) {
removeSelfDisguise((Player) disguise.getEntity()); removeSelfDisguise((Player) disguise.getEntity());
if (disguise.isSelfDisguiseVisible()) { if (disguise.isSelfDisguiseVisible()) {
@ -915,11 +920,11 @@ public class DisguiseUtilities {
if (entityTrackerEntry == null) if (entityTrackerEntry == null)
return; return;
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear", Method clear = ReflectionManager
ReflectionManager.getNmsClass("EntityPlayer")); .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer"));
final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer",
ReflectionManager.getNmsClass("EntityPlayer")); ReflectionManager.getNmsClass("EntityPlayer"));
@ -975,11 +980,11 @@ public class DisguiseUtilities {
final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(entity); final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(entity);
if (entityTrackerEntry != null) { if (entityTrackerEntry != null) {
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
"trackedPlayers").get(entityTrackerEntry); .get(entityTrackerEntry);
Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear", Method clear = ReflectionManager
ReflectionManager.getNmsClass("EntityPlayer")); .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer"));
final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer",
ReflectionManager.getNmsClass("EntityPlayer")); ReflectionManager.getNmsClass("EntityPlayer"));
@ -1052,11 +1057,11 @@ public class DisguiseUtilities {
final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity()); final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity());
if (entityTrackerEntry != null) { if (entityTrackerEntry != null) {
Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
final Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear", final Method clear = ReflectionManager
ReflectionManager.getNmsClass("EntityPlayer")); .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer"));
final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer",
ReflectionManager.getNmsClass("EntityPlayer")); ReflectionManager.getNmsClass("EntityPlayer"));
@ -1100,7 +1105,8 @@ public class DisguiseUtilities {
getDisguises().remove(entityId); getDisguises().remove(entityId);
} }
if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS && disguise.isModifyBoundingBox()) { if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS && disguise
.isModifyBoundingBox()) {
doBoundingBox(disguise); doBoundingBox(disguise);
} }
@ -1175,16 +1181,16 @@ public class DisguiseUtilities {
Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(player); Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(player);
if (entityTrackerEntry != null) { if (entityTrackerEntry != null) {
Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
// If the tracker exists. Remove himself from his tracker // If the tracker exists. Remove himself from his tracker
if (isHashSet(trackedPlayersObj)) { if (isHashSet(trackedPlayersObj)) {
((Set<Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( ((Set<Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry)).remove(ReflectionManager.getNmsEntity(player)); .get(entityTrackerEntry)).remove(ReflectionManager.getNmsEntity(player));
} else { } else {
((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap").get( ((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap")
entityTrackerEntry)).remove(ReflectionManager.getNmsEntity(player)); .get(entityTrackerEntry)).remove(ReflectionManager.getNmsEntity(player));
} }
} }
} }
@ -1194,10 +1200,10 @@ public class DisguiseUtilities {
// Resend entity metadata else he will be invisible to himself until its resent // Resend entity metadata else he will be invisible to himself until its resent
try { try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, ProtocolLibrary.getProtocolManager().sendServerPacket(player, ProtocolLibrary.getProtocolManager()
ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.ENTITY_METADATA, .createPacketConstructor(Server.ENTITY_METADATA, player.getEntityId(),
player.getEntityId(), WrappedDataWatcher.getEntityWatcher(player), true).createPacket( WrappedDataWatcher.getEntityWatcher(player), true)
player.getEntityId(), WrappedDataWatcher.getEntityWatcher(player), true)); .createPacket(player.getEntityId(), WrappedDataWatcher.getEntityWatcher(player), true));
} }
catch (Exception ex) { catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
@ -1214,8 +1220,8 @@ public class DisguiseUtilities {
throw new IllegalStateException("Cannot modify disguises on an async thread"); throw new IllegalStateException("Cannot modify disguises on an async thread");
try { try {
if (!disguise.isDisguiseInUse() || !player.isValid() || !player.isOnline() || !disguise.isSelfDisguiseVisible() || !disguise.canSee( if (!disguise.isDisguiseInUse() || !player.isValid() || !player.isOnline() || !disguise
player)) { .isSelfDisguiseVisible() || !disguise.canSee(player)) {
return; return;
} }
@ -1248,8 +1254,8 @@ public class DisguiseUtilities {
String ldTeamName = "LD Pushing"; String ldTeamName = "LD Pushing";
// If the player is in a team already // If the player is in a team already
if (prevTeam != null && !(prevTeam.getName().equals("LD Pushing") || prevTeam.getName().endsWith( if (prevTeam != null && !(prevTeam.getName().equals("LD Pushing") || prevTeam.getName()
"_LDP"))) { .endsWith("_LDP"))) {
// If we're creating a scoreboard // If we're creating a scoreboard
if (pOption == DisguisePushing.CREATE_SCOREBOARD) { if (pOption == DisguisePushing.CREATE_SCOREBOARD) {
// Remember his old team so we can give him it back later // Remember his old team so we can give him it back later
@ -1300,16 +1306,16 @@ public class DisguiseUtilities {
} }
// Add himself to his own entity tracker // Add himself to his own entity tracker
Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry); .get(entityTrackerEntry);
// Check for code differences in PaperSpigot vs Spigot // Check for code differences in PaperSpigot vs Spigot
if (isHashSet(trackedPlayersObj)) { if (isHashSet(trackedPlayersObj)) {
((Set<Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( ((Set<Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers")
entityTrackerEntry)).add(ReflectionManager.getNmsEntity(player)); .get(entityTrackerEntry)).add(ReflectionManager.getNmsEntity(player));
} else { } else {
((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap").get( ((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap")
entityTrackerEntry)).put(ReflectionManager.getNmsEntity(player), true); .get(entityTrackerEntry)).put(ReflectionManager.getNmsEntity(player), true);
} }
ProtocolManager manager = ProtocolLibrary.getProtocolManager(); ProtocolManager manager = ProtocolLibrary.getProtocolManager();
@ -1320,8 +1326,8 @@ public class DisguiseUtilities {
WrappedDataWatcher dataWatcher = WrappedDataWatcher.getEntityWatcher(player); WrappedDataWatcher dataWatcher = WrappedDataWatcher.getEntityWatcher(player);
sendSelfPacket(player, sendSelfPacket(player,
manager.createPacketConstructor(Server.ENTITY_METADATA, player.getEntityId(), dataWatcher, manager.createPacketConstructor(Server.ENTITY_METADATA, player.getEntityId(), dataWatcher, true)
true).createPacket(player.getEntityId(), dataWatcher, true)); .createPacket(player.getEntityId(), dataWatcher, true));
boolean isMoving = false; boolean isMoving = false;
@ -1339,64 +1345,68 @@ public class DisguiseUtilities {
Vector velocity = player.getVelocity(); Vector velocity = player.getVelocity();
sendSelfPacket(player, sendSelfPacket(player,
manager.createPacketConstructor(Server.ENTITY_VELOCITY, player.getEntityId(), velocity.getX(), manager.createPacketConstructor(Server.ENTITY_VELOCITY, player.getEntityId(), velocity.getX(),
velocity.getY(), velocity.getZ()).createPacket(player.getEntityId(), velocity.getX(), velocity.getY(), velocity.getZ())
velocity.getY(), velocity.getZ())); .createPacket(player.getEntityId(), velocity.getX(), velocity.getY(), velocity.getZ()));
} }
// Why the hell would he even need this. Meh. // Why the hell would he even need this. Meh.
if (player.getVehicle() != null && player.getEntityId() > player.getVehicle().getEntityId()) { if (player.getVehicle() != null && player.getEntityId() > player.getVehicle().getEntityId()) {
sendSelfPacket(player, manager.createPacketConstructor(Server.ATTACH_ENTITY, 0, player, sendSelfPacket(player,
player.getVehicle()).createPacket(0, player, player.getVehicle())); manager.createPacketConstructor(Server.ATTACH_ENTITY, 0, player, player.getVehicle())
.createPacket(0, player, player.getVehicle()));
} else if (player.getPassenger() != null && player.getEntityId() > player.getPassenger().getEntityId()) { } else if (player.getPassenger() != null && player.getEntityId() > player.getPassenger().getEntityId()) {
sendSelfPacket(player, manager.createPacketConstructor(Server.ATTACH_ENTITY, 0, player.getPassenger(), sendSelfPacket(player,
player).createPacket(0, player.getPassenger(), player)); manager.createPacketConstructor(Server.ATTACH_ENTITY, 0, player.getPassenger(), player)
.createPacket(0, player.getPassenger(), player));
} }
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(player.getInventory().getHelmet()))); ReflectionManager.getNmsItem(player.getInventory().getHelmet())));
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.CHEST), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.CHEST),
ReflectionManager.getNmsItem(player.getInventory().getChestplate()))); ReflectionManager.getNmsItem(player.getInventory().getChestplate())));
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.LEGS), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.LEGS),
ReflectionManager.getNmsItem(player.getInventory().getLeggings()))); ReflectionManager.getNmsItem(player.getInventory().getLeggings())));
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.FEET), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.FEET),
ReflectionManager.getNmsItem(player.getInventory().getBoots()))); ReflectionManager.getNmsItem(player.getInventory().getBoots())));
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.HAND), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.HAND),
ReflectionManager.getNmsItem(player.getInventory().getItemInMainHand()))); ReflectionManager.getNmsItem(player.getInventory().getItemInMainHand())));
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0,
ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD),
ReflectionManager.getNmsItem(new ItemStack(Material.STONE))).createPacket(player.getEntityId(), ReflectionManager.getNmsItem(new ItemStack(Material.STONE)))
ReflectionManager.createEnumItemSlot(EquipmentSlot.OFF_HAND), .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.OFF_HAND),
ReflectionManager.getNmsItem(player.getInventory().getItemInOffHand()))); ReflectionManager.getNmsItem(player.getInventory().getItemInOffHand())));
Location loc = player.getLocation(); Location loc = player.getLocation();
// If the disguised is sleeping for w/e reason // If the disguised is sleeping for w/e reason
if (player.isSleeping()) { if (player.isSleeping()) {
sendSelfPacket(player, manager.createPacketConstructor(Server.BED, player, sendSelfPacket(player,
ReflectionManager.getBlockPosition(0, 0, 0)).createPacket(player, manager.createPacketConstructor(Server.BED, player, ReflectionManager.getBlockPosition(0, 0, 0))
ReflectionManager.getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))); .createPacket(player, ReflectionManager
.getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));
} }
// Resend any active potion effects // Resend any active potion effects
for (PotionEffect potionEffect : player.getActivePotionEffects()) { for (PotionEffect potionEffect : player.getActivePotionEffects()) {
Object mobEffect = ReflectionManager.createMobEffect(potionEffect); Object mobEffect = ReflectionManager.createMobEffect(potionEffect);
sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EFFECT, player.getEntityId(), sendSelfPacket(player,
mobEffect).createPacket(player.getEntityId(), mobEffect)); manager.createPacketConstructor(Server.ENTITY_EFFECT, player.getEntityId(), mobEffect)
.createPacket(player.getEntityId(), mobEffect));
} }
} }
catch (Exception ex) { catch (Exception ex) {
@ -1449,8 +1459,8 @@ public class DisguiseUtilities {
Entity e = disguise.getEntity(); Entity e = disguise.getEntity();
// If the disguises entity is null, or the disguised entity isn't a player return // If the disguises entity is null, or the disguised entity isn't a player return
if (e == null || !(e instanceof Player) || !getDisguises().containsKey(e.getUniqueId()) || !getDisguises().get( if (e == null || !(e instanceof Player) || !getDisguises().containsKey(e.getUniqueId()) || !getDisguises()
e.getUniqueId()).contains(disguise)) { .get(e.getUniqueId()).contains(disguise)) {
return; return;
} }
@ -1465,7 +1475,8 @@ public class DisguiseUtilities {
DisguiseUtilities.removeSelfDisguise(player); DisguiseUtilities.removeSelfDisguise(player);
// If the disguised player can't see himself. Return // If the disguised player can't see himself. Return
if (!disguise.isSelfDisguiseVisible() || !PacketsManager.isViewDisguisesListenerEnabled() || player.getVehicle() != null) { if (!disguise.isSelfDisguiseVisible() || !PacketsManager.isViewDisguisesListenerEnabled() || player
.getVehicle() != null) {
return; return;
} }

View File

@ -0,0 +1,172 @@
package me.libraryaddict.disguise.utilities;
import org.bukkit.ChatColor;
/**
* Created by libraryaddict on 15/06/2017.
*/
public enum LibsMsg {
BLOWN_DISGUISE(ChatColor.RED + "Your disguise was blown!"),
CAN_USE_DISGS(ChatColor.DARK_GREEN + "You can use the disguises: %s"),
CANNOT_FIND_PLAYER(ChatColor.RED + "Cannot find the player '%s'"),
CLICK_TIMER(ChatColor.RED + "Right click a entity in the next %s seconds to grab the disguise reference!"),
CLONE_HELP1(
ChatColor.DARK_GREEN + "Right click a entity to get a disguise reference you can pass to other disguise commands!"),
CLONE_HELP2(
ChatColor.DARK_GREEN + "Security note: Any references you create will be available to all players able to use disguise references."),
CLONE_HELP3(
ChatColor.DARK_GREEN + "/disguiseclone IgnoreEquipment" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")"),
D_HELP1(ChatColor.DARK_GREEN + "Disguise another player!"),
D_HELP3(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> player <Name>"),
D_HELP4(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <DisguiseType> <Baby>"),
D_HELP5(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <Dropped_Item/Falling_Block> <Id> <Durability>"),
D_PARSE_NOPERM(ChatColor.RED + "You do not have permission to use the option %s"),
DHELP_CANTFIND(ChatColor.RED + "Cannot find the disguise %s"),
DHELP_HELP1(
ChatColor.RED + "/disguisehelp <DisguiseType> " + ChatColor.GREEN + "- View the options you can set on a disguise. Add 'show' to reveal the options you don't have permission to use"),
DHELP_HELP2(ChatColor.RED + "/disguisehelp %s" + ChatColor.GREEN + " - %s"),
DHELP_OPTIONS("%s options: %s"),
DISABLED_LIVING_TO_MISC(
ChatColor.RED + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!"),
DISG_ENT_CLICK(ChatColor.RED + "Right click an entity in the next %s seconds to disguise it as a %s!"),
DISG_ENT_HELP1(ChatColor.DARK_GREEN + "Choose a disguise then right click an entity to disguise it!"),
DISG_ENT_HELP3(ChatColor.DARK_GREEN + "/disguiseentity player <Name>"),
DISG_ENT_HELP4(ChatColor.DARK_GREEN + "/disguiseentity <DisguiseType> <Baby>"),
DISG_ENT_HELP5(ChatColor.DARK_GREEN + "/disguiseentity <Dropped_Item/Falling_Block> <Id> <Durability>"),
DISG_HELP1(ChatColor.DARK_GREEN + "Choose a disguise to become the disguise!"),
DISG_HELP2(ChatColor.DARK_GREEN + "/disguise player <Name>"),
DISG_HELP3(ChatColor.DARK_GREEN + "/disguise <DisguiseType> <Baby>"),
DISG_HELP4(ChatColor.DARK_GREEN + "/disguise <Dropped_Item/Falling_Block> <Id> <Durability>"),
DISG_PLAYER_AS_DISG(ChatColor.RED + "Successfully disguised %s as a %s!"),
DISG_PLAYER_AS_DISG_FAIL(ChatColor.RED + "Failed to disguise %s as a %s!"),
DISGUISED(ChatColor.RED + "Now disguised as a %s"),
DISRADIUS(ChatColor.RED + "Successfully disguised %s entities!"),
DISRADIUS_FAIL(ChatColor.RED + "Couldn't find any entities to disguise!"),
DMODENT_HELP1(ChatColor.DARK_GREEN + "Choose the options for a disguise then right click a entity to modify it!"),
DMODIFY_HELP1(ChatColor.DARK_GREEN + "Modify your own disguise as you wear it!"),
DMODIFY_HELP2(ChatColor.DARK_GREEN + "/disguisemodify setBaby true setSprinting true"),
DMODIFY_HELP3(ChatColor.DARK_GREEN + "You can modify the disguises: %s"),
DMODIFY_MODIFIED(ChatColor.RED + "Your disguise has been modified!"),
DMODIFY_NO_PERM(ChatColor.RED + "No permission to modify your disguise!"),
DMODIFYENT_CLICK(ChatColor.RED + "Right click a disguised entity in the next %s seconds to modify their disguise!"),
DMODPLAYER_HELP1(ChatColor.DARK_GREEN + "Modify the disguise of another player!"),
DMODPLAYER_MODIFIED(ChatColor.RED + "Modified the disguise of %s!"),
DMODPLAYER_NODISGUISE(ChatColor.RED + "The player '%s' is not disguised"),
DMODPLAYER_NOPERM(ChatColor.RED + "You do not have permission to modify this disguise"),
DMODRADIUS(ChatColor.RED + "Successfully modified the disguises of %s entities!"),
DMODRADIUS_HELP1(ChatColor.DARK_GREEN + "Modify the disguises in a radius! Caps at %s blocks!"),
DMODRADIUS_HELP3(
(ChatColor.DARK_GREEN + "/disguisemodifyradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> player <Name>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DMODRADIUS_HELP4(
(ChatColor.DARK_GREEN + "/disguisemodifyradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> <DisguiseType> <Baby" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DMODRADIUS_HELP5(
(ChatColor.DARK_GREEN + "/disguisemodifyradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DMODRADIUS_HELP6(
ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguisemodifyradius EntityTypes"),
DMODRADIUS_NEEDOPTIONS(ChatColor.RED + "You need to supply the disguise options as well as the radius"),
DMODRADIUS_NEEDOPTIONS_ENTITY(
ChatColor.RED + "You need to supply the disguise options as well as the radius and EntityType"),
DMODRADIUS_NOENTS(ChatColor.RED + "Couldn't find any disguised entities!"),
DMODRADIUS_NOPERM(ChatColor.RED + "No permission to modify %s disguises!"),
DMODRADIUS_UNRECOGNIZED(ChatColor.RED + "Unrecognised EntityType %s"),
DMODRADIUS_USABLE(ChatColor.DARK_GREEN + "EntityTypes usable are: %s" + ChatColor.DARK_GREEN + "."),
DPLAYER_SUPPLY(ChatColor.RED + "You need to supply a disguise as well as the player"),
DRADIUS_ENTITIES(ChatColor.DARK_GREEN + "EntityTypes usable are: %s"),
DRADIUS_HELP1(ChatColor.DARK_GREEN + "Disguise all entities in a radius! Caps at %s blocks!"),
DRADIUS_HELP3(
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> player <Name>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DRADIUS_HELP4(
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> <DisguiseType> <Baby" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DRADIUS_HELP5(
(ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")>")
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")),
DRADIUS_HELP6(
ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes"),
DRADIUS_MISCDISG(
ChatColor.RED + "Failed to disguise %s entities because the option to disguise a living entity as a non-living has been disabled in the config"),
DRADIUS_NEEDOPTIONS(ChatColor.RED + "You need to supply a disguise as well as the radius"),
DRADIUS_NEEDOPTIONS_ENTITY(ChatColor.RED + "You need to supply a disguise as well as the radius and EntityType"),
FAILED_DISGIUSE(ChatColor.RED + "Failed to disguise as a %s"),
INVALID_CLONE(
ChatColor.DARK_RED + "Unknown option '%s' - Valid options are 'IgnoreEquipment' 'DoSneakSprint' " + "'DoSneak' 'DoSprint'"),
LIBS_RELOAD_WRONG(ChatColor.RED + "[LibsDisguises] Did you mean 'reload'?"),
LIMITED_RADIUS(ChatColor.RED + "Limited radius to %s! Don't want to make too much lag right?"),
LISTEN_ENTITY_ENTITY_DISG_ENTITY(ChatColor.RED + "Disguised s %s as a %s!"),
LISTEN_ENTITY_ENTITY_DISG_ENTITY_FAIL(ChatColor.RED + "Failed to disguise s %s as a %s!"),
LISTEN_ENTITY_ENTITY_DISG_PLAYER(ChatColor.RED + "Disguised s %s as the player %s!"),
LISTEN_ENTITY_ENTITY_DISG_PLAYER_FAIL(ChatColor.RED + "Failed to disguise s %s as the player %s!"),
LISTEN_ENTITY_PLAYER_DISG_ENTITY(ChatColor.RED + "Disguised the player %s as a %s!"),
LISTEN_ENTITY_PLAYER_DISG_ENTITY_FAIL(ChatColor.RED + "Failed to disguise the player %s as a %s!"),
LISTEN_ENTITY_PLAYER_DISG_PLAYER(ChatColor.RED + "Disguised the player %s as the player %s!"),
LISTEN_ENTITY_PLAYER_DISG_PLAYER_FAIL(ChatColor.RED + "Failed to disguise the player %s as the player %s!"),
LISTEN_UNDISG_ENT(ChatColor.RED + "Undisguised the %s"),
LISTEN_UNDISG_ENT_FAIL(ChatColor.RED + "%s isn't disguised!"),
LISTEN_UNDISG_PLAYER(ChatColor.RED + "Undisguised %s"),
LISTEN_UNDISG_PLAYER_FAIL(ChatColor.RED + "The %s isn't disguised!"),
LISTENER_MODIFIED_DISG(ChatColor.RED + "Modified the disguise!"),
MADE_REF(ChatColor.RED + "Constructed a %s disguise! Your reference is %s"),
MADE_REF_EXAMPLE(ChatColor.RED + "Example usage: /disguise %s"),
NO_CONSOLE(ChatColor.RED + "You may not use this command from the console!"),
NO_PERM(ChatColor.RED + "You are forbidden to use this command."),
NO_PERM_DISGUISE(ChatColor.RED + "You do not have permission for that disguise!"),
NO_PERMS_USE_OPTIONS(
ChatColor.RED + "Ignored %s options you do not have permission to use. Add 'show' to view unusable options."),
NOT_DISGUISED(ChatColor.RED + "You are not disguised!"),
NOT_NUMBER(ChatColor.RED + "Error! %s is not a number"),
PARSE_CANT_DISG_UNKNOWN(ChatColor.RED + "Error! You cannot disguise as " + ChatColor.GREEN + "Unknown!"),
PARSE_CANT_LOAD(ChatColor.RED + "Error! This disguise couldn't be loaded!"),
PARSE_DISG_NO_EXIST(
ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + "%s" + ChatColor.RED + " doesn't exist!"),
PARSE_EXPECTED_RECEIVED(
ChatColor.RED + "Expected " + ChatColor.GREEN + "%s" + ChatColor.RED + ", received " + ChatColor.GREEN + "%s" + ChatColor.RED + " instead for " + ChatColor.GREEN + "%s"),
PARSE_NO_ARGS("No arguments defined"),
PARSE_NO_OPTION_VALUE(ChatColor.RED + "No value was given for the option %s"),
PARSE_NO_PERM_NAME(ChatColor.RED + "Error! You don't have permission to use that name!"),
PARSE_NO_PERM_PARAM(
ChatColor.RED + "Error! You do not have permission to use the parameter %s on the %s disguise!"),
PARSE_NO_PERM_REF(ChatColor.RED + "You do not have perimssion to use disguise references!"),
PARSE_NO_REF(ChatColor.RED + "Cannot find a disguise under the reference %s"),
PARSE_OPTION_NA(ChatColor.RED + "Cannot find the option %s"),
PARSE_SUPPLY_PLAYER(ChatColor.RED + "Error! You need to give a player name!"),
PARSE_TOO_MANY_ARGS(ChatColor.RED + "Error! %s doesn't know what to do with %s!"),
PARSE_USE_SECOND_NUM(ChatColor.RED + "Error! Only the disguises %s and %s uses a second number!"),
REF_TOO_MANY(
ChatColor.RED + "Failed to store the reference, too many cloned disguises. Please raise the maximum cloned disguises, or lower the time they last"),
RELOADED_CONFIG(ChatColor.GREEN + "[LibsDisguises] Reloaded config."),
UND_ENTITY(ChatColor.RED + "Right click a disguised entity to undisguise them!"),
UNDISG(ChatColor.RED + "You are no longer disguised"),
UNDISG_PLAYER(ChatColor.RED + "%s is no longer disguised"),
UNDISG_PLAYER_FAIL(ChatColor.RED + "%s not disguised!"),
UNDISG_PLAYER_HELP(ChatColor.RED + "/undisguiseplayer <Name>"),
UNDISRADIUS(ChatColor.RED + "Successfully undisguised %s entities!"),
UPDATE_READY(
ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED + "There is a update ready to be downloaded! You are using " + ChatColor.RED + "v%s" + ChatColor.DARK_RED + ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!"),
VIEW_SELF_OFF(ChatColor.GREEN + "Toggled viewing own disguise on!"),
VIEW_SELF_ON(ChatColor.GREEN + "Toggled viewing own disguise off!");
private String string;
LibsMsg(String string) {
this.string = string;
}
public String getRaw() {
return string;
}
public String get(Object... strings) {
if (strings.length == 0)
return TranslateType.MESSAGES.get(getRaw());
return String.format(TranslateType.MESSAGES.get(getRaw()), (Object[]) strings);
}
public String toString() {
throw new RuntimeException("Dont call this");
}
}

View File

@ -81,10 +81,20 @@ public class ReflectionFlagWatchers {
} }
public String getName() { public String getName() {
return TranslateType.DISGUISE_OPTIONS_PARAMETERS
.get(getRawName(), "Used as a disguise option for " + getRawName());
}
public String getRawName() {
return name; return name;
} }
public String getDescription() { public String getDescription() {
return TranslateType.DISGUISE_OPTIONS_PARAMETERS
.get(getRawDescription(), "Used as a disguise option for " + getRawDescription());
}
public String getRawDescription() {
return description; return description;
} }
@ -142,8 +152,8 @@ public class ReflectionFlagWatchers {
new ParamInfo(Ocelot.Type.class, "Ocelot Type", "View all the ocelot types you can use for ocelots"); new ParamInfo(Ocelot.Type.class, "Ocelot Type", "View all the ocelot types you can use for ocelots");
new ParamInfo(Villager.Profession.class, "Villager Profession", new ParamInfo(Villager.Profession.class, "Villager Profession",
"View all the professions you can set on a villager"); "View all the professions you can set on a villager");
new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 5), "Direction", new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 4), "Direction",
"View the five directions usable on player setSleeping disguise"); "View the four directions usable on player setSleeping disguise");
new ParamInfo(RabbitType.class, "Rabbit Type", "View the kinds of rabbits you can turn into"); new ParamInfo(RabbitType.class, "Rabbit Type", "View the kinds of rabbits you can turn into");
new ParamInfo(TreeSpecies.class, "Tree Species", "View the different types of tree species"); new ParamInfo(TreeSpecies.class, "Tree Species", "View the different types of tree species");
@ -162,6 +172,7 @@ public class ReflectionFlagWatchers {
potionEnums.add(toReadable(effectType.getName())); potionEnums.add(toReadable(effectType.getName()));
} }
String[] materials = new String[Material.values().length]; String[] materials = new String[Material.values().length];
for (int i = 0; i < Material.values().length; i++) { for (int i = 0; i < Material.values().length; i++) {
@ -170,7 +181,7 @@ public class ReflectionFlagWatchers {
new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability", materials); new ParamInfo(ItemStack.class, "Item (id:damage)", "An ItemStack compromised of ID:Durability", materials);
new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)", "Four ItemStacks seperated by an ,", new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..)", "Four ItemStacks separated by an ,",
materials) { materials) {
@Override @Override
public String[] getEnums(String tabComplete) { public String[] getEnums(String tabComplete) {
@ -195,14 +206,14 @@ public class ReflectionFlagWatchers {
potionEnums.toArray(new String[0])); potionEnums.toArray(new String[0]));
new ParamInfo(String.class, "Text", "A line of text"); new ParamInfo(String.class, "Text", "A line of text");
new ParamInfo(boolean.class, "True/False", "True or False", new String[]{"true", "false"}); new ParamInfo(boolean.class, "True/False", "True or False", new String[]{"true", "false"});
new ParamInfo(int.class, "Number", "A whole number, no decimcals"); new ParamInfo(int.class, "Number", "A whole number, no decimals");
new ParamInfo(double.class, "Number", "A number which can have decimals"); new ParamInfo(double.class, "Number", "A number which can have decimals");
new ParamInfo(float.class, "Number", "A number which can have decimals"); new ParamInfo(float.class, "Number", "A number which can have decimals");
new ParamInfo(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse"); new ParamInfo(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse");
new ParamInfo(int[].class, "number,number,number...", "Numbers seperated by an ,"); new ParamInfo(int[].class, "number,number,number..", "Numbers separated by an ,");
new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers seperated by an ,"); new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers separated by a ,");
new ParamInfo(GameProfile.class, "GameProfile", new ParamInfo(GameProfile.class, "GameProfile",
"Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false"); "Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false");

View File

@ -0,0 +1,73 @@
package me.libraryaddict.disguise.utilities;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import org.apache.commons.lang.StringUtils;
import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Method;
/**
* Created by libraryaddict on 10/06/2017.
*/
public class TranslateFiller {
public static void fillConfigs() {
// Fill the configs
for (ReflectionFlagWatchers.ParamInfo info : ReflectionFlagWatchers.getParamInfos()) {
if (!info.isEnums())
continue;
if (info.getParamClass() == ItemStack.class || info.getParamClass() == ItemStack[].class)
continue;
TranslateType.DISGUISE_OPTIONS_PARAMETERS.save(info.getRawName(), "Used as a disguise option");
TranslateType.DISGUISE_OPTIONS_PARAMETERS
.save(info.getRawDescription(), "Description for the disguise option " + info.getRawName());
for (String e : info.getEnums("")) {
TranslateType.DISGUISE_OPTIONS_PARAMETERS.save(e, "Used for the disguise option " + info.getRawName());
}
}
for (DisguiseType type : DisguiseType.values()) {
String[] split = type.name().split("_");
for (int i = 0; i < split.length; i++) {
split[i] = split[i].substring(0, 1) + split[i].substring(1).toLowerCase();
}
TranslateType.DISGUISES.save(StringUtils.join(split, " "), "Name for the " + type.name() + " disguise");
for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(type.getWatcherClass())) {
Class para = method.getParameterTypes()[0];
String className = method.getDeclaringClass().getSimpleName().replace("Watcher", "");
if (className.equals("Flag") || className.equals("Disguise"))
className = "Entity";
else if (className.equals("Living"))
className = "Living Entity";
else if (className.equals("AbstractHorse"))
className = "Horse";
else if (className.equals("DroppedItem"))
className = "Item";
else if (className.equals("IllagerWizard"))
className = "Illager";
TranslateType.DISGUISE_OPTIONS.save(method.getName(),
"Found in the disguise options for " + className + " and uses " + (para.isArray() ?
"multiple" + " " : "a ") + para.getSimpleName().replace("[]", "s"));
}
}
for (LibsMsg msg : LibsMsg.values()) {
TranslateType.MESSAGES.save(msg.getRaw());
}
if (!LibsPremium.isPremium() || !DisguiseConfig.isUseTranslations()) {
for (TranslateType type : TranslateType.values()) {
type.wipeTranslations();
}
}
}
}

View File

@ -0,0 +1,156 @@
package me.libraryaddict.disguise.utilities;
import me.libraryaddict.disguise.DisguiseConfig;
import org.apache.commons.lang3.StringEscapeUtils;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* Created by libraryaddict on 10/06/2017.
*/
public enum TranslateType {
DISGUISES("disguises"),
MESSAGES("messages"),
DISGUISE_OPTIONS("disguise_options"),
DISGUISE_OPTIONS_PARAMETERS("disguise_option_parameters");
private File file;
private HashMap<String, String> translated = new HashMap<>();
TranslateType(String fileName) {
file = new File("plugins/LibsDisguises/Translations", fileName + ".yml");
}
public static void reloadTranslations() {
for (TranslateType type : values()) {
type.reload();
}
TranslateFiller.fillConfigs();
}
public void wipeTranslations() {
translated.clear();
}
private void reload() {
translated.clear();
if (LibsPremium.isPremium() && DisguiseConfig.isUseTranslations()) {
System.out.println("[LibsDisguises] Loading translations: " + name());
}
if (!file.exists())
return;
YamlConfiguration config = new YamlConfiguration();
config.options().pathSeparator(Character.toChars(0)[0]);
try {
config.load(file);
for (String key : config.getKeys(false)) {
String value = config.getString(key);
if (value == null)
System.err.println("Translation for " + name() + " has a null value for the key '" + key + "'");
else
translated.put(ChatColor.translateAlternateColorCodes('&', key),
ChatColor.translateAlternateColorCodes('&', value));
}
}
catch (Exception e) {
e.printStackTrace();
}
}
private File getFile() {
return file;
}
public void save(String msg) {
if (this != TranslateType.MESSAGES)
throw new IllegalArgumentException("Can't set no comment for '" + msg + "'");
save(msg, null);
}
public void save(String message, String comment) {
if (translated.containsKey(message))
return;
translated.put(message, message);
message = StringEscapeUtils.escapeJava(message.replaceAll(ChatColor.COLOR_CHAR + "", "&"));
try {
boolean exists = file.exists();
if (!exists) {
file.getParentFile().mkdirs();
file.createNewFile();
}
FileWriter writer = new FileWriter(getFile(), true);
if (!exists) {
writer.write("# To use translations in Lib's Disguises, you must have the purchased plugin\n");
if (this == TranslateType.MESSAGES) {
writer.write("# %s is where text is inserted, look up printf format codes if you're interested\n");
}
}
writer.write("\n" + (comment != null ? "# " + comment + "\n" :
"") + "\"" + message + "\": \"" + message + "\"\n");
writer.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public String reverseGet(String translated) {
if (translated == null)
return null;
translated = translated.toLowerCase();
for (Map.Entry<String, String> entry : this.translated.entrySet()) {
if (!Objects.equals(entry.getValue().toLowerCase(), translated))
continue;
return entry.getKey();
}
return translated;
}
public String get(String msg) {
if (this != TranslateType.MESSAGES)
throw new IllegalArgumentException("Can't set no comment for '" + msg + "'");
return get(msg, null);
}
public String get(String msg, String comment) {
if (msg == null || !LibsPremium.isPremium() || !DisguiseConfig.isUseTranslations())
return msg;
String toReturn = translated.get(msg);
if (toReturn != null)
return toReturn;
save(msg, comment);
return msg;
}
}

View File

@ -13,7 +13,6 @@ public class SerializerGameProfile implements JsonSerializer<WrappedGameProfile>
@Override @Override
public JsonElement serialize(WrappedGameProfile src, Type typeOfSrc, JsonSerializationContext context) { public JsonElement serialize(WrappedGameProfile src, Type typeOfSrc, JsonSerializationContext context) {
System.out.println(src.getHandle().toString());
return context.serialize(src.getHandle(), GameProfile.class); return context.serialize(src.getHandle(), GameProfile.class);
} }