From d8acbb47ae25f3d8bd53dce68d7d7919f0c769f7 Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 8 Oct 2012 10:16:19 +0800 Subject: [PATCH] Translate the last of the strings --- src/main/java/net/citizensnpcs/Citizens.java | 4 +- .../java/net/citizensnpcs/NPCDataStore.java | 11 +- .../net/citizensnpcs/command/Command.java | 2 + .../command/command/HelpCommands.java | 50 ++++++-- .../command/command/NPCCommands.java | 72 +++++------ .../npc/entity/CitizensPigNPC.java | 6 +- .../npc/entity/CitizensSheepNPC.java | 5 +- .../citizensnpcs/trait/text/StartPrompt.java | 7 +- .../java/net/citizensnpcs/util/Messages.java | 113 ++++-------------- .../java/net/citizensnpcs/util/Messaging.java | 12 +- .../net/citizensnpcs/util/Translator.java | 93 +++++++++++++- src/main/resources/messages_en.properties | 22 ++++ 12 files changed, 232 insertions(+), 165 deletions(-) diff --git a/src/main/java/net/citizensnpcs/Citizens.java b/src/main/java/net/citizensnpcs/Citizens.java index f582d89a1..9ae337dd9 100644 --- a/src/main/java/net/citizensnpcs/Citizens.java +++ b/src/main/java/net/citizensnpcs/Citizens.java @@ -234,7 +234,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { scheduleSaveTask(Setting.SAVE_TASK_DELAY.asInt()); Bukkit.getPluginManager().callEvent(new CitizensEnableEvent()); } - }) == -1) { + }, 1) == -1) { Messaging.severeTr(Messages.LOAD_TASK_NOT_SCHEDULED); getServer().getPluginManager().disablePlugin(this); } @@ -325,7 +325,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { default: break; } - Translator.setInstance(new File(getDataFolder(), "i18n"), locale); + Translator.setInstance(new File(getDataFolder(), "lang"), locale); Messaging.logTr(Messages.LOCALE_NOTIFICATION, locale); } diff --git a/src/main/java/net/citizensnpcs/NPCDataStore.java b/src/main/java/net/citizensnpcs/NPCDataStore.java index 085862a04..c854c02e4 100644 --- a/src/main/java/net/citizensnpcs/NPCDataStore.java +++ b/src/main/java/net/citizensnpcs/NPCDataStore.java @@ -15,6 +15,7 @@ import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPCRegistry; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Messaging; +import net.citizensnpcs.util.Util; import org.bukkit.entity.EntityType; @@ -34,14 +35,10 @@ public class NPCDataStore { continue; } String unparsedEntityType = key.getString("traits.type", "PLAYER"); - EntityType type = EntityType.fromName(unparsedEntityType); + EntityType type = Util.matchEntityType(unparsedEntityType); if (type == null) { - try { - type = EntityType.valueOf(unparsedEntityType); - } catch (IllegalArgumentException ex) { - Messaging.logTr(Messages.LOAD_UNKNOWN_NPC_TYPE, unparsedEntityType); - continue; - } + Messaging.logTr(Messages.LOAD_UNKNOWN_NPC_TYPE, unparsedEntityType); + continue; } NPC npc = registry.createNPC(type, id, key.getString("name")); ((CitizensNPC) npc).load(key); diff --git a/src/main/java/net/citizensnpcs/command/Command.java b/src/main/java/net/citizensnpcs/command/Command.java index cce64c764..dd271593f 100644 --- a/src/main/java/net/citizensnpcs/command/Command.java +++ b/src/main/java/net/citizensnpcs/command/Command.java @@ -11,6 +11,8 @@ public @interface Command { String flags() default ""; + String help() default ""; + int max() default -1; int min() default 0; diff --git a/src/main/java/net/citizensnpcs/command/command/HelpCommands.java b/src/main/java/net/citizensnpcs/command/command/HelpCommands.java index 9feb247a4..b071450c7 100644 --- a/src/main/java/net/citizensnpcs/command/command/HelpCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/HelpCommands.java @@ -30,7 +30,7 @@ public class HelpCommands { @Command( aliases = { "citizens" }, - usage = "help (page)", + usage = "help (page|command)", desc = "Citizens help menu", modifiers = { "help" }, min = 1, @@ -38,7 +38,12 @@ public class HelpCommands { permission = "help") @Requirements public void citizensHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - int page = args.argsLength() == 2 ? args.getInteger(1) : 1; + int page = 1; + try { + page = args.argsLength() == 2 ? args.getInteger(1) : page; + } catch (NumberFormatException e) { + sendSpecificHelp(sender, "citizens", args.getString(1)); + } sendHelp(sender, "citizens", page); } @@ -63,7 +68,7 @@ public class HelpCommands { @Command( aliases = { "npc" }, - usage = "help (page)", + usage = "help (page|command)", desc = "NPC help menu", modifiers = { "help" }, min = 1, @@ -71,13 +76,18 @@ public class HelpCommands { permission = "npc.help") @Requirements public void npcHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - int page = args.argsLength() == 2 ? args.getInteger(1) : 1; + int page = 1; + try { + page = args.argsLength() == 2 ? args.getInteger(1) : page; + } catch (NumberFormatException e) { + sendSpecificHelp(sender, "npc", args.getString(1)); + } sendHelp(sender, "NPC", page); } @Command( aliases = { "script" }, - usage = "help (page)", + usage = "help (page|command)", desc = "Script help menu", modifiers = { "help" }, min = 1, @@ -85,7 +95,12 @@ public class HelpCommands { permission = "script.help") @Requirements public void scriptHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - int page = args.argsLength() == 2 ? args.getInteger(1) : 1; + int page = 1; + try { + page = args.argsLength() == 2 ? args.getInteger(1) : page; + } catch (NumberFormatException e) { + sendSpecificHelp(sender, "script", args.getString(1)); + } sendHelp(sender, "script", page); } @@ -98,9 +113,14 @@ public class HelpCommands { throw new CommandException(Messages.COMMAND_PAGE_MISSING, page); } + private void sendSpecificHelp(CommandSender sender, String string, String string2) { + // TODO Auto-generated method stub + + } + @Command( aliases = { "template", "tpl" }, - usage = "help (page)", + usage = "help (page|command)", desc = "Template help menu", modifiers = { "help" }, min = 1, @@ -108,13 +128,18 @@ public class HelpCommands { permission = "templates.help") @Requirements public void templatesHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - int page = args.argsLength() == 2 ? args.getInteger(1) : 1; + int page = 1; + try { + page = args.argsLength() == 2 ? args.getInteger(1) : page; + } catch (NumberFormatException e) { + sendSpecificHelp(sender, "templates", args.getString(1)); + } sendHelp(sender, "templates", page); } @Command( aliases = { "waypoint", "waypoint", "wp" }, - usage = "help (page)", + usage = "help (page|command)", desc = "Waypoints help menu", modifiers = { "help" }, min = 1, @@ -122,7 +147,12 @@ public class HelpCommands { permission = "waypoints.help") @Requirements public void waypointsHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - int page = args.argsLength() == 2 ? args.getInteger(1) : 1; + int page = 1; + try { + page = args.argsLength() == 2 ? args.getInteger(1) : page; + } catch (NumberFormatException e) { + sendSpecificHelp(sender, "waypoints", args.getString(1)); + } sendHelp(sender, "waypoints", page); } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index 7c22cc3f2..33863fb50 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -79,29 +79,32 @@ public class NPCCommands { Age trait = npc.getTrait(Age.class); boolean toggleLock = args.hasFlag('l'); - if (toggleLock) - Messaging.send(sender, "Age " + (trait.toggle() ? "locked" : "unlocked") + "."); + if (toggleLock) { + Messaging.sendTr(sender, trait.toggle() ? Messages.AGE_LOCKED : Messages.AGE_UNLOCKED); + } + if (args.argsLength() <= 1) { + if (!toggleLock) + trait.describe(sender); + return; + } + int age = 0; + try { + age = args.getInteger(1); + if (age < -24000 || age > 0) + throw new CommandException(Messages.INVALID_AGE); + Messaging.sendTr(sender, Messages.AGE_SET_NORMAL, npc.getName(), age); + } catch (NumberFormatException ex) { + if (args.getString(1).equalsIgnoreCase("baby")) { + age = -24000; + Messaging.sendTr(sender, Messages.AGE_SET_BABY, npc.getName()); + } else if (args.getString(1).equalsIgnoreCase("adult")) { + age = 0; + Messaging.sendTr(sender, Messages.AGE_SET_ADULT, npc.getName()); + } else + throw new CommandException(Messages.INVALID_AGE); + } - if (args.argsLength() > 1) { - int age = 0; - String ageStr = "an adult"; - try { - age = args.getInteger(1); - if (age < -24000 || age > 0) - throw new CommandException(Messages.INVALID_AGE); - ageStr = "age " + StringHelper.wrap(age); - } catch (NumberFormatException ex) { - if (args.getString(1).equalsIgnoreCase("baby")) { - age = -24000; - ageStr = "a baby"; - } else if (!args.getString(1).equalsIgnoreCase("adult")) - throw new CommandException(Messages.INVALID_AGE); - } - - trait.setAge(age); - Messaging.sendTr(sender, Messages.AGE_SET, npc.getName(), ageStr); - } else if (!toggleLock) - trait.describe(sender); + trait.setAge(age); } @Command( @@ -358,9 +361,8 @@ public class NPCCommands { max = 1, permission = "npc.lookclose") public void lookClose(CommandContext args, CommandSender sender, NPC npc) { - String msg = StringHelper.wrap(npc.getName()) + " will " - + (npc.getTrait(LookClose.class).toggle() ? "now rotate" : "no longer rotate"); - Messaging.send(sender, msg + " when a player is nearby."); + Messaging.sendTr(sender, npc.getTrait(LookClose.class).toggle() ? Messages.LOOKCLOSE_SET + : Messages.LOOKCLOSE_STOPPED, npc.getName()); } @Command( @@ -399,13 +401,13 @@ public class NPCCommands { String[] parts = Iterables.toArray(Splitter.on(':').split(args.getJoinedStrings(1, ':')), String.class); if (parts.length != 4 && parts.length != 3) - throw new CommandException("Format is x:y:z(:world) or x y z( world)"); + throw new CommandException(Messages.MOVETO_FORMAT); double x = Double.parseDouble(parts[0]); double y = Double.parseDouble(parts[1]); double z = Double.parseDouble(parts[2]); World world = parts.length == 4 ? Bukkit.getWorld(parts[3]) : current.getWorld(); if (world == null) - throw new CommandException("world not found"); + throw new CommandException(Messages.MOVETO_WORLD_NOT_FOUND); to = new Location(world, x, y, z, current.getYaw(), current.getPitch()); } else { to = current.clone(); @@ -422,13 +424,14 @@ public class NPCCommands { if (args.hasValueFlag("world")) { World world = Bukkit.getWorld(args.getFlag("world")); if (world == null) - throw new CommandException("Given world not found."); + throw new CommandException(Messages.MOVETO_WORLD_NOT_FOUND); to.setWorld(world); } } npc.getBukkitEntity().teleport(to, TeleportCause.COMMAND); - Messaging.send(sender, StringHelper.wrap(npc.getName()) + " was teleported to " + to + "."); + + Messaging.sendTr(sender, Messages.MOVETO_TELEPORTED, npc.getName(), to); } @Command(aliases = { "npc" }, desc = "Show basic NPC information", max = 0) @@ -463,8 +466,8 @@ public class NPCCommands { throw new CommandException(Messages.ALREADY_OWNER, name, npc.getName()); ownerTrait.setOwner(name); boolean serverOwner = name.equalsIgnoreCase(Owner.SERVER); - Messaging.send(sender, (serverOwner ? "[[The server]]" : StringHelper.wrap(name)) - + " is now the owner of " + StringHelper.wrap(npc.getName()) + "."); + Messaging.sendTr(sender, serverOwner ? Messages.OWNER_SET_SERVER : Messages.OWNER_SET, npc.getName(), + name); } @Command( @@ -539,9 +542,8 @@ public class NPCCommands { permission = "npc.power") @Requirements(selected = true, ownership = true, types = { EntityType.CREEPER }) public void power(CommandContext args, CommandSender sender, NPC npc) { - String msg = StringHelper.wrap(npc.getName()) + " will " - + (npc.getTrait(Powered.class).toggle() ? "now" : "no longer"); - Messaging.send(sender, msg += " be powered."); + Messaging.sendTr(sender, npc.getTrait(Powered.class).toggle() ? Messages.POWERED_SET + : Messages.POWERED_STOPPED); } @Command( @@ -571,7 +573,7 @@ public class NPCCommands { public void remove(CommandContext args, CommandSender sender, NPC npc) throws CommandException { if (args.argsLength() == 2) { if (!args.getString(1).equalsIgnoreCase("all")) - throw new CommandException("Incorrect syntax. /npc remove (all)"); + throw new CommandException(Messages.REMOVE_INCORRECT_SYNTAX); if (!sender.hasPermission("citizens.npc.remove.all") && !sender.hasPermission("citizens.admin")) throw new NoPermissionsException(); npcRegistry.deregisterAll(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java index 12d6958e4..979472bb5 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java @@ -7,9 +7,9 @@ import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.trait.Saddle; +import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Messaging; import net.citizensnpcs.util.NMS; -import net.citizensnpcs.util.StringHelper; import net.citizensnpcs.util.Util; import net.minecraft.server.EntityLightning; import net.minecraft.server.EntityPig; @@ -33,13 +33,13 @@ public class CitizensPigNPC extends CitizensMobNPC implements Equipable { if (!getBukkitEntity().hasSaddle()) { getTrait(Saddle.class).toggle(); hand.setAmount(0); - Messaging.send(equipper, StringHelper.wrap(getName()) + " is now saddled."); + Messaging.sendTr(equipper, Messages.SADDLED_SET, getName()); } } else if (getBukkitEntity().hasSaddle()) { equipper.getWorld().dropItemNaturally(getBukkitEntity().getLocation(), new ItemStack(Material.SADDLE, 1)); getTrait(Saddle.class).toggle(); - Messaging.send(equipper, StringHelper.wrap(getName()) + " is no longer saddled."); + Messaging.sendTr(equipper, Messages.SADDLED_STOPPED, getName()); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java index 48af6a64c..88ced4380 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java @@ -11,7 +11,6 @@ import net.citizensnpcs.trait.WoolColor; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Messaging; import net.citizensnpcs.util.NMS; -import net.citizensnpcs.util.StringHelper; import net.citizensnpcs.util.Util; import net.minecraft.server.EntitySheep; import net.minecraft.server.World; @@ -32,8 +31,8 @@ public class CitizensSheepNPC extends CitizensMobNPC implements Equipable { @Override public void equip(Player equipper, ItemStack hand) { if (hand.getType() == Material.SHEARS) { - Messaging.send(equipper, StringHelper.wrap(getName()) + " is " - + (getTrait(Sheared.class).toggle() ? "now" : "no longer") + " sheared."); + Messaging.sendTr(equipper, getTrait(Sheared.class).toggle() ? Messages.SHEARED_SET + : Messages.SHEARED_STOPPED, getName()); } else if (hand.getType() == Material.INK_SACK) { if (getBukkitEntity().getColor() == DyeColor.getByData((byte) (15 - hand.getData().getData()))) return; diff --git a/src/main/java/net/citizensnpcs/trait/text/StartPrompt.java b/src/main/java/net/citizensnpcs/trait/text/StartPrompt.java index 8ba12f1c0..89967f9d0 100644 --- a/src/main/java/net/citizensnpcs/trait/text/StartPrompt.java +++ b/src/main/java/net/citizensnpcs/trait/text/StartPrompt.java @@ -25,11 +25,12 @@ public class StartPrompt extends StringPrompt { else if (input.equalsIgnoreCase("remove")) return new TextRemovePrompt(text); else if (input.equalsIgnoreCase("random")) - Messaging.send(sender, "[[Random talker]] set to [[" + text.toggleRandomTalker() + "]]."); + Messaging.sendTr(sender, Messages.TEXT_EDITOR_RANDOM_TALKER_SET, text.toggleRandomTalker()); else if (input.equalsIgnoreCase("realistic looking")) - Messaging.send(sender, "[[Realistic looking]] set to [[" + text.toggleRealisticLooking() + "]]."); + Messaging.sendTr(sender, Messages.TEXT_EDITOR_REALISTIC_LOOKING_SET, + text.toggleRealisticLooking()); else if (input.equalsIgnoreCase("close")) - Messaging.send(sender, "[[Close talker]] set to [[" + text.toggle() + "]]."); + Messaging.sendTr(sender, Messages.TEXT_EDITOR_CLOSE_TALKER_SET, text.toggle()); else if (input.equalsIgnoreCase("help")) { context.setSessionData("said-text", false); Messaging.send(sender, getPromptText(context)); diff --git a/src/main/java/net/citizensnpcs/util/Messages.java b/src/main/java/net/citizensnpcs/util/Messages.java index 6a12a5d90..0364dbdc7 100644 --- a/src/main/java/net/citizensnpcs/util/Messages.java +++ b/src/main/java/net/citizensnpcs/util/Messages.java @@ -1,22 +1,12 @@ package net.citizensnpcs.util; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ListResourceBundle; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.PropertyResourceBundle; -import java.util.ResourceBundle; - -import com.google.common.io.Closeables; - public class Messages { - public static final String AGE_SET = "citizens.commands.npc.age.set"; + public static final String AGE_LOCKED = "citizens.commands.npc.age.locked"; + public static final String AGE_SET_ADULT = "citizens.commands.npc.age.set-adult"; + public static final String AGE_SET_BABY = "citizens.commands.npc.age.set-baby"; + public static final String AGE_SET_NORMAL = "citizens.commands.npc.age.set-normal"; public static final String AGE_TRAIT_DESCRIPTION = "citizens.traits.age-description"; + public static final String AGE_UNLOCKED = "citizens.commands.npc.age.unlocked"; public static final String ALREADY_IN_EDITOR = "citizens.editors.already-in-editor"; public static final String ALREADY_OWNER = "citizens.commands.npc.owner.already-owner"; public static final String AVAILABLE_WAYPOINT_PROVIDERS = "citizens.waypoints.available-providers-header"; @@ -46,7 +36,6 @@ public class Messages { public static final String CONTROLLABLE_SET = "citizens.commands.npc.controllable.set"; public static final String CURRENT_WAYPOINT_PROVIDER = "citizens.waypoints.current-provider"; public static final String DATABASE_CONNECTION_FAILED = "citizens.notifications.database-connection-failed"; - private static ResourceBundle defaultBundle; public static final String EQUIPMENT_EDITOR_ALL_ITEMS_REMOVED = "citizens.editors.equipment.all-items-removed"; public static final String EQUIPMENT_EDITOR_BEGIN = "citizens.editors.equipment.begin"; public static final String EQUIPMENT_EDITOR_END = "citizens.editors.equipment.end"; @@ -82,12 +71,17 @@ public class Messages { public static final String LOAD_UNKNOWN_NPC_TYPE = "citizens.notifications.unknown-npc-type"; public static final String LOADING_SUB_PLUGIN = "citizens.sub-plugins.load"; public static final String LOCALE_NOTIFICATION = "citizens.notifications.locale"; + public static final String LOOKCLOSE_SET = "citizens.commands.npc.lookclose.set"; + public static final String LOOKCLOSE_STOPPED = "citizens.commands.npc.lookclose.stopped"; public static final String METRICS_ERROR_NOTIFICATION = "citizens.notifications.metrics-load-error"; public static final String METRICS_NOTIFICATION = "citizens.notifications.metrics-started"; public static final String MINIMUM_COST_REQUIRED = "citizens.economy.minimum-cost-required"; public static final String MISSING_TRANSLATIONS = "citizens.notifications.missing-translations"; public static final String MOBTYPE_CANNOT_BE_AGED = "citizens.commands.npc.age.cannot-be-aged"; public static final String MONEY_WITHDRAWN = "citizens.economy.money-withdrawn"; + public static final String MOVETO_FORMAT = "citizens.commands.npc.moveto.format"; + public static final String MOVETO_TELEPORTED = "citizens.commands.npc.moveto.teleported"; + public static final String MOVETO_WORLD_NOT_FOUND = "citizens.commands.npc.moveto.missing-world"; public static final String NO_NPC_WITH_ID_FOUND = "citizens.commands.npc.spawn.missing-npc-id"; public static final String NO_STORED_SPAWN_LOCATION = "citizens.commands.npc.spawn.no-location"; public static final String NOT_LIVING_MOBTYPE = "citizens.commands.npc.create.not-living-mobtype"; @@ -106,16 +100,25 @@ public class Messages { public static final String NPC_TELEPORTED = "citizens.commands.npc.tphere.teleported"; public static final String NUM_LOADED_NOTIFICATION = "citizens.notifications.npcs-loaded"; public static final String OVER_NPC_LIMIT = "citizens.limits.over-npc-limit"; + public static final String OWNER_SET = "citizens.commands.npc.owner.set"; + public static final String OWNER_SET_SERVER = "citizens.commands.npc.owner.set-server"; public static final String POSE_ADDED = "citizens.commands.npc.pose.added"; public static final String POSE_ALREADY_EXISTS = "citizens.commands.npc.pose.already-exists"; public static final String POSE_MISSING = "citizens.commands.npc.pose.missing"; public static final String POSE_REMOVED = "citizens.commands.npc.pose.removed"; + public static final String POWERED_SET = "citizens.commands.npc.powered.set"; + public static final String POWERED_STOPPED = "citizens.commands.npc.powered.stopped"; public static final String PROFESSION_SET = "citizens.commands.npc.profession.set"; + public static final String REMOVE_INCORRECT_SYNTAX = "citizens.commands.npc.remove.incorrect-syntax"; public static final String REMOVED_ALL_NPCS = "citizens.commands.npc.remove.removed-all"; + public static final String SADDLED_SET = "citizens.editors.equipment.saddled-set"; + public static final String SADDLED_STOPPED = "citizens.editors.equipment.saddled-stopped"; public static final String SAVE_METHOD_SET_NOTIFICATION = "citizens.notifications.save-method-set"; public static final String SCRIPT_COMPILED = "citizens.commands.script.compiled"; public static final String SCRIPT_COMPILING = "citizens.commands.script.compiling"; public static final String SCRIPT_FILE_MISSING = "citizens.commands.script.file-missing"; + public static final String SHEARED_SET = "citizens.editors.equipment.sheared-set"; + public static final String SHEARED_STOPPED = "citizens.editors.equipment.sheared-stopped"; public static final String SKIPPING_BROKEN_TRAIT = "citizens.notifications.skipping-broken-trait"; public static final String SKIPPING_INVALID_POSE = "citizens.notifications.skipping-invalid-pose"; public static final String SPEED_MODIFIER_ABOVE_LIMIT = "citizens.commands.npc.speed.modifier-above-limit"; @@ -128,6 +131,7 @@ public class Messages { public static final String TEXT_EDITOR_ADD_PROMPT = "citizens.editors.text.add-prompt"; public static final String TEXT_EDITOR_ADDED_ENTRY = "citizens.editors.text.added-entry"; public static final String TEXT_EDITOR_BEGIN = "citizens.editors.text.begin"; + public static final String TEXT_EDITOR_CLOSE_TALKER_SET = "citizens.editors.text.close-talker-set"; public static final String TEXT_EDITOR_EDIT_BEGIN_PROMPT = "citizens.editors.text.edit-begin-prompt"; public static final String TEXT_EDITOR_EDIT_PROMPT = "citizens.editors.text.edit-prompt"; public static final String TEXT_EDITOR_EDITED_TEXT = "citizens.editors.text.edited-text"; @@ -137,6 +141,8 @@ public class Messages { public static final String TEXT_EDITOR_INVALID_INPUT = "citizens.editors.text.invalid-input"; public static final String TEXT_EDITOR_INVALID_PAGE = "citizens.editors.text.invalid-page"; public static final String TEXT_EDITOR_PAGE_PROMPT = "citizens.editors.text.change-page-prompt"; + public static final String TEXT_EDITOR_RANDOM_TALKER_SET = "citizens.editors.text.random-talker-set"; + public static final String TEXT_EDITOR_REALISTIC_LOOKING_SET = "citizens.editors.text.realistic-looking-set"; public static final String TEXT_EDITOR_REMOVE_PROMPT = "citizens.editors.text.remove-prompt"; public static final String TEXT_EDITOR_REMOVED_ENTRY = "citizens.editors.text.removed-entry"; public static final String TEXT_EDITOR_START_PROMPT = "citizens.editors.text.start-prompt"; @@ -153,79 +159,4 @@ public class Messages { public static final String VULNERABLE_STOPPED = "citizens.commands.npc.vulnerable.stopped"; public static final String WAYPOINT_PROVIDER_SET = "citizens.waypoints.set-provider"; public static final String WRITING_DEFAULT_SETTING = "citizens.settings.writing-default"; - - private static Properties getDefaultBundleProperties() { - Properties defaults = new Properties(); - InputStream in = null; - try { - in = Messages.class.getResourceAsStream("/" + Translator.PREFIX + "_en.properties"); - defaults.load(in); - } catch (IOException e) { - } finally { - Closeables.closeQuietly(in); - } - return defaults; - } - - public static ResourceBundle getDefaultResourceBundle(File resourceDirectory, String fileName) { - if (defaultBundle != null) - return defaultBundle; - resourceDirectory.mkdirs(); - - File bundleFile = new File(resourceDirectory, fileName); - if (!bundleFile.exists()) { - try { - bundleFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - populateDefaults(bundleFile); - FileInputStream stream = null; - try { - stream = new FileInputStream(bundleFile); - defaultBundle = new PropertyResourceBundle(stream); - } catch (Exception e) { - e.printStackTrace(); - defaultBundle = getFallbackResourceBundle(); - } finally { - Closeables.closeQuietly(stream); - } - return defaultBundle; - } - - private static ResourceBundle getFallbackResourceBundle() { - return new ListResourceBundle() { - @Override - protected Object[][] getContents() { - return new Object[0][0]; - } - }; - } - - private static void populateDefaults(File bundleFile) { - Properties properties = new Properties(); - InputStream in = null; - try { - in = new FileInputStream(bundleFile); - properties.load(in); - } catch (IOException e) { - } finally { - Closeables.closeQuietly(in); - } - Properties defaults = getDefaultBundleProperties(); - for (Entry entry : defaults.entrySet()) { - if (!properties.containsKey(entry.getKey())) - properties.put(entry.getKey(), entry.getValue()); - } - OutputStream stream = null; - try { - stream = new FileOutputStream(bundleFile); - properties.store(stream, ""); - } catch (Exception e) { - e.printStackTrace(); - } finally { - Closeables.closeQuietly(stream); - } - } } diff --git a/src/main/java/net/citizensnpcs/util/Messaging.java b/src/main/java/net/citizensnpcs/util/Messaging.java index 910be9dcf..00723a5f5 100644 --- a/src/main/java/net/citizensnpcs/util/Messaging.java +++ b/src/main/java/net/citizensnpcs/util/Messaging.java @@ -17,9 +17,7 @@ import com.google.common.base.Splitter; public class Messaging { private static final Pattern CHAT_NEWLINE = Pattern.compile("
||\\n", Pattern.MULTILINE); - private static final Splitter CHAT_NEWLINE_SPLITTER = Splitter.on(CHAT_NEWLINE); - private static final Joiner SPACE = Joiner.on(" ").useForNull("null"); public static void debug(Object... msg) { @@ -36,7 +34,7 @@ public class Messaging { } public static void logTr(String key, Object... msg) { - log(Level.INFO, Translator.tr(key, msg)); + log(Level.INFO, Translator.translate(key, msg)); } public static void send(CommandSender sender, Object... msg) { @@ -48,7 +46,7 @@ public class Messaging { } public static void sendErrorTr(CommandSender sender, String key, Object... msg) { - sendMessageTo(sender, ChatColor.RED + Translator.tr(key, msg)); + sendMessageTo(sender, ChatColor.RED + Translator.translate(key, msg)); } private static void sendMessageTo(CommandSender sender, String rawMessage) { @@ -69,7 +67,7 @@ public class Messaging { } public static void sendTr(CommandSender sender, String key, Object... msg) { - sendMessageTo(sender, Translator.tr(key, msg)); + sendMessageTo(sender, Translator.translate(key, msg)); } public static void sendWithNPC(CommandSender sender, Object msg, NPC npc) { @@ -92,11 +90,11 @@ public class Messaging { } public static void severeTr(String key, Object... messages) { - log(Level.SEVERE, Translator.tr(key, messages)); + log(Level.SEVERE, Translator.translate(key, messages)); } public static String tr(String key, Object... messages) { - return Translator.tr(key, messages); + return Translator.translate(key, messages); } public static String tryTranslate(Object possible) { diff --git a/src/main/java/net/citizensnpcs/util/Translator.java b/src/main/java/net/citizensnpcs/util/Translator.java index 65e528f9c..9cb59d321 100644 --- a/src/main/java/net/citizensnpcs/util/Translator.java +++ b/src/main/java/net/citizensnpcs/util/Translator.java @@ -3,17 +3,24 @@ package net.citizensnpcs.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.text.MessageFormat; +import java.util.ListResourceBundle; import java.util.Locale; import java.util.Map; +import java.util.Map.Entry; import java.util.MissingResourceException; +import java.util.Properties; +import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import com.google.common.collect.Maps; +import com.google.common.io.Closeables; import com.google.common.io.Files; import com.google.common.io.InputSupplier; @@ -52,7 +59,7 @@ public class Translator { } private ResourceBundle getDefaultBundle() { - return Messages.getDefaultResourceBundle(resourceFile, PREFIX + "_en.properties"); + return getDefaultResourceBundle(resourceFile, PREFIX + "_en.properties"); } private MessageFormat getFormatter(String unreplaced) { @@ -158,19 +165,97 @@ public class Translator { } } + private static ResourceBundle defaultBundle; + private static Translator instance; + public static final String PREFIX = "messages"; + private static Properties getDefaultBundleProperties() { + Properties defaults = new Properties(); + InputStream in = null; + try { + in = Messages.class.getResourceAsStream("/" + PREFIX + "_en.properties"); + defaults.load(in); + } catch (IOException e) { + } finally { + Closeables.closeQuietly(in); + } + return defaults; + } + + private static ResourceBundle getDefaultResourceBundle(File resourceDirectory, String fileName) { + if (Translator.defaultBundle != null) + return Translator.defaultBundle; + resourceDirectory.mkdirs(); + + File bundleFile = new File(resourceDirectory, fileName); + if (!bundleFile.exists()) { + try { + bundleFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + Translator.populateDefaults(bundleFile); + FileInputStream stream = null; + try { + stream = new FileInputStream(bundleFile); + Translator.defaultBundle = new PropertyResourceBundle(stream); + } catch (Exception e) { + e.printStackTrace(); + Translator.defaultBundle = Translator.getFallbackResourceBundle(); + } finally { + Closeables.closeQuietly(stream); + } + return Translator.defaultBundle; + } + + private static ResourceBundle getFallbackResourceBundle() { + return new ListResourceBundle() { + @Override + protected Object[][] getContents() { + return new Object[0][0]; + } + }; + } + + private static void populateDefaults(File bundleFile) { + Properties properties = new Properties(); + InputStream in = null; + try { + in = new FileInputStream(bundleFile); + properties.load(in); + } catch (IOException e) { + } finally { + Closeables.closeQuietly(in); + } + Properties defaults = getDefaultBundleProperties(); + for (Entry entry : defaults.entrySet()) { + if (!properties.containsKey(entry.getKey())) + properties.put(entry.getKey(), entry.getValue()); + } + OutputStream stream = null; + try { + stream = new FileOutputStream(bundleFile); + properties.store(stream, ""); + } catch (Exception e) { + e.printStackTrace(); + } finally { + Closeables.closeQuietly(stream); + } + } + public static void setInstance(File resourceFile, Locale locale) { instance = new Translator(resourceFile, locale); } - static String tr(String key, Locale preferredLocale, Object... msg) { + public static String translate(String key, Locale preferredLocale, Object... msg) { return StringHelper.parseColors(msg.length == 0 ? instance.translate(key, preferredLocale) : instance .format(key, preferredLocale, msg)); } - static String tr(String key, Object... msg) { - return tr(key, instance.defaultLocale, msg); + public static String translate(String key, Object... msg) { + return translate(key, instance.defaultLocale, msg); } } diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index b7e67f885..35f9d7099 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -6,7 +6,12 @@ citizens.commands.invalid-mobtype={0} is not a valid mobtype. citizens.commands.invalid-number=That is not a valid number. citizens.commands.npc.age.cannot-be-aged=The mob type '{0}' cannot be aged. citizens.commands.npc.age.invalid-age=Invalid age. Valid ages are adult, baby, number between -24000 and 0 +citizens.commands.npc.age.locked=Age locked. +citizens.commands.npc.age.set-adult=[[{0}]] is now an adult. +citizens.commands.npc.age.set-baby=[[{0}]] is now a baby. +citizens.commands.npc.age.set-normal=[[{0}]] is now age [[{1}]]. citizens.commands.npc.age.set=[[{0}]] is now [[{1}]]. +citizens.commands.npc.age.unlocked=Age unlocked. citizens.commands.npc.behaviour.added=Behaviours added. citizens.commands.npc.behaviour.removed=Behaviours removed. citizens.commands.npc.controllable.not-controllable=[[{0}]] is not controllable. @@ -17,16 +22,26 @@ citizens.commands.npc.create.invalid-mobtype='{0}' is not a valid mob type. Usin citizens.commands.npc.create.not-living-mobtype='{0}' is not a living entity type. Using default type. citizens.commands.npc.create.npc-name-too-long=NPC names cannot be longer than 16 characters. The name has been shortened. citizens.commands.npc.despawn.despawned=You despawned [[{0}]]. +citizens.commands.npc.lookclose.set=[[{0}]] will now rotate when players are nearby. +citizens.commands.npc.lookclose.stopped=[[{0}]] will no longer rotate when players are nearby. citizens.commands.npc.mount.failed=Couldn't mount [[{0}]]. +citizens.commands.npc.moveto.format=Format is x:y:z(:world) or x y z( world). +citizens.commands.npc.moveto.missing-world=World not found. +citizens.commands.npc.moveto.teleported=[[{0}]] teleported to {1}. citizens.commands.npc.owner.already-owner='{0}' is already the owner of {1}. citizens.commands.npc.owner.owner=[[{0}]]'s owner is [[{1}]]. +citizens.commands.npc.owner.set-server=[[The server]] is now the owner of {0}. +citizens.commands.npc.owner.set=[[{1}]] is now the owner of {0}. citizens.commands.npc.pose.added=Pose added. citizens.commands.npc.pose.already-exists=The pose '{0}' already exists. citizens.commands.npc.pose.invalid-name=Invalid pose name. citizens.commands.npc.pose.missing=The pose '{1}' does not exist. citizens.commands.npc.pose.removed=Pose removed. +citizens.commands.npc.powered.set=[[{0}]] will now be powered. +citizens.commands.npc.powered.stopped=[[{0}]] will no longer be powered. citizens.commands.npc.profession.invalid-profession='{0}' is not a valid profession. citizens.commands.npc.profession.set=[[{0}]] is now a [[{1}]]. +citizens.commands.npc.remove.incorrect-syntax=Incorrect syntax. /npc remove (all) citizens.commands.npc.remove.removed-all=You permanently removed all NPCs. citizens.commands.npc.remove.removed=You permanently removed [[{0}]]. citizens.commands.npc.rename.renamed=You renamed [[{0}]] to [[{1}]]. @@ -71,11 +86,16 @@ citizens.editors.equipment.all-items-removed=[[{0}]] had all of its items remove citizens.editors.equipment.begin=Entered the equipment editor!
[[Right click]] to equip the NPC! citizens.editors.equipment.end=Exited the equipment editor. citizens.editors.equipment.invalid-block=Invalid block! +citizens.editors.equipment.saddled-set=[[{0}]] is now saddled. +citizens.editors.equipment.saddled-stopped=[[{0}]] is no longer saddled. +citizens.editors.equipment.sheared-set=[[{0}]] is now sheared. +citizens.editors.equipment.sheared-stopped=[[{0}]] is no longer sheared. citizens.editors.equipment.sheep-coloured=[[{0}]] is now coloured [[{1}]]. citizens.editors.text.add-prompt=Enter text to add to the NPC. citizens.editors.text.added-entry=[[Added]] the entry [[{0}]]. citizens.editors.text.begin=Entered the text editor! citizens.editors.text.change-page-prompt=Enter a page number to view more text entries. +citizens.editors.text.close-talker-set=[[Close talker]] set to [[{0}]]. citizens.editors.text.edit-begin-prompt=Enter the index of the entry you wish to edit or [[page]] to view more pages. citizens.editors.text.edit-prompt=Enter text to edit the entry. citizens.editors.text.edited-text=Changed entry at index [[{0}]]to [[{1}]]. @@ -84,6 +104,8 @@ citizens.editors.text.invalid-edit-type=Invalid edit type. citizens.editors.text.invalid-index='{0}' is not a valid index! citizens.editors.text.invalid-input=Invalid input. citizens.editors.text.invalid-page=Invalid page number. +citizens.editors.text.random-talker-set=[[Random talking]] set to [[{0}]]. +citizens.editors.text.realistic-looking-set=[[Realistic looking]] set to [[{0}]]. citizens.editors.text.remove-prompt=Enter the index of the entry you wish to remove or [[page]] to view more pages. citizens.editors.text.removed-entry=[[Removed]] entry at index [[{0}]]. citizens.editors.text.start-prompt=Type [[add]] to add an entry, [[edit]] to edit entries, [[remove]] to remove entries, [[close]] to toggle the NPC as a close talker, and [[random]] to toggle the NPC as a random talker. Type [[help]] to show this again.