Compare commits

...
10 Commits
Author SHA1 Message Date
Thijs Wiefferink 064b129205 Change version to 2.3.2 and update languages
- Russian has been added
- Spelling errors in French have been corrected
2016-08-07 22:21:57 +02:00
Thijs Wiefferink 8111387f32 Improve friend line of /as me, add click hint
Change blue color of hover popup to gold, which will be used as action color
2016-08-07 22:06:09 +02:00
Thijs Wiefferink a4b23bebba Improve line of rented regions in info command 2016-08-07 21:49:44 +02:00
Thijs Wiefferink 7421e685fa Improve robustness of variable replacing in messages
- Once the limit is reached the argument replacer would still continue sometimes (if a the replacement itself triggers the limit and the inserted message increases the size of the message we are building and adds a parameter tag again, like %0%)
- The language tag replacer also stops earlier now, it did not have the above problem though
- Fixed FancyMessageFormat.insertMessage() not checking its parameters
- Message.get() with a limit will now return an empty message if the limit is reached to prevent problems like above.
- Closes #205
2016-08-07 00:09:30 +02:00
Christoph Krüger @Androkai 374b68d8fa Update VaultAPI-repo (#206)
The url of the Vault Maven repository has changed.
2016-08-06 22:36:26 +02:00
Thijs Wiefferink ca7a9664f3 Fix error in info command of rental region 2016-08-02 22:27:55 +02:00
Thijs Wiefferink e957b4fc73 Remove all reflection for sending fancy messages
- Reflection removed
- JSON is now fully escaped instead of lenient escaping
- Sending is now done with /tellraw
2016-08-01 21:31:14 +02:00
Thijs Wiefferink 6493bc4f78 Add empty lines if a page does not fill the screen
Relevant for commands like `/as info all` that can have pages
2016-08-01 21:28:11 +02:00
Thijs Wiefferink 2db1b6a243 Prevent updater throwing errors sometimes when BukkitDev is offline 2016-08-01 20:46:40 +02:00
Thijs Wiefferink 864662a3c4 Add javadocs to limitgroup inner class and setting methods 2016-08-01 20:23:49 +02:00
18 changed files with 727 additions and 568 deletions

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@
<artifactId>areashop</artifactId>
<packaging>jar</packaging>
<name>AreaShop</name>
<version>2.3.1</version> <!-- Main plugin version -->
<version>2.3.2</version> <!-- Main plugin version -->
<parent>
<groupId>me.wiefferink</groupId>
@@ -42,7 +42,8 @@ public class InfoCommand extends CommandAreaShop {
* @param baseCommand The command to execute for next/previous page
*/
private void showSortedPagedList(CommandSender sender, List<? extends GeneralRegion> regions, RegionGroup filterGroup, String keyHeader, String pageInput, String baseCommand) {
int ITEMS_PER_PAGE = 18;
int MAX_ITEMS = 20;
int ITEMS_PER_PAGE = MAX_ITEMS-2;
int page = 1;
if(pageInput != null && Utils.isNumeric(pageInput)) {
try {
@@ -88,6 +89,7 @@ public class InfoCommand extends CommandAreaShop {
totalPages = 1;
}
page = Math.max(1, Math.min(totalPages, page));
int linesPrinted = 1; // header
for(int i = (page-1)*ITEMS_PER_PAGE; i < page*ITEMS_PER_PAGE && i < regions.size(); i++) {
String state;
GeneralRegion region = regions.get(i);
@@ -107,6 +109,7 @@ public class InfoCommand extends CommandAreaShop {
}
}
plugin.messageNoPrefix(sender, "info-entry"+state, region);
linesPrinted++;
}
Message footer = Message.none();
// Previous button
@@ -127,6 +130,10 @@ public class InfoCommand extends CommandAreaShop {
} else {
footer.append(Message.fromKey("info-pageNoNext"));
}
// Fill up space if the page is not full (aligns header nicely)
for(int i = linesPrinted; i < MAX_ITEMS-1; i++) {
sender.sendMessage(" ");
}
footer.send(sender);
long end = Calendar.getInstance().getTimeInMillis();
}
@@ -291,7 +298,7 @@ public class InfoCommand extends CommandAreaShop {
plugin.messageNoPrefix(sender, "info-regionRented", rent);
plugin.messageNoPrefix(sender, "info-regionExtending", rent);
// Money back
if(UnrentCommand.canUse(sender, buy)) {
if(UnrentCommand.canUse(sender, rent)) {
plugin.messageNoPrefix(sender, "info-regionMoneyBackRentClick", rent);
} else {
plugin.messageNoPrefix(sender, "info-regionMoneyBackRent", rent);
@@ -101,6 +101,8 @@ public class MeCommand extends CommandAreaShop {
if(!foundSome) {
plugin.message(sender, "me-nothing", player.getName());
} else {
plugin.messageNoPrefix(sender, "me-clickHint");
}
}
@@ -664,8 +664,8 @@ public class Updater {
return true;
} catch (final IOException e) {
if (e.getMessage().contains("HTTP response code: 403")) {
this.plugin.getLogger().severe("dev.bukkit.org rejected the API key provided in plugins/Updater/config.yml");
if(e.getMessage() != null && e.getMessage().contains("HTTP response code: 403")) {
this.plugin.getLogger().severe("dev.bukkit.org rejected the API key provided in plugins/Updater/config.yml");
this.plugin.getLogger().severe("Please double-check your configuration to ensure it is correct.");
this.result = UpdateResult.FAIL_APIKEY;
} else {
@@ -1,108 +0,0 @@
package me.wiefferink.areashop.messages;
import org.apache.commons.lang.Validate;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collection;
/**
* Class made by glan3b (Github: https://github.com/glen3b) for the Fanciful project (Github: https://github.com/mkremins/fanciful)
*/
/**
* Represents a wrapper around an array class of an arbitrary reference type,
* which properly implements "value" hash code and equality functions.
* <p>
* This class is intended for use as a key to a map.
* </p>
* @param <E> The type of elements in the array.
* @author Glen Husman
* @see Arrays
*/
public final class ArrayWrapper<E> {
/**
* Creates an array wrapper with some elements.
* @param elements The elements of the array.
*/
public ArrayWrapper(E... elements) {
setArray(elements);
}
private E[] _array;
/**
* Retrieves a reference to the wrapped array instance.
* @return The array wrapped by this instance.
*/
public E[] getArray() {
return _array;
}
/**
* Set this wrapper to wrap a new array instance.
* @param array The new wrapped array.
*/
public void setArray(E[] array) {
Validate.notNull(array, "The array must not be null.");
_array = array;
}
/**
* Determines if this object has a value equivalent to another object.
* @see Arrays#equals(Object[], Object[])
*/
@SuppressWarnings("rawtypes")
@Override
public boolean equals(Object other) {
if(!(other instanceof ArrayWrapper)) {
return false;
}
return Arrays.equals(_array, ((ArrayWrapper)other)._array);
}
/**
* Gets the hash code represented by this objects value.
* @return This object's hash code.
* @see Arrays#hashCode(Object[])
*/
@Override
public int hashCode() {
return Arrays.hashCode(_array);
}
/**
* Converts an iterable element collection to an array of elements.
* The iteration order of the specified object will be used as the array element order.
* @param list The iterable of objects which will be converted to an array.
* @param c The type of the elements of the array.
* @param <T> The type
* @return An array of elements in the specified iterable.
*/
@SuppressWarnings("unchecked")
public static <T> T[] toArray(Iterable<? extends T> list, Class<T> c) {
int size = -1;
if(list instanceof Collection<?>) {
@SuppressWarnings("rawtypes")
Collection coll = (Collection)list;
size = coll.size();
}
if(size < 0) {
size = 0;
// Ugly hack: Count it ourselves
for(@SuppressWarnings("unused") T element : list) {
size++;
}
}
T[] result = (T[])Array.newInstance(c, size);
int i = 0;
for(T element : list) { // Assumes iteration order is consistent
result[i++] = element; // Assign array element at index THEN increment counter
}
return result;
}
}
@@ -88,10 +88,11 @@ public class FancyMessageFormat {
LinkedList<InteractiveMessagePart> message = parse(lines);
StringBuilder sb = new StringBuilder();
sb.append("[");
if(message.size() == 1) {
sb.append(message.getFirst().toJSON());
} else if(message.size() > 0) {
sb.append("{text=\"\",extra:[");
sb.append("{\"text\":\"\",\"extra\":[");
for(InteractiveMessagePart messagePart : message) {
sb.append(messagePart.toJSON());
sb.append(',');
@@ -99,6 +100,7 @@ public class FancyMessageFormat {
sb.deleteCharAt(sb.length()-1);
sb.append("]}");
}
sb.append("]");
return sb.toString();
}
@@ -149,7 +151,13 @@ public class FancyMessageFormat {
* @param end The end of the variable to replace
*/
public static void insertMessage(List<String> message, List<String> insert, int line, int start, int end) {
if(insert == null || line < 0 || line >= message.size() || start < 0 || end < 0) {
return;
}
String lineContent = message.remove(line);
if(start > lineContent.length() || end > lineContent.length()) {
return;
}
if(isTaggedInteractive(lineContent)) {
lineContent = lineContent.replace("", "");
message.add(line, lineContent.substring(0, start)+convertToConsole(insert)+lineContent.substring(end));
@@ -556,13 +564,13 @@ public class FancyMessageFormat {
String toJSON() {
StringBuilder sb = new StringBuilder();
sb.append('{');
sb.append("text:").append(quoteStringJson(text));
sb.append("\"text\":").append(quoteStringJson(text));
if(color != null && color != Color.WHITE) {
sb.append(",color:").append(color.jsonValue);
sb.append(",\"color\":\"").append(color.jsonValue).append("\"");
}
for(FormatType formatting : formatTypes) {
sb.append(',');
sb.append(formatting.jsonKey).append(':');
sb.append(",\"");
sb.append(formatting.jsonKey).append("\":");
sb.append("true");
}
sb.append('}');
@@ -619,7 +627,7 @@ public class FancyMessageFormat {
sb.deleteCharAt(sb.length()-1);
} else {
sb.append('{');
sb.append("text=\"\",extra:[");
sb.append("\"text\":\"\",\"extra\":[");
for(TextMessagePart textPart : content) {
sb.append(textPart.toJSON());
sb.append(',');
@@ -629,16 +637,16 @@ public class FancyMessageFormat {
}
if(clickType != null) {
sb.append(',');
sb.append("clickEvent:{");
sb.append("action:").append(clickType.getJsonKey()).append(',');
sb.append("value:").append(quoteStringJson(clickContent));
sb.append("\"clickEvent\":{");
sb.append("\"action\":\"").append(clickType.getJsonKey()).append("\",");
sb.append("\"value\":").append(quoteStringJson(clickContent));
sb.append('}');
}
if(hoverType != null) {
sb.append(',');
sb.append("hoverEvent:{");
sb.append("action:").append(hoverType.getJsonKey()).append(',');
sb.append("value:");
sb.append("\"hoverEvent\":{");
sb.append("\"action\":\"").append(hoverType.getJsonKey()).append("\",");
sb.append("\"value\":");
if(hoverContent.size() == 1) {
TextMessagePart hoverPart = hoverContent.getFirst();
if(hoverPart.hasFormatting()) {
@@ -1,100 +0,0 @@
package me.wiefferink.areashop.messages;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.lang.reflect.*;
import java.util.logging.Level;
/**
* Methods written by the Fanciful project (Github: https://github.com/mkremins/fanciful)
*/
public class FancyMessageSender {
private static Constructor<?> nmsPacketPlayOutChatConstructor;
public static boolean sendJSON(Player player, String jsonString) {
try {
Object handle = Reflection.getHandle(player);
Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle);
Reflection.getMethod(connection.getClass(), "sendPacket", Reflection.getNMSClass("Packet")).invoke(connection, createChatPacket(jsonString));
return true;
} catch(IllegalArgumentException e) {
Bukkit.getLogger().log(Level.WARNING, "Argument could not be passed.", e);
} catch(IllegalAccessException e) {
Bukkit.getLogger().log(Level.WARNING, "Could not access method.", e);
} catch(InstantiationException e) {
Bukkit.getLogger().log(Level.WARNING, "Underlying class is abstract.", e);
} catch(InvocationTargetException e) {
Bukkit.getLogger().log(Level.WARNING, "A error has occured durring invoking of method.", e);
} catch(NoSuchMethodException e) {
Bukkit.getLogger().log(Level.WARNING, "Could not find method.", e);
} catch(ClassNotFoundException e) {
Bukkit.getLogger().log(Level.WARNING, "Could not find class.", e);
}
return false;
}
// The ChatSerializer's instance of Gson
private static Object nmsChatSerializerGsonInstance;
private static Method fromJsonMethod;
private static Object createChatPacket(String json) throws IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {
if(nmsChatSerializerGsonInstance == null) {
// Find the field and its value, completely bypassing obfuscation
Class<?> chatSerializerClazz;
String version = Reflection.getVersion();
if(version == null || version.length() < 2) {
throw new RuntimeException("Could not get NMS version, found: "+version);
}
version = version.substring(1, version.length()-1); // Strip v and the . at the end
String[] parts = version.split("_");
if(parts.length < 3) {
throw new RuntimeException("Not enough parts in the version, found: "+version);
}
int majorVersion = Integer.parseInt(parts[0]);
int minorVersion = Integer.parseInt(parts[1]);
int revision = Integer.parseInt(parts[2].substring(1));
if((majorVersion <= 1 && minorVersion < 8) || (majorVersion == 1 && minorVersion == 8 && revision == 1)) {
chatSerializerClazz = Reflection.getNMSClass("ChatSerializer");
} else {
chatSerializerClazz = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer");
}
if(chatSerializerClazz == null) {
throw new ClassNotFoundException("Can't find the ChatSerializer class");
}
for(Field declaredField : chatSerializerClazz.getDeclaredFields()) {
if(Modifier.isFinal(declaredField.getModifiers()) && Modifier.isStatic(declaredField.getModifiers()) && declaredField.getType().getName().endsWith("Gson")) {
// We've found our field
declaredField.setAccessible(true);
nmsChatSerializerGsonInstance = declaredField.get(null);
fromJsonMethod = nmsChatSerializerGsonInstance.getClass().getMethod("fromJson", String.class, Class.class);
break;
}
}
}
// Since the method is so simple, and all the obfuscated methods have the same name, it's easier to reimplement 'IChatBaseComponent a(String)' than to reflectively call it
// Of course, the implementation may change, but fuzzy matches might break with signature changes
Object serializedChatComponent = fromJsonMethod.invoke(nmsChatSerializerGsonInstance, json, Reflection.getNMSClass("IChatBaseComponent"));
if(nmsPacketPlayOutChatConstructor == null) {
try {
nmsPacketPlayOutChatConstructor = Reflection.getNMSClass("PacketPlayOutChat").getDeclaredConstructor(Reflection.getNMSClass("IChatBaseComponent"));
nmsPacketPlayOutChatConstructor.setAccessible(true);
} catch(NoSuchMethodException e) {
Bukkit.getLogger().log(Level.SEVERE, "Could not find Minecraft method or constructor.", e);
} catch(SecurityException e) {
Bukkit.getLogger().log(Level.WARNING, "Could not access constructor.", e);
}
}
return nmsPacketPlayOutChatConstructor.newInstance(serializedChatComponent);
}
}
@@ -10,7 +10,7 @@ import java.util.*;
public class LanguageManager {
private AreaShop plugin = null;
private String languages[] = {"EN", "NL", "FR", "DE", "NO"};
private String languages[] = {"EN", "NL", "FR", "DE", "NO", "RU"};
private Map<String, List<String>> currentLanguage, defaultLanguage;
/**
@@ -3,6 +3,8 @@ package me.wiefferink.areashop.messages;
import me.wiefferink.areashop.AreaShop;
import me.wiefferink.areashop.Utils;
import me.wiefferink.areashop.regions.GeneralRegion;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -84,6 +86,9 @@ public class Message {
* @return Message as a list
*/
private List<String> get(Limit limit) {
if(limit.reached()) {
return new ArrayList<>();
}
executeReplacements(limit);
return message;
}
@@ -182,12 +187,13 @@ public class Message {
AreaShop.getInstance().getLogger().severe("Message with key "+key+" could not be send, results in a JSON string that is too big to send to the client, start of the message: "+Utils.getMessageStart(this, 100));
return this;
}
boolean result = FancyMessageSender.sendJSON((Player)target, jsonString);
boolean result = Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw "+((Player)target).getName()+" "+jsonString);
sendPlain = !result;
fancyWorks = result;
} catch(Exception e) {
fancyWorks = false;
AreaShop.getInstance().getLogger().warning("Sending fancy message did not work, falling back to plain messages. Message key: "+key);
AreaShop.debug(ExceptionUtils.getStackTrace(e));
}
}
if(sendPlain) { // Fancy messages disabled or broken
@@ -289,7 +295,7 @@ public class Message {
* - Else the parameter will replace its number surrounded with VARIABLESTART and VARIABLEEND
*/
private void replaceArgumentVariables(Limit limit) {
if(message == null || message.size() == 0 || replacements == null) {
if(message == null || message.size() == 0 || replacements == null || limit.reached()) {
return;
}
boolean result = false;
@@ -302,8 +308,15 @@ public class Message {
} else if(param instanceof Message) {
Pattern variables = Pattern.compile(Pattern.quote(VARIABLESTART)+number+Pattern.quote(VARIABLEEND));
Matcher matches = variables.matcher(message.get(i));
if(matches.find()) {
FancyMessageFormat.insertMessage(message, ((Message)param).get(limit), i, matches.start(), matches.end());
if(matches.find()) { // Only replaces one occurance of the variable, others will be done next round
int startDiff = message.size()-i;
List<String> insertMessage = ((Message)param).get(limit);
if(limit.reached()) {
return;
}
FancyMessageFormat.insertMessage(message, insertMessage, i, matches.start(), matches.end());
// Skip to end of insert
i = message.size()-startDiff;
}
number++;
} else {
@@ -319,7 +332,7 @@ public class Message {
* Replace all language variables in a message
*/
private void replaceLanguageVariables(Limit limit) {
if(message == null || message.size() == 0) {
if(message == null || message.size() == 0 || limit.reached()) {
return;
}
@@ -349,8 +362,12 @@ public class Message {
// Insert message
int startDiff = message.size()-i;
FancyMessageFormat.insertMessage(message, insert.get(limit), i, matches.start(), matches.end());
// Skip to end of insert, language tags already replaced
List<String> insertMessage = insert.get(limit);
if(limit.reached()) {
return;
}
FancyMessageFormat.insertMessage(message, insertMessage, i, matches.start(), matches.end());
// Skip to end of insert
i = message.size()-startDiff;
}
}
@@ -1,219 +0,0 @@
package me.wiefferink.areashop.messages;
import org.bukkit.Bukkit;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* Class made by glan3b (Github: https://github.com/glen3b) for the Fanciful project (Github: https://github.com/mkremins/fanciful)
*/
/**
* A class containing static utility methods and caches which are intended as reflective conveniences.
* Unless otherwise noted, upon failure methods will return {@code null}.
*/
public final class Reflection {
private static String _versionString;
private Reflection() {
}
/**
* Gets the version string from the package name of the CraftBukkit server implementation.
* This is needed to bypass the JAR package name changing on each update.
* @return The version string of the OBC and NMS packages, <em>including the trailing dot</em>.
*/
public synchronized static String getVersion() {
if(_versionString == null) {
if(Bukkit.getServer() == null) {
// The server hasn't started, static initializer call?
return null;
}
String name = Bukkit.getServer().getClass().getPackage().getName();
_versionString = name.substring(name.lastIndexOf('.')+1)+".";
}
return _versionString;
}
/**
* Stores loaded classes from the {@code net.minecraft.server} package.
*/
private static final Map<String, Class<?>> _loadedNMSClasses = new HashMap<String, Class<?>>();
/**
* Stores loaded classes from the {@code org.bukkit.craftbukkit} package (and subpackages).
*/
private static final Map<String, Class<?>> _loadedOBCClasses = new HashMap<String, Class<?>>();
/**
* Gets a {@link Class} object representing a type contained within the {@code net.minecraft.server} versioned package.
* The class instances returned by this method are cached, such that no lookup will be done twice (unless multiple threads are accessing this method simultaneously).
* @param className The name of the class, excluding the package, within NMS.
* @return The class instance representing the specified NMS class, or {@code null} if it could not be loaded.
*/
public synchronized static Class<?> getNMSClass(String className) {
if(_loadedNMSClasses.containsKey(className)) {
return _loadedNMSClasses.get(className);
}
String fullName = "net.minecraft.server."+getVersion()+className;
Class<?> clazz = null;
try {
clazz = Class.forName(fullName);
} catch(Exception e) {
e.printStackTrace();
_loadedNMSClasses.put(className, null);
return null;
}
_loadedNMSClasses.put(className, clazz);
return clazz;
}
/**
* Gets a {@link Class} object representing a type contained within the {@code org.bukkit.craftbukkit} versioned package.
* The class instances returned by this method are cached, such that no lookup will be done twice (unless multiple threads are accessing this method simultaneously).
* @param className The name of the class, excluding the package, within OBC. This name may contain a subpackage name, such as {@code inventory.CraftItemStack}.
* @return The class instance representing the specified OBC class, or {@code null} if it could not be loaded.
*/
public synchronized static Class<?> getOBCClass(String className) {
if(_loadedOBCClasses.containsKey(className)) {
return _loadedOBCClasses.get(className);
}
String fullName = "org.bukkit.craftbukkit."+getVersion()+className;
Class<?> clazz = null;
try {
clazz = Class.forName(fullName);
} catch(Exception e) {
e.printStackTrace();
_loadedOBCClasses.put(className, null);
return null;
}
_loadedOBCClasses.put(className, clazz);
return clazz;
}
/**
* Attempts to get the NMS handle of a CraftBukkit object.
* <p>
* The only match currently attempted by this method is a retrieval by using a parameterless {@code getHandle()} method implemented by the runtime type of the specified object.
* </p>
* @param obj The object for which to retrieve an NMS handle.
* @return The NMS handle of the specified object, or {@code null} if it could not be retrieved using {@code getHandle()}.
*/
public synchronized static Object getHandle(Object obj) {
try {
return getMethod(obj.getClass(), "getHandle").invoke(obj);
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
private static final Map<Class<?>, Map<String, Field>> _loadedFields = new HashMap<Class<?>, Map<String, Field>>();
/**
* Retrieves a {@link Field} instance declared by the specified class with the specified name.
* Java access modifiers are ignored during this retrieval. No guarantee is made as to whether the field
* returned will be an instance or static field.
* <p>
* A global caching mechanism within this class is used to store fields. Combined with synchronization, this guarantees that
* no field will be reflectively looked up twice.
* </p>
* <p>
* If a field is deemed suitable for return, {@link Field#setAccessible(boolean) setAccessible} will be invoked with an argument of {@code true} before it is returned.
* This ensures that callers do not have to check or worry about Java access modifiers when dealing with the returned instance.
* </p>
* @param clazz The class which contains the field to retrieve.
* @param name The declared name of the field in the class.
* @return A field object with the specified name declared by the specified class.
* @see Class#getDeclaredField(String)
*/
public synchronized static Field getField(Class<?> clazz, String name) {
Map<String, Field> loaded;
if(!_loadedFields.containsKey(clazz)) {
loaded = new HashMap<String, Field>();
_loadedFields.put(clazz, loaded);
} else {
loaded = _loadedFields.get(clazz);
}
if(loaded.containsKey(name)) {
// If the field is loaded (or cached as not existing), return the relevant value, which might be null
return loaded.get(name);
}
try {
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
loaded.put(name, field);
return field;
} catch(Exception e) {
// Error loading
e.printStackTrace();
// Cache field as not existing
loaded.put(name, null);
return null;
}
}
/**
* Contains loaded methods in a cache.
* The map maps [types to maps of [method names to maps of [parameter types to method instances]]].
*/
private static final Map<Class<?>, Map<String, Map<ArrayWrapper<Class<?>>, Method>>> _loadedMethods = new HashMap<Class<?>, Map<String, Map<ArrayWrapper<Class<?>>, Method>>>();
/**
* Retrieves a {@link Method} instance declared by the specified class with the specified name and argument types.
* Java access modifiers are ignored during this retrieval. No guarantee is made as to whether the field
* returned will be an instance or static field.
* <p>
* A global caching mechanism within this class is used to store method. Combined with synchronization, this guarantees that
* no method will be reflectively looked up twice.
* </p>
* <p>
* If a method is deemed suitable for return, {@link Method#setAccessible(boolean) setAccessible} will be invoked with an argument of {@code true} before it is returned.
* This ensures that callers do not have to check or worry about Java access modifiers when dealing with the returned instance.
* </p>
* <p>
* This method does <em>not</em> search superclasses of the specified type for methods with the specified signature.
* Callers wishing this behavior should use {@link Class#getDeclaredMethod(String, Class...)}.
* @param clazz The class which contains the method to retrieve.
* @param name The declared name of the method in the class.
* @param args The formal argument types of the method.
* @return A method object with the specified name declared by the specified class.
*/
public synchronized static Method getMethod(Class<?> clazz, String name,
Class<?>... args) {
if(!_loadedMethods.containsKey(clazz)) {
_loadedMethods.put(clazz, new HashMap<String, Map<ArrayWrapper<Class<?>>, Method>>());
}
Map<String, Map<ArrayWrapper<Class<?>>, Method>> loadedMethodNames = _loadedMethods.get(clazz);
if(!loadedMethodNames.containsKey(name)) {
loadedMethodNames.put(name, new HashMap<ArrayWrapper<Class<?>>, Method>());
}
Map<ArrayWrapper<Class<?>>, Method> loadedSignatures = loadedMethodNames.get(name);
ArrayWrapper<Class<?>> wrappedArg = new ArrayWrapper<Class<?>>(args);
if(loadedSignatures.containsKey(wrappedArg)) {
return loadedSignatures.get(wrappedArg);
}
for(Method m : clazz.getMethods()) {
if(m.getName().equals(name) && Arrays.equals(args, m.getParameterTypes())) {
m.setAccessible(true);
loadedSignatures.put(wrappedArg, m);
return m;
}
}
loadedSignatures.put(wrappedArg, null);
return null;
}
}
@@ -794,7 +794,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
/**
* Teleport a player to the region
* Teleport a player to the region or sign
* @param player Player that should be teleported
* @param toSign true to teleport to the first sign of the region, false for teleporting to the region itself
* @param checkPermissions Set to true if teleport permissions should be checked, false otherwise
@@ -1123,9 +1123,22 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
return false;
}
}
/**
* Teleport a player to the region or sign when he has permissions for it
* @param player Player that should be teleported
* @param toSign true to teleport to the first sign of the region, false for teleporting to the region itself
* @return true if the teleport succeeded, otherwise false
*/
public boolean teleportPlayer(Player player, boolean toSign) {
return teleportPlayer(player, toSign, true);
}
/**
* Teleport a player to the region when he has permissions for it
* @param player Player that should be teleported
* @return true if the teleport succeeded, otherwise false
*/
public boolean teleportPlayer(Player player) {
return teleportPlayer(player, false, true);
}
@@ -1195,7 +1208,16 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
// CONFIG
public boolean getBooleanSetting(String path) { // Handles strings as booleans
/**
* Get a boolean setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting (strings are handled as booleans)
*/
public boolean getBooleanSetting(String path) {
if(config.isSet(path)) {
if(config.isString(path)) {
return config.getString(path).equalsIgnoreCase("true");
@@ -1225,7 +1247,15 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getBoolean(path);
}
/**
* Get a boolean setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting (strings are handled as booleans)
*/
public int getIntegerSetting(String path) {
if(config.isSet(path)) {
return config.getInt(path);
@@ -1245,7 +1275,15 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getInt(path);
}
/**
* Get a double setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting
*/
public double getDoubleSetting(String path) {
if(config.isSet(path)) {
return config.getDouble(path);
@@ -1265,7 +1303,15 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getDouble(path);
}
/**
* Get a long setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting
*/
public long getLongSetting(String path) {
if(config.isSet(path)) {
return config.getLong(path);
@@ -1285,7 +1331,15 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getLong(path);
}
/**
* Get a string setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting
*/
public String getStringSetting(String path) {
if(config.isSet(path)) {
return config.getString(path);
@@ -1305,7 +1359,15 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getString(path);
}
/**
* Get a string list setting for this region, defined as follows
* - If the region has the setting in its own file (/regions/regionName.yml), use that
* - If the region has groups, use the setting defined by the most important group, if any
* - Otherwise fallback to the default.yml file setting
* @param path The path to get the setting of
* @return The value of the setting
*/
public List<String> getStringListSetting(String path) {
if(config.isSet(path)) {
return config.getStringList(path);
@@ -1325,7 +1387,12 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
}
return this.getFileManager().getDefaultSettings().getStringList(path);
}
/**
* Set a setting in the file of the region itself
* @param path The path to set
* @param value The value to set it to, null to remove the setting
*/
public void setSetting(String path, Object value) {
config.set(path, value);
this.saveRequired();
@@ -1460,18 +1527,43 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
this.current = current;
this.limitingGroup = limitingGroup;
}
/**
* Check if the action is allowed
* @return true if the actions is allowed, otherwise false
*/
public boolean actionAllowed() {
return actionAllowed;
}
}
/**
* Get the type of the factor that is limiting the action, assuming actionAllowed() is false
* @return The type of the limiting factor
*/
public LimitType getLimitingFactor() {
return limitingFactor;
}
/**
* Get the maximum number of the group that is the limiting factor, assuming actionAllowed() is false
* @return The maximum
*/
public int getMaximum() {
return maximum;
}
/**
* Get the current number of regions in the group that is the limiting factor, assuming actionAllowed() is false
* @return The current number of regions the player has
*/
public int getCurrent() {
return current;
}
/**
* Get the name of the group that is limiting the action, assuming actionAllowed() is false
* @return The name of the group
*/
public String getLimitingGroup() {
return limitingGroup;
}
+1 -20
View File
@@ -1,6 +1,6 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: German, Version: V2.3.1, Percentage translated: 100% ║
# ║ Language: German, Version: V2.3.2, Percentage translated: 96% ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
@@ -8,8 +8,6 @@
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
action: "[blue][bold]<%0%>[/bold]"
button: "[bold]<%0%>[/bold]"
command:
@@ -178,23 +176,9 @@ info-nogroupNone: "Es gibt keine Regionen ohne Gruppe."
info-noFiltergroup: "Gruppe '%0%' existiert nicht und kann deshalb nicht genutzt werden um die Ergebnisse zu limitieren."
info-noRegions: "Es wurden keine Regionen gefunden."
info-wrongPage: "%0% ist keine korrekte Seitenzahl."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region% kann gemietet werden für %price% je %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region% wurde an %lang:player% verkauft."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region% kann gekauft werden für %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region% wurde an %lang:player% verkauft."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region% wurde an %lang:player% weiterverkauft."
info-pageStatus: "[gray]Seite %0%/%1%"
info-pagePrevious:
- " [gray][bold]◄Vorherige[/bold] "
- " hover: %lang:action|Zeige Vorherige Seite|%"
- " command: %0%"
info-pageNoPrevious:
- " [darkgray][bold]◄Vorherige[/bold] "
- " hover: Das ist bereits die erste Seite."
info-pageNext:
- " [gray][bold]Nächste►[/bold]"
- " hover: %lang:action|Zeige nächste Seite.|%"
- " command: %0%"
info-pageNoNext:
- " [darkgray][bold]Nächste►[/bold]"
- " hover: Das ist bereits die letzte Seite."
@@ -431,9 +415,7 @@ delsign-success: "Das Schild wurde von der Region %lang:region% entfernt."
me-noPermission: "Dir fehlt die Berechtigung einzusehen, welche Regionen du besitzt."
me-header: "Regionen von %lang:tPlayer|%0%|%:"
me-notAPlayer: "Du bist kein Spieler, darum können dir keine Regionen gehören."
me-rentLine: "[darkgreen][bold]►[reset] %lang:region% [gray](nach %until%, %timeleft% verbleibend)."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-friendLine: "[darkgreen][bold]►[reset] %lang:region% [gray](als Freund hinzugefügt, Besitzer: %lang:player%)."
me-nothing: "%lang:tPlayer|%0%|% hat keine gemieteten oder gekaufen Regionen und wurde nicht als Freund zu einem hinzugefügt."
me-noPlayer: "%0% konnte nicht gefunden werden, möglicherweise war er nie auf diesem Server."
@@ -477,7 +459,6 @@ delfriend-noPermissionOther: "Du hast keine Berechtigung, Freunde von Regionen z
delfriend-noPermission: "Du hast keine Berechtigung, Freunde von deinen Regionen zu entfernen."
delfriend-successOther: "%lang:tPlayer|%0%|% wurde als Freund der Region %lang:region% entfernt."
delfriend-success: "%lang:tPlayer|%0%|% wurde als Freund Deiner Region %lang:region% entfernt."
delfriend-notAdded: "%lang:tPlayer|%0%|% ist nicht als Freund der Region %lang:region% eingetragen."
delfriend-noOwner: "Du kannst keine Freunde von einer Region ohne Besitzer entfernen."
linksigns-multipleRegions: "Mehrere Regionen gefunden: [gray]%0%."
+21 -12
View File
@@ -1,6 +1,6 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: English, Version: V2.3.1, Percentage translated: 100% (source), author: NLThijs48 ║
# ║ Language: English, Version: V2.3.2, Percentage translated: 100% (source), author: NLThijs48 ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
@@ -8,7 +8,7 @@
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
action: "[blue][bold]<%0%>[/bold]"
action: "[gold][bold]<%0%>[/bold]"
button: "[bold]<%0%>[/bold]"
@@ -178,22 +178,22 @@ info-nogroupNone: "There are no regions without a group."
info-noFiltergroup: "Group '%0%' does not exist and therefore cannot be used to limit the results."
info-noRegions: "No regions have been found."
info-wrongPage: "%0% is not a correct page number."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: For rent for %price% per %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: Rented to %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: For sale for %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: Sold to %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: Sold to %lang:player% (reselling)."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: [gray]For rent for %price% per %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: [gray]Rented to %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: [gray]For sale for %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: [gray]Sold to %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: [gray]Sold to %lang:player% (reselling)."
info-pageStatus:
- "[gray]Page %0%/%1%"
- "[gold]Page %0%/%1%"
info-pagePrevious:
- " [gray][bold]◄Previous[/bold] "
- " [gold][bold]◄Previous[/bold] "
- " hover: %lang:action|Show previous page|%"
- " command: %0%"
info-pageNoPrevious:
- " [darkgray][bold]◄Previous[/bold] "
- " hover: This is already the first page"
info-pageNext:
- " [gray][bold]Next►[/bold]"
- " [gold][bold]Next►[/bold]"
- " hover: %lang:action|Show next page|%"
- " command: %0%"
info-pageNoNext:
@@ -436,11 +436,20 @@ delsign-success: "The sign has been removed from region %lang:region%."
me-noPermission: "You don't have permission to check which regions you have."
me-header: "Regions of %lang:tPlayer|%0%|%:"
me-notAPlayer: "You are not a player so you can't have any regions."
me-rentLine: "[darkgreen][bold]►[reset] %lang:region% [gray](until %until%, %timeleft% left)."
me-rentLine:
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
- "%timeleft% left"
- " hover: until %until%"
- ")."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-friendLine: "[darkgreen][bold]►[reset] %lang:region% [gray](added as friend, owner: %lang:player%)."
me-friendLine:
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
- "owned by %lang:player%"
- " hover: You are added as friend"
- ")."
me-nothing: "%lang:tPlayer|%0%|% has not rented or bought regions and is not added as friend to one."
me-noPlayer: "%0% cannot be found, probably never joined the server."
me-clickHint: "[gray][italic]Click a region name to see details."
setowner-help: "/as setowner <player> [region], the region you stand in will be used if not specified."
setowner-noPermission: "You don't have permission to set the owner of a region."
+22 -41
View File
@@ -1,6 +1,6 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: French, Version: V2.3.1, Percentage translated: 100% ║
# ║ Language: French, Version: V2.3.2, Percentage translated: 96% ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
@@ -8,8 +8,6 @@
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
action: "[blue][bold]<%0%>[/bold]"
button: "[bold]<%0%>[/bold]"
command:
@@ -67,26 +65,26 @@ help-header: "Page d'aide, commandes que vous pouvez exécuter."
help-noPermission: "Vous ne pouvez pas voir la page d'aide."
help-alias: "Alias des commandes : /areashop, /as"
help-help: "%lang:helpCommand|/as help|% Montre cette page d'aide."
help-info: "%lang:helpCommand|/as info|% Avoir des informations par rapport aux régions."
help-rent: "%lang:helpCommand|/as rent|% Louez une région ou extendez votre location."
help-info: "%lang:helpCommand|/as info|% Obtenir les informations sur les régions actuelles."
help-rent: "%lang:helpCommand|/as rent|% Louer une région, ou prolonger la location actuelle."
help-buy: "%lang:helpCommand|/as buy|% Acheter une région."
help-unrent: "%lang:helpCommand|/as unrent|% Ne plus louer une région."
help-sell: "%lang:helpCommand|/as sell|% Vendre une région."
help-reload: "%lang:helpCommand|/as reload|% Reloader tout les fichiers et régions."
help-setrestore: "%lang:helpCommand|/as setrestore|% Active/Désactive la restauration et choix du profil."
help-setprice: "%lang:helpCommand|/as setprice|% Changer le prix d'une région."
help-setduration: "%lang:helpCommand|/as setduration|% Changer la duration d'une location."
help-setduration: "%lang:helpCommand|/as setduration|% Changer le temps de location d'une région."
help-teleport: "%lang:helpCommand|/as tp|% Se téléporter à une région vendue/louée."
help-setteleport: "%lang:helpCommand|/as settp|% Définir le point de téléportation d'une région."
help-find: "%lang:helpCommand|/as find|% Trouver une région à vendre/louer vide."
help-groupadd: "%lang:helpCommand|/as groupadd|% Ajouter une région à un groupe."
help-groupdel: "%lang:helpCommand|/as groupdel|% Supprimer une région d'un groupe."
help-grouplist: "%lang:helpCommand|/as grouplist|% Montrer tout les groupes."
help-groupinfo: "%lang:helpCommand|/as groupinfo|% Montrer des informations sur un groupe."
help-grouplist: "%lang:helpCommand|/as grouplist|% Afficher tout les groupes."
help-groupinfo: "%lang:helpCommand|/as groupinfo|% Afficher des informations sur un groupe."
help-schemevent: "%lang:helpCommand|/as schemevent|% Déclenche un événement schématique d'une région."
help-add: "%lang:helpCommand|/as add|% Inscrire une région à la vente ou à la location."
help-del: "%lang:helpCommand|/as del|% Supprimer toutes les régions enregistrées par AreaShop."
help-addsign: "%lang:helpCommand|/as addsign|% Ajouter un panneau d'une région existante."
help-add: "%lang:helpCommand|/as add|% Enregistrer une région à la vente ou à la location."
help-del: "%lang:helpCommand|/as del|% Supprimer une région enregistrée par AreaShop."
help-addsign: "%lang:helpCommand|/as addsign|% Ajouter un panneau à une région existante."
help-delsign: "%lang:helpCommand|/as delsign|% Supprimer le panneau que vous regardez."
help-me: "%lang:helpCommand|/as me|% Voir les régions que vous possédez (et le temps restant)."
help-setowner: "%lang:helpCommand|/as setowner|% Change le propriétaire d'une région ou allonge le temps de location."
@@ -103,7 +101,7 @@ rent-noPermission: "Vous n'avez pas la permission de louer une région."
rent-maximum: "Vous ne pouvez pas louer plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
rent-maximumExtend: "Vous ne pouvez pas allonger cette location car vous avez plus de %0% région(s) (Vous avez déjà %1% dans le groupe '%2%')."
rent-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard."
rent-rented: "Vous louez %lang:region% jusqu'à %until%, vous pouvez étendre la location en fesant un click droit sur le panneau ou avec la commande /as rent."
rent-rented: "Vous louez %lang:region% jusqu'à %until%, vous pouvez étendre la location en fesant un clic droit sur le panneau ou avec la commande /as rent."
rent-extended: "Vous avez prolongé votre location de %lang:region% jusqu'au %until%."
rent-extendedToMax: "Vous avez allongé votre location de %lang:region% jusqu'au %until% (qui est la durée maximum de location de %maxrenttime%)."
rent-lowMoneyExtend: "Vous n'avez pas assez d'argent pour allongé votre location (Vous avez %0% et vous avez besoin de %price%)."
@@ -117,7 +115,7 @@ rent-restrictedToRegion: "Vous devez être à l'intérieur de %lang:region% pou
rent-expireWarning: "Votre région %lang:region% n'a plus que %timeleft% de temps de location, soyez sûr d'allonger ce temps de location si vous voulez la conserver."
rent-alreadyAtFull: "%lang:region% a déjà atteint ou a dépassé le temps maximum de location, vous ne pouvez pas encore l'étendre la location."
buy-help: "/as buy [region], si vous ne spécifiez pas la région, la région ou vous trouvez sera utilisée."
buy-help: "/as buy [region], Si non spécifiée, cible la région dans laquelle vous vous trouvez."
buy-noPermission: "Vous n'avez pas la permission d'acheter une région."
buy-noPermissionResell: "Vous n'avez pas la permission d'acheter une région dans le mode revente."
buy-noPermissionNoResell: "Vous n'avez pas la permission d'acheter une région qui n'est pas dans le mode revente."
@@ -125,7 +123,7 @@ buy-notBuyable: "La région %lang:region% n'est pas disponible à l'achat."
buy-maximum: "Vous ne pouvez pas acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
buy-payError: "Une erreur durant le paiement s'est produite. Essayez de nouveau plus tard."
buy-succes: "Vous avez acheté la région %lang:region%."
buy-successResale: "Vous avez acheté la région %lang:region% qui appartenait à %lang:tPlayer|%0%|%."
buy-successResale: "Vous avez racheté la région %lang:region% qui appartenait à %lang:tPlayer|%0%|%."
buy-successSeller: "Votre région %lang:region% a été vendue à %lang:player% pour %0%."
buy-lowMoney: "Vous n'avez pas assez d'argent pour acheter %lang:region% (vous possédez %0% et devez payer %price%)."
buy-lowMoneyResell: "Vous n'avez pas assez d'argent pour acheter %lang:region% (vous possédez %0% et devez payer %resellprice%)."
@@ -178,23 +176,9 @@ info-nogroupNone: "Il n'y a pas de région sans groupe."
info-noFiltergroup: "Le groupe '%0%' n'existe pas ou ne peut donc pas être utilisé pour limiter les résultats."
info-noRegions: "Aucune région trouvée."
info-wrongPage: "%0% n'est pas un numéro de page correct."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: A louer pour %price% par %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: Loué à %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: A vendre pour %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: Vendu à %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: Vendu à %lang:player% (revente)."
info-pageStatus: "[gray]Page %0%/%1%"
info-pagePrevious:
- " [gray][bold]◄Précédent[/bold] "
- " hover: %lang:action|Afficher la page précédente|%"
- " command: %0%"
info-pageNoPrevious:
- " [darkgray][bold]◄Précédent[/bold] "
- " hover: C'est déjà la premier page"
info-pageNext:
- " [gray][bold]Suivant►[/bold]"
- " hover: %lang:action|Afficher la page suivante|%"
- " command: %0%"
info-pageNoNext:
- " [darkgray][bold]Suivaznt►[/bold]"
- " hover: C'est déjà la dernière page"
@@ -232,7 +216,7 @@ info-regionCanBeBought:
- " command: /areashop buy %region%"
- ": [gray]%price%."
info-regionReselPrice: "[darkgreen][bold]►[reset] Prix de revente : [gray]%resellprice% (vous pouvez l'acheter à %player%)."
info-regionFriends: "[darkgreen][bold]►[reset] Amis de la région: [gray]%0%."
info-regionFriends: "[darkgreen][bold]►[reset] Ami(s) ajouté(s) : [gray]%0%."
info-friend: "%lang:tPlayer|%0%|%"
info-friendRemove:
- "%lang:info-friend|%0%|%"
@@ -317,8 +301,8 @@ setup-noDuration: "A la troisième ligne, vous n'avez pas spécifié la durée d
setup-wrongDuration: "Le temps spécifié n'est pas au bon format. Exemple : 1 day."
setup-noPrice: "A la quatrième ligne, vous n'avez pas spécifié le prix."
setup-wrongPrice: "Le prix spécifié n'est pas correct, n'utilisez que des chiffres s'il vous plaît."
setup-rentSuccess: "La location de la région %lang:region% est parfaitement parametré."
setup-buySuccess: "La vente de la région %lang:region% est parfaitement parametré."
setup-rentSuccess: "La location de la région %lang:region% est correctement configurée."
setup-buySuccess: "La vente de la région %lang:region% est correctement configurée."
setup-noPermissionRent: "Vous n'avez pas la permission de définir des région louables."
setup-noPermissionBuy: "Vous n'avez pas la permission de définir des régions achetables."
setup-couldNotDetect: "Multiples régions trouvées avec la même priorité et/ou étant de même nature : parent ou enfant. Spécifiez-en une sur la deuxième ligne. (2 des régions trouvées: %lang:tRegion|%0%|% et %lang:tRegion|%1%|%)."
@@ -349,9 +333,9 @@ setteleport-help: "/as settp [region] [reset], Si non spécifiée, cible la rég
setteleport-noPermission: "Vous n'avez pas la permission de définir un point de téléportation."
setteleport-noPermissionOther: "Vous n'avez pas la permission de définir l'emplacement de téléportation d'une région que vous ne possédez pas."
setteleport-noRentOrBuy: "La région spécifiée n'est pas enregistrée : %0%."
setteleport-success: "Le point de téléportation de %lang:region% à été définis."
setteleport-success: "Le point de téléportation de %lang:region% a été défini."
setteleport-notInside: "Le lieu doit se trouver dans votre région."
setteleport-reset: "Le point de téléportation de %lang:region% à été réinitialisé."
setteleport-reset: "Le point de téléportation de %lang:region% a été réinitialisé."
find-help: "/as find <buy|rent> [prix maximum] [group]"
find-noPermission: "Vous n'avez pas la permission de rechercher des régions et de vous y téléporter."
@@ -379,7 +363,7 @@ groupdel-weFailed: "Nous ne sommes de toute façon pas dans le groupe %0% : [gr
grouplist-noPermission: "Vous n'avez pas l'autorisation d'afficher les groupes enregistrés."
grouplist-noGroups: "Il n'y a actuellement aucun groupe enregistré."
grouplist-success: "Les groupes suivant sont enregistrés: [gray]%0%."
grouplist-success: "Les groupes suivants sont enregistrés: [gray]%0%."
groupinfo-help: "/as groupinfo <group>"
groupinfo-noPermission: "Vous n'avez pas la permission d'afficher des informations sur un groupe."
@@ -404,8 +388,8 @@ add-noPermissionRegions: "Pas de permission à ajouter: [gray]%0%."
add-noPermissionOwnerMember: "[gray]Soit vous n'êtes pas membre / propriétaire de cette région ou n'avez pas la permission d'ajouter vos régions."
del-noPermission: "Vous n'avez pas la permission de supprimer des régions."
del-success: "Regions supprimés: [gray]%0%."
del-failed: "Pas de permission pour supprimer ou #Je comprend pas la suite#"
del-success: "Régions supprimées: [gray]%0%."
del-failed: "Vous n'avez pas la permission, ou vous n’être pas enregistré: [gray]%0%."
addsign-help: "/as addsign [region] [profile]"
addsign-noSign: "Vous ne regardez pas de panneau."
@@ -431,11 +415,9 @@ delsign-success: "Le panneau à été retiré de la région %lang:region%."
me-noPermission: "Vous n'avez pas la permission de voir quelle(s) région(s) vous possédez."
me-header: "Régions de %lang:tPlayer|%0%|%:"
me-notAPlayer: "Vous n'êtes pas un joueur. Vous ne pouvez donc pas avoir de régions."
me-rentLine: "[darkgreen][bold]►[reset] %lang:region% [gray](pendant %until%, %timeleft% restant)."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-friendLine: "[darkgreen][bold]►[reset] %lang:region% [gray](ajouté comme ami, propriétaire: %lang:player%)."
me-nothing: "%lang:tPlayer|%0%|% n'a pas loué ou acheté de régions et n'a pas été ajouté comme ami dans l'un entre eux."
me-noPlayer: "%0% non trouvé, il ne c'est peut être jamais connecté sur le serveur."
me-noPlayer: "%0% n'a pas été trouvé, il ne s'est peut être jamais connecté sur le serveur."
setowner-help: "/as setowner <joueur> [region], la région dans laquelle vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
setowner-noPermission: "Vous n'avez pas la permission de définir le propriétaire d'une région."
@@ -458,7 +440,7 @@ resell-noPermissionOther: "Vous n'avez pas la permission de mettre des régions
stopresell-help: "/as stropresell [région], la région où vous vous trouvez sera utilisée si vous ne spécifiez pas de région."
stopresell-notRegistered: "La région spécifiée n'est pas enregistrée : %0%."
stopresell-notResell: "Vous ne pouvez pas stopper la revente %lang:region% car elle n'est pas en mode revente."
stopresell-success: "%lang:region% est retourné en mode vente"
stopresell-success: "%lang:region% n'est plus en revente."
stopresell-noPermission: "Vous n'avez pas la permission de retirer votre région de la vente."
stopresell-noPermissionOther: "Vous n'avez pas la permission de retirer les régions de la vente."
@@ -477,7 +459,6 @@ delfriend-noPermissionOther: "Vous n'avez pas la permission de supprimer des ami
delfriend-noPermission: "Vous n'avez pas la permission de supprimer des amis de votre région."
delfriend-successOther: "%lang:tPlayer|%0%|% a été supprimé comme ami de la région %lang:region%."
delfriend-success: "%lang:tPlayer|%0%|% a été supprimé comme ami de votre région %lang:region%."
delfriend-notAdded: "%lang:tPlayer|%0%|% n'est pas dans les amis de %lang:region%."
delfriend-noOwner: "Vous ne pouvez pas supprimer les amis d'une région sans propriétaire."
linksigns-multipleRegions: "Plusieurs régions trouvées : [gray]%0%."
+21 -12
View File
@@ -1,6 +1,6 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: Dutch, Version: V2.3.1, Percentage translated: 100% ║
# ║ Language: Dutch, Version: V2.3.2, Percentage translated: 100% ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
@@ -8,7 +8,7 @@
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
action: "[blue][bold]<%0%>[/bold]"
action: "[gold][bold]<%0%>[/bold]"
button: "[bold]<%0%>[/bold]"
@@ -178,21 +178,21 @@ info-nogroupNone: "Er zijn geen gebieden zonder groep."
info-noFiltergroup: "Groep '%0%' bestaat niet en kan daardoor niet gebruikt worden om de resultaten te limiteren."
info-noRegions: "Er zijn geen gebieden gevonden."
info-wrongPage: "%0% is geen correct pagina nummer."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: Te huur voor %price% per %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: Verhuurd aan %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: Te koop voor %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: Verkocht aan %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: Verkocht aan %lang:player% (aan het doorverkopen)."
info-pageStatus: "[gray]Pagina %0%/%1%"
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: [gray]Te huur voor %price% per %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: [gray]Verhuurd aan %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: [gray]Te koop voor %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: [gray]Verkocht aan %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: [gray]Verkocht aan %lang:player% (aan het doorverkopen)."
info-pageStatus: "[gold]Pagina %0%/%1%"
info-pagePrevious:
- " [gray][bold]◄Vorige[/bold] "
- " [gold][bold]◄Vorige[/bold] "
- " hover: %lang:action|Laat de vorige pagina zien|%"
- " command: %0%"
info-pageNoPrevious:
- " [darkgray][bold]◄Vorige[/bold] "
- " hover: Dit is al de eerste pagina"
info-pageNext:
- " [gray][bold]Volgende►[/bold]"
- " [gold][bold]Volgende►[/bold]"
- " hover: %lang:action|Laat de volgende pagina zien|%"
- " command: %0%"
info-pageNoNext:
@@ -431,11 +431,20 @@ delsign-success: "Het bord is verwijderd van gebied %lang:region%."
me-noPermission: "Je hebt geen toestemming om te zien welke gebieden je hebt."
me-header: "Gebieden van %lang:tPlayer|%0%|%:"
me-notAPlayer: "Je bent geen speler dus je kunt geen gebieden hebben."
me-rentLine: "[darkgreen][bold]►[reset] %lang:region% [gray](tot %until%, %timeleft% over)."
me-rentLine:
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
- "%timeleft% over"
- " hover: tot %until%"
- ")."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-friendLine: "[darkgreen][bold]►[reset] %lang:region% [gray](toegevoegd als vriend, eigenaar: %lang:player%)."
me-friendLine:
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
- "%lang:player% is eigenaar"
- " hover: Je bent toegevoegd als vriend"
- ")."
me-nothing: "%lang:tPlayer|%0%|% heeft geen gebieden gekocht of gehuurd en is niet als vriend toegevoegd bij gebieden."
me-noPlayer: "%0% kan niet gevonden worden, is waarschijnlijk nooit op de server geweest."
me-clickHint: "[gray][italic]Klik op een naam van een gebied voor details."
setowner-help: "/as setowner <speler> [gebied], het gebied waar je in staat zal worden gebruikt als je deze niet aangeeft."
setowner-noPermission: "Je hebt geen toestemming om de eigenaar van een gebied in te stellen."
+1 -20
View File
@@ -1,6 +1,6 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: Norwegian, Version: V2.3.1, Percentage translated: 100% ║
# ║ Language: Norwegian, Version: V2.3.2, Percentage translated: 96% ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
@@ -8,8 +8,6 @@
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
action: "[blue][bold]<%0%>[/bold]"
button: "[bold]<%0%>[/bold]"
command:
@@ -178,23 +176,9 @@ info-nogroupNone: "Det er ingen regioner uten en gruppe."
info-noFiltergroup: "Gruppe '%0%' eksiterer ikke og kan derfor ikke bli brukt til å begrense resultatene."
info-noRegions: "Ingen regioner har blitt funnet."
info-wrongPage: "%0% er ikke et riktig side nummer."
info-entryForrent: "[darkgreen][bold]►[reset] %lang:region%: Til leie for %price% per %duration%."
info-entryRented: "[darkgreen][bold]►[reset] %lang:region%: Utleid til %lang:player%."
info-entryForsale: "[darkgreen][bold]►[reset] %lang:region%: Til salgs for %price%."
info-entrySold: "[darkgreen][bold]►[reset] %lang:region%: Solgt til %lang:player%."
info-entryReselling: "[darkgreen][bold]►[reset] %lang:region%: Solgt til %lang:player% (videresalg)."
info-pageStatus: "[gray]Side %0%/%1%"
info-pagePrevious:
- " [gray][bold]◄Forrige[/bold] "
- " hover: %lang:action|Vis forrige side|%"
- " kommando: %0%"
info-pageNoPrevious:
- " [darkgray][bold]◄Forrige[/bold] "
- " hover: Dette er første side"
info-pageNext:
- " [gray][bold]Neste►[/bold]"
- " hover: %lang:action|Vis neste side|%"
- " kommando: %0%"
info-pageNoNext:
- " [darkgray][bold]Neste►[/bold]"
- " hover: Dette er siste side"
@@ -431,9 +415,7 @@ delsign-success: "Skiltet har blitt fjernet fra region %land:region%."
me-noPermission: "Du har ikke rettigheter til å sjekke hvilken regioner du har."
me-header: "Regioner til %lang:tPlayer|%0%|%:"
me-notAPlayer: "Du er ikke en spiller så du kan ikke ha noen regioner."
me-rentLine: "[darkgreen][bold]►[reset] %lang:region% [gray](frem til %until%, %timeleft% igjen)."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-friendLine: "[darkgreen][bold]►[reset] %lang:region% [gray](lagt til som venn, eier: %lang:player%)."
me-nothing: "%lang:tPlayer|%0%|% har ikke leid eller kjøpt regioner og er ikke lagt til som venn på noen."
me-noPlayer: "%0% kan ikke bli funnet, mest sannsynlig aldri vært på serveren."
@@ -477,7 +459,6 @@ delfriend-noPermissionOther: "Du har ikke rettigheter til å fjerne venner fra r
delfriend-noPermission: "Du har ikke rettigheter til å fjerne venner fra din region."
delfriend-successOther: "%lang:tPlayer|%0%|% har blitt fjernet som venn fra region %lang:region%."
delfriend-success: "%lang:tPlayer|%0%|% har blitt fjernet som venn fra din region %lang:region%."
delfriend-notAdded: "%lang:tPlayer|%0%|% er ikke lagt til som venn i %lang:region."
delfriend-noOwner: "Du kan ikke fjerne venner fra en region uten eier."
linksigns-multipleRegions: "Fant flere regioner: [gray]%0%."
+499
View File
@@ -0,0 +1,499 @@
# ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop ║
# ║ Language: Russian, Version: V2.3.2, Percentage translated: 86% ║
# ║ This file will be overwritten at each startup/reload of the plugin, if you want to change anything then do the following: ║
# ║ 1: Make a copy of this file ║
# ║ 2: Rename it to <servername>.yml (don't use a language code as filename, could otherwise be overwritten in future updates) ║
# ║ 3: Change the 'language' setting in config.yml to '<servername>', do not include '.yml' ║
# ║ 4: Change the strings in the new file to your liking and save the file ║
# ║ 5: Use '/as reload' or reload/restart your server to see the changes ║
# ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
button: "[bold]<%0%>[/bold]"
command:
- "[bold]%0%[/bold]"
- " hover: %lang:action|Используй %1%|%"
- " command: %1%"
helpCommand:
- "[gold]%0% [gray]-[reset]"
- " hover: %lang:action|Используй %0%|%"
- " command: %0%"
region: "%lang:tRegion|%region%|%"
tRegion:
- "[bold]%0%[/bold]"
- " hover: Регион %0%"
- " hover: %lang:action|Информация о регионе|%"
- " command: /areashop info region %0%"
player: "%lang:tPlayer|%player%|%"
tPlayer:
- "[bold]%0%[/bold]"
- " hover: Игрок %0%"
- " hover: %lang:action|Регионы %0%|%"
- " command: /areashop info player %0%"
landlord:
- "[bold]%landlord%[/bold]"
- " hover: Владелец %landlord%"
- " hover: %lang:action|Регионы %landlord%|%"
- " command: /areashop info player %landlord%"
total-maximum: "Вы не можете арендовать или купить больше, чем %0% регион(ов) (у вас уже имеется %1% в группе '%2%')."
general-notReady: "Плагин AreaShop еще не полностью загружен. Пожалуйста, подождите..."
general-noWorld: "Вы не можете сделать это, мир для %lang:region% не доступен (мир '%world%')."
general-noRegion: "Вы не можете сделать это, WorldGuard регион не доступен (регион %lang:region%)."
general-noEconomy: "На сервере нету плагина Экономии, либо он установлен некорректно. Оповестите администратора сервера об этом."
general-cancelled: "%0%"
cmd-notValid: "Ошибка в команде, используй '/as help' для получения дополнительной информации."
cmd-onlyByPlayer: "Эта команда может быть применена только игроком. "
cmd-weOnlyByPlayer: "Использование выделения доступно только для игроков, укажите название региона в качестве дополнительного аргумента."
cmd-noSelection: "Вы не выделили регион."
cmd-noRegionsFound: "В выбранной области не найдено регионов, зарегистрированных в AreaShop."
cmd-noWERegionsFound: "Внутри вашего выделения не обнаружено регионов."
cmd-notRegistered: "Указаный регион не используется в AreaShop: %0%."
cmd-noRegionsAtLocation: "В вашем местоположении не найдено регионов, укажите регион в качестве аргумента."
cmd-moreRegionsAtLocation: "В вашем местоположении найдено несколько регионов, укажите название региона для уточнения."
cmd-automaticRegionOnlyByPlayer: "Автоматическое определение региона доступно только для игроков, укажите регион в качестве аргумента."
help-header: "Страница помощи. Команды которые Вам доступны."
help-noPermission: "У вас нет разрешения для просмотра страницы помощи."
help-alias: "Альтернативные команды: /areashop, /as."
help-help: "%lang:helpCommand|/as help|% Показать эту страницу помощи."
help-info: "%lang:helpCommand|/as info|% Получить информацию о текущих регионах."
help-rent: "%lang:helpCommand|/as rent|% Арендовать регион или расширить свою текущую аренду."
help-buy: "%lang:helpCommand|/as buy|% Купить регион."
help-unrent: "%lang:helpCommand|/as unrent|% Отказаться от аренды региона."
help-sell: "%lang:helpCommand|/as sell|% Продать регион."
help-reload: "%lang:helpCommand|/as reload|% Перезагрузить все файлы и обновить регионы."
help-setrestore: "%lang:helpCommand|/as setrestore|% Включить/выключить восстановление и выбрать профиль."
help-setprice: "%lang:helpCommand|/as setprice|% Изменить стоимость региона."
help-setduration: "%lang:helpCommand|/as setduration|% Изменить длительность аренды."
help-teleport: "%lang:helpCommand|/as tp|% Телепортироваться к вашему купленному/арендованному региону."
help-setteleport: "%lang:helpCommand|/as settp|% Установить точку телепортации для региона."
help-find: "%lang:helpCommand|/as find|% Найти свободный регион для покупки или аренды."
help-groupadd: "%lang:helpCommand|/as groupadd|% Добавить регион в группу."
help-groupdel: "%lang:helpCommand|/as groupdel|% Удалить регион из группы."
help-grouplist: "%lang:helpCommand|/as grouplist|% Показать все доступные группы."
help-groupinfo: "%lang:helpCommand|/as groupinfo|% Показать информацию о группе."
help-schemevent: "%lang:helpCommand|/as schemevent|% Вызвать схематическое событие для региона."
help-add: "%lang:helpCommand|/as add|% Зарегистрировать регион для аренды или покупки."
help-del: "%lang:helpCommand|/as del|% Удалить зарегистрированный регион из AreaShop."
help-addsign: "%lang:helpCommand|/as addsign|% Добавить табличку для региона."
help-delsign: "%lang:helpCommand|/as delsign|% Удалить табличку на которую вы смотрите."
help-me: "%lang:helpCommand|/as me|% Проверить список своих регионов(+истечение аренды)"
help-setowner: "%lang:helpCommand|/as setowner|% Установить владельца региона или расширить аренду."
help-resell: "%lang:helpCommand|/as resell|% Установить один из Ваших регионов в режим перепродажи."
help-stopResell: "%lang:helpCommand|/as stopresell|% Установить Ваш регион обратно в режим продано."
help-addFriend: "%lang:helpCommand|/as addfriend|% Добавить друга в ваш регион."
help-delFriend: "%lang:helpCommand|/as delfriend|% Удалить друга из вашего региона."
help-linksigns: "%lang:helpCommand|/as linksigns|% Используй, чтобы включить режим привязки табличек."
help-stack: "%lang:helpCommand|/as stack|% Создание нескольких регионов и добавлением их."
help-setlandlord: "%lang:helpCommand|/as setlandlord|% Установить землевладельца в регион."
rent-help: "/as rent [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
rent-noPermission: "У вас не прав для аренды данного региона."
rent-maximum: "Вы не можете арендовать более %0% региона(ов) (у вас уже есть %1% в группе '%2%')."
rent-maximumExtend: "Вы не можете продлить эту аренду, потому что у вас есть более чем %0% регион(ов) (у вас имеется %1% в группе '%2%')."
rent-payError: "Что-то пошло не так с оплатой, повторите попытку позже."
rent-rented: "Вы арендовали %lang:region% до %until%, вы можете увеличить срок аренды еще раз нажав на табличку или использовать команду /as rent."
rent-extended: "Вы продлили свою аренду %lang:region% до %until%."
rent-extendedToMax: "Вы не можете арендовать регион %lang:region% до %until% (максимальное время аренды %maxrenttime%)."
rent-lowMoneyExtend: "У вас не достаточно денег для продления аренды (у вас %0%, а необходимо %price%)."
rent-lowMoneyRent: "У вас не хватает денег для аренды %lang:region% (у вас %0%, а необходимо %price%)."
rent-someoneElse: "Кто-то уже арендует регион %lang:region%."
rent-notRentable: "Этот регион не доступен для аренды."
rent-maxExtends: "Вы не можете продлить аренду на столько (максимум %maxextends%), однако после того как закончится срок аренды вы можете арендовать %lang:region% снова."
rent-maxRentTime: "Вы не можете арендовать %lang:region% на такой период, максимальное время аренды %maxrenttime%, вы пытаетесь арендовать на %timeleft%."
rent-restrictedToWorld: "Вы должны быть в мире '%world%', чтобы арендовать %lang:region% (вы находитесь в '%0%')."
rent-restrictedToRegion: "Вы должны находиться внутри %lang:region% для его аренды."
rent-expireWarning: "В вашем регионе %lang:region% закончится арендный срок %timeleft%, вы должны продлить аренду для его сохранения."
rent-alreadyAtFull: "%lang:region% уже на уровне или выше максимального времени аренды, вы не можете продлить его еще.."
buy-help: "/as buy [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
buy-noPermission: "У Вас нет прав для покупки региона."
buy-noPermissionResell: "У Вас нет прав для покупки региона в режиме перепродажи."
buy-noPermissionNoResell: "У Вас нет прав для покупки региона, который не находится в режиме перепродажи."
buy-notBuyable: "Регион %lang:region% не доступен для покупки."
buy-maximum: "Вы не можете купить более %0% региона(ов) (у Вас уже имеется %1% в группе '%2%')"
buy-payError: "Что-то пошло не так с оплатой, повторите попытку позже."
buy-succes: "Вы успешно купили %lang:region%."
buy-successResale: "Вы успешно купили %lang:region% в %lang:tPlayer|%0%|%."
buy-successSeller: "Ваш регион %lang:region% был продан %lang:player% за %0%."
buy-lowMoney: "У вас недостаточно денег чтобы купить %lang:region% (у вас %0%, а необходимо %price%)."
buy-lowMoneyResell: "У вас недостаточно денег чтобы купить %lang:region% (у вас %0%, а необходимо %resellprice%)."
buy-yours: "Вы уже владелец %lang:region%."
buy-someoneElse: "Кто-то уже купил %lang:region%."
buy-restrictedToWorld: "Вы должны быть в мире '%world%', чтобы купить %lang:region% (вы находитесь в '%0%')."
buy-restrictedToRegion: "Вы должны находиться внутри %lang:region% для его покупки."
unrent-help: "/as unrent [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
unrent-noPermission: "У вас нет разрешения на снятие аренды в регионе."
unrent-noPermissionOther: "У вас нет разрешения на снятие аренды в другом регионе."
unrent-notRegistered: "В регионе недоступно снятие аренды, потому что он не зарегистрирован для сдачи в аренду."
unrent-notRented: "В регионе нельзя снять аренду, потому что он не арендован."
unrent-unrented: "%lang:region% теперь не арендует %lang:player%."
unrent-expired: "Ваша аренда %lang:region% уже истекла."
sell-help: "/as sell [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
sell-notRegistered: "Этот регион не может быть продан, так как он не зарегистрирован на продажу."
sell-notBought: "Этот регион не может продан, так как не находится в чьей-либо собственности."
sell-sold: "%lang:region% был продан %lang:player%."
sell-noPermission: "У Вас нет прав для продажи региона."
sell-noPermissionOther: "У Вас нет прав для продажи другого региона."
reload-reloading: "Все файлы перезагружены, проверка аренд и обновление регионов."
reload-updateStart: "[gray]Обновление %0% регионов за %1% секунд."
reload-updateComplete: "[gray]Обновление регионов завершено."
reload-noPermission: "Недостаточно полномочий для того, чтобы перезагрузить конфиги плагина."
reload-updateCommandChanged: "'/as updaterents' и '/as updatebuys' были удалены, '/as reload' теперь будет также обновлять регионы, используйте эту команду взамен."
info-help:
- "/as info[break]"
- " %lang:command|all|/as info all|%[break]"
- " %lang:command|rented|/as info rented|% [group] [page][break]"
- " %lang:command|forrent|/as info forrent|% [group] [page][break]"
- " %lang:command|sold|/as info sold|% [group] [page][break]"
- " %lang:command|forsale|/as info forsale|% [group] [page][break]"
- " %lang:command|reselling|/as info reselling|% [group] [page][break]"
- " %lang:command|nogroup|/as info nogroup [page]|%"
- " %lang:command|region|/as info region|% [region][break]"
info-noPermission: "У Вас нет прав для получения информации о регионах."
info-allHeader: "Все регионы%0%:"
info-rentedHeader: "Арендовано регионов%0%:"
info-forrentHeader: "Регионы для аренды%0%:"
info-forsaleHeader: "Регионы для продажи%0%:"
info-soldHeader: "Продано регионов%0%:"
info-resellingHeader: "Перепродано регионов%0%:"
info-nogroupHeader: "Регионы без групп%0%:"
info-limitedToGroup: "(ограничение в группе %0%)"
info-nogroupNone: "Здесь нет регионов без групп."
info-noFiltergroup: "Группа '%0%' не существует, потому не может быть использована для ограничения результатов."
info-noRegions: "Нет найденых регионов."
info-wrongPage: "%0% неверный номер страницы."
info-pageNoPrevious:
- " [darkgray][bold]◄Предыдущая[/bold] "
- " hover: Это первая страница"
info-pageNoNext:
- " [darkgray][bold]Следующая►[/bold]"
- " hover: Это последняя страница"
info-playerHelp: "/as info player <имяигрока>."
info-playerRents: "Регионы арендованные %lang:tPlayer|%0%|%: [gray]%1%"
info-playerNoRents: "%lang:tPlayer|%0%|% не арендовал регион."
info-playerBuys: "Регионы купленые %lang:tPlayer|%0%|%: [gray]%1%."
info-playerNoBuys: "%lang:tPlayer|%0%|% не покупал регион."
info-regionHelp: "/as info region [имярегиона], если не указано имя, будет выбран регион в котором вы стоите."
info-regionHeaderRent: "[darkgreen]Информация о %lang:region%:"
info-regionHeaderBuy: "[darkgreen]Информация о %lang:region%:"
info-regionRented: "[darkgreen][bold]►[reset] Арендован игроком %lang:player% до: [gray]%until%."
info-regionBought: "[darkgreen][bold]►[reset] Куплено %lang:player%."
info-regionReselling: "[darkgreen][bold]►[reset] Купленный %lang:player%, сейчас продаётся."
info-regionExtending:
- "[darkgreen][bold]►[reset] "
- "[bold]Продление для[/bold]"
- " hover: Продлить аренду %region%"
- " hover: длительностью %duration% за %price%"
- " hover: %lang:action|Продлить аренду %region%|%"
- " command: /areashop rent %region%"
- ": [gray]%price% на %duration%."
info-regionCanBeRented:
- "[darkgreen][bold]►[reset] "
- "[bold]Аренда для[/bold]"
- " hover: Арендовать %region% за %price% на %duration%"
- " hover: %lang:action|Аренда %region%|%"
- " command: /areashop rent %region%"
- ": [gray]%price% на %duration%."
info-regionCanBeBought:
- "[darkgreen][bold]►[reset] "
- "[bold]Купить для[/bold]"
- " hover: Купить %region% за %price%"
- " hover: %lang:action|Купить %region%|%"
- " command: /areashop buy %region%"
- ": [gray]%price%."
info-regionReselPrice: "[darkgreen][bold]►[reset] Стоимость перепродажи: [gray]%resellprice% (вы можете купить его у %lang:player%)."
info-regionFriends: "[darkgreen][bold]►[reset] Добавленные друзья: [gray]%0%."
info-friend: "%lang:tPlayer|%0%|%"
info-friendRemove:
- "%lang:info-friend|%0%|%"
- "[red]✕[gray]"
- " hover: Регион %region%"
- " hover: %lang:action|Удалить %0% из друзей|%"
- " command: /areashop delfriend %0% %region%"
info-regionMoneyBackBuy: "[darkgreen][bold]►[reset] Окупаемость продажи: [gray]%moneyback% (%moneybackpercent%% от стоимости)."
info-regionMoneyBackBuyClick:
- "[darkgreen][bold]►[reset] "
- "[bold]Окупаемость продажи[/bold]"
- " hover: Продать %region% и получить обратно %moneyback%"
- " hover: %lang:action|Продать %region%|%"
- " command: /areashop sell %region%"
- ": [gray]%moneyback% (%moneybackpercent%% от стоимости)."
info-regionMoneyBackRent: "[darkgreen][bold]►[reset] Окупаемость снятия аренды: [gray]%moneyback% (%moneybackpercent%% от оставшиеся времени)."
info-regionMoneyBackRentClick:
- "[darkgreen][bold]►[reset] "
- "[bold]Окупаемость снятия аренды[/bold]"
- " hover: Снять аренду %region% и вернуть деньги %moneyback%"
- " hover: %lang:action|Снять аренду %region%|%"
- " command: /areashop unrent %region%"
- ": [gray]%moneyback% (%moneybackpercent%% от оставшиеся времени)."
info-regionMaxExtends: "[darkgreen][bold]►[reset] Максимальное количество продления: [gray]%maxextends% раз(а)."
info-regionNoExtending: "[darkgreen][bold]►[reset] Аренду нельзя продлить."
info-regionExtendsLeft: "[darkgreen][bold]►[reset] Продленный осталось: [gray]%extendsleft% времени(раз) из %maxextends%."
info-regionMaxRentTime: "[darkgreen][bold]►[reset] пред заказ аренды: [gray]%maxrenttime% максимальный."
info-prefix: "[darkgreen][bold]►[reset] "
info-regionTeleport:
- "[bold]Переместится к региону[/bold]"
- " hover: %lang:action|Телепортация на %region%|%"
- " command: /areashop tp %region%"
info-setRegionTeleport:
- "[bold]установка места телепортации[/bold]"
- " hover: %region%"
- " hover: %lang:action|Set teleport location|%"
- " command: /areashop settp %region%"
info-regionSigns: "[darkgreen][bold]►[reset] Подключенные таблички: [gray]%0%."
info-regionSignLocation: "[gray](%0%, %1%, %2%, %3%)[reset]"
info-regionGroups: "[darkgreen][bold]►[reset] Назначенные группы: [gray]%0%."
info-regionInactiveUnrent: "[darkgreen][bold]►[reset] Авто снятие аренды после: [gray]%inactivetime% бездействия игрока."
info-regionInactiveSell: "[darkgreen][bold]►[reset] Авто продажа после: [gray]%inactivetime% бездействия игрока."
info-regionRestrictedRegionRent: "[darkgreen][bold]►[reset] Ты должен быть внутри %lang:region% для его аренды."
info-regionRestrictedWorldRent: "[darkgreen][bold]►[reset] Ты должен быть в мире '%world%' для аренды %lang:region%."
info-regionRestrictedRegionBuy: "[darkgreen][bold]►[reset] Ты должен быть внутри %lang:region% для его покупки."
info-regionRestrictedWorldBuy: "[darkgreen][bold]►[reset] Ты должен быть в мире '%world%' для покупки %lang:region%."
info-regionRestoringRent: "[darkgreen][bold]►[reset] Восстановление включено [gray](регион будет сброшен после снятия аренды)%0%."
info-regionRestoringBuy: "[darkgreen][bold]►[reset] Восстановление включено [gray](регион будет сброшен после продажи)%0%."
info-regionRestoringProfile: " (профиль: %0%)"
info-regionLandlord: "[darkgreen][bold]►[reset] Землевладелец: [gray]%lang:landlord% (Получит деньги)."
info-regionNotExisting: "Указанный регион не зарегистрирован: %0%."
setrestore-help: "/as setrestore <регион> <true|false|general> [профиль]."
setrestore-noPermission: "У вас нет разрешения на изменение параметров восстановления."
setrestore-notRegistered: "Указанный регион не зарегистрирован: %0%."
setrestore-invalidSetting: "'%0%' не является допустимым значением, должно быть true, false или general."
setrestore-success: "Успешно установлен параметр восстановления %lang:region% до '%0%'."
setrestore-successProfile: "Успешно установлен параметр восстановления %lang:region% до '%0%' и профиль до '%1%'."
setprice-noPermission: "У вас нет разрешения на изменение стоимости региона"
setprice-help: "/as setprice <price> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
setprice-notRegistered: "Указанный регион не зарегистрирован: %0%."
setprice-wrongPrice: "'%0%' не допустимая цена."
setduration-noPermission: "У вас нет разрешения на изменение длительности аренды."
setduration-help: "/as setduration <amount> <identifier> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
setduration-notRegistered: "%0% не зарегистрирован для сдачи в аренду."
teleport-help: "/as tp <region> [табличка]."
teleport-success: "Вы телепортированы к %lang:region%."
teleport-successSign: "Вы телепортированы к табличке возле %lang:region%."
teleport-blocked: "Вы не можете телепортироваться, потому что положение находится за пределами региона, и вы вынуждены телепортироваться во внутрь."
teleport-changedToSign: "У вас есть только разрешение на телепортироваться к табличке, а не во внутрь региона, телепортация к табличке."
teleport-changedToNoSign: "Ни одна табличка не доступна что бы телепортироваться, попытка телепортироваться во внутрь региона вместо этого."
setteleport-help: "/as settp [регион] [сброс], если не указать параметры, будет выбран регион в котором вы находитесь."
setteleport-noPermission: "У вас нет прав, чтобы установить точку телепорта."
setteleport-noPermissionOther: "У вас нет прав, чтобы установить точку телепорта для региона, который вам не принадлежит."
setteleport-noRentOrBuy: "Указанный регион не зарегистрирован: %0%."
setteleport-success: "Точка телепорта для %lang:region% установлена."
setteleport-notInside: "Точка должно быть внутри региона."
setteleport-reset: "Точка телепорта для %lang:region% была сброшена."
find-help: "/as find <buy|rent> [стоимость] [группа]."
find-noPermission: "У вас нет разрешения на поиск регионов и телепортироваться к ним."
find-successMax: "Найдено %0% регионов: %lang:region%, при поиске с максимальной ценой %1%%2%."
find-wrongMaxPrice: "Указанная максимальная цена имеет не правильный номер: %0%."
find-wrongGroup: "Указанная группа не существует: %0%."
find-onlyInGroup: ", искать регионы только в группах: %0%."
groupadd-help: "/as groupadd <group> [имярегиона], если не указать имя, будут выбраны все регионы в вашем WorldEdit выделении."
groupadd-noPermission: "У вас нет разрешения на добавление регионов к группам."
groupadd-success: "Регион %lang:region% был добавлен к группе '%0%', эта группа теперь имеет %1% участника(-ов)."
groupadd-failed: "Регион %lang:region% уже является участником группы '%0%'."
groupadd-weSuccess: "Добавлен к группе %0%: [gray]%1%."
groupadd-weFailed: "Уже были в группе %0%: [gray]%1%."
groupdel-help: "/as groupdel <group> [имярегиона], если не указать имя, будут выбраны все регионы в вашем WorldEdit выделении."
groupdel-noPermission: "У вас нет разрешения на удаление регионов из групп."
groupdel-success: "Регион %lang:region% был удален из группы '%0%', эта группа теперь имеет %1% участника(-ов)."
groupdel-failed: "Регион %lang:region% не является участником группы '%0%'."
groupdel-weSuccess: "Удален из группы %0%: [gray]%1%."
groupdel-weFailed: "Не были в группе %0% во всяком случае: [gray]%1%."
grouplist-noPermission: "У вас нет разрешения на отображение зарегистрированных групп."
grouplist-noGroups: "Нет доступных зарегистрированных груп."
grouplist-success: "Следующие группы были зарегистрированные: [gray]%0%."
groupinfo-help: "/as groupinfo <группа>."
groupinfo-noPermission: "У вас нет разрешения на отображение информации о группе."
groupinfo-noGroup: "Нет доступной зарегистрированной группы с именем '%0%', используй /as grouplist для вывода списка групп."
groupinfo-members: "Следующие регионы являются членами группы %0%: [gray]%1%."
groupinfo-noMembers: "Группа %0% не имеет участников."
schemevent-help: "/as schemevent <регион> <created|deleted|rented|unrented|bought|sold>."
schemevent-wrongEvent: "Событие '%0%' не существует, используйте одно из следующих действий: [gray]%1%."
schemevent-success: "Событие '%0%' успешно сработало для региона %lang:region%."
schemevent-noPermission: "У вас нет разрешения на иницииацию схематических событий"
add-help: "/as add <rent|buy> [rрегион] [мир]."
add-noPermission: "У вас нет разрешения добавлять регионы в AreaShop."
add-success: "AДобавлен к %0%: [gray]%1%."
add-failed: "Уже зарегистрирован: [gray]%0%."
add-blacklisted: "Включен в черный список : [gray]%0%."
add-specifyWorld: "Укажите мир региона при использовании из консоли."
add-incorrectWorld: "Мир '%0%' не найден, попробуйте еще раз (с учетом регистра)."
add-noRegion: "WorldGuard регион '%0%' не существует в этом мире."
add-noPermissionRegions: "Нет разрешения, чтобы добавить: [gray]%0%."
add-noPermissionOwnerMember: "[gray]Вы либо не являетесь участником/владельцем этих регионов, либо не имеете разрешения добавлять свои регионы."
del-noPermission: "У вас нет разрешения на удаление регионов."
del-success: "Удалены регионы: [gray]%0%."
del-failed: "Нет разрешения на удаление или не зарегистрирован: [gray]%0%."
addsign-help: "/as addsign [регион] [профиль]."
addsign-noSign: "Вы не смотрите на табличку."
addsign-noRegions: "Не найдено регионов вокруг таблички."
addsign-couldNotDetect: "Найдено несколько регионов вокруг таблички, укажите регион в качестве дополнительного аргумента (2 из регионов, которые были найдены: %lang:tRegion|%0%|% и %lang:tRegion|%1%|%)."
addsign-couldNotDetectSign: "Найдено несколько регионов вокруг таблички, укажите регион на второй строке (2 из регионов, которые были найдены: %lang:tRegion|%0%|% и %lang:tRegion|%1%|%)."
addsign-wrongProfile: "Указанный профиль не существует, используйте одно из следующих действий (проверьте конфиг.): [gray]%0%."
addsign-profile:
- "[bold]%0%[/bold]"
- " hover: Табличка профиль %0%"
- " hover: %lang:action|Используйте этот профиль|%"
- " command: /areashop linksigns %0%"
addsign-success: "Табличка была добавлена для %lang:region%."
addsign-successProfile: "Табличка была добавлена для %lang:region% вместе с профилем %0%."
addsign-alreadyRegistered: "Эта табличка уже зарегистрирована в регионе %lang:region%."
addsign-noPermission: "У вас нет разрешения на добавление таблички."
delsign-noSign: "Вы не смотрите на табличку."
delsign-noPermission: "У вас нет разрешения на удаление таблички."
delsign-noRegion: "Эта табличка не принадлежит к регионам в AreaShop."
delsign-success: "Табличка была удалена из региона %lang:region%."
me-noPermission: "У вас нет прав, чтобы проверить, какие регионы вы имеете."
me-header: "Регионы %lang:tPlayer|%0%|%:"
me-notAPlayer: "Вы не являетесь игроком, которому доступны какие-либо регионы."
me-buyLine: "[darkgreen][bold]►[reset] %lang:region%."
me-nothing: "%lang:tPlayer|%0%|% не арендовали или покупали регионы и не добавлялись в друзья."
me-noPlayer: "%0% не может быть найден, вероятно, никогда не присоединился к серверу."
setowner-help: "/as setowner <player> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
setowner-noPermission: "У вас нет прав, чтобы установить владельца региона."
setowner-noPermissionRent: "У вас нет прав, чтобы установить владельца для аренды регионов."
setowner-noPermissionBuy: "У вас нет прав, чтобы установить владельца для покупки регионов."
setowner-notRegistered: "Указанный регион не зарегистрирован, владелец не может быть установлен."
setowner-noPlayer: "Не удалось получить UUID указанного игрока: %0%."
setowner-succesBuy: "Владелец в %lang:region% успешно изменен на %lang:player%."
resell-help: "/as resell <price> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
resell-wrongPrice: "'%0%' не является допустимой ценой."
resell-notRegistered: "Указанный регион не зарегистрирован: %0%."
resell-notBought: "Вы не можете перепродать %lang:region%, так как он еще не продан."
resell-success: "%lang:region% был успешно выставлен в режим перепродажи за %resellprice%."
resell-noPermission: "У Вас нет прав что бы установить ваш регион в режим перепродажи."
resell-noPermissionOther: "У Вас нет прав что бы установить регион в режим перепродажи."
stopresell-help: "/as stopresell [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
stopresell-notRegistered: "Указанный регион не зарегистрирован: %0%."
stopresell-notResell: "Вы не можете остановить перепродажу %lang:region% потому что регион не в режиме перепродажи."
stopresell-success: "%lang:region% был успешно выставлен в режим продажи."
stopresell-noPermission: "У вас нет прав, чтобы установить свой регион обратно в режим продажи."
stopresell-noPermissionOther: "У вас нет разрешения устанавливать регионы обратно в режим продажи."
addfriend-help: "/as addfriend <player> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
addfriend-noPermissionOther: "У вас нет разрешения на добавление друзей в регионы, которые не являются вашими."
addfriend-noPermission: "У вас нет разрешения на добавление друзей в вашем регионе."
addfriend-successOther: "%lang:tPlayer|%0%|% был добавлен до друзей в %lang:region%."
addfriend-success: "%lang:tPlayer|%0%|% был добавлен до друзей в вашем регионе %lang:region%."
addfriend-alreadyAdded: "%lang:tPlayer|%0%|% уже добавлен до друзей в %lang:region%."
addfriend-self: "Добавление владельца региона как друга было бы бессмысленно."
addfriend-noOwner: "Вы не можете добавлять друзей в регионе без владельца."
addfriend-notVisited: "Вы не можете добавить %0% потому что он еще не посещал этот сервер."
delfriend-help: "/as delfriend <player> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
delfriend-noPermissionOther: "У вас нет разрешения на удаление друзей из регионов, которые не являются вашими."
delfriend-noPermission: "У вас нет разрешения на удаление друзей из вашего региона."
delfriend-successOther: "%lang:tPlayer|%0%|% был удален из друзей в регионе %lang:region%."
delfriend-success: "%lang:tPlayer|%0%|% был удален из друзей в вашем регионе %lang:region%."
delfriend-noOwner: "Вы не можете удалять друзей из региона без владельца."
linksigns-multipleRegions: "Найдено несколько регионов: [gray]%0%."
linksigns-multipleRegionsAdvice: "Нажмите в другое время, чтобы попробовать еще раз или использовать '/as linksigns' чтобы остановить."
linksigns-noRegions: "Не найдено регионов AreaShop в направлении взгляда, убедитесь что регион добавлен в AreaShop [gray](максимум расстояние в 100 блоков)."
linksigns-regionFound: "Регион %lang:region% был найден, теперь соедините с табличкой кликнув левой кнопкой миши ."
linksigns-signFound: "Найдена табличка в (%0%, %1%, %2%), теперь соедините с регионом кликнув правой кнопкой мыши ."
linksigns-noSign: "Никаких табличок обнаружено в направлении взгляда, убедитесь, что у вас есть прямой взгляд на табличку и нажмите снова [gray](максимум расстояние в 100 блоков)."
linksigns-alreadyRegistered: "Эта табличка уже зарегистрирована в регионе %lang:region%, кликни еще раз, чтобы выбрать другую табличку."
linksigns-first: "Включен режим привязки табличек."
linksigns-next: "[gray]Клик лкм. выбрать табличку, клик пкм. выбрать регион, использовать /as linksigns для отключения режима."
linksigns-noPermission: "У вас нет разрешения для пользования режима привязки табличек."
linksigns-stopped: "Отключен режим привязки табличек."
stack-help:
- "/as stack <amount> <gap> <name> <rent|buy> [group].[break]"
- " [gray]<amount> Количество создаваемых регионов.[break]"
- " [gray]<gap> Дистанция в блоках между регионами.[break]"
- " [gray]<name> Имя региона (с числом за ним).[break]"
- " [gray]<rent|buy> сделать аренду или продажу.[break]"
- " [gray][group] Добавляет регионы в группу.[break]"
- " [gray]Регионы будут созданы в направлении взгляда."
stack-accepted: "Началось создание %0% %1% регионов с растоянием в %2% блок(ов), имена которых начинаются с %3% и имеют номера за ними.%4%"
stack-addToGroup: "Созданные регионы будут добавлены к группе '%0%'."
stack-noPermission: "У вас нет разрешения создавать и добавлять регионы AreaShop в большом количестве."
stack-wrongAmount: "'%0%' не правильное количество регионов."
stack-wrongGap: "'%0%' не правильное число блоков для отступа между регионами."
stack-noSelection: "У вас нет выделения, которое указывает, где должен быть создан первый регион."
stack-addStart: "[gray]Добавлено %0% регионов около %1% в секунду."
stack-addComplete: "[gray]Добавление регионов прошло успешно."
stack-unclearDirection: "Посмотрите, пожалуйста, четко на север, восток, юг или запад, обнаружено %0%."
setlandlord-help: "/as setlandlord <player> [имярегиона], если не указано имя, будет выбран регион в котором вы находитесь."
setlandlord-noPermission: "У вас не разрешения чтобы назначить землевладельца в регион."
setlandlord-success: "%lang:landlord% был успешно установлен как землевладелец в %lang:region%."
message-help: "/as message <игрок> <сообщение...>"
message-noPermission: "У вас нет разрешения на отправку AreaShop сообщений."
message-notOnline: "%0% не в сети."
confirm-rent:
- "%lang:prefix%Вы уверены, что вы хотите арендовать %lang:tRegion|%0%|%?[break]"
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы арендовать %0%|%"
- " hover: %lang:action|Аренда %0%|%"
- " command: /areashop rent %0%"
confirm-extend:
- "%lang:prefix%Вы уверены, что вы хотите продлить %lang:tRegion|%0%|%?[break]"
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы продлить %0%|%"
- " hover: %lang:action|Продлить %0%|%"
- " command: /areashop rent %0%"
confirm-unrent:
- "%lang:prefix%Вы уверены, что хотите снять аренду %lang:tRegion|%0%|%?[break]"
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы снять аренду %0%|%"
- " hover: %lang:action|Снять аренду %0%|%"
- " command: /areashop unrent %0%"
confirm-buy:
- "%lang:prefix%Вы уверены, что хотите купить %lang:tRegion|%0%|%?[break]"
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы купить %0%|%"
- " hover: %lang:action|Купить %0%|%"
- " command: /areashop buy %0%"
confirm-sell:
- "%lang:prefix%Вы уверены, что хотите продать %lang:tRegion|%0%|%?[break]"
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы продать %0%|%"
- " hover: %lang:action|Продать %0%|%"
- " command: /areashop sell %0%"
timeleft-years: "%0% лет"
timeleft-months: "%0% месяцев"
timeleft-days: "%0% дней"
timeleft-hours: "%0% часов"
timeleft-minutes: "%0% минут"
timeleft-second: "%0% секунда"
timeleft-seconds: "%0% секунд"
timeleft-ended: "Истек"
greeting-forrent: "%region% может быть арендован за %price% в %duration%"
greeting-rented: "%region% арендован игроком %player% до %untill%."
greeting-forsale: "%region% может быть куплен за %price%."
greeting-bought: "%region% куплен игроком %player%."
greeting-resale: "%region% может быть куплен за %resaleprice% у игрока %player%."
+2 -2
View File
@@ -19,7 +19,7 @@
</repository>
<repository>
<id>vault-repo</id>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases</url>
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
</repository>
</repositories>
@@ -40,4 +40,4 @@
<module>AreaShop</module>
</modules>
</project>
</project>