This commit is contained in:
Brianna O'Keefe 2018-10-01 18:34:33 -04:00
parent b5dc97d830
commit abd1bc75df
8 changed files with 211 additions and 478 deletions

View File

@ -51,7 +51,14 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@ -118,17 +125,15 @@ public class EpicHoppersPlugin extends JavaPlugin implements EpicHoppers {
setupConfig();
enchantmentHandler = new EnchantmentHandler();
// Locales
String langMode = getConfig().getString("System.Language Mode");
Locale.init(this);
Locale.saveDefaultLocale("en_US");
Locale.saveDefaultLocale("fr_FR");
Locale.saveDefaultLocale("nl_NL");
Locale.saveDefaultLocale("es_ES");
Locale.saveDefaultLocale("pr_FA");
Locale.saveDefaultLocale("pt_BR");
this.locale = Locale.getLocale(getConfig().getString("System.Language Mode", langMode));
if (getConfig().getBoolean("System.Download Needed Data Files")) {
this.update();
}
hopperManager = new EHopperManager();
playerDataManager = new PlayerDataManager();
boostManager = new BoostManager();
@ -241,6 +246,39 @@ public class EpicHoppersPlugin extends JavaPlugin implements EpicHoppers {
console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
}
private void update() {
try {
URL url = new URL("http://update.songoda.com/index.php?plugin=" + getDescription().getName() + "&version=" + getDescription().getVersion());
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int numCharsRead;
char[] charArray = new char[1024];
StringBuffer sb = new StringBuffer();
while ((numCharsRead = isr.read(charArray)) > 0) {
sb.append(charArray, 0, numCharsRead);
}
String jsonString = sb.toString();
JSONObject json = (JSONObject) new JSONParser().parse(jsonString);
JSONArray files = (JSONArray) json.get("neededFiles");
for (Object o : files) {
JSONObject file = (JSONObject) o;
switch ((String)file.get("type")) {
case "locale":
InputStream in = new URL((String) file.get("link")).openStream();
Locale.saveDefaultLocale(in, (String) file.get("name"));
break;
}
}
} catch (Exception e) {
System.out.println("Failed to update.");
//e.printStackTrace();
}
}
private void checkStorage() {
if (getConfig().getBoolean("Database.Activate Mysql Support")) {

View File

@ -3,7 +3,6 @@ package com.songoda.epichoppers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.apache.commons.io.IOUtils;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;
@ -23,11 +22,10 @@ import java.util.stream.Collectors;
*/
public class Locale {
private static JavaPlugin plugin;
private static final List<Locale> LOCALES = Lists.newArrayList();
private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.\\w+)*)\\s*=\\s*\"(.*)\"");
private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.{1}\\w+)*)\\s*=\\s*\"(.*)\"");
private static final String FILE_EXTENSION = ".lang";
private static JavaPlugin plugin;
private static File localeFolder;
private static String defaultLocale;
@ -52,123 +50,6 @@ public class Locale {
plugin.getLogger().info("Loaded locale " + fileName);
}
/**
* Get the name of the language that this locale is based on.
* (i.e. "en" for English, or "fr" for French)
*
* @return the name of the language
*/
public String getName() {
return name;
}
/**
* Get the name of the region that this locale is from.
* (i.e. "US" for United States or "CA" for Canada)
*
* @return the name of the region
*/
public String getRegion() {
return region;
}
/**
* Return the entire locale tag (i.e. "en_US")
*
* @return the language tag
*/
public String getLanguageTag() {
return name + "_" + region;
}
/**
* Get the file that represents this locale
*
* @return the locale file (.lang)
*/
public File getFile() {
return file;
}
/**
* Get a message set for a specific node
*
* @param node the node to get
* @return the message for the specified node
*/
public String getMessage(String node) {
return ChatColor.translateAlternateColorCodes('&', this.getMessageOrDefault(node, node));
}
/**
* Get a message set for a specific node and replace its params with a supplied arguments.
*
* @param node the node to get
* @param args the replacement arguments
* @return the message for the specified node
*/
public String getMessage(String node, Object... args) {
String message = getMessage(node);
for (Object arg : args) {
message = message.replaceFirst("%.*?%", arg.toString());
}
return message;
}
/**
* Get a message set for a specific node
*
* @param node the node to get
* @param defaultValue the default value given that a value for the node was not found
*
* @return the message for the specified node. Default if none found
*/
public String getMessageOrDefault(String node, String defaultValue) {
return this.nodes.getOrDefault(node, defaultValue);
}
/**
* Get the key-value map of nodes to messages
*
* @return node-message map
*/
public Map<String, String> getMessageNodeMap() {
return ImmutableMap.copyOf(nodes);
}
/**
* Clear the previous message cache and load new messages directly from file
*
* @return reload messages from file
*/
public boolean reloadMessages() {
if (!this.file.exists()) {
plugin.getLogger().warning("Could not find file for locale " + this.name);
return false;
}
this.nodes.clear(); // Clear previous data (if any)
try(BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
for (int lineNumber = 0; (line = reader.readLine()) != null; lineNumber++) {
if (line.isEmpty() || line.startsWith("#") /* Comment */) continue;
Matcher matcher = NODE_PATTERN.matcher(line);
if (!matcher.find()) {
System.err.println("Invalid locale syntax at (line=" + lineNumber + ")");
continue;
}
nodes.put(matcher.group(1), matcher.group(2));
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* Initialize the locale class to generate information and search for localizations.
* This must be called before any other methods in the Locale class can be invoked.
@ -269,12 +150,11 @@ public class Locale {
/**
* Save a default locale file from the project source directory, to the locale folder
*
* @param path the path to the file to save
* @param in file to save
* @param fileName the name of the file to save
*
* @return true if the operation was successful, false otherwise
*/
public static boolean saveDefaultLocale(String path, String fileName) {
public static boolean saveDefaultLocale(InputStream in, String fileName) {
if (!localeFolder.exists()) localeFolder.mkdirs();
if (!fileName.endsWith(FILE_EXTENSION))
@ -286,7 +166,7 @@ public class Locale {
}
try (OutputStream outputStream = new FileOutputStream(destinationFile)) {
IOUtils.copy(plugin.getResource(fileName), outputStream);
copy(in == null ? plugin.getResource(fileName) : in, outputStream);
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
String[] localeValues = fileName.split("_");
@ -309,7 +189,7 @@ public class Locale {
* @return true if the operation was successful, false otherwise
*/
public static boolean saveDefaultLocale(String fileName) {
return saveDefaultLocale("", fileName);
return saveDefaultLocale(null, fileName);
}
/**
@ -345,7 +225,8 @@ public class Locale {
if (!existingLines.contains(key)) {
if (!changed) {
writer.newLine(); writer.newLine();
writer.newLine();
writer.newLine();
writer.write("# New messages for " + plugin.getName() + " v" + plugin.getDescription().getVersion());
}
@ -362,4 +243,133 @@ public class Locale {
return changed;
}
private static void copy(InputStream input, OutputStream output) {
int n;
byte[] buffer = new byte[1024 * 4];
try {
while ((n = input.read(buffer)) != -1) {
output.write(buffer, 0, n);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Get the name of the language that this locale is based on.
* (i.e. "en" for English, or "fr" for French)
*
* @return the name of the language
*/
public String getName() {
return name;
}
/**
* Get the name of the region that this locale is from.
* (i.e. "US" for United States or "CA" for Canada)
*
* @return the name of the region
*/
public String getRegion() {
return region;
}
/**
* Return the entire locale tag (i.e. "en_US")
*
* @return the language tag
*/
public String getLanguageTag() {
return name + "_" + region;
}
/**
* Get the file that represents this locale
*
* @return the locale file (.lang)
*/
public File getFile() {
return file;
}
/**
* Get a message set for a specific node
*
* @param node the node to get
* @return the message for the specified node
*/
public String getMessage(String node) {
return ChatColor.translateAlternateColorCodes('&', this.getMessageOrDefault(node, node));
}
/**
* Get a message set for a specific node and replace its params with a supplied arguments.
*
* @param node the node to get
* @param args the replacement arguments
* @return the message for the specified node
*/
public String getMessage(String node, Object... args) {
String message = getMessage(node);
for (Object arg : args) {
message = message.replaceFirst("\\%.*?\\%", arg.toString());
}
return message;
}
/**
* Get a message set for a specific node
*
* @param node the node to get
* @param defaultValue the default value given that a value for the node was not found
* @return the message for the specified node. Default if none found
*/
public String getMessageOrDefault(String node, String defaultValue) {
return this.nodes.getOrDefault(node, defaultValue);
}
/**
* Get the key-value map of nodes to messages
*
* @return node-message map
*/
public Map<String, String> getMessageNodeMap() {
return ImmutableMap.copyOf(nodes);
}
/**
* Clear the previous message cache and load new messages directly from file
*
* @return reload messages from file
*/
public boolean reloadMessages() {
if (!this.file.exists()) {
plugin.getLogger().warning("Could not find file for locale " + this.name);
return false;
}
this.nodes.clear(); // Clear previous data (if any)
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
for (int lineNumber = 0; (line = reader.readLine()) != null; lineNumber++) {
if (line.isEmpty() || line.startsWith("#") /* Comment */) continue;
Matcher matcher = NODE_PATTERN.matcher(line);
if (!matcher.find()) {
System.err.println("Invalid locale syntax at (line=" + lineNumber + ")");
continue;
}
nodes.put(matcher.group(1), matcher.group(2));
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}

View File

@ -196,37 +196,37 @@ public class SettingsManager implements Listener {
}
public enum Setting {
o1("Upgrading-enabled", "Main.Allow hopper Upgrading", true),
o2("Upgrade-with-eco", "Main.Upgrade With Economy", true),
o3("Upgrade-with-xp", "Main.Upgrade With XP", true),
o4("Teleport-hoppers", "Main.Allow Players To Teleport Through Hoppers", true),
o6("EnderChest-support", "Main.Support Enderchests", true),
o7("Upgrade-particle-type", "Main.Upgrade Particle Type", "SPELL_WITCH"),
o8("Hop-Tick", "Main.Amount of Ticks Between Hops", 8L),
o9("Tele-Tick", "Main.Amount of Ticks Between Teleport", 10L),
o10("Sync-Timeout", "Main.Timeout When Syncing Hoppers", 300L),
o11("hopper-Limit", "Main.Max Hoppers Per Chunk", -1),
o12("Helpful-Tips", "Main.Display Helpful Tips For Operators", true),
o13("Sounds", "Main.Sounds Enabled", true),
o14("BlockBreak-Particle-Type", "Main.BlockBreak Particle Type", "LAVA"),
o15("BlockBreak-Blacklist", "Main.BlockBreak Blacklisted Blocks", Arrays.asList("BEDROCK")),
o1("Main.Allow hopper Upgrading", true),
o2("Main.Upgrade With Economy", true),
o3("Main.Upgrade With XP", true),
o4("Main.Allow Players To Teleport Through Hoppers", true),
o6("Main.Support Enderchests", true),
o7("Main.Upgrade Particle Type", "WITCH_MAGIC"),
o8("Main.Amount of Ticks Between Hops", 8L),
o9("Main.Amount of Ticks Between Teleport", 10L),
o10("Main.Timeout When Syncing Hoppers", 300L),
o11("Main.Max Hoppers Per Chunk", -1),
o12("Main.Display Helpful Tips For Operators", true),
o13("Main.Sounds Enabled", true),
o14("Main.BlockBreak Particle Type", "LAVA"),
o15("Main.BlockBreak Blacklisted Blocks", Arrays.asList("BEDROCK")),
o16("Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
o17("Interfaces.Economy Icon", "SUNFLOWER"),
o18("Interfaces.XP Icon", "EXPERIENCE_BOTTLE"),
o19("Interfaces.Glass Type 1", 7),
o20("Interfaces.Glass Type 2", 11),
o21("Interfaces.Glass Type 3", 3),
o16("Rainbow-Glass", "Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
o17("ECO-Icon", "Interfaces.Economy Icon", "SUNFLOWER"),
o18("XP-Icon", "Interfaces.XP Icon", "EXPERIENCE_BOTTLE"),
o19("Glass-Type-1", "Interfaces.Glass Type 1", 7),
o20("Glass-Type-2", "Interfaces.Glass Type 2", 11),
o21("Glass-Type-3", "Interfaces.Glass Type 3", 3),
DATABASE_SUPPORT("Database.Activate Mysql Support", false),
DATABASE_IP("Database.IP", "127.0.0.1"),
DATABASE_PORT("Database.Port", 3306),
DATABASE_NAME("Database.Database Name", "EpicHoppers"),
DATABASE_USERNAME("Database.Username", "PUT_USERNAME_HERE"),
DATABASE_PASSWORD("Database.Password", "PUT_PASSWORD_HERE"),
DATABASE_SUPPORT("-", "Database.Activate Mysql Support", false),
DATABASE_IP("-", "Database.IP", "127.0.0.1"),
DATABASE_PORT("-", "Database.Port", 3306),
DATABASE_NAME("-", "Database.Database Name", "EpicHoppers"),
DATABASE_USERNAME("-", "Database.Username", "PUT_USERNAME_HERE"),
DATABASE_PASSWORD("-", "Database.Password", "PUT_PASSWORD_HERE"),
LANGUGE_MODE("-", "System.Language Mode", "en_US"),
o22("Debug-Mode", "System.Debugger Enabled", false);
DOWNLOAD_FILES("System.Download Needed Data Files", true),
LANGUGE_MODE("System.Language Mode", "en_US"),
o22("System.Debugger Enabled", false);
private String setting;
private String oldSetting;

View File

@ -1,63 +0,0 @@
#Mensajes Generales
general.nametag.prefix = "&7[&6TolvasÉpicas&7]"
general.nametag.next = "&9Siguiente"
general.nametag.back = "&9Atrás"
general.nametag.nameformat = "&eNivel %level% &fTolva"
#Mensajes de Interfaz
interface.hopper.boostedstats = "&a&lActualmente acelerado!|&7Objetos transferidos multiplicados por &6%amount%x&7.|&7Expira en &6%time%&7."
interface.hopper.upgradewithxp = "&aMejorar con XP"
interface.hopper.upgradewithxplore = "&7Costo: &a%cost% Niveles"
interface.hopper.upgradewitheconomy = "&aMejorar con Dinero"
interface.hopper.upgradewitheconomylore = "&7Costo: &a$%cost%"
interface.hopper.currentlevel = "&6Tolva Nivel &7%level%"
interface.hopper.nextlevel = "&6Siguiente Nivel &7%level%"
interface.hopper.range = "&7Rango: &6%range%"
interface.hopper.amount = "&7Cantidad: &6%amount%"
interface.hopper.teleport = "&7Teletransportación: &6%enabled%"
interface.hopper.filter = "&7Filtro: &6%enabled%"
interface.hopper.crafting = "&7AutoCreación: &6%enabled%"
interface.hopper.suction = "&7Succión: &6%suction%"
interface.hopper.blockbreak = "&7Romper Bloque: &6Cada %ticks% ticks"
interface.hopper.alreadymaxed = "&7Esta tolva ya está al máximo!"
interface.hopper.synclore = "|&7Haz click izquierdo luego haz click en|&7una tolva o un cofre para sincronizar!||&7Haz click derecho para cancelar la sincronización."
interface.hopper.perltitle = "&6Haz click para Teletransportarte"
interface.hopper.perllore2 = "|&7Haz click izquierda para teletransportarte a|&7el final de la cadena.||&7Haz click derecho para cambiar el|&7modo de teletransporte.|&7Actualmente establecido a: &a%type%&7."
interface.hopper.filtertitle = "&cHaz click para Filtrar"
interface.hopper.filterlore = "|&7Esto te permite elegir|&7cuales objetos van adonde."
interface.hopper.craftingtitle = "&cHaz click para instalar la AutoCreación"
interface.hopper.craftinglore = "|&7Esto te permite elegir|&7que objetos esta tolva|&7creará automáticamente."
interface.hopper.synchopper = "&6Haga clic para sincronizar esta tolva"
interface.hopper.rejectsync = "&6Haga clic para sincronizar objetos rechazados"
interface.filter.infotitle = "&aGuía de Filtro"
interface.filter.infolore = "&7Objetos colocados en la parte superior izquierda|&7se añadirán en la lista blanca.||&7Objetos colocados en la parte derecha|&7se anularán.||&7Objetos colocados en la parte inferior izquierda|&7se añadirán a la lista negra.||&cEl uso de la lista blanca desactivará|&clos objetos en lista negra y nulos."
interface.filter.whitelist = "&f&lLista Blanca"
interface.filter.blacklist = "&8&lLista Negra"
interface.filter.void = "&c&lVacío"
#Mensajes de Comandos
command.give.success = "&7Has recibido una &7tolva &6nivel %level%&7."
#Mensajes de Eventos
event.general.nopermission = "&cNo tienes permitido hacer eso."
event.upgrade.cannotafford = "&cNo puedes pagar esta mejora."
event.upgrade.success = "&7Has mejorado esta tolva a &6nivel %level%&7!"
event.upgrade.maxed = "&7Has llevado esta tolva al máximo con el &6nivel %level%&7."
event.inventory.noroom = "&7No tienes espacio suficiente en tu inventario."
event.hopper.syncsuccess = "&aSincrozado con éxito."
event.hopper.desync = "&7Has cancelado la sincronización de esta tolva."
event.hopper.syncnext = "&7Haz click en otra tolva o contenedor para sincronizar."
event.hopper.syncself = "&cNo puedes sincronizar esta tolva con sí misma."
event.hopper.synctimeout = "&cSe agotó el tiempo de espera."
event.hopper.syncoutofrange = "&cEste bloque está muy lejos de tu tolva."
event.hopper.syncdidnotplace = "&cLo sentimos! Necesitas colocar esta tolva para sincronizarla."
event.hopper.toomany = "&cSolo puedes colocar %amount% tolvas por chunk..."
event.hopper.walkteleenabled = "La teletransportación ha sido activada para esta tolva."
event.hopper.walkteledisabled = "La teletransportación ha sido desactivada en esta tolva."
event.hopper.onlyone = "&cSolo puedes colocar un objeto a la vez."
event.hopper.syncchest = "&7Has sincronizado &9%name% &7con este cofre."
event.hopper.desyncchest = "&7Has cancelado la sincronización de &9%name% &7con este cofre."

View File

@ -1,63 +0,0 @@
#General Messages
general.nametag.prefix = "&7[&6EpicHoppers&7]"
general.nametag.next = "&9Suivant"
general.nametag.back = "&9Next"
general.nametag.nameformat = "&fHopper &eLevel %level%"
#Interface Messages
interface.hopper.boostedstats = "&a&lActuellement boosté!|&7Taux de transfert d'article multiplié par &6%amount%x&7.|&7Expire dans &6%time%&7."
interface.hopper.upgradewithxp = "&aAmélioration avec l'exp"
interface.hopper.upgradewithxplore = "&7Coût: &a%cost% Levels"
interface.hopper.upgradewitheconomy = "&aAmélioration avec l'économie"
interface.hopper.upgradewitheconomylore = "&7Coût: &a$%cost%"
interface.hopper.currentlevel = "&6Hopper Level &7%level%"
interface.hopper.nextlevel = "&6Level suivant dans &7%level% levels"
interface.hopper.range = "&7Portée: &6%range%"
interface.hopper.amount = "&7Montant: &6%amount%"
interface.hopper.teleport = "&7Teleportation: &6%enabled%"
interface.hopper.filter = "&7Filtre: &6%enabled%"
interface.hopper.crafting = "&7CraftAuto: &6%enabled%"
interface.hopper.suction = "&7Respiration: &6%suction%"
interface.hopper.blockbreak = "&7Blocs cassés: &6Tout les %ticks% ticks"
interface.hopper.alreadymaxed = "&7Ce hopper est déjà au maximum!"
interface.hopper.synclore = "|&7Clic gauche puis cliquez sur un autre|&7hopper ou coffre pour synchro!||&7Clic droit pour désynchro."
interface.hopper.perltitle = "&6Clic pour téléporter"
interface.hopper.perllore2 = "|&7Clic gauche pour téléporter à|&7la fin de la chaîne.||&7Clic droit pour changer de|&7mode de téléportation.|&7Actuellement défini sur: &a%type%&7."
interface.hopper.filtertitle = "&cClic pour filtrer"
interface.hopper.filterlore = "|&7Cela vous permet de choisir|&7quel item va ici."
interface.hopper.craftingtitle = "&cClic pour définir l'AutoCraft"
interface.hopper.craftinglore = "|&7Cela vous permet de choisir|&7quel item ce hopper|&7va craft automatiquement."
interface.hopper.synchopper = "&6Clic pour synchro ce hopper"
interface.hopper.rejectsync = "&6Clic synchro les objets rejetés"
interface.filter.infotitle = "&aGuide de filtrage"
interface.filter.infolore = "&7Items placés dans l'espace supérieur gauche|&7seront placés dans la liste blanche.||&7Items placés à droit |&7willsont nuls.||&7Items placés dans l'espace inférieur gauche|&7seront sur la liste noire.||&cL'activation de la liste blanche désactivera|&cLa liste noire et les nuls"
interface.filter.whitelist = "&f&lListe blanche"
interface.filter.blacklist = "&8&lListe noire"
interface.filter.void = "&c&lVide"
#Command Messages
command.give.success = "&7Vous avez reçu un Hopper &6level %level%."
#Event Messages
event.general.nopermission = "&cVous n'avez pas la permission."
event.upgrade.cannotafford = "&cVous ne pouvez pas améliorer."
event.upgrade.success = "&7Vous avez amélioré ce hopper &6level %level%&7!"
event.upgrade.maxed = "&7Vous avez maximisé ce hopper au &6level %level%&7."
event.inventory.noroom = "&7vous n'avez pas assez de place dans votre inventaire."
event.hopper.syncsuccess = "&aSynchronisation réussie."
event.hopper.desync = "&7Vous avez déssynchronisé ce hopper."
event.hopper.syncnext = "&7Clic sur un autre coffre ou hopper pour synchro."
event.hopper.syncself = "&cVous ne pouvez pas synchro un hopper avec lui même."
event.hopper.synctimeout = "&cSynchro terminée."
event.hopper.syncoutofrange = "&cCe bloc est hors portée de votre hopper."
event.hopper.syncdidnotplace = "&cDésolé! Vous devez avoir placé ce hopper pour synchroniser les choses avec elle."
event.hopper.toomany = "&cVous pouvez seulement placer %amount% hoppers par chunk..."
event.hopper.walkteleenabled = "Téléportation activée pour ce hopper."
event.hopper.walkteledisabled = "La marche sur la téléportation a été désactivée pour ce hopper."
event.hopper.onlyone = "&cVous ne pouvez placer qu'un seul objet à la fois."
event.hopper.syncchest = "&7Vous avez synchronisé votre &9%name% &7avec ce coffre."
event.hopper.desyncchest = "&7Vous avez déssynchronisé votre &9%name% &7avec ce coffre."

View File

@ -1,63 +0,0 @@
#General Messages
general.nametag.prefix = "&7[&6EpicHoppers&7]"
general.nametag.next = "&9Volgende"
general.nametag.back = "&9Vorige"
general.nametag.nameformat = "&eTrechter Level %level%"
#Interface Messages
interface.hopper.boostedstats = "&a&lMomenteel versterkt!|&7Artikeloverdrachtssnelheid vermenigvuldigd met &6%amount%x&7.|&7Verloopt over &6%time%&7."
interface.hopper.upgradewithxp = "&aUpgrade met XP"
interface.hopper.upgradewithxplore = "&7Kosten: &a%cost% Levels"
interface.hopper.upgradewitheconomy = "&aUpgrade met Geld"
interface.hopper.upgradewitheconomylore = "&7Kosten: &a$%cost%"
interface.hopper.currentlevel = "&6Trechter Niveau &7%level%"
interface.hopper.nextlevel = "&6Volgende Niveau &7%level%"
interface.hopper.range = "&7Bereik: &6%range%"
interface.hopper.amount = "&7Bedrag: &6%amount%"
interface.hopper.teleport = "&7Teleporteren: &6%enabled%"
interface.hopper.filter = "&7Filter: &6%enabled%"
interface.hopper.crafting = "&7Automatische werkbank: &6%enabled%"
interface.hopper.suction = "&7Zuigkracht: &6%suction%"
interface.hopper.blockbreak = "&7Blokken gebroken: &6Elke %ticks% tikken"
interface.hopper.alreadymaxed = "&7Deze trechter is al op het hoogste niveau geupgrade!"
interface.hopper.synclore = "|&7Linker-Klik en klik dan op een andere|&7trechter of kist om het te synchroniseren!||&7Rechts-klik om het te desynchroniseren."
interface.hopper.perltitle = "&6Klik om te teleporteren"
interface.hopper.perllore2 = "|&7Linker-Klik om teleporteren|&7het einde van de ketting.||&7Linker-KLik om te veranderen|&7 naar teleporteer mode.|&7Momenteel ingesteld op: &a%type%&7."
interface.hopper.filtertitle = "&cKlik om te Filteren"
interface.hopper.filterlore = "|&7Dit staat je toe om te kiezen|&7welke items waar naar toe gaan."
interface.hopper.craftingtitle = "&cKlik om Automatische werkbank in te stellen"
interface.hopper.craftinglore = "|&7Dit staat je toe om te kiezen|&7elke item(s) deze trechter|&7automatisch zal maken."
interface.hopper.synchopper = "&6Klik om deze trechter te synchroniseren"
interface.hopper.rejectsync = "&6Klik om verworpen items te synchroniseren"
interface.filter.infotitle = "&aFilter handleiding"
interface.filter.infolore = "&7Items die links bovenin zijn geplaatst|&7worden op de witte lijst gezet.||&7Items zie rechts zijn geplaatst|&7worden verwijderd.||&7Items die links onderin zijn geplaatst|&7worden op de zwarte lijst gezet.||&cDoor de witte lijst te gebruiken|&cwordt zowel de zwarte lijst en de verwijder lijst uitgeschakeld."
interface.filter.whitelist = "&f&lWitte lijst"
interface.filter.blacklist = "&8&lZwarte lijst"
interface.filter.void = "&c&lVerwijder lijst"
#Command Messages
command.give.success = "&7Je hebt een &6level %level% &7trechter gekregen."
#Event Messages
event.general.nopermission = "&cJe hebt geen toestemming om dat te doen."
event.upgrade.cannotafford = "&cJe kunt deze upgrade niet betalen."
event.upgrade.success = "&7Je hebt deze trechter met succes geüpgraded naar &6level %level%&7!"
event.upgrade.maxed = "&7Je hebt deze trechter geupgrade naar het maximale &6level %level%&7."
event.inventory.noroom = "&7Je hebt hiervoor geen ruimte in je inventaris."
event.hopper.syncsuccess = "&aSynchronisatie geslaagd."
event.hopper.desync = "&7Je hebt deze trechter gedesynchroniseerd."
event.hopper.syncnext = "&7Klik op een andere trechter of container om te synchroniseren."
event.hopper.syncself = "&cJe kunt een trechter niet met zichzelf laten synchroniseren."
event.hopper.synctimeout = "&cSynchronisatie duurde te lang."
event.hopper.syncoutofrange = "&cDit blok is buiten je trechter bereik."
event.hopper.syncdidnotplace = "&cSorry! Je moet deze trechter hebben geplaatst om er dingen mee te synchroniseren."
event.hopper.toomany = "&cJe kunt alleen %amount% trechter per chunk plaatsen..."
event.hopper.walkteleenabled = "Teleporteren is ingeschakeld voor deze trechter."
event.hopper.walkteledisabled = "Teleporteren door te lopen is uitgeschakeld voor deze trechter."
event.hopper.onlyone = "&cJe mag slecht een item per keer plaatsen."
event.hopper.syncchest = "&7Je hebt je &9%name% &7gesynchroniseerd met deze kist."
event.hopper.desyncchest = "&7Je hebt je &9%name% &7gedesynchroniseerd met deze kist."

View File

@ -1,63 +0,0 @@
#General Messages
general.nametag.prefix = "&7[&6EpicHoppers&7]"
general.nametag.next = "&9Bad"
general.nametag.back = "&9Ghabl"
general.nametag.nameformat = "&fHopper &eLevel %level%"
#Interface Messages
interface.hopper.boostedstats = "&a&lDar hale hazer boost shode ast!|&7Sorat jabejayi item &6%amount%x&7 barabaar shode ast.|&7Zaman Engheza:&6%time%&7."
interface.hopper.upgradewithxp = "&aErtegha ba XP"
interface.hopper.upgradewithxplore = "&7Hazine: &a%cost% level"
interface.hopper.upgradewitheconomy = "&aErtegha ba POOL"
interface.hopper.upgradewitheconomylore = "&7Hazine: &a$%cost%"
interface.hopper.currentlevel = "&6Hopper Level &7%level%"
interface.hopper.nextlevel = "&6Level bad &7%level%"
interface.hopper.range = "&7Mahdode: &6%range%"
interface.hopper.amount = "&7Tedad: &6%amount%"
interface.hopper.teleport = "&7Teleport: &6%enabled%"
interface.hopper.filter = "&7Saafii: &6%enabled%"
interface.hopper.crafting = "&7Sakhtan khodkar: &6%enabled%"
interface.hopper.suction = "&7Makesh: &6%suction%"
interface.hopper.blockbreak = "&7kandan block: &6Har %ticks% tick"
interface.hopper.alreadymaxed = "&7In Hopper be akharin level reside!"
interface.hopper.synclore = "|&7Click chap konid sepas bar roye|&7hopper ya chest baraye etesal click konid!||&7Baraye ghatee etesal click rast konid."
interface.hopper.perltitle = "&6Baraye teleport click konid"
interface.hopper.perllore2 = "|&7Click chap konid baraye teleport shodan|&7be akhar in zanjire.||&7Click rast konid baraye taghir|&7nahve teleport.|&7Dar hale hazer rpye &a%type%&7 gharar darad."
interface.hopper.filtertitle = "&cBaraye Saafii click konid"
interface.hopper.filterlore = "|&7In be shoma ejaze midahad ta entekhab konid|&7kodam item koja beravad."
interface.hopper.craftingtitle = "&cBaraye anjam tanzimat khodkar click konid"
interface.hopper.craftinglore = "|&7In be shoma ejaze midahad ta entekhab konid|&7kodam item dar in hopper|&7be sorat khodkar sakhte shavad."
interface.hopper.synchopper = "&6Baraye motasel kardan in hopper click konid"
interface.hopper.rejectsync = "&6Barae motasel kardan item haye blacklist click konid"
interface.filter.infotitle = "&aAmozesh Saafii"
interface.filter.infolore = "&7Item haye bala samte chap|&7whitelist hastand.||&7Iteem haye samt rast|&7pooch hastand.||&7Item haye payin samte chap|&7blacklist hastand.||&cEstafade kardab az whitelist hengam|&cestefade az blacklist va pooch be sorat ham zaman gheyre faal ast."
interface.filter.whitelist = "&f&lWhite List"
interface.filter.blacklist = "&8&lBlack List"
interface.filter.void = "&c&lPooch"
#Command Messages
command.give.success = "&7Shoma Hopper &6level %level% &7gereftid."
#Event Messages
event.general.nopermission = "&cShoma ejaze anjam in kar ra nadarid."
event.upgrade.cannotafford = "&cErtegha Emal nashod."
event.upgrade.success = "&7Shoma in Hopper ra be &6level %level%&7 ertegha dadid!"
event.upgrade.maxed = "&7Shoma in Hopper ra be akharin levle ertegha dadid &6level %level%&7."
event.inventory.noroom = "&7Shoma baraye in Hopper fazaye khali dar inventory khod nadarid."
event.hopper.syncsuccess = "&aEtesal ba movafaghiat anjam shod."
event.hopper.desync = "&7Etesal shoma ba movafaghiat ghaat shod."
event.hopper.syncnext = "&7Baraye etesal bar roye Hopper ya Chest click konid."
event.hopper.syncself = "&cShoma nemitavanid Hopper ra be khodash motasel konid."
event.hopper.synctimeout = "&cZaman etesal tamam shod."
event.hopper.syncoutofrange = "&cIn block kharej az mahdode hopper shoma hast."
event.hopper.syncdidnotplace = "&cShoma baraye sync kardan item ebteda bayad Hopper ra begozarid!"
event.hopper.toomany = "&cShoma tanha mitavanid %amount% adad Hopper dar har chunk begozarid."
event.hopper.walkteleenabled = "Teleport baraye in hopper faal shod."
event.hopper.walkteledisabled = "Teleport shodan ba rah raftan baraye in hopper gheyre faal shod."
event.hopper.onlyone = "&cShooma faghat mitavanid yek item daron inja gharar dahid."
event.hopper.syncchest = "&7Shoma &9%name% &7khod ra be in Chest etesal dadid."
event.hopper.desyncchest = "&7Shoma Etesal &9%name% &7ra ba chest ghaat kardid."

View File

@ -1,63 +0,0 @@
#General Messages
general.nametag.prefix = "&7[&6EpicHoppers&7]"
general.nametag.next = "&9Prox"
general.nametag.back = "&9Voltar"
general.nametag.nameformat = "&fHopper Nivel &e%level%"
#Interface Messages
interface.hopper.boostedstats = "&a&lCurrently boosted!|&7Item transfer rate multiplied by &6%amount%x&7.|&7Expires in &6%time%&7."
interface.hopper.upgradewithxp = "&aUpgrade usando XP"
interface.hopper.upgradewithxplore = "&7Valor: &a%cost% Niveis"
interface.hopper.upgradewitheconomy = "&aUpgrade usando Money"
interface.hopper.upgradewitheconomylore = "&7Valor: &a$%cost%"
interface.hopper.currentlevel = "&6Hopper Nivel &7%level%"
interface.hopper.nextlevel = "&6Prox. Nivel &7%level%"
interface.hopper.range = "&7Alcance: &6%range%"
interface.hopper.amount = "&7Quantidade: &6%amount%"
interface.hopper.teleport = "&7Teleporte: &6%enabled%"
interface.hopper.filter = "&7Filtro: &6%enabled%"
interface.hopper.crafting = "&7AutoCrafting: &6%enabled%"
interface.hopper.suction = "&7Succao: &6%suction%"
interface.hopper.blockbreak = "&7Block Break: &6Every %ticks% ticks"
interface.hopper.alreadymaxed = "&7Esse Hopper esta no maximo!"
interface.hopper.synclore = "|&7Left-Click em seguida, clique em outro|&7funil ou peito para sincronizar!||&7Right-Click para sincronizar."
interface.hopper.perltitle = "&6Clique para teleporta"
interface.hopper.perllore2 = "|&7Left-Click to teleport to|&7the end of the chain.||&7Right-Click to switch the|&7teleport trigger mode.|&7Currently set to: &a%type%&7."
interface.hopper.filtertitle = "&cClique para filtrar"
interface.hopper.filterlore = "|&7Isso permite que você escolha | &7que os itens vão para onde."
interface.hopper.craftingtitle = "&cClique para configurar o AutoCrafting"
interface.hopper.craftinglore = "|&7Isso permite que você escolha | & 7que item este funil | & 7will automaticly craft."
interface.hopper.synchopper = "&6Clique para sincronizar este funil"
interface.hopper.rejectsync = "&6Clique para sincronizar itens rejeitados"
interface.filter.infotitle = "&aGuia de filtro"
interface.filter.infolore = "&7Itens colocados na parte superior esquerda | & 7space serão colocados na lista branca. || & 7Itens colocados à direita | & 7 serão anulados. || & 7Itens colocados na parte inferior esquerda | & 7serão colocados na lista negra || & cUtilizar a lista de permissões desativará | & cboth a lista negra e vazio."
interface.filter.whitelist = "&f&lWhite List"
interface.filter.blacklist = "&8&lBlack List"
interface.filter.void = "&c&lVoid"
#Command Messages
command.give.success = "&7Você recebeu um &6Nivel %level% &7Hopper."
#Event Messages
event.general.nopermission = "&cVocê não tem permissão para fazer isso."
event.upgrade.cannotafford = "&cVocê não pode permitir esta atualização."
event.upgrade.success = "&7Você atualizou com sucesso este depósito para &6Nivel %level%&7!"
event.upgrade.maxed = "&7Você maximizou este funil em &6Nivel %level%&7."
event.inventory.noroom = "&7Você não tem espaço no seu inventário para isso."
event.hopper.syncsuccess = "&aSincronização bem sucedida."
event.hopper.desync = "&7Você desincronizou este funil."
event.hopper.syncnext = "&7Clique em outro funil ou recipiente para sincronizar."
event.hopper.syncself = "&cVocê não pode sincronizar um funil para si."
event.hopper.synctimeout = "&cA sincronização expirou."
event.hopper.syncoutofrange = "&cEste bloco está fora da sua gama de tremonhas."
event.hopper.syncdidnotplace = "&cDesculpa! Você precisa ter colocado este funil para sincronizar as coisas com ele."
event.hopper.toomany = "&cVocê só pode colocar %amount% hoppers por chunk..."
event.hopper.walkteleenabled = "O teletransporte foi ativado para este funil."
event.hopper.walkteledisabled = "Ande no teleporte foi desativado para este funil."
event.hopper.onlyone = "&cVocê só pode colocar um único item de cada vez."
event.hopper.syncchest = "&7Você sincronizou seu &9%name% &7com esse peito."
event.hopper.desyncchest = "&7Você desincronizou seu &9%name% &7com esse peito."