mirror of
https://github.com/md5sha256/AreaShop.git
synced 2026-11-07 01:42:34 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74219ff75b | ||
|
|
e13a5f2bb0 | ||
|
|
c3bc9457ef | ||
|
|
6dc97b019e | ||
|
|
41944102b6 | ||
|
|
90fecd1085 | ||
|
|
e1b4df8f25 | ||
|
|
f0e4bd12ca | ||
|
|
27d832f05a | ||
|
|
1ca846f1ec | ||
|
|
2472a14cae | ||
|
|
c2bfe2158e | ||
|
|
745d1dd7d7 | ||
|
|
f6977061f4 | ||
|
|
c922b83de4 | ||
|
|
444a769f37 | ||
|
|
6b81be9cbb | ||
|
|
cd07b899c8 | ||
|
|
6bd916facd | ||
|
|
d16ea37269 | ||
|
|
56ab7ef52b | ||
|
|
6ef2d89cfc | ||
|
|
94a807d7c2 | ||
|
|
0d01cb956e | ||
|
|
55c4f7f369 | ||
|
|
3348e5b697 | ||
|
|
381c8b2ebe | ||
|
|
6bf344e6be | ||
|
|
e2bcc57128 | ||
|
|
6df08bc713 | ||
|
|
0e0b085000 | ||
|
|
4f9fc950f0 | ||
|
|
fe16d732a2 | ||
|
|
8cc44cf79f | ||
|
|
4fd478dbc3 | ||
|
|
fe77bf0318 | ||
|
|
e4b53982b2 | ||
|
|
3c953ad9a3 | ||
|
|
88f55bb6a9 | ||
|
|
4ba8326314 | ||
|
|
de81d92da0 | ||
|
|
f636a98314 | ||
|
|
e4df5a8cc9 | ||
|
|
56818bebdb | ||
|
|
7e1d7168f1 | ||
|
|
ff1ea3ae51 | ||
|
|
c9dc8dd840 | ||
|
|
c0794daeeb | ||
|
|
d40b9c660b | ||
|
|
f7b010b3f3 | ||
|
|
a06d9271c4 | ||
|
|
dd343aa587 | ||
|
|
e09d4ebd83 | ||
|
|
5f435941e4 | ||
|
|
86316cdd5b | ||
|
|
61828d3cfd | ||
|
|
54241d5ce3 | ||
|
|
d048665530 | ||
|
|
23de68431c | ||
|
|
95b4543f19 | ||
|
|
d058bb7271 | ||
|
|
63d26be369 | ||
|
|
1020388aae | ||
|
|
e56107ffd6 | ||
|
|
06fceb4643 | ||
|
|
e2077c3b32 | ||
|
|
fcb64c2ddb | ||
|
|
cc51109720 | ||
|
|
0b48f4dd2e | ||
|
|
4d7f00b0ce | ||
|
|
b27ea83982 | ||
|
|
66da717a77 | ||
|
|
7f779d2df8 | ||
|
|
ed3bd01f2a | ||
|
|
ef03501d1c | ||
|
|
feb35cfd37 | ||
|
|
b6a8dcc24c | ||
|
|
5619612a6e | ||
|
|
26ac52cc0a | ||
|
|
5f6bd55afe | ||
|
|
aba2e12c5d | ||
|
|
2906de11de | ||
|
|
436672f85b | ||
|
|
5ba8ed7ad8 | ||
|
|
00d97f1beb | ||
|
|
f530fa40af | ||
|
|
a804df2257 | ||
|
|
c96e0b464e | ||
|
|
13e52aa4f1 | ||
|
|
9aeb531d16 | ||
|
|
44f83473d1 | ||
|
|
d7260998f5 | ||
|
|
638382eacf | ||
|
|
e18fe99161 | ||
|
|
bdc9e32c13 | ||
|
|
9a46d5ae3b | ||
|
|
6795fc43d9 | ||
|
|
dd9bd2c434 | ||
|
|
9438166180 | ||
|
|
9e06b9f268 | ||
|
|
4562bf23f6 | ||
|
|
24edb01754 | ||
|
|
2739bf6ad4 | ||
|
|
2ce84186ab | ||
|
|
279fa001ea | ||
|
|
b56d5320a6 | ||
|
|
30665908b9 | ||
|
|
0fd384833a | ||
|
|
09634de4bf | ||
|
|
7fafee82a7 | ||
|
|
2899b2978c | ||
|
|
7afcba79c9 | ||
|
|
72084b38f8 | ||
|
|
6a291feedd | ||
|
|
b85566882c | ||
|
|
c14407e14b | ||
|
|
ae9bd60d1b | ||
|
|
c689c2fae0 | ||
|
|
728cfb6dfa | ||
|
|
3abb6c06e4 | ||
|
|
51c11738af | ||
|
|
172b5a99f1 | ||
|
|
4c5d025e54 | ||
|
|
e93a2d04de | ||
|
|
af5980d555 | ||
|
|
3f7249f4a1 | ||
|
|
73c6fc858e | ||
|
|
360c3e7e21 | ||
|
|
73d0115b78 | ||
|
|
baf7eaabf1 | ||
|
|
ca8c0487a8 | ||
|
|
24156a03c4 | ||
|
|
ec677766d2 | ||
|
|
ef6c8fbf9d | ||
|
|
4f52fe9e6e | ||
|
|
3ebe5a6fa9 | ||
|
|
3cebe5d2c7 | ||
|
|
c76415c4f3 | ||
|
|
b7bc02aef3 | ||
|
|
d75094e191 | ||
|
|
4045914b48 | ||
|
|
1fac002ee0 | ||
|
|
64301e74e0 | ||
|
|
5a5a7fc5ef | ||
|
|
b928caf0c2 | ||
|
|
111f629787 | ||
|
|
718474ca95 | ||
|
|
93b9df3e54 | ||
|
|
bad983a0b8 | ||
|
|
e2c8b06b68 | ||
|
|
7249e39c02 |
No files matched your search
+46
-21
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id("com.github.johnrengelman.shadow") version "7.1.2"
|
||||
id("com.github.johnrengelman.shadow") version "8.1.1"
|
||||
}
|
||||
|
||||
description = "AreaShop"
|
||||
@@ -24,31 +24,41 @@ dependencies {
|
||||
}
|
||||
|
||||
// 3rd party libraries
|
||||
implementation(libs.findbugs)
|
||||
implementation("io.papermc:paperlib:1.0.7")
|
||||
implementation("com.github.NLthijs48:InteractiveMessenger:e7749258ca")
|
||||
implementation("com.github.NLthijs48:BukkitDo:819d51ec2b")
|
||||
implementation("io.github.baked-libs:dough-data:1.0.3")
|
||||
implementation("com.google.inject:guice:5.1.0") {
|
||||
api("io.papermc:paperlib:1.0.8")
|
||||
api("com.github.NLthijs48:InteractiveMessenger:e7749258ca")
|
||||
api("com.github.NLthijs48:BukkitDo:819d51ec2b")
|
||||
api("io.github.baked-libs:dough-data:1.2.0")
|
||||
api("com.google.inject:guice:7.0.0") {
|
||||
exclude("com.google.guava", "guava")
|
||||
}
|
||||
implementation("com.google.inject.extensions:guice-assistedinject:5.1.0") {
|
||||
api("com.google.inject.extensions:guice-assistedinject:7.0.0") {
|
||||
exclude("com.google.guava", "guava")
|
||||
}
|
||||
implementation("net.kyori:adventure-text-minimessage:4.14.0")
|
||||
implementation("net.kyori:adventure-platform-bukkit:4.3.0")
|
||||
implementation("org.spongepowered:configurate-yaml:4.1.2")
|
||||
|
||||
// Project submodules
|
||||
implementation(projects.areashopInterface)
|
||||
implementation(projects.areashopBukkit113)
|
||||
implementation(projects.areashopNms)
|
||||
// Adapters
|
||||
runtimeOnly(projects.adapters.plugins.worldedit)
|
||||
runtimeOnly(projects.adapters.plugins.worldguard)
|
||||
runtimeOnly(projects.adapters.plugins.fastasyncworldedit)
|
||||
runtimeOnly(project(":adapters:platform:bukkit-1-17", "reobf"))
|
||||
runtimeOnly(project(":adapters:platform:bukkit-1-18", "reobf"))
|
||||
runtimeOnly(project(":adapters:platform:bukkit-1-18-1", "reobf"))
|
||||
api(projects.areashopInterface)
|
||||
api(projects.areashopNms)
|
||||
api(projects.adapters.platform.platformInterface)
|
||||
api(projects.adapters.platform.paper)
|
||||
|
||||
if (!providers.environmentVariable("JITPACK").isPresent) {
|
||||
// We don't need these adapters if we are only publishing an api jar
|
||||
runtimeOnly(projects.adapters.plugins.worldedit)
|
||||
runtimeOnly(projects.adapters.plugins.worldguard)
|
||||
runtimeOnly(projects.adapters.plugins.fastasyncworldedit)
|
||||
runtimeOnly(project(":adapters:platform:bukkit-1-17", "reobf"))
|
||||
runtimeOnly(projects.adapters.platform.bukkitModern)
|
||||
}
|
||||
testImplementation("com.github.seeseemelk:MockBukkit-v1.20:3.57.1")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.1")
|
||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.1")
|
||||
}
|
||||
|
||||
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
@@ -61,11 +71,24 @@ tasks {
|
||||
}
|
||||
|
||||
assemble {
|
||||
dependsOn(shadowJar)
|
||||
if (!providers.environmentVariable("JITPACK").isPresent) {
|
||||
dependsOn(shadowJar)
|
||||
}
|
||||
}
|
||||
|
||||
jar {
|
||||
archiveClassifier.set("original")
|
||||
archiveBaseName.set("AreaShop")
|
||||
if (!providers.environmentVariable("JITPACK").isPresent) {
|
||||
archiveClassifier.set("original")
|
||||
} else {
|
||||
archiveClassifier.set("")
|
||||
}
|
||||
}
|
||||
|
||||
if (providers.environmentVariable("JITPACK").isPresent) {
|
||||
artifacts {
|
||||
archives(jar)
|
||||
}
|
||||
}
|
||||
|
||||
java {
|
||||
@@ -88,8 +111,10 @@ tasks {
|
||||
relocate("io.papermc.lib", "${base}.paperlib")
|
||||
relocate("io.github.bakedlibs.dough", "${base}.dough")
|
||||
relocate("com.google.inject", "${base}.inject")
|
||||
relocate("com.google.errorprone", "${base}.errorprone")
|
||||
relocate("org.aopalliance", "${base}.aopalliance")
|
||||
relocate("javax.annotation", "${base}.javax.annotation")
|
||||
relocate("javax.inject", "${base}.javax.inject")
|
||||
relocate("jakarta.inject", "${base}.jakarta.inject")
|
||||
relocate("org.jetbrains.annotations", "${base}.jetbrains.annotations")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
package me.wiefferink.areashop;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import me.wiefferink.interactivemessenger.Log;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import me.wiefferink.interactivemessenger.source.LanguageManager;
|
||||
import me.wiefferink.interactivemessenger.translation.Transifex;
|
||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Collections;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
|
||||
public class ASLanguageManager extends LanguageManager {
|
||||
private JavaPlugin plugin;
|
||||
private String jarLanguagePath;
|
||||
private File languageFolder;
|
||||
private String wgPrefix;
|
||||
private List<String> chatPrefix;
|
||||
private Map<String, List<String>> currentLanguage, defaultLanguage;
|
||||
|
||||
public ASLanguageManager(JavaPlugin plugin,
|
||||
String jarLanguagePath,
|
||||
String currentLanguageName,
|
||||
String defaultLanguageName,
|
||||
List<String> chatPrefix,
|
||||
String wgPrefix) {
|
||||
super(plugin, jarLanguagePath, currentLanguageName, defaultLanguageName, chatPrefix);
|
||||
this.plugin = plugin;
|
||||
this.jarLanguagePath = jarLanguagePath;
|
||||
this.chatPrefix = chatPrefix;
|
||||
this.languageFolder = new File(plugin.getDataFolder() + File.separator + jarLanguagePath);
|
||||
|
||||
Message.init(this, plugin.getLogger());
|
||||
saveDefaults();
|
||||
currentLanguage = loadLanguage(currentLanguageName);
|
||||
if (defaultLanguageName.equals(currentLanguageName)) {
|
||||
defaultLanguage = currentLanguage;
|
||||
} else {
|
||||
defaultLanguage = loadLanguage(defaultLanguageName);
|
||||
}
|
||||
this.wgPrefix = wgPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getMessage(String key) {
|
||||
List<String> message;
|
||||
if (key.equalsIgnoreCase(Message.CHATLANGUAGEVARIABLE)) {
|
||||
message = chatPrefix;
|
||||
} else if (key.equalsIgnoreCase("wgPrefix")) {
|
||||
message = new ArrayList<>();
|
||||
message.add(wgPrefix);
|
||||
} else if (currentLanguage.containsKey(key)) {
|
||||
message = currentLanguage.get(key);
|
||||
} else {
|
||||
message = defaultLanguage.get(key);
|
||||
}
|
||||
if (message == null) {
|
||||
Log.warn("Did not find message '" + key + "' in the current or default language");
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return new ArrayList<>(message);
|
||||
}
|
||||
|
||||
private void saveDefaults() {
|
||||
// Create the language folder if it not exists
|
||||
if (!languageFolder.exists()) {
|
||||
if (!languageFolder.mkdirs()) {
|
||||
Log.warn("Could not create language directory: " + languageFolder.getAbsolutePath());
|
||||
return;
|
||||
}
|
||||
}
|
||||
File jarPath;
|
||||
try {
|
||||
// Read jar as ZIP file
|
||||
jarPath = new File(plugin.getClass()
|
||||
.getProtectionDomain()
|
||||
.getCodeSource()
|
||||
.getLocation()
|
||||
.toURI());
|
||||
} catch (URISyntaxException e) {
|
||||
Log.error("Failed to find location of jar file:", ExceptionUtils.getStackTrace(e));
|
||||
return;
|
||||
}
|
||||
try (ZipFile jar = new ZipFile(jarPath);) {
|
||||
Enumeration<? extends ZipEntry> entries = jar.entries();
|
||||
|
||||
// Each entry is a file or directory
|
||||
while (entries.hasMoreElements()) {
|
||||
ZipEntry entry = entries.nextElement();
|
||||
|
||||
// Filter to YAML files in the language directory
|
||||
if (!entry.isDirectory() && entry.getName()
|
||||
.startsWith(jarLanguagePath + "/") && entry.getName()
|
||||
.endsWith(".yml")) {
|
||||
// Save the file to disk
|
||||
File targetFile = new File(languageFolder.getAbsolutePath() + File.separator + entry.getName()
|
||||
.substring(entry.getName().lastIndexOf("/")));
|
||||
try (
|
||||
InputStream input = jar.getInputStream(entry);
|
||||
OutputStream output = new FileOutputStream(targetFile)
|
||||
) {
|
||||
byte[] bytes = input.readAllBytes();
|
||||
output.write(bytes);
|
||||
} catch (IOException e) {
|
||||
Log.warn("Something went wrong saving a default language file: " + targetFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (
|
||||
IOException e) {
|
||||
Log.error("Failed to read zip file:", ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, List<String>> loadLanguage(String key) {
|
||||
return loadLanguage(key, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the specified language
|
||||
*
|
||||
* @param key The language to load
|
||||
* @param convert try conversion or not (infinite recursion prevention)
|
||||
* @return Map with the messages loaded from the file
|
||||
*/
|
||||
private Map<String, List<String>> loadLanguage(String key, boolean convert) {
|
||||
Map<String, List<String>> result = new HashMap<>();
|
||||
|
||||
// Load the language file
|
||||
boolean convertFromTransifex = false;
|
||||
File file = new File(languageFolder.getAbsolutePath() + File.separator + key + ".yml");
|
||||
try (
|
||||
InputStream inputStream = new FileInputStream(file);
|
||||
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8)
|
||||
) {
|
||||
// Detect empty language files, happens when the YAML parsers prints an exception (it does return an empty YamlConfiguration though)
|
||||
YamlConfiguration ymlFile = YamlConfiguration.loadConfiguration(reader);
|
||||
if (ymlFile.getKeys(false).isEmpty()) {
|
||||
Log.warn("Language file " + key + ".yml has zero messages.");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Retrieve the messages from the YAML file and create the result
|
||||
if (convert && Transifex.needsConversion(ymlFile)) {
|
||||
convertFromTransifex = true;
|
||||
} else {
|
||||
for (String messageKey : ymlFile.getKeys(false)) {
|
||||
List<String> toPut;
|
||||
if (ymlFile.isList(messageKey)) {
|
||||
toPut = ymlFile.getStringList(messageKey);
|
||||
} else {
|
||||
toPut = Collections.singletonList(ymlFile.getString(messageKey));
|
||||
}
|
||||
result.put(messageKey, new ArrayList<>(toPut));
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.warn("Could not load language file: " + file.getAbsolutePath());
|
||||
}
|
||||
|
||||
// Do conversion (after block above closed the reader)
|
||||
if (convertFromTransifex) {
|
||||
if (!Transifex.convertFrom(file)) {
|
||||
Log.warn("Failed to convert " + file.getName() + " from the Transifex layout to the AreaShop layout, check the errors above");
|
||||
}
|
||||
return loadLanguage(key, false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,11 @@ import com.google.inject.Stage;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import me.wiefferink.areashop.adapters.platform.MinecraftPlatform;
|
||||
import me.wiefferink.areashop.adapters.platform.paper.PaperPlatform;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.interfaces.AreaShopInterface;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.listeners.PlayerLoginLogoutListener;
|
||||
@@ -22,10 +24,16 @@ import me.wiefferink.areashop.managers.SignLinkerManager;
|
||||
import me.wiefferink.areashop.modules.AreaShopModule;
|
||||
import me.wiefferink.areashop.modules.BukkitModule;
|
||||
import me.wiefferink.areashop.modules.DependencyModule;
|
||||
import me.wiefferink.areashop.nms.NMS;
|
||||
import me.wiefferink.areashop.modules.PlatformModule;
|
||||
import me.wiefferink.areashop.platform.adapter.PlatformAdapter;
|
||||
import me.wiefferink.areashop.tools.GithubUpdateCheck;
|
||||
import me.wiefferink.areashop.tools.LanguageConverter;
|
||||
import me.wiefferink.areashop.tools.SimpleMessageBridge;
|
||||
import me.wiefferink.areashop.tools.SpigotPlatform;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.areashop.tools.version.Version;
|
||||
import me.wiefferink.areashop.tools.version.VersionData;
|
||||
import me.wiefferink.areashop.tools.version.VersionUtil;
|
||||
import me.wiefferink.bukkitdo.Do;
|
||||
import me.wiefferink.interactivemessenger.source.LanguageManager;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
@@ -46,12 +54,14 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* Main class for the AreaShop plugin.
|
||||
@@ -67,8 +77,7 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
private WorldGuardInterface worldGuardInterface = null;
|
||||
private WorldEditPlugin worldEdit = null;
|
||||
private WorldEditInterface worldEditInterface = null;
|
||||
private NMS nms;
|
||||
private BukkitInterface bukkitInterface = null;
|
||||
private PlatformAdapter platformAdapter;
|
||||
private MessageBridge messageBridge;
|
||||
private IFileManager fileManager = null;
|
||||
private LanguageManager languageManager = null;
|
||||
@@ -166,23 +175,47 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
AreaShop.instance = this;
|
||||
Do.init(this);
|
||||
managers = new HashSet<>();
|
||||
boolean error = false;
|
||||
messageBridge = new SimpleMessageBridge();
|
||||
signErrorLogger = new SignErrorLogger(new File(getDataFolder(), signLogFile));
|
||||
|
||||
// Setup NMS Impl
|
||||
String rawServerVersion = Bukkit.getServer().getClass().getPackageName();
|
||||
String[] split = rawServerVersion.split("\\.");
|
||||
String serverVersion = split[3];
|
||||
try {
|
||||
Class<?> nmsImpl = Class.forName("me.wiefferink.areashop.adapters.platform." + serverVersion + ".NMSImpl");
|
||||
this.nms = nmsImpl.asSubclass(NMS.class).getConstructor().newInstance();
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
ex.printStackTrace();
|
||||
error("Failed to initialize NMS implementation!");
|
||||
Version currentServerVersion = VersionUtil.parseMinecraftVersion(Bukkit.getBukkitVersion());
|
||||
if (currentServerVersion.versionData().isOlderThan(VersionUtil.MC_1_17_1)) {
|
||||
error("Unsupported minecraft version: " + currentServerVersion + "! Minimum is 1.17.1");
|
||||
shutdownOnError();
|
||||
return;
|
||||
}
|
||||
if (currentServerVersion.versionData().equals(VersionUtil.MC_1_17_1)) {
|
||||
try {
|
||||
Class<?> adapterImpl = Class.forName("me.wiefferink.areashop.adapters.platform.legacy.LegacyPlatformAdapter");
|
||||
this.platformAdapter = adapterImpl.asSubclass(PlatformAdapter.class).getConstructor().newInstance();
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
ex.printStackTrace();
|
||||
error("Failed to initialize legacy PlatformAdapter implementation!");
|
||||
shutdownOnError();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
Class<?> adapterImpl = Class.forName("me.wiefferink.areashop.adapters.platform.modern.ModernPlatformAdapter");
|
||||
this.platformAdapter = adapterImpl.asSubclass(PlatformAdapter.class).getConstructor().newInstance();
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
ex.printStackTrace();
|
||||
error("Failed to initialize modern PlatformAdapter implementation!");
|
||||
shutdownOnError();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
final MinecraftPlatform platform;
|
||||
if (PaperLib.isPaper()) {
|
||||
platform = new PaperPlatform(this);
|
||||
info("Detected Paper; using the PaperPlatform impl");
|
||||
} else {
|
||||
platform = new SpigotPlatform(this);
|
||||
info("Detected Spigot; using the SpigotPlatform impl");
|
||||
}
|
||||
final PlatformModule platformModule = new PlatformModule(platform, this.platformAdapter);
|
||||
|
||||
// Check if Vault is present
|
||||
if(getServer().getPluginManager().getPlugin("Vault") == null) {
|
||||
@@ -244,30 +277,26 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Class<?> clazz = Class.forName("me.wiefferink.areashop.handlers.BukkitHandler1_13");
|
||||
bukkitInterface = (BukkitInterface)clazz.getConstructor(AreaShopInterface.class).newInstance(this);
|
||||
} catch (Exception e) {
|
||||
error("Could not load the Bukkit handler (used for sign updates), report this problem to the author:", ExceptionUtils.getStackTrace(e));
|
||||
shutdownOnError();
|
||||
return;
|
||||
}
|
||||
|
||||
AreaShopModule asModule = new AreaShopModule(this, messageBridge, nms, bukkitInterface, worldEditInterface, worldGuardInterface, signErrorLogger, dependencyModule);
|
||||
AreaShopModule asModule = new AreaShopModule(this, messageBridge,
|
||||
platformAdapter, worldEditInterface, worldGuardInterface, signErrorLogger, platformModule, dependencyModule);
|
||||
injector = Guice.createInjector(Stage.PRODUCTION, new BukkitModule(getServer()), asModule);
|
||||
|
||||
// Load all data from files and check versions
|
||||
fileManager = injector.getInstance(IFileManager.class);
|
||||
managers.add((FileManager) fileManager);
|
||||
boolean loadFilesResult = fileManager.loadFiles(false);
|
||||
error = error || !loadFilesResult;
|
||||
if (!loadFilesResult) {
|
||||
shutdownOnError();
|
||||
return;
|
||||
}
|
||||
|
||||
performLanguageMigrations();
|
||||
setupLanguageManager();
|
||||
|
||||
featureManager = injector.getInstance(FeatureManager.class);
|
||||
featureManager.initializeFeatures(injector);
|
||||
managers.add(featureManager);
|
||||
signManager = new SignManager();
|
||||
signManager = injector.getInstance(SignManager.class);
|
||||
managers.add(signManager);
|
||||
|
||||
// Register the event listeners
|
||||
@@ -292,15 +321,18 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
this,
|
||||
"md5sha256",
|
||||
"AreaShop"
|
||||
).withVersionComparator((latestVersion, currentVersion) ->
|
||||
!cleanVersion(latestVersion).equals(cleanVersion(currentVersion))
|
||||
).withVersionComparator((latestVersion, currentVersion) -> {
|
||||
Version latest = Version.parse(cleanVersion(latestVersion));
|
||||
Version current = Version.parse(cleanVersion(currentVersion));
|
||||
return latest.versionData().isNewerThan(current.versionData());
|
||||
}
|
||||
).checkUpdate(result -> {
|
||||
AreaShop.debug("Update check result:", result);
|
||||
if(!result.hasUpdate()) {
|
||||
return;
|
||||
}
|
||||
|
||||
AreaShop.info("Update from AreaShop V" + cleanVersion(result.getCurrentVersion()) + " to AreaShop V" + cleanVersion(result.getLatestVersion()) + " available, get the latest version at https://www.spigotmc.org/resources/areashop.2991/");
|
||||
AreaShop.info("Update from AreaShop V" + cleanVersion(result.getCurrentVersion()) + " to AreaShop V" + cleanVersion(result.getLatestVersion()) + " available, get the latest version at https://github.com/md5sha256/AreaShop/releases");
|
||||
for(Player player : Utils.getOnlinePlayers()) {
|
||||
notifyUpdate(player);
|
||||
}
|
||||
@@ -360,6 +392,14 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
HandlerList.unregisterAll(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if the plugin will be using MiniMessage or not
|
||||
* @return true if MiniMessage should be used, false otherwise
|
||||
*/
|
||||
public static boolean useMiniMessage() {
|
||||
return getInstance().getConfig().getBoolean("useMiniMessage");
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if the plugin is ready to be used.
|
||||
* @return true if the plugin is ready, false otherwise
|
||||
@@ -384,16 +424,53 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
this.debug = debug;
|
||||
}
|
||||
|
||||
private void performLanguageMigrations() {
|
||||
boolean migrateExisting = this.getConfig().getBoolean("migrateLanguages", false);
|
||||
if (!migrateExisting) {
|
||||
return;
|
||||
}
|
||||
getLogger().info("Performing language migration");
|
||||
List<String> chatPrefix = getConfig().getStringList("chatPrefix");
|
||||
List<String> convertedChatPrefix = LanguageConverter.convertRawList(chatPrefix);
|
||||
if (convertedChatPrefix.size() == 1) {
|
||||
getConfig().set("mmChatPrefix", convertedChatPrefix.get(0));
|
||||
} else {
|
||||
getConfig().set("mmChatPrefix", convertedChatPrefix);
|
||||
}
|
||||
saveConfig();
|
||||
File existingLanguages = getDataFolder().toPath().resolve(languageFolder).toFile();
|
||||
File[] langFiles = existingLanguages.listFiles(file -> file.getName().endsWith(".yml"));
|
||||
if (langFiles == null) {
|
||||
return;
|
||||
}
|
||||
for (File file : langFiles) {
|
||||
String name = file.getName();
|
||||
String langName = name.substring(0, name.length() - 4);
|
||||
File toMigrate = new File(existingLanguages, langName + "-MM.yml");
|
||||
if (toMigrate.exists()) {
|
||||
debug("Skipping migration for " + langName + " as it already exists.");
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
LanguageConverter.performConversion(file, toMigrate);
|
||||
} catch (IOException ex) {
|
||||
getLogger().log(Level.SEVERE, "Failed to perform migration for lang: " + file.getName(), ex);
|
||||
}
|
||||
}
|
||||
getLogger().info("Language migration complete!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup a new LanguageManager.
|
||||
*/
|
||||
private void setupLanguageManager() {
|
||||
languageManager = new LanguageManager(
|
||||
languageManager = new ASLanguageManager(
|
||||
this,
|
||||
languageFolder,
|
||||
getConfig().getString("language"),
|
||||
useMiniMessage() ? getConfig().getString("mmLanguage") : getConfig().getString("language"),
|
||||
"EN",
|
||||
chatprefix
|
||||
useMiniMessage() ? getConfig().getStringList("mmChatPrefix") : chatprefix,
|
||||
getConfig().getString("wgPrefix")
|
||||
);
|
||||
}
|
||||
|
||||
@@ -405,8 +482,8 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
this.chatprefix = chatprefix;
|
||||
}
|
||||
|
||||
public NMS getNms() {
|
||||
return nms;
|
||||
public PlatformAdapter getPlatformAdapter() {
|
||||
return platformAdapter;
|
||||
}
|
||||
|
||||
public SignErrorLogger getSignErrorLogger() {
|
||||
@@ -454,6 +531,11 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
return worldEdit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Plugin pluginInstance() {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get WorldGuardInterface for version dependent things.
|
||||
* @return WorldGuardInterface
|
||||
@@ -470,14 +552,6 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
return languageManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the BukkitHandler, for sign interactions.
|
||||
* @return BukkitHandler
|
||||
*/
|
||||
public BukkitInterface getBukkitHandler() {
|
||||
return this.bukkitInterface;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the CommandManager.
|
||||
* @return the CommandManager
|
||||
@@ -704,12 +778,19 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
AreaShop.debug(StringUtils.join(message, " "));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugI(Supplier<String> message) {
|
||||
if (debug) {
|
||||
info("Debug: " + message.get());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print an information message to the console.
|
||||
* @param message The message to print
|
||||
*/
|
||||
public static void info(Object... message) {
|
||||
AreaShop.getInstance().getLogger().info(StringUtils.join(message, " "));
|
||||
AreaShop.getInstance().getLogger().info(() -> StringUtils.join(message, " "));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -717,7 +798,7 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
* @param message The message to print
|
||||
*/
|
||||
public static void warn(Object... message) {
|
||||
AreaShop.getInstance().getLogger().warning(StringUtils.join(message, " "));
|
||||
AreaShop.getInstance().getLogger().warning(() -> StringUtils.join(message, " "));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -725,7 +806,7 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
|
||||
* @param message The message to print
|
||||
*/
|
||||
public static void error(Object... message) {
|
||||
AreaShop.getInstance().getLogger().severe(StringUtils.join(message, " "));
|
||||
AreaShop.getInstance().getLogger().severe(() -> StringUtils.join(message, " "));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.events.ask.AddingRegionEvent;
|
||||
@@ -24,8 +26,6 @@ import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
@@ -321,8 +321,7 @@ public class AddCommand extends CommandAreaShop {
|
||||
result.add("buy");
|
||||
}
|
||||
} else if(toComplete == 3) {
|
||||
if(sender instanceof Player) {
|
||||
Player player = (Player)sender;
|
||||
if(sender instanceof Player player) {
|
||||
if(sender.hasPermission("areashop.createrent") || sender.hasPermission("areashop.createbuy")) {
|
||||
for(ProtectedRegion region : plugin.getRegionManager(player.getWorld()).getRegions().values()) {
|
||||
result.add(region.getId());
|
||||
|
||||
@@ -1,148 +1,142 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
public class AddfriendCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private Plugin plugin;
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private Plugin plugin;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop addfriend";
|
||||
}
|
||||
@Inject
|
||||
private OfflinePlayerHelper offlinePlayerHelper;
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if(target.hasPermission("areashop.addfriendall") || target.hasPermission("areashop.addfriend")) {
|
||||
return "help-addFriend";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Inject
|
||||
private BukkitSchedulerExecutor executor;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(!sender.hasPermission("areashop.addfriend") && !sender.hasPermission("areashop.addfriendall")) {
|
||||
messageBridge.message(sender, "addfriend-noPermission");
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop addfriend";
|
||||
}
|
||||
|
||||
if(args.length < 2) {
|
||||
messageBridge.message(sender, "addfriend-help");
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (target.hasPermission("areashop.addfriendall") || target.hasPermission("areashop.addfriend")) {
|
||||
return "help-addFriend";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
GeneralRegion region;
|
||||
if(args.length <= 2) {
|
||||
if(sender instanceof Player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(((Player)sender).getLocation());
|
||||
if(regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if(regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
if(region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(sender.hasPermission("areashop.addfriendall")) {
|
||||
if((region instanceof RentRegion && !((RentRegion)region).isRented())
|
||||
|| (region instanceof BuyRegion && !((BuyRegion)region).isSold())) {
|
||||
messageBridge.message(sender, "addfriend-noOwner", region);
|
||||
return;
|
||||
}
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(friend.getLastPlayed() == 0 && !friend.isOnline() && !plugin.getConfig().getBoolean("addFriendNotExistingPlayers")) {
|
||||
messageBridge.message(sender, "addfriend-notVisited", args[1], region);
|
||||
return;
|
||||
}
|
||||
if(region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-alreadyAdded", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if(region.isOwner(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-self", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if(region.getFriendsFeature().addFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "addfriend-successOther", friend.getName(), region);
|
||||
}
|
||||
} else {
|
||||
if(sender.hasPermission("areashop.addfriend") && sender instanceof Player) {
|
||||
if(region.isOwner((Player)sender)) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(friend.getLastPlayed() == 0 && !friend.isOnline() && !plugin.getConfig().getBoolean("addFriendNotExistingPlayers")) {
|
||||
messageBridge.message(sender, "addfriend-notVisited", args[1], region);
|
||||
return;
|
||||
}
|
||||
if(region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-alreadyAdded", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if(region.isOwner(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-self", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.addfriend") && !sender.hasPermission("areashop.addfriendall")) {
|
||||
messageBridge.message(sender, "addfriend-noPermission");
|
||||
return;
|
||||
}
|
||||
|
||||
if(region.getFriendsFeature().addFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "addfriend-success", friend.getName(), region);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "addfriend-noPermissionOther", region);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "addfriend-noPermission", region);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (args.length < 2) {
|
||||
messageBridge.message(sender, "addfriend-help");
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if(toComplete == 2) {
|
||||
for(Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if(toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if (args.length == 2) {
|
||||
if (sender instanceof Player player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
if (region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (sender.hasPermission("areashop.addfriendall")) {
|
||||
if ((region instanceof RentRegion rentRegion && !rentRegion.isRented())
|
||||
|| (region instanceof BuyRegion buyRegion && !buyRegion.isSold())) {
|
||||
messageBridge.message(sender, "addfriend-noOwner", region);
|
||||
return;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(friend -> {
|
||||
if (friend.hasPlayedBefore() && !friend.isOnline() && !plugin.getConfig().getBoolean("addFriendNotExistingPlayers")) {
|
||||
messageBridge.message(sender, "addfriend-notVisited", args[1], region);
|
||||
} else if (region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-alreadyAdded", friend.getName(), region);
|
||||
} else if (region.isOwner(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-self", friend.getName(), region);
|
||||
} else if (region.getFriendsFeature().addFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "addfriend-successOther", friend.getName(), region);
|
||||
}
|
||||
}, this.executor);
|
||||
return;
|
||||
}
|
||||
if (!sender.hasPermission("areashop.addfriend") || !(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "addfriend-noPermission", region);
|
||||
return;
|
||||
}
|
||||
if (!region.isOwner(player)) {
|
||||
messageBridge.message(sender, "addfriend-noPermissionOther", region);
|
||||
return;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(friend -> {
|
||||
if (friend.getLastPlayed() == 0 && !friend.isOnline() && !plugin.getConfig().getBoolean("addFriendNotExistingPlayers")) {
|
||||
messageBridge.message(sender, "addfriend-notVisited", args[1], region);
|
||||
} else if (region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-alreadyAdded", friend.getName(), region);
|
||||
} else if (region.isOwner(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "addfriend-self", friend.getName(), region);
|
||||
} else if (region.getFriendsFeature().addFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "addfriend-success", friend.getName(), region);
|
||||
}
|
||||
}, this.executor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if (toComplete == 2) {
|
||||
for (Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if (toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.features.signs.RegionSign;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.tools.Materials;
|
||||
import me.wiefferink.areashop.tools.SignUtils;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@@ -15,8 +17,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.BlockIterator;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -33,8 +33,6 @@ public class AddsignCommand extends CommandAreaShop {
|
||||
private SignManager signManager;
|
||||
@Inject
|
||||
private Plugin plugin;
|
||||
@Inject
|
||||
private BukkitInterface bukkitInterface;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
@@ -55,11 +53,10 @@ public class AddsignCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "addsign-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
|
||||
// Get the sign
|
||||
Block block = null;
|
||||
@@ -111,7 +108,7 @@ public class AddsignCommand extends CommandAreaShop {
|
||||
return;
|
||||
}
|
||||
|
||||
region.getSignsFeature().addSign(block.getLocation(), block.getType(), bukkitInterface.getSignFacing(block), profile);
|
||||
region.getSignsFeature().addSign(block.getLocation(), block.getType(), SignUtils.getSignFacing(block), profile);
|
||||
if(profile == null) {
|
||||
messageBridge.message(sender, "addsign-success", region);
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -8,8 +10,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -42,11 +42,10 @@ public class BuyCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "buy-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
if(args.length > 1 && args[1] != null) {
|
||||
BuyRegion region = fileManager.getBuy(args[1]);
|
||||
if(region == null) {
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.tools.SimpleMessageBridge;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
@@ -81,7 +87,8 @@ public abstract class CommandAreaShop {
|
||||
return true;
|
||||
}
|
||||
|
||||
message.prefix().append(Message.fromKey("confirm-yes").replacements(command)).send(sender);
|
||||
Message m = message.prefix().append(Message.fromKey("confirm-yes").replacements(command));
|
||||
SimpleMessageBridge.send(m, sender);
|
||||
lastUsed.put(sender.getName(), new CommandTime(command, now));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.events.ask.DeletingRegionEvent;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
@@ -12,8 +14,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
@@ -53,11 +53,10 @@ public class DelCommand extends CommandAreaShop {
|
||||
}
|
||||
if(args.length < 2) {
|
||||
// Only players can have a selection
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-weOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
WorldEditSelection selection = worldEditInterface.getPlayerSelection(player);
|
||||
if(selection == null) {
|
||||
messageBridge.message(player, "cmd-noSelection");
|
||||
|
||||
@@ -1,130 +1,134 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
public class DelfriendCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop delfriend";
|
||||
}
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if(target.hasPermission("areashop.delfriendall") || target.hasPermission("areashop.delfriend")) {
|
||||
return "help-delFriend";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Inject
|
||||
private OfflinePlayerHelper offlinePlayerHelper;
|
||||
|
||||
/**
|
||||
* Check if a person can remove friends.
|
||||
* @param person The person to check
|
||||
* @param region The region to check for
|
||||
* @return true if the person can remove friends, otherwise false
|
||||
*/
|
||||
public static boolean canUse(CommandSender person, GeneralRegion region) {
|
||||
if(person.hasPermission("areashop.delfriendall")) {
|
||||
return true;
|
||||
}
|
||||
if(person instanceof Player) {
|
||||
Player player = (Player)person;
|
||||
return region.isOwner(player) && player.hasPermission("areashop.delfriend");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Inject
|
||||
private BukkitSchedulerExecutor executor;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(!sender.hasPermission("areashop.delfriend") && !sender.hasPermission("areashop.delfriendall")) {
|
||||
messageBridge.message(sender, "delfriend-noPermission");
|
||||
return;
|
||||
}
|
||||
if(args.length < 2) {
|
||||
messageBridge.message(sender, "delfriend-help");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if(args.length <= 2) {
|
||||
if(sender instanceof Player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(((Player)sender).getLocation());
|
||||
if(regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if(regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
if(region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(sender.hasPermission("areashop.delfriendall")) {
|
||||
if((region instanceof RentRegion && !((RentRegion)region).isRented())
|
||||
|| (region instanceof BuyRegion && !((BuyRegion)region).isSold())) {
|
||||
messageBridge.message(sender, "delfriend-noOwner", region);
|
||||
return;
|
||||
}
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "delfriend-notAdded", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if(region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "delfriend-successOther", friend.getName(), region);
|
||||
}
|
||||
} else {
|
||||
if(sender.hasPermission("areashop.delfriend") && sender instanceof Player) {
|
||||
if(region.isOwner((Player)sender)) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "delfriend-notAdded", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if(region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "delfriend-success", friend.getName(), region);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "delfriend-noPermissionOther", region);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "delfriend-noPermission", region);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop delfriend";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (target.hasPermission("areashop.delfriendall") || target.hasPermission("areashop.delfriend")) {
|
||||
return "help-delFriend";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a person can remove friends.
|
||||
*
|
||||
* @param person The person to check
|
||||
* @param region The region to check for
|
||||
* @return true if the person can remove friends, otherwise false
|
||||
*/
|
||||
public static boolean canUse(CommandSender person, GeneralRegion region) {
|
||||
if (person.hasPermission("areashop.delfriendall")) {
|
||||
return true;
|
||||
}
|
||||
if (person instanceof Player player) {
|
||||
return region.isOwner(player) && player.hasPermission("areashop.delfriend");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.delfriend") && !sender.hasPermission("areashop.delfriendall")) {
|
||||
messageBridge.message(sender, "delfriend-noPermission");
|
||||
return;
|
||||
}
|
||||
if (args.length < 2) {
|
||||
messageBridge.message(sender, "delfriend-help");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if (args.length == 2) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
if (region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (sender.hasPermission("areashop.delfriendall")) {
|
||||
if ((region instanceof RentRegion rentRegion && !rentRegion.isRented())
|
||||
|| (region instanceof BuyRegion buyRegion && !buyRegion.isSold())) {
|
||||
messageBridge.message(sender, "delfriend-noOwner", region);
|
||||
return;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(friend -> {
|
||||
if (!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "delfriend-notAdded", friend.getName(), region);
|
||||
return;
|
||||
}
|
||||
if (region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "delfriend-successOther", friend.getName(), region);
|
||||
}
|
||||
}, this.executor);
|
||||
return;
|
||||
}
|
||||
if (!sender.hasPermission("areashop.delfriend") || !(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "delfriend-noPermission", region);
|
||||
return;
|
||||
}
|
||||
if (!region.isOwner(player)) {
|
||||
messageBridge.message(sender, "delfriend-noPermissionOther", region);
|
||||
return;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(friend -> {
|
||||
if (!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
|
||||
messageBridge.message(sender, "delfriend-notAdded", friend.getName(), region);
|
||||
} else if (region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
|
||||
region.update();
|
||||
messageBridge.message(sender, "delfriend-success", friend.getName(), region);
|
||||
}
|
||||
}, this.executor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.features.signs.RegionSign;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.features.signs.SignsFeature;
|
||||
import me.wiefferink.areashop.tools.Materials;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@@ -11,8 +12,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.BlockIterator;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -44,18 +43,17 @@ public class DelsignCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "delsign-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
|
||||
// Get the sign
|
||||
Block block = null;
|
||||
BlockIterator blockIterator = new BlockIterator(player, 100);
|
||||
while(blockIterator.hasNext() && block == null) {
|
||||
Block next = blockIterator.next();
|
||||
if(next.getType() != Material.AIR) {
|
||||
if(!next.getType().isAir()) {
|
||||
block = next;
|
||||
}
|
||||
}
|
||||
@@ -70,8 +68,9 @@ public class DelsignCommand extends CommandAreaShop {
|
||||
}
|
||||
RegionSign regionSign = optionalSign.get();
|
||||
messageBridge.message(sender, "delsign-success", regionSign.getRegion());
|
||||
signManager.removeSign(regionSign);
|
||||
regionSign.remove();
|
||||
// Sometimes the RegionSign data is corrupted. Forcefully set the block to air
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -11,13 +13,12 @@ import net.milkbowl.vault.economy.Economy;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@Singleton
|
||||
public class FindCommand extends CommandAreaShop {
|
||||
@@ -48,7 +49,7 @@ public class FindCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "find-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
@@ -56,7 +57,6 @@ public class FindCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "find-help");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
double balance = 0.0;
|
||||
if(economy != null) {
|
||||
balance = economy.getBalance(player);
|
||||
@@ -97,7 +97,7 @@ public class FindCommand extends CommandAreaShop {
|
||||
}
|
||||
if(!results.isEmpty()) {
|
||||
// Draw a random one
|
||||
BuyRegion region = results.get(new Random().nextInt(results.size()));
|
||||
BuyRegion region = results.get(ThreadLocalRandom.current().nextInt(results.size()));
|
||||
Message onlyInGroup = Message.empty();
|
||||
if(group != null) {
|
||||
onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
|
||||
@@ -137,7 +137,7 @@ public class FindCommand extends CommandAreaShop {
|
||||
}
|
||||
if(!results.isEmpty()) {
|
||||
// Draw a random one
|
||||
RentRegion region = results.get(new Random().nextInt(results.size()));
|
||||
RentRegion region = results.get(ThreadLocalRandom.current().nextInt(results.size()));
|
||||
Message onlyInGroup = Message.empty();
|
||||
if(group != null) {
|
||||
onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditSelection;
|
||||
@@ -11,8 +13,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
@@ -59,11 +59,10 @@ public class GroupaddCommand extends CommandAreaShop {
|
||||
fileManager.addGroup(group);
|
||||
}
|
||||
if(args.length == 2) {
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-weOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
WorldEditSelection selection = worldEditInterface.getPlayerSelection(player);
|
||||
if(selection == null) {
|
||||
messageBridge.message(player, "cmd-noSelection");
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditSelection;
|
||||
@@ -11,8 +13,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
@@ -59,11 +59,10 @@ public class GroupdelCommand extends CommandAreaShop {
|
||||
}
|
||||
|
||||
if(args.length == 2) {
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-weOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
WorldEditSelection selection = worldEditInterface.getPlayerSelection(player);
|
||||
if(selection == null) {
|
||||
messageBridge.message(player, "cmd-noSelection");
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.RegionGroup;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.regions.ImportJob;
|
||||
import me.wiefferink.areashop.regions.ImportJobFactory;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,19 +1,26 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RegionGroup;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.SimpleMessageBridge;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.apache.logging.log4j.message.SimpleMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
@@ -137,7 +144,7 @@ public class InfoCommand extends CommandAreaShop {
|
||||
for(int i = linesPrinted; i < maximumItems - 1; i++) {
|
||||
sender.sendMessage(" ");
|
||||
}
|
||||
footer.send(sender);
|
||||
SimpleMessageBridge.send(footer, sender);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -332,7 +339,7 @@ public class InfoCommand extends CommandAreaShop {
|
||||
}
|
||||
if(foundSomething) {
|
||||
tp.append(".");
|
||||
tp.send(sender);
|
||||
SimpleMessageBridge.send(tp, sender);
|
||||
}
|
||||
// Signs
|
||||
List<String> signLocations = new ArrayList<>();
|
||||
@@ -409,7 +416,7 @@ public class InfoCommand extends CommandAreaShop {
|
||||
}
|
||||
if(foundSomething) {
|
||||
tp.append(".");
|
||||
tp.send(sender);
|
||||
SimpleMessageBridge.send(tp, sender);
|
||||
}
|
||||
// Signs
|
||||
List<String> signLocations = new ArrayList<>();
|
||||
|
||||
@@ -43,12 +43,11 @@ public class LinksignsCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "linksigns-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player)sender;
|
||||
if(signLinkerManager.isInSignLinkMode(player)) {
|
||||
signLinkerManager.exitSignLinkMode(player);
|
||||
} else {
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -26,6 +27,12 @@ public class MeCommand extends CommandAreaShop {
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
|
||||
@Inject
|
||||
private OfflinePlayerHelper offlinePlayerHelper;
|
||||
|
||||
@Inject
|
||||
private BukkitSchedulerExecutor executor;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop me";
|
||||
@@ -55,42 +62,48 @@ public class MeCommand extends CommandAreaShop {
|
||||
player = (OfflinePlayer)sender;
|
||||
}
|
||||
if(args.length > 1) {
|
||||
player = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(!player.hasPlayedBefore()) {
|
||||
messageBridge.message(sender, "me-noPlayer", args[1]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(!player.hasPlayedBefore()) {
|
||||
// Lookup offline players async
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(offlinePlayer -> {
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
messageBridge.message(sender, "me-noPlayer", args[1]);
|
||||
} else {
|
||||
sendMessageAboutRegions(sender, offlinePlayer);
|
||||
}
|
||||
}, this.executor);
|
||||
return;
|
||||
}
|
||||
sendMessageAboutRegions(sender, player);
|
||||
}
|
||||
|
||||
private void sendMessageAboutRegions(CommandSender sender, OfflinePlayer target) {
|
||||
// Get the regions owned by the player
|
||||
Set<RentRegion> rentRegions = new HashSet<>();
|
||||
for(RentRegion region : fileManager.getRentsRef()) {
|
||||
if(region.isOwner(player)) {
|
||||
if(region.isOwner(target)) {
|
||||
rentRegions.add(region);
|
||||
}
|
||||
}
|
||||
Set<BuyRegion> buyRegions = new HashSet<>();
|
||||
for(BuyRegion region : fileManager.getBuysRef()) {
|
||||
if(region.isOwner(player)) {
|
||||
if(region.isOwner(target)) {
|
||||
buyRegions.add(region);
|
||||
}
|
||||
}
|
||||
// Get the regions the player is added as friend
|
||||
Set<GeneralRegion> friendRegions = new HashSet<>();
|
||||
for(GeneralRegion region : fileManager.getRegionsRef()) {
|
||||
if(region.getFriendsFeature().getFriends().contains(player.getUniqueId())) {
|
||||
if(region.getFriendsFeature().getFriends().contains(target.getUniqueId())) {
|
||||
friendRegions.add(region);
|
||||
}
|
||||
}
|
||||
|
||||
// Send messages
|
||||
boolean foundSome = !rentRegions.isEmpty() || !buyRegions.isEmpty() || !friendRegions.isEmpty();
|
||||
if(foundSome) {
|
||||
messageBridge.message(sender, "me-header", player.getName());
|
||||
if(!foundSome) {
|
||||
messageBridge.message(sender, "me-nothing", target.getName());
|
||||
return;
|
||||
}
|
||||
messageBridge.message(sender, "me-header", target.getName());
|
||||
if(!rentRegions.isEmpty()) {
|
||||
for(RentRegion region : rentRegions) {
|
||||
messageBridge.messageNoPrefix(sender, "me-rentLine", region);
|
||||
@@ -106,12 +119,7 @@ public class MeCommand extends CommandAreaShop {
|
||||
messageBridge.messageNoPrefix(sender, "me-friendLine", region);
|
||||
}
|
||||
}
|
||||
|
||||
if(!foundSome) {
|
||||
messageBridge.message(sender, "me-nothing", player.getName());
|
||||
} else {
|
||||
messageBridge.messageNoPrefix(sender, "me-clickHint");
|
||||
}
|
||||
messageBridge.messageNoPrefix(sender, "me-clickHint");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.tools.SimpleMessageBridge;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -52,7 +57,8 @@ public class MessageCommand extends CommandAreaShop {
|
||||
System.arraycopy(args, 2, messageArgs, 0, args.length - 2);
|
||||
String message = StringUtils.join(messageArgs, " ");
|
||||
|
||||
Message.fromString(message).send(player);
|
||||
Message m = Message.fromString(message);
|
||||
SimpleMessageBridge.send(m, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class ReloadCommand extends CommandAreaShop {
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
@@ -7,8 +9,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -39,11 +39,10 @@ public class RentCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "rent-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
if(args.length > 1 && args[1] != null) {
|
||||
RentRegion rent = fileManager.getRent(args[1]);
|
||||
if(rent == null) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -7,8 +9,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -8,8 +10,6 @@ import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -8,8 +10,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -44,8 +44,7 @@ public class SellCommand extends CommandAreaShop {
|
||||
if(person.hasPermission("areashop.sell")) {
|
||||
return true;
|
||||
}
|
||||
if(person instanceof Player) {
|
||||
Player player = (Player)person;
|
||||
if(person instanceof Player player) {
|
||||
return region.isOwner(player) && person.hasPermission("areashop.sellown");
|
||||
}
|
||||
return false;
|
||||
@@ -59,9 +58,9 @@ public class SellCommand extends CommandAreaShop {
|
||||
}
|
||||
BuyRegion buy;
|
||||
if(args.length <= 1) {
|
||||
if(sender instanceof Player) {
|
||||
if(sender instanceof Player player) {
|
||||
// get the region by location
|
||||
List<BuyRegion> regions = Utils.getImportantBuyRegions(((Player)sender).getLocation());
|
||||
List<BuyRegion> regions = Utils.getImportantBuyRegions((player).getLocation());
|
||||
if(regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
public class SetTransferCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private Plugin plugin;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop settransfer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (target.hasPermission("areashop.settransfer")) {
|
||||
return "help-settransfer";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.settransfer")) {
|
||||
messageBridge.message(sender, "settransfer-noPermission");
|
||||
return;
|
||||
}
|
||||
if (args.length <= 2 || args[1] == null || args[2] == null) {
|
||||
messageBridge.message(sender, "settransfer-help");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region = fileManager.getRegion(args[1]);
|
||||
if (region == null) {
|
||||
messageBridge.message(sender, "settransfer-notRegistered", args[1]);
|
||||
return;
|
||||
}
|
||||
boolean value;
|
||||
if (args[2].equalsIgnoreCase("true")) {
|
||||
value = true;
|
||||
} else if (args[2].equalsIgnoreCase("false")) {
|
||||
value = false;
|
||||
} else {
|
||||
messageBridge.message(sender, "settransfer-invalidSetting", args[2]);
|
||||
return;
|
||||
}
|
||||
region.setTransferEnabled(value);
|
||||
messageBridge.message(sender, "settransfer-success", args[2], region);
|
||||
region.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
List<String> result = new ArrayList<>();
|
||||
if (toComplete == 2) {
|
||||
result = fileManager.getRegionNames();
|
||||
} else if (toComplete == 3) {
|
||||
result.add("true");
|
||||
result.add("false");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
@@ -8,8 +10,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,97 +1,100 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
public class SetlandlordCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop setlandlord";
|
||||
}
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private OfflinePlayerHelper offlinePlayerHelper;
|
||||
@Inject
|
||||
private BukkitSchedulerExecutor executor;
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if(target.hasPermission("areashop.setlandlord")) {
|
||||
return "help-setlandlord";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop setlandlord";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(!sender.hasPermission("areashop.setlandlord")) {
|
||||
messageBridge.message(sender, "setlandlord-noPermission");
|
||||
return;
|
||||
}
|
||||
if(args.length < 2) {
|
||||
messageBridge.message(sender, "setlandlord-help");
|
||||
return;
|
||||
}
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]);
|
||||
GeneralRegion region;
|
||||
if(args.length < 3) {
|
||||
if(sender instanceof Player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(((Player)sender).getLocation());
|
||||
if(regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if(regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
}
|
||||
if(region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
String playerName = player.getName();
|
||||
if(playerName == null || playerName.isEmpty()) {
|
||||
playerName = args[1];
|
||||
}
|
||||
region.setLandlord(player.getUniqueId(), playerName);
|
||||
region.update();
|
||||
messageBridge.message(sender, "setlandlord-success", playerName, region);
|
||||
}
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (target.hasPermission("areashop.setlandlord")) {
|
||||
return "help-setlandlord";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if(toComplete == 2) {
|
||||
for(Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if(toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.setlandlord")) {
|
||||
messageBridge.message(sender, "setlandlord-noPermission");
|
||||
return;
|
||||
}
|
||||
if (args.length < 2) {
|
||||
messageBridge.message(sender, "setlandlord-help");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if (args.length < 3) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
}
|
||||
if (region == null) {
|
||||
messageBridge.message(sender, "cmd-notRegistered", args[2]);
|
||||
return;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupOfflinePlayerAsync(args[1]).thenAcceptAsync(offlinePlayer -> {
|
||||
String playerName = offlinePlayer.getName();
|
||||
if (playerName == null || playerName.isEmpty()) {
|
||||
playerName = args[1];
|
||||
}
|
||||
region.setLandlord(offlinePlayer.getUniqueId(), playerName);
|
||||
region.update();
|
||||
messageBridge.message(sender, "setlandlord-success", playerName, region);
|
||||
}, this.executor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if (toComplete == 2) {
|
||||
for (Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if (toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
@@ -21,118 +21,116 @@ import java.util.UUID;
|
||||
@Singleton
|
||||
public class SetownerCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop setowner";
|
||||
}
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private OfflinePlayerHelper offlinePlayerHelper;
|
||||
@Inject
|
||||
private BukkitSchedulerExecutor executor;
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if(target.hasPermission("areashop.setownerrent") || target.hasPermission("areashop.setownerbuy")) {
|
||||
return "help-setowner";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop setowner";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(!sender.hasPermission("areashop.setownerrent") && !sender.hasPermission("areashop.setownerbuy")) {
|
||||
messageBridge.message(sender, "setowner-noPermission");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if(args.length < 2) {
|
||||
messageBridge.message(sender, "setowner-help");
|
||||
return;
|
||||
}
|
||||
if(args.length == 2) {
|
||||
if(sender instanceof Player) {
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(((Player)sender).getLocation());
|
||||
if(regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if(regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
} else {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
}
|
||||
if(region == null) {
|
||||
messageBridge.message(sender, "setowner-notRegistered");
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (target.hasPermission("areashop.setownerrent") || target.hasPermission("areashop.setownerbuy")) {
|
||||
return "help-setowner";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
if(region instanceof RentRegion && !sender.hasPermission("areashop.setownerrent")) {
|
||||
messageBridge.message(sender, "setowner-noPermissionRent", region);
|
||||
return;
|
||||
}
|
||||
if(region instanceof BuyRegion && !sender.hasPermission("areashop.setownerbuy")) {
|
||||
messageBridge.message(sender, "setowner-noPermissionBuy", region);
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.setownerrent") && !sender.hasPermission("areashop.setownerbuy")) {
|
||||
messageBridge.message(sender, "setowner-noPermission");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if (args.length < 2) {
|
||||
messageBridge.message(sender, "setowner-help");
|
||||
return;
|
||||
}
|
||||
if (args.length == 2) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer");
|
||||
return;
|
||||
}
|
||||
// get the region by location
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
messageBridge.message(sender, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
messageBridge.message(sender, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
} else {
|
||||
region = regions.get(0);
|
||||
}
|
||||
|
||||
UUID uuid = null;
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]);
|
||||
if(player != null) {
|
||||
uuid = player.getUniqueId();
|
||||
}
|
||||
if(uuid == null) {
|
||||
messageBridge.message(sender, "setowner-noPlayer", args[1], region);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
region = fileManager.getRegion(args[2]);
|
||||
}
|
||||
if (region == null) {
|
||||
messageBridge.message(sender, "setowner-notRegistered");
|
||||
return;
|
||||
}
|
||||
|
||||
if(region instanceof RentRegion) {
|
||||
RentRegion rent = (RentRegion)region;
|
||||
if(rent.isRenter(uuid)) {
|
||||
// extend
|
||||
rent.setRentedUntil(rent.getRentedUntil() + rent.getDuration());
|
||||
rent.setRenter(uuid);
|
||||
messageBridge.message(sender, "setowner-succesRentExtend", region);
|
||||
} else {
|
||||
// change
|
||||
if(!rent.isRented()) {
|
||||
rent.setRentedUntil(Calendar.getInstance().getTimeInMillis() + rent.getDuration());
|
||||
}
|
||||
rent.setRenter(uuid);
|
||||
messageBridge.message(sender, "setowner-succesRent", region);
|
||||
}
|
||||
}
|
||||
if(region instanceof BuyRegion) {
|
||||
BuyRegion buy = (BuyRegion)region;
|
||||
buy.setBuyer(uuid);
|
||||
messageBridge.message(sender, "setowner-succesBuy", region);
|
||||
}
|
||||
region.getFriendsFeature().deleteFriend(region.getOwner(), null);
|
||||
region.update();
|
||||
region.saveRequired();
|
||||
}
|
||||
if (region instanceof RentRegion && !sender.hasPermission("areashop.setownerrent")) {
|
||||
messageBridge.message(sender, "setowner-noPermissionRent", region);
|
||||
return;
|
||||
}
|
||||
if (region instanceof BuyRegion && !sender.hasPermission("areashop.setownerbuy")) {
|
||||
messageBridge.message(sender, "setowner-noPermissionBuy", region);
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if(toComplete == 2) {
|
||||
for(Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if(toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
this.offlinePlayerHelper.lookupUuidAsync(args[1]).thenAcceptAsync(optionalUuid -> {
|
||||
if (optionalUuid.isEmpty()) {
|
||||
messageBridge.message(sender, "setowner-noPlayer", args[1], region);
|
||||
return;
|
||||
}
|
||||
final UUID uuid = optionalUuid.get();
|
||||
if (region instanceof RentRegion rent) {
|
||||
if (rent.isRenter(uuid)) {
|
||||
// extend
|
||||
rent.setRentedUntil(rent.getRentedUntil() + rent.getDuration());
|
||||
rent.setRenter(uuid);
|
||||
messageBridge.message(sender, "setowner-succesRentExtend", region);
|
||||
} else {
|
||||
// change
|
||||
if (!rent.isRented()) {
|
||||
rent.setRentedUntil(Calendar.getInstance().getTimeInMillis() + rent.getDuration());
|
||||
}
|
||||
rent.setRenter(uuid);
|
||||
messageBridge.message(sender, "setowner-succesRent", region);
|
||||
}
|
||||
}
|
||||
if (region instanceof BuyRegion buy) {
|
||||
buy.setBuyer(uuid);
|
||||
messageBridge.message(sender, "setowner-succesBuy", region);
|
||||
}
|
||||
region.getFriendsFeature().deleteFriend(region.getOwner(), null);
|
||||
region.update();
|
||||
region.saveRequired();
|
||||
}, this.executor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
if (toComplete == 2) {
|
||||
for (Player player : Utils.getOnlinePlayers()) {
|
||||
result.add(player.getName());
|
||||
}
|
||||
} else if (toComplete == 3) {
|
||||
result.addAll(fileManager.getRegionNames());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -9,8 +11,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -79,7 +80,10 @@ public class SetrestoreCommand extends CommandAreaShop {
|
||||
result.add("false");
|
||||
result.add("general");
|
||||
} else if(toComplete == 4) {
|
||||
result.addAll(plugin.getConfig().getConfigurationSection("schematicProfiles").getKeys(false));
|
||||
ConfigurationSection schemProfiles = fileManager.getConfig().getConfigurationSection("schematicProfiles");
|
||||
if (schemProfiles != null) {
|
||||
result.addAll(schemProfiles.getKeys(false));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -10,8 +12,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -43,10 +43,9 @@ public class SetteleportCommand extends CommandAreaShop {
|
||||
* @return true if the person can set the teleport location, otherwise false
|
||||
*/
|
||||
public static boolean canUse(CommandSender person, GeneralRegion region) {
|
||||
if(!(person instanceof Player)) {
|
||||
if(!(person instanceof Player player)) {
|
||||
return false;
|
||||
}
|
||||
Player player = (Player)person;
|
||||
return player.hasPermission("areashop.setteleportall")
|
||||
|| region.isOwner(player) && player.hasPermission("areashop.setteleport");
|
||||
}
|
||||
@@ -57,11 +56,10 @@ public class SetteleportCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "setteleport-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
GeneralRegion region;
|
||||
if(args.length < 2) {
|
||||
// get the region by location
|
||||
|
||||
@@ -2,6 +2,8 @@ package me.wiefferink.areashop.commands;
|
||||
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.events.ask.AddingRegionEvent;
|
||||
@@ -22,8 +24,6 @@ import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -64,11 +64,10 @@ public class StackCommand extends CommandAreaShop {
|
||||
return;
|
||||
}
|
||||
// Only from ingame
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof final Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
final Player player = (Player)sender;
|
||||
// Specify enough arguments
|
||||
if(args.length < 5) {
|
||||
messageBridge.message(sender, "stack-help");
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
@@ -7,8 +9,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -39,10 +39,9 @@ public class TeleportCommand extends CommandAreaShop {
|
||||
* @return true if the person can teleport to it, otherwise false
|
||||
*/
|
||||
public static boolean canUse(CommandSender person, GeneralRegion region) {
|
||||
if(!(person instanceof Player)) {
|
||||
if(!(person instanceof Player player)) {
|
||||
return false;
|
||||
}
|
||||
Player player = (Player)person;
|
||||
return player.hasPermission("areashop.teleportall")
|
||||
|| region.isOwner(player) && player.hasPermission("areashop.teleport")
|
||||
|| region.isAvailable() && player.hasPermission("areashop.teleportavailable")
|
||||
@@ -55,7 +54,7 @@ public class TeleportCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "teleport-noPermission");
|
||||
return;
|
||||
}
|
||||
if(!(sender instanceof Player)) {
|
||||
if(!(sender instanceof Player player)) {
|
||||
messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
return;
|
||||
}
|
||||
@@ -63,7 +62,6 @@ public class TeleportCommand extends CommandAreaShop {
|
||||
messageBridge.message(sender, "teleport-help");
|
||||
return;
|
||||
}
|
||||
Player player = (Player)sender;
|
||||
GeneralRegion region = fileManager.getRegion(args[1]);
|
||||
if(region == null) {
|
||||
messageBridge.message(player, "teleport-noRentOrBuy", args[1]);
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Singleton
|
||||
public class TransferCommand extends CommandAreaShop {
|
||||
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@Inject
|
||||
private IFileManager fileManager;
|
||||
@Inject
|
||||
private Plugin plugin;
|
||||
@Inject
|
||||
private Server server;
|
||||
|
||||
@Override
|
||||
public String getCommandStart() {
|
||||
return "areashop transfer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelp(CommandSender target) {
|
||||
if (!target.hasPermission("areashop.transfer")) {
|
||||
return null;
|
||||
}
|
||||
return "help-transfer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("areashop.transfer")) {
|
||||
this.messageBridge.message(sender, "transfer-noPermission");
|
||||
return;
|
||||
}
|
||||
if (sender instanceof Player player) {
|
||||
handlePlayer(player, args);
|
||||
} else {
|
||||
this.messageBridge.message(sender, "cmd-onlyByPlayer");
|
||||
}
|
||||
}
|
||||
|
||||
private void handlePlayer(Player player, String[] args) {
|
||||
if (args.length < 2) {
|
||||
this.messageBridge.message(player, "transfer-help");
|
||||
return;
|
||||
}
|
||||
String targetPlayerName = args[1];
|
||||
if (targetPlayerName.equals(player.getName())) {
|
||||
this.messageBridge.message(player, "transfer-transferSelf");
|
||||
return;
|
||||
}
|
||||
GeneralRegion region;
|
||||
if (args.length > 2) {
|
||||
String targetRegionName = args[2];
|
||||
region = this.fileManager.getRegion(targetRegionName);
|
||||
if (region == null) {
|
||||
messageBridge.message(player, "cmd-noRegion");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation());
|
||||
if (regions.isEmpty()) {
|
||||
messageBridge.message(player, "cmd-noRegionsAtLocation");
|
||||
return;
|
||||
} else if (regions.size() > 1) {
|
||||
messageBridge.message(player, "cmd-moreRegionsAtLocation");
|
||||
return;
|
||||
}
|
||||
region = regions.get(0);
|
||||
}
|
||||
if (!region.isTransferEnabled()) {
|
||||
this.messageBridge.message(player, "transfer-disabled");
|
||||
return;
|
||||
}
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer targetPlayer = this.server.getOfflinePlayer(targetPlayerName);
|
||||
if (!targetPlayer.hasPlayedBefore()) {
|
||||
// Unknown player
|
||||
this.messageBridge.message(player, "transfer-noPlayer", targetPlayerName);
|
||||
return;
|
||||
}
|
||||
if (region.isLandlord(player.getUniqueId())) {
|
||||
// Transfer ownership if same as landlord
|
||||
region.getFriendsFeature().deleteFriend(region.getOwner(), null);
|
||||
region.setOwner(targetPlayer.getUniqueId());
|
||||
region.setLandlord(targetPlayer.getUniqueId(), targetPlayerName);
|
||||
this.messageBridge.message(player, "transfer-transferred-owner", targetPlayerName, region);
|
||||
if (targetPlayer.isOnline()) {
|
||||
this.messageBridge.message(targetPlayer.getPlayer(), "transfer-transferred-owner", targetPlayerName, region);
|
||||
}
|
||||
region.update();
|
||||
region.saveRequired();
|
||||
return;
|
||||
}
|
||||
if (!region.isOwner(player.getUniqueId())) {
|
||||
// Cannot transfer tenant if we aren't the current tenant
|
||||
this.messageBridge.message(player, "transfer-notCurrentTenant");
|
||||
return;
|
||||
}
|
||||
region.getFriendsFeature().deleteFriend(region.getOwner(), null);
|
||||
// Swap the owner/occupant (renter or buyer)
|
||||
region.setOwner(targetPlayer.getUniqueId());
|
||||
|
||||
this.messageBridge.message(player, "transfer-transferred-tenant", targetPlayerName, region);
|
||||
if (targetPlayer.isOnline()) {
|
||||
this.messageBridge.message(targetPlayer.getPlayer(), "transfer-transferred-tenant", targetPlayerName, region);
|
||||
}
|
||||
region.update();
|
||||
region.saveRequired();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
|
||||
if (toComplete == 2) {
|
||||
Collection<? extends Player> players = this.server.getOnlinePlayers();
|
||||
List<String> ret = new ArrayList<>(players.stream()
|
||||
.map(Player::getName)
|
||||
.toList());
|
||||
if (sender instanceof Player player) {
|
||||
ret.remove(player.getName());
|
||||
}
|
||||
return ret;
|
||||
} else if (toComplete == 3) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
return this.fileManager.getRegionNames();
|
||||
}
|
||||
UUID uuid = player.getUniqueId();
|
||||
return new ArrayList<>(this.fileManager.getRegions()
|
||||
.stream()
|
||||
.filter(region -> region.isOwner(uuid) || region.isLandlord(uuid))
|
||||
.map(GeneralRegion::getName)
|
||||
.toList());
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.commands;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
@@ -8,8 +10,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -44,8 +44,7 @@ public class UnrentCommand extends CommandAreaShop {
|
||||
if(person.hasPermission("areashop.unrent")) {
|
||||
return true;
|
||||
}
|
||||
if(person instanceof Player) {
|
||||
Player player = (Player)person;
|
||||
if(person instanceof Player player) {
|
||||
return region.isOwner(player) && person.hasPermission("areashop.unrentown");
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.features;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.events.ask.AddingRegionEvent;
|
||||
import me.wiefferink.areashop.events.ask.BuyingRegionEvent;
|
||||
@@ -21,8 +23,6 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package me.wiefferink.areashop.features;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.events.ask.BuyingRegionEvent;
|
||||
import me.wiefferink.areashop.events.ask.RentingRegionEvent;
|
||||
@@ -20,8 +22,6 @@ import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class DebugFeature extends RegionFeature {
|
||||
|
||||
@@ -3,6 +3,7 @@ package me.wiefferink.areashop.features;
|
||||
import com.google.inject.assistedinject.Assisted;
|
||||
import com.google.inject.assistedinject.AssistedInject;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.features.signs.RegionSign;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
@@ -19,7 +20,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
+2
-2
@@ -5,6 +5,8 @@ import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
|
||||
import com.sk89q.worldguard.protection.flags.RegionGroupFlag;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.events.notify.UpdateRegionEvent;
|
||||
import me.wiefferink.areashop.interfaces.RegionAccessSet;
|
||||
@@ -15,8 +17,6 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -6,11 +6,11 @@ import com.google.inject.assistedinject.AssistedInject;
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.managers.SignErrorLogger;
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.tools.Materials;
|
||||
import me.wiefferink.areashop.tools.SignUtils;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -37,7 +37,6 @@ public class RegionSign {
|
||||
|
||||
private final BlockBehaviourHelper blockHelper;
|
||||
private final SignErrorLogger errorLogger;
|
||||
private final BukkitInterface bukkitInterface;
|
||||
|
||||
private final SignsFeature signsFeature;
|
||||
private final String key;
|
||||
@@ -47,13 +46,11 @@ public class RegionSign {
|
||||
RegionSign(
|
||||
@Nonnull BlockBehaviourHelper blockBehaviourHelper,
|
||||
@Nonnull SignErrorLogger signErrorLogger,
|
||||
@Nonnull BukkitInterface bukkitInterface,
|
||||
@Assisted @Nonnull SignsFeature signsFeature,
|
||||
@Assisted @Nonnull String key
|
||||
) {
|
||||
this.blockHelper = blockBehaviourHelper;
|
||||
this.errorLogger = signErrorLogger;
|
||||
this.bukkitInterface = bukkitInterface;
|
||||
this.signsFeature = signsFeature;
|
||||
this.key = key;
|
||||
}
|
||||
@@ -98,8 +95,11 @@ public class RegionSign {
|
||||
* Remove this sign from the region.
|
||||
*/
|
||||
public void remove() {
|
||||
getLocation().getBlock().setType(Material.AIR);
|
||||
this.signsFeature.signManager().removeSign(this);
|
||||
Location location = getLocation();
|
||||
if (location != null && location.getWorld() != null) {
|
||||
location.getBlock().setType(Material.AIR);
|
||||
this.signsFeature.signManager().removeSign(this);
|
||||
}
|
||||
getRegion().setSetting("general.signs." + key, null);
|
||||
// Remove the sign from the region's sign manager
|
||||
}
|
||||
@@ -208,7 +208,7 @@ public class RegionSign {
|
||||
getRegion().setSetting("general.signs." + key + ".signType", block.getType().name());
|
||||
}
|
||||
if(!regionConfig.isString("general.signs." + key + ".facing")) {
|
||||
BlockFace signFacing = bukkitInterface.getSignFacing(block);
|
||||
BlockFace signFacing = SignUtils.getSignFacing(block);
|
||||
getRegion().setSetting("general.signs." + key + ".facing", signFacing == null ? null : signFacing.toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ package me.wiefferink.areashop.features.signs;
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import io.github.bakedlibs.dough.blocks.ChunkPosition;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -40,7 +42,7 @@ public class SignCache {
|
||||
BlockPosition blockPosition = regionSign.getPosition();
|
||||
this.allSigns.put(blockPosition.getPosition(), regionSign);
|
||||
ChunkPosition chunkPosition = new ChunkPosition(blockPosition.getChunk());
|
||||
Collection<RegionSign> signs = this.signsByChunk.computeIfAbsent(chunkPosition.getPosition(), x -> new ArrayList<>());
|
||||
Collection<RegionSign> signs = this.signsByChunk.computeIfAbsent(chunkPosition.getPosition(), x -> new HashSet<>());
|
||||
signs.add(regionSign);
|
||||
}
|
||||
|
||||
@@ -51,8 +53,9 @@ public class SignCache {
|
||||
public Optional<RegionSign> removeSign(BlockPosition position) {
|
||||
RegionSign removed = this.allSigns.remove(position.getPosition());
|
||||
if (removed != null) {
|
||||
Location location = position.toLocation();
|
||||
this.signsByChunk.remove(new ChunkPosition(location).getPosition());
|
||||
World world = position.getWorld();
|
||||
ChunkPosition chunkPosition = new ChunkPosition(world, position.getChunkX(), position.getChunkZ());
|
||||
this.signsByChunk.remove(chunkPosition.getPosition());
|
||||
// Remove the sign from the region
|
||||
}
|
||||
return Optional.ofNullable(removed);
|
||||
|
||||
@@ -7,16 +7,16 @@ import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.events.ask.AddingRegionEvent;
|
||||
import me.wiefferink.areashop.events.notify.UpdateRegionEvent;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.managers.SignLinkerManager;
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.regions.RegionFactory;
|
||||
import me.wiefferink.areashop.regions.RentRegion;
|
||||
import me.wiefferink.areashop.tools.Materials;
|
||||
import me.wiefferink.areashop.tools.SignUtils;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.bukkitdo.Do;
|
||||
import org.bukkit.Chunk;
|
||||
@@ -47,7 +47,6 @@ public class SignListener implements Listener {
|
||||
private final MessageBridge messageBridge;
|
||||
private final SignManager signManager;
|
||||
private final SignLinkerManager signLinkerManager;
|
||||
private final BukkitInterface bukkitInterface;
|
||||
private final WorldGuardInterface worldGuardInterface;
|
||||
private final RegionFactory regionFactory;
|
||||
private final IFileManager fileManager;
|
||||
@@ -58,7 +57,6 @@ public class SignListener implements Listener {
|
||||
@Nonnull RegionFactory regionFactory,
|
||||
@Nonnull MessageBridge messageBridge,
|
||||
@Nonnull SignLinkerManager signLinkerManager,
|
||||
@Nonnull BukkitInterface bukkitInterface,
|
||||
@Nonnull WorldGuardInterface worldGuardInterface,
|
||||
@Nonnull SignManager signManager,
|
||||
@Nonnull IFileManager fileManager) {
|
||||
@@ -68,15 +66,14 @@ public class SignListener implements Listener {
|
||||
this.regionFactory = regionFactory;
|
||||
this.behaviourHelper = behaviourHelper;
|
||||
this.plugin = plugin;
|
||||
this.bukkitInterface = bukkitInterface;
|
||||
this.worldGuardInterface = worldGuardInterface;
|
||||
this.messageBridge = messageBridge;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
public void regionUpdate(UpdateRegionEvent event) {
|
||||
Optional<SignsFeature> signsFeature = event.getRegion().getFeature(SignsFeature.class);
|
||||
signsFeature.map(SignsFeature::signManager).ifPresent(SignManager::update);
|
||||
SignsFeature signsFeature = event.getRegion().getSignsFeature();
|
||||
signsFeature.signManager().update();
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +89,6 @@ public class SignListener implements Listener {
|
||||
if(chunkSigns.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
chunkSigns.remove(null);
|
||||
Do.forAll(chunkSigns, RegionSign::update);
|
||||
}
|
||||
|
||||
@@ -292,7 +288,7 @@ public class SignListener implements Listener {
|
||||
if(durationSet) {
|
||||
rent.setDuration(thirdLine);
|
||||
}
|
||||
rent.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), bukkitInterface.getSignFacing(event.getBlock()), null);
|
||||
rent.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), SignUtils.getSignFacing(event.getBlock()), null);
|
||||
|
||||
AddingRegionEvent addingRegionEvent = plugin.getFileManager().addRegion(rent);
|
||||
if (addingRegionEvent.isCancelled()) {
|
||||
@@ -392,7 +388,7 @@ public class SignListener implements Listener {
|
||||
if(priceSet) {
|
||||
buy.setPrice(price);
|
||||
}
|
||||
buy.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), bukkitInterface.getSignFacing(event.getBlock()), null);
|
||||
buy.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), SignUtils.getSignFacing(event.getBlock()), null);
|
||||
|
||||
AddingRegionEvent addingRegionEvent = plugin.getFileManager().addRegion(buy);
|
||||
if (addingRegionEvent.isCancelled()) {
|
||||
@@ -438,10 +434,10 @@ public class SignListener implements Listener {
|
||||
}
|
||||
|
||||
if(thirdLine == null || thirdLine.isEmpty()) {
|
||||
region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), bukkitInterface.getSignFacing(event.getBlock()), null);
|
||||
region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), SignUtils.getSignFacing(event.getBlock()), null);
|
||||
messageBridge.message(player, "addsign-success", region);
|
||||
} else {
|
||||
region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), bukkitInterface.getSignFacing(event.getBlock()), thirdLine);
|
||||
region.getSignsFeature().addSign(event.getBlock().getLocation(), event.getBlock().getType(), SignUtils.getSignFacing(event.getBlock()), thirdLine);
|
||||
messageBridge.message(player, "addsign-successProfile", thirdLine, region);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package me.wiefferink.areashop.features.signs;
|
||||
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.managers.Manager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@@ -52,11 +53,22 @@ public class SignManager extends Manager {
|
||||
}
|
||||
|
||||
public void removeSign(RegionSign regionSign) {
|
||||
removeSign(regionSign.getLocation());
|
||||
Location location = regionSign.getLocation();
|
||||
if (location.getWorld() == null) {
|
||||
return;
|
||||
}
|
||||
cacheForWorld(location.getWorld()).removeSign(regionSign);
|
||||
}
|
||||
|
||||
public Optional<RegionSign> removeSign(Location location) {
|
||||
return getCacheForWorld(location.getWorld()).flatMap(cache -> cache.removeSign(location));
|
||||
if (location == null || location.getWorld() == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return removeSign(new BlockPosition(location));
|
||||
}
|
||||
|
||||
public Optional<RegionSign> removeSign(BlockPosition blockPosition) {
|
||||
return getCacheForWorld(blockPosition.getWorld()).flatMap(cache -> cache.removeSign(blockPosition));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,9 +77,10 @@ public class SignManager extends Manager {
|
||||
*/
|
||||
public boolean update() {
|
||||
boolean result = true;
|
||||
for (SignCache signCache : this.signCacheMap.values())
|
||||
for(RegionSign sign : signCache.allSigns()) {
|
||||
result &= sign.update();
|
||||
for (SignCache signCache : this.signCacheMap.values()) {
|
||||
for (RegionSign sign : signCache.allSigns()) {
|
||||
result &= sign.update();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -94,6 +107,7 @@ public class SignManager extends Manager {
|
||||
|
||||
|
||||
public void shutdown() {
|
||||
update();
|
||||
this.signCacheMap.values().forEach(SignCache::clear);
|
||||
this.signCacheMap.clear();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package me.wiefferink.areashop.features.signs;
|
||||
|
||||
import com.google.inject.assistedinject.Assisted;
|
||||
import com.google.inject.assistedinject.AssistedInject;
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import io.github.bakedlibs.dough.blocks.ChunkPosition;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.features.RegionFeature;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
@@ -12,6 +14,8 @@ import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class SignsFeature extends RegionFeature {
|
||||
|
||||
@@ -34,17 +38,18 @@ public class SignsFeature extends RegionFeature {
|
||||
setRegion(region);
|
||||
// Setup current signs
|
||||
ConfigurationSection signSection = region.getConfig().getConfigurationSection("general.signs");
|
||||
if(signSection != null) {
|
||||
for(String signKey : signSection.getKeys(false)) {
|
||||
RegionSign sign = signFactory.createRegionSign(this, signKey);
|
||||
Location location = sign.getLocation();
|
||||
if(location == null) {
|
||||
AreaShop.warn("Sign with key " + signKey + " of region " + region.getName() + " does not have a proper location");
|
||||
continue;
|
||||
}
|
||||
this.globalSignManager.cacheForWorld(location.getWorld()).addSign(sign);
|
||||
this.internalSignManager.addSign(sign);
|
||||
if (signSection == null) {
|
||||
return;
|
||||
}
|
||||
for(String signKey : signSection.getKeys(false)) {
|
||||
RegionSign sign = signFactory.createRegionSign(this, signKey);
|
||||
Location location = sign.getLocation();
|
||||
if(location == null) {
|
||||
AreaShop.warn("Sign with key " + signKey + " of region " + region.getName() + " does not have a proper location");
|
||||
continue;
|
||||
}
|
||||
this.globalSignManager.cacheForWorld(location.getWorld()).addSign(sign);
|
||||
this.internalSignManager.addSign(sign);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,10 @@ import com.google.inject.Singleton;
|
||||
import com.google.inject.assistedinject.FactoryModuleBuilder;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.managers.SignLinkerManager;
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.regions.RegionFactory;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -30,7 +29,6 @@ public class SignsModule extends AbstractModule {
|
||||
@Nonnull RegionFactory regionFactory,
|
||||
@Nonnull MessageBridge messageBridge,
|
||||
@Nonnull SignLinkerManager signLinkerManager,
|
||||
@Nonnull BukkitInterface bukkitInterface,
|
||||
@Nonnull WorldGuardInterface worldGuardInterface,
|
||||
@Nonnull SignManager signManager,
|
||||
@Nonnull IFileManager fileManager
|
||||
@@ -41,7 +39,6 @@ public class SignsModule extends AbstractModule {
|
||||
regionFactory,
|
||||
messageBridge,
|
||||
signLinkerManager,
|
||||
bukkitInterface,
|
||||
worldGuardInterface,
|
||||
signManager,
|
||||
fileManager
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.wiefferink.areashop.managers;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.commands.AddCommand;
|
||||
@@ -27,6 +29,7 @@ import me.wiefferink.areashop.commands.RentCommand;
|
||||
import me.wiefferink.areashop.commands.ResellCommand;
|
||||
import me.wiefferink.areashop.commands.SchematiceventCommand;
|
||||
import me.wiefferink.areashop.commands.SellCommand;
|
||||
import me.wiefferink.areashop.commands.SetTransferCommand;
|
||||
import me.wiefferink.areashop.commands.SetdurationCommand;
|
||||
import me.wiefferink.areashop.commands.SetlandlordCommand;
|
||||
import me.wiefferink.areashop.commands.SetownerCommand;
|
||||
@@ -36,6 +39,7 @@ import me.wiefferink.areashop.commands.SetteleportCommand;
|
||||
import me.wiefferink.areashop.commands.StackCommand;
|
||||
import me.wiefferink.areashop.commands.StopresellCommand;
|
||||
import me.wiefferink.areashop.commands.TeleportCommand;
|
||||
import me.wiefferink.areashop.commands.TransferCommand;
|
||||
import me.wiefferink.areashop.commands.UnrentCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
@@ -43,8 +47,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
@@ -70,6 +72,7 @@ public class CommandManager extends Manager implements CommandExecutor, TabCompl
|
||||
commands.add(injector.getInstance(UnrentCommand.class));
|
||||
commands.add(injector.getInstance(BuyCommand.class));
|
||||
commands.add(injector.getInstance(SellCommand.class));
|
||||
commands.add(injector.getInstance(TransferCommand.class));
|
||||
commands.add(injector.getInstance(MeCommand.class));
|
||||
commands.add(injector.getInstance(InfoCommand.class));
|
||||
commands.add(injector.getInstance(TeleportCommand.class));
|
||||
@@ -83,6 +86,7 @@ public class CommandManager extends Manager implements CommandExecutor, TabCompl
|
||||
commands.add(injector.getInstance(SetpriceCommand.class));
|
||||
commands.add(injector.getInstance(SetownerCommand.class));
|
||||
commands.add(injector.getInstance(SetdurationCommand.class));
|
||||
commands.add(injector.getInstance(SetTransferCommand.class));
|
||||
commands.add(injector.getInstance(ReloadCommand.class));
|
||||
commands.add(injector.getInstance(GroupaddCommand.class));
|
||||
commands.add(injector.getInstance(GroupdelCommand.class));
|
||||
|
||||
@@ -2,6 +2,8 @@ package me.wiefferink.areashop.managers;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.ProvisionException;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.features.CommandsFeature;
|
||||
import me.wiefferink.areashop.features.DebugFeature;
|
||||
@@ -14,8 +16,6 @@ import me.wiefferink.areashop.features.signs.SignsFeature;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
@@ -60,6 +60,10 @@ public class FeatureManager extends Manager {
|
||||
}
|
||||
}
|
||||
|
||||
public <T extends RegionFeature> void registerNonGlobalFeature(@Nonnull Class<T> clazz, @Nonnull Function<GeneralRegion, T> constructor) {
|
||||
this.regionFeatureConstructors.put(clazz, constructor);
|
||||
}
|
||||
|
||||
private <T extends RegionFeature> Function<GeneralRegion, T> wrapInstantiator(Class<T> clazz, Function<GeneralRegion, T> function
|
||||
) {
|
||||
return region -> {
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
package me.wiefferink.areashop.managers;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.io.Files;
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import io.github.bakedlibs.dough.blocks.BlockPosition;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.events.ask.AddingRegionEvent;
|
||||
import me.wiefferink.areashop.events.ask.DeletingRegionEvent;
|
||||
import me.wiefferink.areashop.events.notify.AddedRegionEvent;
|
||||
import me.wiefferink.areashop.events.notify.DeletedRegionEvent;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.features.signs.SignsFeature;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.regions.BuyRegion;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
@@ -32,8 +35,6 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -43,6 +44,7 @@ import java.io.InputStreamReader;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -52,6 +54,7 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -77,6 +80,8 @@ public class FileManager extends Manager implements IFileManager {
|
||||
private HashMap<String, Integer> versions = null;
|
||||
private final String versionPath;
|
||||
private final String schemFolder;
|
||||
|
||||
private final SignManager signManager;
|
||||
private final WorldGuardInterface worldGuardInterface;
|
||||
private final MessageBridge messageBridge;
|
||||
private final RegionFactory regionFactory;
|
||||
@@ -89,12 +94,14 @@ public class FileManager extends Manager implements IFileManager {
|
||||
@Nonnull AreaShop plugin,
|
||||
@Nonnull WorldGuardInterface worldGuardInterface,
|
||||
@Nonnull MessageBridge messageBridge,
|
||||
@Nonnull RegionFactory regionFactory
|
||||
@Nonnull RegionFactory regionFactory,
|
||||
@Nonnull SignManager signManager
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.worldGuardInterface = worldGuardInterface;
|
||||
this.messageBridge = messageBridge;
|
||||
this.regionFactory = regionFactory;
|
||||
this.signManager = signManager;
|
||||
regions = new HashMap<>();
|
||||
buys = new HashMap<>();
|
||||
rents = new HashMap<>();
|
||||
@@ -117,7 +124,11 @@ public class FileManager extends Manager implements IFileManager {
|
||||
public void shutdown() {
|
||||
// Update lastactive time for players that are online now
|
||||
for(GeneralRegion region : this.regions.values()) {
|
||||
Player player = Bukkit.getPlayer(region.getOwner());
|
||||
UUID ownerUuid = region.getOwner();
|
||||
if (ownerUuid == null) {
|
||||
continue;
|
||||
}
|
||||
Player player = Bukkit.getPlayer(ownerUuid);
|
||||
if(player != null) {
|
||||
region.updateLastActiveTime();
|
||||
}
|
||||
@@ -354,10 +365,10 @@ public class FileManager extends Manager implements IFileManager {
|
||||
}
|
||||
final String key = region.getName().toLowerCase(Locale.ENGLISH);
|
||||
regions.put(key, region);
|
||||
if (region instanceof BuyRegion) {
|
||||
buys.put(key, (BuyRegion) region);
|
||||
} else if (region instanceof RentRegion) {
|
||||
rents.put(key, (RentRegion) region);
|
||||
if (region instanceof BuyRegion buyRegion) {
|
||||
buys.put(key, buyRegion);
|
||||
} else if (region instanceof RentRegion rentRegion) {
|
||||
rents.put(key, rentRegion);
|
||||
}
|
||||
Bukkit.getPluginManager().callEvent(new AddedRegionEvent(region));
|
||||
return event;
|
||||
@@ -465,8 +476,11 @@ public class FileManager extends Manager implements IFileManager {
|
||||
|
||||
// Delete the signs
|
||||
if(region.getWorld() != null) {
|
||||
for(BlockPosition sign : region.getSignsFeature().signManager().allSignLocations()) {
|
||||
SignManager regionSignManager = region.getSignsFeature().signManager();
|
||||
for(BlockPosition sign : regionSignManager.allSignLocations()) {
|
||||
sign.getBlock().setType(Material.AIR);
|
||||
regionSignManager.removeSign(sign);
|
||||
this.signManager.removeSign(sign);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,8 +851,8 @@ public class FileManager extends Manager implements IFileManager {
|
||||
}
|
||||
// Load default.yml from the plugin folder, and as backup the default one
|
||||
try(
|
||||
InputStreamReader custom = new InputStreamReader(new FileInputStream(defaultFile), Charsets.UTF_8);
|
||||
InputStreamReader normal = new InputStreamReader(plugin.getResource(AreaShop.defaultFile), Charsets.UTF_8)
|
||||
InputStreamReader custom = new InputStreamReader(new FileInputStream(defaultFile), StandardCharsets.UTF_8);
|
||||
InputStreamReader normal = new InputStreamReader(plugin.getResource(AreaShop.defaultFile), StandardCharsets.UTF_8)
|
||||
) {
|
||||
defaultConfig = YamlConfiguration.loadConfiguration(custom);
|
||||
if(defaultConfig.getKeys(false).isEmpty()) {
|
||||
@@ -878,9 +892,9 @@ public class FileManager extends Manager implements IFileManager {
|
||||
}
|
||||
// Load config.yml from the plugin folder
|
||||
try(
|
||||
InputStreamReader custom = new InputStreamReader(new FileInputStream(configFile), Charsets.UTF_8);
|
||||
InputStreamReader normal = new InputStreamReader(plugin.getResource(AreaShop.configFile), Charsets.UTF_8);
|
||||
InputStreamReader hidden = new InputStreamReader(plugin.getResource(AreaShop.configFileHidden), Charsets.UTF_8)
|
||||
InputStreamReader custom = new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8);
|
||||
InputStreamReader normal = new InputStreamReader(plugin.getResource(AreaShop.configFile), StandardCharsets.UTF_8);
|
||||
InputStreamReader hidden = new InputStreamReader(plugin.getResource(AreaShop.configFileHidden), StandardCharsets.UTF_8)
|
||||
) {
|
||||
config = YamlConfiguration.loadConfiguration(custom);
|
||||
if(config.getKeys(false).isEmpty()) {
|
||||
@@ -917,7 +931,7 @@ public class FileManager extends Manager implements IFileManager {
|
||||
File groupFile = new File(groupsPath);
|
||||
if(groupFile.exists() && groupFile.isFile()) {
|
||||
try(
|
||||
InputStreamReader reader = new InputStreamReader(new FileInputStream(groupFile), Charsets.UTF_8)
|
||||
InputStreamReader reader = new InputStreamReader(new FileInputStream(groupFile), StandardCharsets.UTF_8)
|
||||
) {
|
||||
groupsConfig = YamlConfiguration.loadConfiguration(reader);
|
||||
} catch(IOException e) {
|
||||
@@ -939,7 +953,9 @@ public class FileManager extends Manager implements IFileManager {
|
||||
*/
|
||||
@Override
|
||||
public void loadRegionFiles() {
|
||||
regions.clear();
|
||||
this.regions.clear();
|
||||
this.buys.clear();
|
||||
this.rents.clear();
|
||||
final File file = new File(regionsPath);
|
||||
if(!file.exists()) {
|
||||
if(!file.mkdirs()) {
|
||||
@@ -971,7 +987,7 @@ public class FileManager extends Manager implements IFileManager {
|
||||
// Load the region file from disk in UTF8 mode
|
||||
YamlConfiguration regionConfig;
|
||||
try(
|
||||
InputStreamReader reader = new InputStreamReader(new FileInputStream(regionFile), Charsets.UTF_8)
|
||||
InputStreamReader reader = new InputStreamReader(new FileInputStream(regionFile), StandardCharsets.UTF_8)
|
||||
) {
|
||||
regionConfig = YamlConfiguration.loadConfiguration(reader);
|
||||
if(regionConfig.getKeys(false).isEmpty()) {
|
||||
|
||||
@@ -96,9 +96,9 @@ public interface IFileManager {
|
||||
Collection<RentRegion> getRents();
|
||||
|
||||
/**
|
||||
* Get all rental regions.
|
||||
* Get all rental regions (readonly)
|
||||
*
|
||||
* @return List of all rental regions
|
||||
* @return Unmodifiable collection of all rental regions
|
||||
*/
|
||||
Collection<RentRegion> getRentsRef();
|
||||
|
||||
@@ -109,6 +109,10 @@ public interface IFileManager {
|
||||
*/
|
||||
List<BuyRegion> getBuys();
|
||||
|
||||
/**
|
||||
* Get all buy regions (readonly)
|
||||
* @return Unmodifiable collection of all buy regions
|
||||
*/
|
||||
Collection<BuyRegion> getBuysRef();
|
||||
|
||||
/**
|
||||
@@ -119,9 +123,9 @@ public interface IFileManager {
|
||||
List<GeneralRegion> getRegions();
|
||||
|
||||
/**
|
||||
* Get all regions.
|
||||
* Get all regions (readonly)
|
||||
*
|
||||
* @return List of all regions (it is safe to modify the list)
|
||||
* @return Unmodifiable collection of all regions
|
||||
*/
|
||||
Collection<GeneralRegion> getRegionsRef();
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package me.wiefferink.areashop.managers;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.features.signs.RegionSign;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.regions.GeneralRegion;
|
||||
import me.wiefferink.areashop.tools.Materials;
|
||||
import me.wiefferink.areashop.tools.SignUtils;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@@ -23,8 +25,6 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.util.BlockIterator;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -41,8 +41,6 @@ public class SignLinkerManager extends Manager implements Listener {
|
||||
@Inject
|
||||
private AreaShop plugin;
|
||||
@Inject
|
||||
private BukkitInterface bukkitInterface;
|
||||
@Inject
|
||||
private SignManager signManager;
|
||||
@Inject
|
||||
private MessageBridge messageBridge;
|
||||
@@ -147,7 +145,7 @@ public class SignLinkerManager extends Manager implements Listener {
|
||||
messageBridge.message(player, "linksigns-alreadyRegistered", regionSign.getRegion());
|
||||
return;
|
||||
}
|
||||
linker.setSign(block.getLocation(), block.getType(), bukkitInterface.getSignFacing(block));
|
||||
linker.setSign(block.getLocation(), block.getType(), SignUtils.getSignFacing(block));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,65 +6,60 @@ import com.google.inject.assistedinject.FactoryModuleBuilder;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.areashop.features.FeatureFactory;
|
||||
import me.wiefferink.areashop.features.signs.SignManager;
|
||||
import me.wiefferink.areashop.features.signs.SignsModule;
|
||||
import me.wiefferink.areashop.interfaces.BukkitInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.managers.CommandManager;
|
||||
import me.wiefferink.areashop.managers.FeatureManager;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.managers.FileManager;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.managers.SignErrorLogger;
|
||||
import me.wiefferink.areashop.managers.SignLinkerManager;
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.nms.NMS;
|
||||
import me.wiefferink.areashop.platform.adapter.PlatformAdapter;
|
||||
import me.wiefferink.areashop.regions.ImportJobFactory;
|
||||
import me.wiefferink.areashop.regions.RegionModule;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AreaShopModule extends AbstractModule {
|
||||
|
||||
private final AreaShop instance;
|
||||
private final BukkitInterface bukkitInterface;
|
||||
private final WorldGuardInterface worldGuardInterface;
|
||||
private final WorldEditInterface worldEditInterface;
|
||||
private final NMS nms;
|
||||
private final PlatformAdapter platformAdapter;
|
||||
private final MessageBridge messageBridge;
|
||||
private final SignErrorLogger signErrorLogger;
|
||||
private final DependencyModule dependencyModule;
|
||||
private final AbstractModule[] extras;
|
||||
|
||||
public AreaShopModule(@Nonnull AreaShop instance,
|
||||
@Nonnull MessageBridge messageBridge,
|
||||
@Nonnull NMS nms,
|
||||
@Nonnull BukkitInterface bukkitInterface,
|
||||
@Nonnull PlatformAdapter platformAdapter,
|
||||
@Nonnull WorldEditInterface worldEditInterface,
|
||||
@Nonnull WorldGuardInterface worldGuardInterface,
|
||||
@Nonnull SignErrorLogger signErrorLogger,
|
||||
@Nonnull DependencyModule dependencyModule
|
||||
@Nonnull AbstractModule... extras
|
||||
) {
|
||||
this.instance = instance;
|
||||
this.messageBridge = messageBridge;
|
||||
this.nms = nms;
|
||||
this.platformAdapter = platformAdapter;
|
||||
this.signErrorLogger = signErrorLogger;
|
||||
this.bukkitInterface = bukkitInterface;
|
||||
this.worldEditInterface = worldEditInterface;
|
||||
this.worldGuardInterface = worldGuardInterface;
|
||||
this.dependencyModule = dependencyModule;
|
||||
this.extras = extras;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
install(this.dependencyModule);
|
||||
Arrays.stream(this.extras).forEach(this::install);
|
||||
bind(Plugin.class).toInstance(this.instance);
|
||||
bind(AreaShop.class).toInstance(this.instance);
|
||||
bind(MessageBridge.class).toInstance(this.messageBridge);
|
||||
bind(NMS.class).toInstance(this.nms);
|
||||
bind(BlockBehaviourHelper.class).toInstance(this.nms.blockBehaviourHelper());
|
||||
bind(BukkitInterface.class).toInstance(this.bukkitInterface);
|
||||
bind(WorldGuardInterface.class).toInstance(this.worldGuardInterface);
|
||||
bind(SignManager.class).asEagerSingleton();
|
||||
bind(WorldEditInterface.class).toInstance(this.worldEditInterface);
|
||||
bind(SignErrorLogger.class).toInstance(this.signErrorLogger);
|
||||
// Setup managers
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package me.wiefferink.areashop.modules;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import me.wiefferink.areashop.adapters.platform.MinecraftPlatform;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.PlatformAdapter;
|
||||
import me.wiefferink.areashop.tools.BukkitSchedulerExecutor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlatformModule extends AbstractModule {
|
||||
|
||||
private final MinecraftPlatform minecraftPlatform;
|
||||
private final PlatformAdapter platformAdapter;
|
||||
|
||||
public PlatformModule(@NotNull MinecraftPlatform platform,
|
||||
@NotNull PlatformAdapter platformAdapter) {
|
||||
this.minecraftPlatform = platform;
|
||||
this.platformAdapter = platformAdapter;
|
||||
}
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(MinecraftPlatform.class).toInstance(this.minecraftPlatform);
|
||||
bind(OfflinePlayerHelper.class).toInstance(this.minecraftPlatform.offlinePlayerHelper());
|
||||
bind(PlatformAdapter.class).toInstance(this.platformAdapter);
|
||||
bind(BlockBehaviourHelper.class).toInstance(this.platformAdapter.blockBehaviourHelper());
|
||||
bind(BukkitSchedulerExecutor.class).asEagerSingleton();
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,21 @@ public class BuyRegion extends GeneralRegion {
|
||||
this.economy = economy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOwner(UUID player) {
|
||||
return isBuyer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getOwner() {
|
||||
return getBuyer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOwner(UUID player) {
|
||||
setBuyer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RegionType getType() {
|
||||
return RegionType.BUY;
|
||||
@@ -237,31 +252,20 @@ public class BuyRegion extends GeneralRegion {
|
||||
|
||||
@Override
|
||||
public Object provideReplacement(String variable) {
|
||||
switch(variable) {
|
||||
case AreaShop.tagPrice:
|
||||
return getFormattedPrice();
|
||||
case AreaShop.tagRawPrice:
|
||||
return getPrice();
|
||||
case AreaShop.tagPlayerName:
|
||||
return getPlayerName();
|
||||
case AreaShop.tagPlayerUUID:
|
||||
return getBuyer();
|
||||
case AreaShop.tagResellPrice:
|
||||
return getFormattedResellPrice();
|
||||
case AreaShop.tagRawResellPrice:
|
||||
return getResellPrice();
|
||||
case AreaShop.tagMoneyBackAmount:
|
||||
return getFormattedMoneyBackAmount();
|
||||
case AreaShop.tagRawMoneyBackAmount:
|
||||
return getMoneyBackAmount();
|
||||
case AreaShop.tagMoneyBackPercentage:
|
||||
return getMoneyBackPercentage() % 1.0 == 0.0 ? (int)getMoneyBackPercentage() : getMoneyBackPercentage();
|
||||
case AreaShop.tagMaxInactiveTime:
|
||||
return this.getFormattedInactiveTimeUntilSell();
|
||||
|
||||
default:
|
||||
return super.provideReplacement(variable);
|
||||
}
|
||||
return switch (variable) {
|
||||
case AreaShop.tagPrice -> getFormattedPrice();
|
||||
case AreaShop.tagRawPrice -> getPrice();
|
||||
case AreaShop.tagPlayerName -> getPlayerName();
|
||||
case AreaShop.tagPlayerUUID -> getBuyer();
|
||||
case AreaShop.tagResellPrice -> getFormattedResellPrice();
|
||||
case AreaShop.tagRawResellPrice -> getResellPrice();
|
||||
case AreaShop.tagMoneyBackAmount -> getFormattedMoneyBackAmount();
|
||||
case AreaShop.tagRawMoneyBackAmount -> getMoneyBackAmount();
|
||||
case AreaShop.tagMoneyBackPercentage ->
|
||||
getMoneyBackPercentage() % 1.0 == 0.0 ? (int) getMoneyBackPercentage() : getMoneyBackPercentage();
|
||||
case AreaShop.tagMaxInactiveTime -> this.getFormattedInactiveTimeUntilSell();
|
||||
default -> super.provideReplacement(variable);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -404,8 +408,6 @@ public class BuyRegion extends GeneralRegion {
|
||||
if(r == null || !r.transactionSuccess()) {
|
||||
AreaShop.warn("Something went wrong with paying '" + oldOwnerName + "' " + getFormattedPrice() + " for his resell of region " + getName() + " to " + offlinePlayer.getName());
|
||||
}
|
||||
// Resell is done, disable that now
|
||||
disableReselling();
|
||||
|
||||
// Set the owner
|
||||
setBuyer(offlinePlayer.getUniqueId());
|
||||
@@ -417,6 +419,9 @@ public class BuyRegion extends GeneralRegion {
|
||||
// Notify about updates
|
||||
this.notifyAndUpdate(new ResoldRegionEvent(this, oldOwner));
|
||||
|
||||
// Resell is done, disable that now
|
||||
disableReselling();
|
||||
|
||||
// Send message to the player
|
||||
message(offlinePlayer, "buy-successResale", oldOwnerName);
|
||||
Player seller = Bukkit.getPlayer(oldOwner);
|
||||
@@ -479,7 +484,7 @@ public class BuyRegion extends GeneralRegion {
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean sell(boolean giveMoneyBack, CommandSender executor) {
|
||||
boolean own = executor instanceof Player && this.isBuyer((Player)executor);
|
||||
boolean own = executor instanceof Player player && this.isBuyer(player);
|
||||
if(executor != null) {
|
||||
if(!executor.hasPermission("areashop.sell") && !own) {
|
||||
message(executor, "sell-noPermissionOther");
|
||||
@@ -534,7 +539,7 @@ public class BuyRegion extends GeneralRegion {
|
||||
|
||||
// Give back the money
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(getBuyer());
|
||||
if(player != null && !noPayBack) {
|
||||
if(player.hasPlayedBefore() && !noPayBack) {
|
||||
EconomyResponse response = null;
|
||||
boolean error = false;
|
||||
try {
|
||||
|
||||
@@ -14,6 +14,7 @@ import me.wiefferink.areashop.interfaces.WorldEditInterface;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
import me.wiefferink.areashop.managers.FeatureManager;
|
||||
import me.wiefferink.areashop.managers.IFileManager;
|
||||
import me.wiefferink.areashop.tools.SimpleMessageBridge;
|
||||
import me.wiefferink.areashop.tools.Utils;
|
||||
import me.wiefferink.bukkitdo.Do;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
@@ -42,6 +43,7 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@@ -283,7 +285,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
|
||||
@Override
|
||||
public boolean equals(Object region) {
|
||||
return region instanceof GeneralRegion && ((GeneralRegion)region).getName().equals(getName());
|
||||
return region instanceof GeneralRegion generalRegion && generalRegion.getName().equals(getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -311,7 +313,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
* Broadcast the given event and update the region status.
|
||||
* @param event The update event that should be broadcasted
|
||||
*/
|
||||
public void notifyAndUpdate(NotifyRegionEvent event) {
|
||||
public void notifyAndUpdate(NotifyRegionEvent<?> event) {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
update();
|
||||
}
|
||||
@@ -434,33 +436,18 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
* @param player Player to check ownership for
|
||||
* @return true if the player currently rents or buys this region
|
||||
*/
|
||||
public boolean isOwner(UUID player) {
|
||||
return (this instanceof RentRegion && ((RentRegion)this).isRenter(player)) || (this instanceof BuyRegion && ((BuyRegion)this).isBuyer(player));
|
||||
}
|
||||
public abstract boolean isOwner(UUID player);
|
||||
|
||||
/**
|
||||
* Get the player that is currently the owner of this region (either bought or rented it).
|
||||
* @return The UUID of the owner of this region
|
||||
*/
|
||||
public UUID getOwner() {
|
||||
if(this instanceof RentRegion) {
|
||||
return ((RentRegion)this).getRenter();
|
||||
} else {
|
||||
return ((BuyRegion)this).getBuyer();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract UUID getOwner();
|
||||
/**
|
||||
* Change the owner of the region.
|
||||
* @param player The player that should be the owner
|
||||
*/
|
||||
public void setOwner(UUID player) {
|
||||
if(this instanceof RentRegion) {
|
||||
((RentRegion)this).setRenter(player);
|
||||
} else {
|
||||
((BuyRegion)this).setBuyer(player);
|
||||
}
|
||||
}
|
||||
public abstract void setOwner(UUID player);
|
||||
|
||||
/**
|
||||
* Get the landlord of this region (the player that receives any revenue from this region).
|
||||
@@ -479,7 +466,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
if(landlordName != null && !landlordName.isEmpty()) {
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(landlordName);
|
||||
if(offlinePlayer != null) {
|
||||
if(offlinePlayer.hasPlayedBefore()) {
|
||||
return offlinePlayer.getUniqueId();
|
||||
}
|
||||
}
|
||||
@@ -492,7 +479,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
*/
|
||||
public String getLandlordName() {
|
||||
String result = Utils.toName(getLandlord());
|
||||
if(result == null || result.isEmpty()) {
|
||||
if(result.isEmpty()) {
|
||||
result = config.getString("general.landlordName");
|
||||
if(result == null || result.isEmpty()) {
|
||||
result = null;
|
||||
@@ -511,7 +498,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
setSetting("general.landlord", landlord.toString());
|
||||
}
|
||||
String properName = Utils.toName(landlord);
|
||||
if(properName == null) {
|
||||
if(properName.isBlank()) {
|
||||
properName = name;
|
||||
}
|
||||
setSetting("general.landlordName", properName);
|
||||
@@ -531,7 +518,8 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
* @return true if the player is the landlord, otherwise false
|
||||
*/
|
||||
public boolean isLandlord(UUID landlord) {
|
||||
return landlord != null && getLandlord() != null && getLandlord().equals(landlord);
|
||||
UUID ourLandlord = getLandlord();
|
||||
return Objects.equals(landlord, ourLandlord);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -629,86 +617,96 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
|
||||
@Override
|
||||
public Object provideReplacement(String variable) {
|
||||
switch(variable) {
|
||||
switch (variable) {
|
||||
|
||||
// Basics
|
||||
case AreaShop.tagRegionName:
|
||||
case AreaShop.tagRegionName -> {
|
||||
return getName();
|
||||
case AreaShop.tagRegionType:
|
||||
}
|
||||
case AreaShop.tagRegionType -> {
|
||||
return getType().getValue().toLowerCase();
|
||||
case AreaShop.tagWorldName:
|
||||
}
|
||||
case AreaShop.tagWorldName -> {
|
||||
return getWorldName();
|
||||
case AreaShop.tagWidth:
|
||||
}
|
||||
case AreaShop.tagWidth -> {
|
||||
return getWidth();
|
||||
case AreaShop.tagDepth:
|
||||
}
|
||||
case AreaShop.tagDepth -> {
|
||||
return getDepth();
|
||||
case AreaShop.tagHeight:
|
||||
}
|
||||
case AreaShop.tagHeight -> {
|
||||
return getHeight();
|
||||
case AreaShop.tagFriends:
|
||||
}
|
||||
case AreaShop.tagFriends -> {
|
||||
return Utils.createCommaSeparatedList(getFriendsFeature().getFriendNames());
|
||||
case AreaShop.tagFriendsUUID:
|
||||
}
|
||||
case AreaShop.tagFriendsUUID -> {
|
||||
return Utils.createCommaSeparatedList(getFriendsFeature().getFriends());
|
||||
case AreaShop.tagLandlord:
|
||||
}
|
||||
case AreaShop.tagLandlord -> {
|
||||
return getLandlordName();
|
||||
case AreaShop.tagLandlordUUID:
|
||||
}
|
||||
case AreaShop.tagLandlordUUID -> {
|
||||
return getLandlord();
|
||||
case AreaShop.tagVolume:
|
||||
}
|
||||
case AreaShop.tagVolume -> {
|
||||
return getVolume();
|
||||
}
|
||||
|
||||
// Date/time
|
||||
case AreaShop.tagEpoch:
|
||||
case AreaShop.tagEpoch -> {
|
||||
return Calendar.getInstance().getTimeInMillis();
|
||||
case AreaShop.tagMillisecond:
|
||||
}
|
||||
case AreaShop.tagMillisecond -> {
|
||||
return Calendar.getInstance().get(Calendar.MILLISECOND);
|
||||
case AreaShop.tagSecond:
|
||||
}
|
||||
case AreaShop.tagSecond -> {
|
||||
return Calendar.getInstance().get(Calendar.SECOND);
|
||||
case AreaShop.tagMinute:
|
||||
}
|
||||
case AreaShop.tagMinute -> {
|
||||
return Calendar.getInstance().get(Calendar.MINUTE);
|
||||
case AreaShop.tagHour:
|
||||
}
|
||||
case AreaShop.tagHour -> {
|
||||
return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
|
||||
case AreaShop.tagDay:
|
||||
}
|
||||
case AreaShop.tagDay -> {
|
||||
return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
|
||||
case AreaShop.tagMonth:
|
||||
}
|
||||
case AreaShop.tagMonth -> {
|
||||
return Calendar.getInstance().get(Calendar.MONTH) + 1;
|
||||
case AreaShop.tagYear:
|
||||
}
|
||||
case AreaShop.tagYear -> {
|
||||
return Calendar.getInstance().get(Calendar.YEAR);
|
||||
case AreaShop.tagDateTime:
|
||||
}
|
||||
case AreaShop.tagDateTime -> {
|
||||
return new SimpleDateFormat(plugin.getConfig().getString("timeFormatChat")).format(Calendar.getInstance().getTime());
|
||||
case AreaShop.tagDateTimeShort:
|
||||
}
|
||||
case AreaShop.tagDateTimeShort -> {
|
||||
return new SimpleDateFormat(plugin.getConfig().getString("timeFormatSign")).format(Calendar.getInstance().getTime());
|
||||
}
|
||||
|
||||
// Teleport locations
|
||||
default:
|
||||
default -> {
|
||||
Location tp = getTeleportFeature().getTeleportLocation();
|
||||
if(tp == null) {
|
||||
if (tp == null) {
|
||||
return null;
|
||||
}
|
||||
switch(variable) {
|
||||
case AreaShop.tagTeleportBlockX:
|
||||
return tp.getBlockX();
|
||||
case AreaShop.tagTeleportBlockY:
|
||||
return tp.getBlockY();
|
||||
case AreaShop.tagTeleportBlockZ:
|
||||
return tp.getBlockZ();
|
||||
case AreaShop.tagTeleportX:
|
||||
return tp.getX();
|
||||
case AreaShop.tagTeleportY:
|
||||
return tp.getY();
|
||||
case AreaShop.tagTeleportZ:
|
||||
return tp.getZ();
|
||||
case AreaShop.tagTeleportPitch:
|
||||
return tp.getPitch();
|
||||
case AreaShop.tagTeleportYaw:
|
||||
return tp.getYaw();
|
||||
case AreaShop.tagTeleportPitchRound:
|
||||
return Math.round(tp.getPitch());
|
||||
case AreaShop.tagTeleportYawRound:
|
||||
return Math.round(tp.getYaw());
|
||||
case AreaShop.tagTeleportWorld:
|
||||
return tp.getWorld().getName();
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return switch (variable) {
|
||||
case AreaShop.tagTeleportBlockX -> tp.getBlockX();
|
||||
case AreaShop.tagTeleportBlockY -> tp.getBlockY();
|
||||
case AreaShop.tagTeleportBlockZ -> tp.getBlockZ();
|
||||
case AreaShop.tagTeleportX -> tp.getX();
|
||||
case AreaShop.tagTeleportY -> tp.getY();
|
||||
case AreaShop.tagTeleportZ -> tp.getZ();
|
||||
case AreaShop.tagTeleportPitch -> tp.getPitch();
|
||||
case AreaShop.tagTeleportYaw -> tp.getYaw();
|
||||
case AreaShop.tagTeleportPitchRound -> Math.round(tp.getPitch());
|
||||
case AreaShop.tagTeleportYawRound -> Math.round(tp.getYaw());
|
||||
case AreaShop.tagTeleportWorld -> tp.getWorld().getName();
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -746,7 +744,8 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
Object[] newParams = new Object[params.length + 1];
|
||||
newParams[0] = this;
|
||||
System.arraycopy(params, 0, newParams, 1, params.length);
|
||||
Message.fromKey(key).prefix(prefix).replacements(newParams).send(target);
|
||||
Message m = Message.fromKey(key).prefix(prefix).replacements(newParams);
|
||||
SimpleMessageBridge.send(m, target);
|
||||
}
|
||||
|
||||
public void messageNoPrefix(Object target, String key, Object... params) {
|
||||
@@ -797,11 +796,9 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
File saveFile = new File(plugin.getFileManager().getSchematicFolder() + File.separator + fileName);
|
||||
// Create parent directories
|
||||
File parent = saveFile.getParentFile();
|
||||
if(parent != null && !parent.exists()) {
|
||||
if(!parent.mkdirs()) {
|
||||
AreaShop.warn("Did not save region " + getName() + ", schematic directory could not be created: " + saveFile.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
if(parent != null && !parent.exists() && !parent.mkdirs()) {
|
||||
AreaShop.warn("Did not save region " + getName() + ", schematic directory could not be created: " + saveFile.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
boolean result = worldEditInterface.saveRegionBlocks(saveFile, this);
|
||||
if(result) {
|
||||
@@ -829,15 +826,13 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
File saveFile = new File(plugin.getFileManager().getSchematicFolder() + File.separator + fileName);
|
||||
// Create parent directories
|
||||
File parent = saveFile.getParentFile();
|
||||
if(parent != null && !parent.exists()) {
|
||||
if(!parent.mkdirs()) {
|
||||
AreaShop.warn("Did not save region " + getName() + ", schematic directory could not be created: " + saveFile.getAbsolutePath());
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
if(parent != null && !parent.exists() && !parent.mkdirs()) {
|
||||
AreaShop.warn("Did not save region " + getName() + ", schematic directory could not be created: " + saveFile.getAbsolutePath());
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
return worldEditInterface.saveRegionBlocksAsync(saveFile, this)
|
||||
.thenApply(result -> {
|
||||
if(result) {
|
||||
if(Boolean.TRUE.equals(result)) {
|
||||
AreaShop.debug("Saved schematic async for region " + getName());
|
||||
}
|
||||
return result;
|
||||
@@ -883,7 +878,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
File restoreFile = new File(plugin.getFileManager().getSchematicFolder() + File.separator + fileName);
|
||||
return worldEditInterface.restoreRegionBlocksAsync(restoreFile, this)
|
||||
.thenApply(result -> {
|
||||
if(result) {
|
||||
if(Boolean.TRUE.equals(result)) {
|
||||
AreaShop.debug("Restored schematic async for region " + getName());
|
||||
// Sync back to main
|
||||
Do.syncLater(10, getSignsFeature().signManager()::update);
|
||||
@@ -974,7 +969,6 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
if(found) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if(this.getFileManager().getRegionSettings().isString(path)) {
|
||||
return this.getFileManager().getRegionSettings().getString(path).equalsIgnoreCase("true");
|
||||
}
|
||||
@@ -1235,8 +1229,8 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
// Either result is a ConfigurationSection or is used as key in the plugin config to get a ConfigurationSection
|
||||
if(result == null) {
|
||||
return null;
|
||||
} else if(result instanceof ConfigurationSection) {
|
||||
return (ConfigurationSection)result;
|
||||
} else if(result instanceof ConfigurationSection configurationSection) {
|
||||
return configurationSection;
|
||||
} else {
|
||||
return plugin.getConfig().getConfigurationSection(translateProfileName + "." + result.toString());
|
||||
}
|
||||
@@ -1483,8 +1477,8 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
public boolean matchesLimitGroup(String group) {
|
||||
List<String> worlds = plugin.getConfig().getStringList("limitGroups." + group + ".worlds");
|
||||
List<String> groups = plugin.getConfig().getStringList("limitGroups." + group + ".groups");
|
||||
if((worlds == null || worlds.isEmpty() || worlds.contains(getWorldName()))) {
|
||||
if(groups == null || groups.isEmpty()) {
|
||||
if(worlds.isEmpty() || worlds.contains(getWorldName())) {
|
||||
if(groups.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
boolean inGroups = false;
|
||||
@@ -1517,7 +1511,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
String restore = profileSection.getString(type.getValue() + ".restore");
|
||||
// Save the region if needed
|
||||
boolean async = worldEditInterface.supportsAsyncOperations();
|
||||
if(save != null && !save.isEmpty()) {
|
||||
if(save != null && !save.isBlank()) {
|
||||
save = Message.fromString(save).replacements(this).getSingle();
|
||||
if (async) {
|
||||
saveRegionBlocksAsync(save);
|
||||
@@ -1526,7 +1520,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
}
|
||||
}
|
||||
// Restore the region if needed
|
||||
if(restore != null && !restore.isEmpty()) {
|
||||
if(restore != null && !restore.isBlank()) {
|
||||
restore = Message.fromString(restore).replacements(this).getSingle();
|
||||
if (async) {
|
||||
restoreRegionBlocksAsync(restore);
|
||||
@@ -1596,6 +1590,22 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
|
||||
return volume;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether region transfers are enabled
|
||||
* @return Returns true if region transfers are enabled, false otherwise
|
||||
*/
|
||||
public boolean isTransferEnabled() {
|
||||
return getBooleanSetting("general.transferMode");
|
||||
}
|
||||
|
||||
/**
|
||||
* Se whether region transfers are enabled
|
||||
* @param enabled Whether region transfers should be enabled, false otherwise
|
||||
*/
|
||||
public void setTransferEnabled(boolean enabled) {
|
||||
setSetting("general.transferMode", enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the volume of the region (could be expensive for polygon regions).
|
||||
* @return Number of blocks in the region
|
||||
|
||||
@@ -393,8 +393,7 @@ public class ImportJob {
|
||||
|
||||
// Set rented until
|
||||
if(from.isLong("info.last-withdrawal")
|
||||
&& region instanceof RentRegion) {
|
||||
RentRegion rentRegion = (RentRegion)region;
|
||||
&& region instanceof RentRegion rentRegion) {
|
||||
long lastWithdrawal = from.getLong("info.last-withdrawal");
|
||||
// Because the rental duration is already imported into the region and its parents this should be correct
|
||||
rentRegion.setRentedUntil(lastWithdrawal + rentRegion.getDuration());
|
||||
@@ -445,7 +444,7 @@ public class ImportJob {
|
||||
}
|
||||
}
|
||||
|
||||
private static final List<TimeUnit> timeUnitLookup = new ArrayList<TimeUnit>() {
|
||||
private static final List<TimeUnit> timeUnitLookup = new ArrayList<>() {
|
||||
{
|
||||
add(new TimeUnit(60 * 24 * 30 * 12, "year"));
|
||||
add(new TimeUnit(60 * 24 * 30, "month"));
|
||||
|
||||
@@ -72,6 +72,22 @@ public class RentRegion extends GeneralRegion {
|
||||
this.economy = economy;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isOwner(UUID player) {
|
||||
return isRenter(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getOwner() {
|
||||
return getRenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOwner(UUID player) {
|
||||
setRenter(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RegionType getType() {
|
||||
return RegionType.RENT;
|
||||
@@ -165,43 +181,28 @@ public class RentRegion extends GeneralRegion {
|
||||
|
||||
@Override
|
||||
public Object provideReplacement(String variable) {
|
||||
switch(variable) {
|
||||
case AreaShop.tagPrice:
|
||||
return getFormattedPrice();
|
||||
case AreaShop.tagRawPrice:
|
||||
return getPrice();
|
||||
case AreaShop.tagDuration:
|
||||
return getDurationString();
|
||||
case AreaShop.tagPlayerName:
|
||||
return getPlayerName();
|
||||
case AreaShop.tagPlayerUUID:
|
||||
return getRenter();
|
||||
case AreaShop.tagRentedUntil:
|
||||
return new SimpleDateFormat(plugin.getConfig().getString("timeFormatChat")).format(new Date(getRentedUntil()));
|
||||
case AreaShop.tagRentedUntilShort:
|
||||
return new SimpleDateFormat(plugin.getConfig().getString("timeFormatSign")).format(new Date(getRentedUntil()));
|
||||
case AreaShop.tagTimeLeft:
|
||||
return getTimeLeftString();
|
||||
case AreaShop.tagMoneyBackAmount:
|
||||
return getFormattedMoneyBackAmount();
|
||||
case AreaShop.tagRawMoneyBackAmount:
|
||||
return getMoneyBackAmount();
|
||||
case AreaShop.tagMoneyBackPercentage:
|
||||
return (getMoneyBackPercentage() % 1.0) == 0.0 ? (int)getMoneyBackPercentage() : getMoneyBackPercentage();
|
||||
case AreaShop.tagTimesExtended:
|
||||
return this.getTimesExtended();
|
||||
case AreaShop.tagMaxExtends:
|
||||
return this.getMaxExtends();
|
||||
case AreaShop.tagExtendsLeft:
|
||||
return getMaxExtends() - getTimesExtended();
|
||||
case AreaShop.tagMaxRentTime:
|
||||
return millisToHumanFormat(getMaxRentTime());
|
||||
case AreaShop.tagMaxInactiveTime:
|
||||
return this.getFormattedInactiveTimeUntilUnrent();
|
||||
|
||||
default:
|
||||
return super.provideReplacement(variable);
|
||||
}
|
||||
return switch (variable) {
|
||||
case AreaShop.tagPrice -> getFormattedPrice();
|
||||
case AreaShop.tagRawPrice -> getPrice();
|
||||
case AreaShop.tagDuration -> getDurationString();
|
||||
case AreaShop.tagPlayerName -> getPlayerName();
|
||||
case AreaShop.tagPlayerUUID -> getRenter();
|
||||
case AreaShop.tagRentedUntil ->
|
||||
new SimpleDateFormat(plugin.getConfig().getString("timeFormatChat")).format(new Date(getRentedUntil()));
|
||||
case AreaShop.tagRentedUntilShort ->
|
||||
new SimpleDateFormat(plugin.getConfig().getString("timeFormatSign")).format(new Date(getRentedUntil()));
|
||||
case AreaShop.tagTimeLeft -> getTimeLeftString();
|
||||
case AreaShop.tagMoneyBackAmount -> getFormattedMoneyBackAmount();
|
||||
case AreaShop.tagRawMoneyBackAmount -> getMoneyBackAmount();
|
||||
case AreaShop.tagMoneyBackPercentage ->
|
||||
(getMoneyBackPercentage() % 1.0) == 0.0 ? (int) getMoneyBackPercentage() : getMoneyBackPercentage();
|
||||
case AreaShop.tagTimesExtended -> this.getTimesExtended();
|
||||
case AreaShop.tagMaxExtends -> this.getMaxExtends();
|
||||
case AreaShop.tagExtendsLeft -> getMaxExtends() - getTimesExtended();
|
||||
case AreaShop.tagMaxRentTime -> millisToHumanFormat(getMaxRentTime());
|
||||
case AreaShop.tagMaxInactiveTime -> this.getFormattedInactiveTimeUntilUnrent();
|
||||
default -> super.provideReplacement(variable);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -344,7 +345,7 @@ public class RentRegion extends GeneralRegion {
|
||||
* @return The amount of money the player should get back
|
||||
*/
|
||||
public double getMoneyBackAmount() {
|
||||
Long currentTime = Calendar.getInstance().getTimeInMillis();
|
||||
long currentTime = Calendar.getInstance().getTimeInMillis();
|
||||
Double timeLeft = (double)(getRentedUntil() - currentTime);
|
||||
double percentage = (getMoneyBackPercentage()) / 100.0;
|
||||
Double timePeriod = (double)(getDuration());
|
||||
@@ -448,7 +449,7 @@ public class RentRegion extends GeneralRegion {
|
||||
}
|
||||
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(getRenter());
|
||||
return offlinePlayer != null && rent(offlinePlayer);
|
||||
return rent(offlinePlayer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -672,10 +673,10 @@ public class RentRegion extends GeneralRegion {
|
||||
}
|
||||
|
||||
// Broadcast and check event
|
||||
UnrentingRegionEvent event = new UnrentingRegionEvent(this);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if(event.isCancelled()) {
|
||||
message(executor, "general-cancelled", event.getReason());
|
||||
UnrentingRegionEvent unrentingRegionEvent = new UnrentingRegionEvent(this);
|
||||
Bukkit.getPluginManager().callEvent(unrentingRegionEvent);
|
||||
if(unrentingRegionEvent.isCancelled()) {
|
||||
message(executor, "general-cancelled", unrentingRegionEvent.getReason());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -729,13 +730,17 @@ public class RentRegion extends GeneralRegion {
|
||||
// Remove friends, the owner and renteduntil values
|
||||
getFriendsFeature().clearFriends();
|
||||
UUID oldRenter = getRenter();
|
||||
setRenter(null);
|
||||
setRentedUntil(null);
|
||||
setTimesExtended(-1);
|
||||
removeLastActiveTime();
|
||||
|
||||
// Notify about updates
|
||||
this.notifyAndUpdate(new UnrentedRegionEvent(this, oldRenter, Math.max(0, moneyBack)));
|
||||
Bukkit.getPluginManager().callEvent(new UnrentedRegionEvent(this, oldRenter, Math.max(0, moneyBack)));
|
||||
// Placed here so when event is passed, the player renting can still be accessed
|
||||
setRenter(null);
|
||||
// Update world (has to be after setting renter to null)
|
||||
this.update();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
public class BukkitSchedulerExecutor implements Executor {
|
||||
|
||||
private final Plugin plugin;
|
||||
private final BukkitScheduler scheduler;
|
||||
|
||||
@Inject
|
||||
public BukkitSchedulerExecutor(@NotNull Plugin plugin, @NotNull BukkitScheduler scheduler) {
|
||||
this.plugin = plugin;
|
||||
this.scheduler = scheduler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(@NotNull Runnable command) {
|
||||
this.scheduler.runTask(this.plugin, command);
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class GithubUpdateCheck {
|
||||
|
||||
public static final String API_HOST = "https://api.github.com/repos";
|
||||
public static final String API_LATEST_RELEASE = "releases/latest";
|
||||
public static final String USER_AGENT = "GithubUpdateCheck by NLThijs48";
|
||||
public static final String USER_AGENT = "md5sha256 AreaShop GithubUpdateCheck";
|
||||
public static final boolean DEBUG = false;
|
||||
|
||||
private final String author;
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
import me.wiefferink.interactivemessenger.generators.TellrawGenerator;
|
||||
import me.wiefferink.interactivemessenger.parsers.YamlParser;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.chat.ComponentSerializer;
|
||||
import org.spongepowered.configurate.ConfigurateException;
|
||||
import org.spongepowered.configurate.ConfigurationNode;
|
||||
import org.spongepowered.configurate.loader.HeaderMode;
|
||||
import org.spongepowered.configurate.yaml.NodeStyle;
|
||||
import org.spongepowered.configurate.yaml.YamlConfigurationLoader;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class LanguageConverter {
|
||||
|
||||
public static void performConversion(ConfigurationNode root) throws ConfigurateException {
|
||||
if (!root.isMap()) {
|
||||
convertNode(root);
|
||||
return;
|
||||
}
|
||||
Map<Object, ? extends ConfigurationNode> map = root.childrenMap();
|
||||
for (Map.Entry<Object, ? extends ConfigurationNode> entry : map.entrySet()) {
|
||||
ConfigurationNode node = entry.getValue();
|
||||
if (node.isMap()) {
|
||||
performConversion(node);
|
||||
} else {
|
||||
convertNode(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void performConversion(File toConvert, File output) throws IOException {
|
||||
YamlConfigurationLoader loader = YamlConfigurationLoader.builder()
|
||||
.source(() -> new BufferedReader(new FileReader(toConvert, StandardCharsets.UTF_8)))
|
||||
.sink(() -> new BufferedWriter(new FileWriter(output, StandardCharsets.UTF_8)))
|
||||
.headerMode(HeaderMode.PRESERVE)
|
||||
.nodeStyle(NodeStyle.BLOCK)
|
||||
.build();
|
||||
ConfigurationNode root = loader.load();
|
||||
performConversion(root);
|
||||
loader.save(root);
|
||||
}
|
||||
|
||||
public static List<String> convertRawList(List<String> messages) {
|
||||
List<String> jsonMessages = TellrawGenerator.generate(YamlParser.parse(messages));
|
||||
List<String> converted = new ArrayList<>();
|
||||
for (String json : jsonMessages) {
|
||||
BaseComponent[] bungeeComponents = ComponentSerializer.parse(json);
|
||||
Component convertedComponent = BungeeComponentSerializer.get()
|
||||
.deserialize(bungeeComponents);
|
||||
String miniMessage = MiniMessage.miniMessage()
|
||||
.serialize(convertedComponent);
|
||||
converted.add(miniMessage);
|
||||
}
|
||||
return converted;
|
||||
}
|
||||
|
||||
private static void convertNode(ConfigurationNode node) throws ConfigurateException {
|
||||
boolean isList = node.isList();
|
||||
List<String> messages;
|
||||
if (isList) {
|
||||
messages = node.getList(String.class, Collections.emptyList());
|
||||
} else {
|
||||
messages = Collections.singletonList(node.getString());
|
||||
}
|
||||
List<String> converted = convertRawList(messages);
|
||||
if (converted.size() == 1) {
|
||||
node.set(String.class, converted.get(0));
|
||||
} else {
|
||||
node.setList(String.class, converted);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.type.Sign;
|
||||
import org.bukkit.block.data.type.WallSign;
|
||||
|
||||
/**
|
||||
* Sign Utilities class
|
||||
*/
|
||||
public final class SignUtils {
|
||||
|
||||
private SignUtils() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link BlockFace} of a sign block
|
||||
* If the passed {@link Block} is not an instance of either
|
||||
* a {@link Sign} or {@link WallSign}, this method will return <code>null</code>
|
||||
*
|
||||
* @param block The sign
|
||||
* @return Returns the {@link BlockFace} of the sign or <code>null</code>
|
||||
*/
|
||||
public static BlockFace getSignFacing(Block block) {
|
||||
if (block == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
BlockState blockState = block.getState();
|
||||
BlockData blockData = blockState.getBlockData();
|
||||
|
||||
if (blockData instanceof WallSign wallSign) {
|
||||
return wallSign.getFacing();
|
||||
} else if (blockData instanceof org.bukkit.block.data.type.Sign sign) {
|
||||
return sign.getRotation();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the {@link BlockFace} in which the sign will face
|
||||
* If the passed {@link Block} is not an instance of either
|
||||
* a {@link Sign} or {@link WallSign}, this method will return <code>null</code>.
|
||||
*
|
||||
* @param block The sign block
|
||||
* @param facing The new {@link BlockFace} the sign should face
|
||||
* @return Returns <code>true</code> if the sign was successfully placed, <code>false</code> otherwise
|
||||
*/
|
||||
public static boolean setSignFacing(Block block, BlockFace facing) {
|
||||
if (block == null || facing == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BlockState blockState = block.getState();
|
||||
BlockData blockData = blockState.getBlockData();
|
||||
|
||||
if (blockData instanceof WallSign wallSign) {
|
||||
wallSign.setFacing(facing);
|
||||
} else if (blockData instanceof org.bukkit.block.data.type.Sign sign) {
|
||||
sign.setRotation(facing);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
block.setBlockData(blockData);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Block} which a given sign is attached to.
|
||||
* This method will return <code>null</code> if the passed {@link Block}
|
||||
* is not an instance of either a {@link Sign} or {@link WallSign}.
|
||||
*
|
||||
* @param block The sign {@link Block}
|
||||
* @return Returns the block which the sign is attached to or null
|
||||
*/
|
||||
public static Block getSignAttachedTo(Block block) {
|
||||
if (block == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
BlockState blockState = block.getState();
|
||||
|
||||
BlockData blockData = blockState.getBlockData();
|
||||
|
||||
if (blockData instanceof WallSign wallSign) {
|
||||
return block.getRelative(wallSign.getFacing().getOppositeFace());
|
||||
} else if (blockData instanceof Sign) {
|
||||
return block.getRelative(BlockFace.DOWN);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,27 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.MessageBridge;
|
||||
import me.wiefferink.interactivemessenger.Log;
|
||||
import me.wiefferink.interactivemessenger.generators.ConsoleGenerator;
|
||||
import me.wiefferink.interactivemessenger.generators.TellrawGenerator;
|
||||
import me.wiefferink.interactivemessenger.parsers.YamlParser;
|
||||
import me.wiefferink.interactivemessenger.processing.Message;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
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;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Singleton
|
||||
public class SimpleMessageBridge implements MessageBridge {
|
||||
@@ -15,7 +34,36 @@ public class SimpleMessageBridge implements MessageBridge {
|
||||
*/
|
||||
@Override
|
||||
public void messageNoPrefix(Object target, String key, Object... replacements) {
|
||||
Message.fromKey(key).replacements(replacements).send(target);
|
||||
Message m = Message.fromKey(key).replacements(replacements);
|
||||
send(m, target);
|
||||
}
|
||||
|
||||
public static void send(Message message, Object target) {
|
||||
if(AreaShop.useMiniMessage()) {
|
||||
|
||||
if(target instanceof Audience audience) {
|
||||
if(message.get() == null || message.get().isEmpty() || (message.get().size() == 1 && message.get()
|
||||
.get(0)
|
||||
.isEmpty())) {
|
||||
return;
|
||||
}
|
||||
message.doReplacements();
|
||||
|
||||
StringBuilder messageStr = new StringBuilder();
|
||||
for(String line : message.get()) {
|
||||
messageStr.append(line);
|
||||
}
|
||||
|
||||
MiniMessage mm = MiniMessage.miniMessage();
|
||||
Component parsed = mm.deserialize(messageStr.toString());
|
||||
audience.sendMessage(parsed);
|
||||
}
|
||||
else {
|
||||
AreaShop.error("AreaShop sent a non-supported Object as the Audience for a Message!");
|
||||
}
|
||||
} else {
|
||||
message.send(target);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,7 +74,8 @@ public class SimpleMessageBridge implements MessageBridge {
|
||||
*/
|
||||
@Override
|
||||
public void message(Object target, String key, Object... replacements) {
|
||||
Message.fromKey(key).prefix().replacements(replacements).send(target);
|
||||
Message m = Message.fromKey(key).prefix().replacements(replacements);
|
||||
send(m, target);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class SpigotOfflinePlayerHelper implements OfflinePlayerHelper {
|
||||
|
||||
private final Plugin plugin;
|
||||
|
||||
public SpigotOfflinePlayerHelper(@NotNull Plugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Optional<UUID>> lookupUuidAsync(String username) {
|
||||
return lookupOfflinePlayerAsync(username).thenApply(player -> {
|
||||
if (player.hasPlayedBefore()) {
|
||||
return Optional.of(player.getUniqueId());
|
||||
}
|
||||
return Optional.empty();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<OfflinePlayer> lookupOfflinePlayerAsync(String username) {
|
||||
final CompletableFuture<OfflinePlayer> future = new CompletableFuture<>();
|
||||
final Server server = this.plugin.getServer();
|
||||
server.getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer player = server.getOfflinePlayer(username);
|
||||
future.complete(player);
|
||||
});
|
||||
return future;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package me.wiefferink.areashop.tools;
|
||||
|
||||
import me.wiefferink.areashop.adapters.platform.MinecraftPlatform;
|
||||
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class SpigotPlatform implements MinecraftPlatform {
|
||||
|
||||
private final OfflinePlayerHelper offlinePlayerHelper;
|
||||
|
||||
public SpigotPlatform(@NotNull Plugin plugin) {
|
||||
this.offlinePlayerHelper = new SpigotOfflinePlayerHelper(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OfflinePlayerHelper offlinePlayerHelper() {
|
||||
return this.offlinePlayerHelper;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package me.wiefferink.areashop.tools;
|
||||
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import jakarta.inject.Inject;
|
||||
import me.wiefferink.areashop.AreaShop;
|
||||
import me.wiefferink.areashop.interfaces.WorldEditSelection;
|
||||
import me.wiefferink.areashop.interfaces.WorldGuardInterface;
|
||||
@@ -23,7 +24,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package me.wiefferink.areashop.tools.version;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Locale;
|
||||
|
||||
public enum PreReleaseType {
|
||||
|
||||
UNKNOWN("unknown"),
|
||||
|
||||
ALPHA("alpha"),
|
||||
BETA("beta"),
|
||||
SNAPSHOT("snapshot"),
|
||||
RELEASE_CANDIDATE("rc");
|
||||
|
||||
private static final PreReleaseType[] VALUES = values();
|
||||
|
||||
private final String asString;
|
||||
|
||||
PreReleaseType(String asString) {
|
||||
this.asString = asString;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PreReleaseType parse(String release) {
|
||||
if (release.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
String sanitized = release.toLowerCase(Locale.ENGLISH);
|
||||
for (PreReleaseType preReleaseType : VALUES) {
|
||||
if (preReleaseType.asString.equals(sanitized)) {
|
||||
return preReleaseType;
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
|
||||
public String asString() {
|
||||
return this.asString;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package me.wiefferink.areashop.tools.version;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public record Version(String original, VersionData versionData) {
|
||||
|
||||
/**
|
||||
* Semver pattern, cg1 = major, cg2 = minor, cg3 = patch, cg4 = prerelease and cg5 = buildmetadata
|
||||
* Taken from https://semver.org/ and https://regex101.com/r/vkijKf/1/
|
||||
*/
|
||||
public static final Pattern SEMVER_PATTERN = Pattern.compile(
|
||||
"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$");
|
||||
|
||||
|
||||
public static Version parse(String version) {
|
||||
Matcher matcher = SEMVER_PATTERN.matcher(version);
|
||||
if (!matcher.find()) {
|
||||
throw new IllegalArgumentException("Invalid version: " + version);
|
||||
}
|
||||
String majorRaw = matcher.group(1);
|
||||
String minorRaw = matcher.group(2);
|
||||
String patchRaw = matcher.group(3);
|
||||
String preReleaseRaw = matcher.group(4);
|
||||
int major;
|
||||
int minor;
|
||||
try {
|
||||
major = Integer.parseInt(majorRaw);
|
||||
minor = Integer.parseInt(minorRaw);
|
||||
} catch (NumberFormatException ex) {
|
||||
throw new IllegalArgumentException("Invalid version: " + version);
|
||||
}
|
||||
if (patchRaw == null || patchRaw.isEmpty()) {
|
||||
return new Version(version, new VersionData(major, minor, 0, null));
|
||||
}
|
||||
int patch;
|
||||
try {
|
||||
patch = Integer.parseInt(patchRaw);
|
||||
} catch (NumberFormatException ex) {
|
||||
throw new IllegalArgumentException("Invalid version: " + version);
|
||||
}
|
||||
if (preReleaseRaw == null || preReleaseRaw.isEmpty()) {
|
||||
return new Version(version, new VersionData(major, minor, patch, null));
|
||||
}
|
||||
PreReleaseType releaseType = PreReleaseType.parse(preReleaseRaw);
|
||||
return new Version(version, new VersionData(major, minor, patch, releaseType));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.original;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package me.wiefferink.areashop.tools.version;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public record VersionData(int major, int minor, int patch, PreReleaseType preReleaseType)
|
||||
implements Comparable<VersionData> {
|
||||
|
||||
|
||||
public VersionData(int major, int minor, int patch) {
|
||||
this(major, minor, patch, null);
|
||||
}
|
||||
|
||||
public VersionData(int major, int minor) {
|
||||
this(major, minor, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("%d.%d.%d", major, minor, patch);
|
||||
}
|
||||
|
||||
public boolean isNewerThan(VersionData other) {
|
||||
return compareTo(other) > 0;
|
||||
}
|
||||
|
||||
public boolean isOlderThan(VersionData other) {
|
||||
return compareTo(other) < 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull VersionData o) {
|
||||
int majorComp = Integer.compare(this.major, o.major);
|
||||
if (majorComp != 0) {
|
||||
return majorComp;
|
||||
}
|
||||
int minorComp = Integer.compare(this.minor, o.minor);
|
||||
if (minorComp != 0) {
|
||||
return minorComp;
|
||||
}
|
||||
int patchComp = Integer.compare(this.patch, o.patch);
|
||||
if (patchComp != 0) {
|
||||
return patchComp;
|
||||
}
|
||||
if (this.preReleaseType == null && o.preReleaseType == null) {
|
||||
return 0;
|
||||
}
|
||||
if (this.preReleaseType == null) {
|
||||
return 1;
|
||||
}
|
||||
return this.preReleaseType.compareTo(o.preReleaseType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package me.wiefferink.areashop.tools.version;
|
||||
|
||||
public class VersionUtil {
|
||||
|
||||
public static VersionData MC_1_17_1 = new VersionData(1, 17, 1);
|
||||
|
||||
public static Version parseMinecraftVersion(String minecraftVersion) {
|
||||
// Expecting 1.X.X-R0.1-SNAPSHOT
|
||||
int stripLength = "-R0.1-SNAPSHOT".length();
|
||||
int length = minecraftVersion.length();
|
||||
if (length <= stripLength) {
|
||||
throw new IllegalArgumentException("Invalid minecraft version: " + minecraftVersion);
|
||||
}
|
||||
String strippedVersion = minecraftVersion.substring(0, length - stripLength);
|
||||
try {
|
||||
return Version.parse(strippedVersion);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new IllegalArgumentException("Invalid minecraft version: " + minecraftVersion, ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,16 +6,35 @@
|
||||
# ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||
# │ GENERAL: Options that influence the global state of the plugin │
|
||||
# └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||
# Chat prefix used for all messages in the chat, also changes the greeting messages.
|
||||
|
||||
# Chat prefix used for all messages in the chat
|
||||
chatPrefix:
|
||||
- '[darkgreen][AreaShop][reset]'
|
||||
- ' hover: AreaShop region management plugin'
|
||||
- ' hover: %lang:action|Click to check the available commands|%'
|
||||
- ' command: /areashop help'
|
||||
- ' '
|
||||
|
||||
# WorldGuard doesn't support MiniMessage, so when setting WorldGuard Greetings, this prefix is used instead. (Bukkit color codes)
|
||||
wgPrefix: '&2[AreaShop] &r'
|
||||
|
||||
# The language file that should be used, check the 'lang' folder for build-in languages (use the filename without .yml here).
|
||||
# More information can be found here: https://github.com/NLthijs48/AreaShop/wiki/Language-support.
|
||||
# NOTE: If you want to use MiniMessage, make sure you're using mmLanguage below.
|
||||
language: EN
|
||||
|
||||
# Whether you want to use MiniMessage (in Paper) or stick to the older built-in language management for AreaShop messages.
|
||||
useMiniMessage: false
|
||||
|
||||
# Chat prefix used for all messages in chat
|
||||
# **THIS IS ONLY APPLICABLE IF UseMiniMessage IS SET TO TRUE**
|
||||
mmChatPrefix:
|
||||
- '<click:run_command:/areashop help><hover:show_text:"AreaShop region management plugin<newline>%lang:action|Click to check the available commands|%"><dark_green>[AreaShop]<reset> '
|
||||
|
||||
# The language file that should be used, check the 'lang' folder for build-in languages (use the filename without .yml here).
|
||||
# **THIS IS ONLY APPLICABLE IF UseMiniMessage IS SET TO TRUE**
|
||||
mmLanguage: ENMM
|
||||
|
||||
# The tags that need to be written on the first line of a sign to add it to AreaShop.
|
||||
signTags:
|
||||
# Add a rental region.
|
||||
@@ -121,8 +140,10 @@ debug: false
|
||||
version: ${project.version}
|
||||
# Maximum number of blocks to save to or restore from a .schemetic file.
|
||||
maximumBlocks: 1000000
|
||||
# Maximum number of entities to save to or restore from a .schematic file (FAWE only)
|
||||
maximumEntities: 1000
|
||||
# Whether to forcefully clear "hanging" entities (painting, itemframes, etc.) on region restore
|
||||
# Only enable this option if hanging entities at the destination aren't removed on restore normally
|
||||
# If set to true, there may be a performance impact when performing region restores.
|
||||
forceClearEntities: false
|
||||
# Maximum number of locations the teleport function should check to find a safe spot.
|
||||
maximumTries: 50000
|
||||
|
||||
@@ -180,4 +201,4 @@ maximumTries: 50000
|
||||
# %tpyaw% The exact yaw of the teleport location
|
||||
# %tpyawround% The rounded yaw of the teleport location
|
||||
# %tpworld% The world name of the teleport location
|
||||
# %lang:<languageKey>|Optional arguments|% Insert a message from EN.yml, for example: '%lang:timeleft-ended%' or '%lang:timeleft-years|15|%'
|
||||
# %lang:<languageKey>|Optional arguments|% Insert a message from your language yml file, for example: '%lang:timeleft-ended%' or '%lang:timeleft-years|15|%'
|
||||
@@ -34,6 +34,8 @@ general:
|
||||
landlordName: ''
|
||||
# Disable to prevent counting this region towards limits set by 'limitGroups' in config.yml.
|
||||
countForLimits: true
|
||||
# Whether transferring tenant <--> tenant and landlord <--> landlord should be enabled
|
||||
transferMode: false
|
||||
|
||||
##### Set the layout and functions of the signs.
|
||||
# The following sections can be added for performing certain commands when the sign is clicked:
|
||||
@@ -120,18 +122,18 @@ general:
|
||||
block-break: 'deny g:non_members'
|
||||
block-place: 'deny g:non_members'
|
||||
forrent:
|
||||
greeting: '%lang:prefix%%lang:greeting-forrent%'
|
||||
greeting: '%lang:wgPrefix%%lang:greeting-forrent%'
|
||||
rented:
|
||||
members: '%uuid%, %friendsuuid%'
|
||||
greeting: '%lang:prefix%%lang:greeting-rented%'
|
||||
greeting: '%lang:wgPrefix%%lang:greeting-rented%'
|
||||
forsale:
|
||||
greeting: '%lang:prefix%%lang:greeting-forsale%'
|
||||
greeting: '%lang:wgPrefix%%lang:greeting-forsale%'
|
||||
sold:
|
||||
members: '%uuid%, %friendsuuid%'
|
||||
greeting: '%lang:prefix%%lang:greeting-bought%'
|
||||
greeting: '%lang:wgPrefix%%lang:greeting-bought%'
|
||||
resell:
|
||||
members: '%uuid%, %friendsuuid%'
|
||||
greeting: '%lang:prefix%%lang:greeting-resale%'
|
||||
greeting: '%lang:wgPrefix%%lang:greeting-resale%'
|
||||
|
||||
##### Save and restore schematics to clean up regions.
|
||||
# After 'save:' or 'restore:' you enter the name of the file to restore from/to (.schematic is added automatically).
|
||||
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Benutze %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Benutze %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Benutze %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Benutze %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spieler %0%"
|
||||
- " hover: %lang:action|Regionen von %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spieler %0%"
|
||||
- " hover: %lang:action|Regionen von %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Vermieter %landlord%"
|
||||
- " hover: %lang:action|Regionen von %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Vermieter %landlord%"
|
||||
- " hover: %lang:action|Regionen von %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "Du kannst nicht mehr als %0% Region(en) mieten/kaufen (Du hast bereits %1% in Gruppe '%2%')."
|
||||
"confirm-yes": " [gray]Klicken um %lang:command|den Command zu bestätigen|1%0%|%[gray] oder zu wiederholen."
|
||||
"general-notReady": "AreaShop ist noch nicht vollständig geladen, bitte warten."
|
||||
@@ -142,15 +142,15 @@
|
||||
"reload-noPermission": "Du hast keine Berechtigungen um die Konfigurationsdateien neu zu laden."
|
||||
"reload-updateCommandChanged": "'/as updaterents' und '/as updatebuys' wurden entfernt, bitte benutze '/as reload' um die Regionen neu zu laden."
|
||||
"info-help":
|
||||
- "/as info[break]"
|
||||
- " %lang:command|all|/as info all|%[break]"
|
||||
- " %lang:command|rented|/as info rented|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|forrent|/as info forrent|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|sold|/as info sold|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|forsale|/as info forsale|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|reselling|/as info reselling|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|nogroup|/as info nogroup [Seite]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [Region]"
|
||||
- "/as info[break]"
|
||||
- " %lang:command|all|/as info all|%[break]"
|
||||
- " %lang:command|rented|/as info rented|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|forrent|/as info forrent|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|sold|/as info sold|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|forsale|/as info forsale|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|reselling|/as info reselling|% [Gruppe] [Seite][break]"
|
||||
- " %lang:command|nogroup|/as info nogroup [Seite]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [Region]"
|
||||
"info-noPermission": "Du hast keine Berechtigung, Informationen über Regionen zu erhalten."
|
||||
"info-allHeader": "Alle Regionen%0%:"
|
||||
"info-rentedHeader": "Gemietete Regionen%0%:"
|
||||
@@ -171,11 +171,11 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Verkauft an %lang:player% (Weiterverkauf)."
|
||||
"info-pageStatus": "[gold]Seite %0%/%1%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Vorherige[/bold] "
|
||||
- " hover: Das ist bereits die erste Seite."
|
||||
- " [darkgray][bold]◄Vorherige[/bold] "
|
||||
- " hover: Das ist bereits die erste Seite."
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Nächste►[/bold]"
|
||||
- " hover: Das ist bereits die letzte Seite."
|
||||
- " [darkgray][bold]Nächste►[/bold]"
|
||||
- " hover: Das ist bereits die letzte Seite."
|
||||
"info-playerHelp": "/as info player <Spielername>."
|
||||
"info-playerRents": "Gemietete Regionen von %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% hat bisher keine Region(en) gemietet."
|
||||
@@ -188,66 +188,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Gekauft von %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Gekauft von %lang:player%, derzeit Weiterverkauf."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verlängern für[/bold]"
|
||||
- " hover: Miete verlängern für %region%"
|
||||
- " hover: mit %duration% für %price%"
|
||||
- " hover: %lang:action|Mieter Verlängern für %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% für %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verlängern für[/bold]"
|
||||
- " hover: Miete verlängern für %region%"
|
||||
- " hover: mit %duration% für %price%"
|
||||
- " hover: %lang:action|Mieter Verlängern für %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% für %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Mieten für[/bold]"
|
||||
- " hover: Miete %region% für %price% für %duration%"
|
||||
- " hover: %lang:action|Miete %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% für %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Mieten für[/bold]"
|
||||
- " hover: Miete %region% für %price% für %duration%"
|
||||
- " hover: %lang:action|Miete %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% für %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kaufen für[/bold]"
|
||||
- " hover: Kaufe %region% für %price%"
|
||||
- " hover: %lang:action|Kaufe %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kaufen für[/bold]"
|
||||
- " hover: Kaufe %region% für %price%"
|
||||
- " hover: %lang:action|Kaufe %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Weiterverkaufspreis: [gray]%resellprice% (Du kannst es von %lang:player% kaufen)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Hinzugefügte Freunde: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Lösche %0% als Freund|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Lösche %0% als Freund|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Verkaufpreis: [gray]%moneyback% (%moneybackpercent%% des Kaufpreises)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verkaufsrückzahlung[/bold]"
|
||||
- " hover: Verkaufe %region% und bekomme %moneyback% zurück"
|
||||
- " hover: %lang:action|Verkaufe %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% des Kaufpreises)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verkaufsrückzahlung[/bold]"
|
||||
- " hover: Verkaufe %region% und bekomme %moneyback% zurück"
|
||||
- " hover: %lang:action|Verkaufe %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% des Kaufpreises)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Rückzahlung bei Mietkündigung: [gray]%moneyback% (%moneybackpercent%% der verbleibenden Zeit)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Mietrückzahlung[/bold]"
|
||||
- " hover: Entmiete %region% und bekomme %moneyback% zurück"
|
||||
- " hover: %lang:action|Unrent %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% der verbleibenden Zeit)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Mietrückzahlung[/bold]"
|
||||
- " hover: Entmiete %region% und bekomme %moneyback% zurück"
|
||||
- " hover: %lang:action|Unrent %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% der verbleibenden Zeit)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Maximale Anzahl an Verlängerungen: [gray]%maxextends% ."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] Miete kann nicht verlängert werden."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Verbleibende Mietverlängerungen: [gray]%extendsleft% von %maxextends% ."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Miete im Voraus: [gray]Maximal %maxrenttime%."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Gehe zu der Region[/bold]"
|
||||
- " hover: %lang:action|Teleport to %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Gehe zu der Region[/bold]"
|
||||
- " hover: %lang:action|Teleport to %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]Setze den Teleport Punkt[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Set teleport location|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]Setze den Teleport Punkt[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Set teleport location|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Verbundene Schilder: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Zugewiesene Gruppen: [gray]%0%."
|
||||
@@ -377,10 +377,10 @@
|
||||
"addsign-couldNotDetectSign": "Mehrere Regionen um das Schild herum gefunden, bitte gewünschte Region in die zweite Zeile eintragen (zwei der gefundenen Regionen: %lang:tRegion|%0%|% und %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Das eingetragene Profil existiert nicht. Bitte benutze eines der folgenden (überprüfe config): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Schildprofil %0%"
|
||||
- " hover: %lang:action|Use this profile|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Schildprofil %0%"
|
||||
- " hover: %lang:action|Use this profile|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "Das Schild wurde hinzugefügt zu %lang:region%."
|
||||
"addsign-successProfile": "Das Schild wurde zu %lang:region% mit dem Profil %0% hinzugefügt."
|
||||
"addsign-alreadyRegistered": "Dieses Schild ist bereits für die Region %lang:region% registriert."
|
||||
@@ -393,16 +393,16 @@
|
||||
"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]("
|
||||
- "%timeleft% übrig"
|
||||
- " hover: bis %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% übrig"
|
||||
- " hover: bis %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "Im Besitz von %lang:player%"
|
||||
- " hover: Du wurdest als Freund hinzugefügt"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "Im Besitz von %lang:player%"
|
||||
- " hover: Du wurdest als Freund hinzugefügt"
|
||||
- ")."
|
||||
"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."
|
||||
"me-clickHint": "[gray][italic]Klicke auf eine Region, um weitere Details zu erhalten."
|
||||
@@ -457,13 +457,13 @@
|
||||
"linksigns-noPermission": "Du hast keine Berechtigungen um den Schilder-Massenverbindungsmodus zu benutzen."
|
||||
"linksigns-stopped": "Schilder-Verbindungsmodus verlassen."
|
||||
"stack-help":
|
||||
- "/as stack <Menge> <Abstand> <Name> <rent|buy> [Gruppe]."
|
||||
- "[gray]<Menge> Nummer der Regionen, die erstellt werden."
|
||||
- "[gray]<Abstand> Block-Abstand zwischen den Regionen."
|
||||
- "[gray]<Name> Namen der Regionen (Nummer wird dahinter sein)."
|
||||
- "[gray]<rent|buy> Macht die Regionen zu kauf- oder Mietregionen"
|
||||
- "[gray][Gruppe] Eine Gruppe, die zu den erstellten Regionen hinzugefügt wird."
|
||||
- "Die Regionen werden in deiner Blickrichtung erstellt."
|
||||
- "/as stack <Menge> <Abstand> <Name> <rent|buy> [Gruppe]."
|
||||
- "[gray]<Menge> Nummer der Regionen, die erstellt werden."
|
||||
- "[gray]<Abstand> Block-Abstand zwischen den Regionen."
|
||||
- "[gray]<Name> Namen der Regionen (Nummer wird dahinter sein)."
|
||||
- "[gray]<rent|buy> Macht die Regionen zu kauf- oder Mietregionen"
|
||||
- "[gray][Gruppe] Eine Gruppe, die zu den erstellten Regionen hinzugefügt wird."
|
||||
- "Die Regionen werden in deiner Blickrichtung erstellt."
|
||||
"stack-accepted": "Erstelle %0% %1% Regionen mit %2% Blöcken Abstand, Namen beginnend mit %3% und einer Zahl dahinter. %4%"
|
||||
"stack-addToGroup": "Gruppe '%0%' wird zu den erstellten Regionen hinzugefügt."
|
||||
"stack-noPermission": "Du hast keine Berechtigungen um Regionen massenweise in AreaShop zu erstellen und hinzuzufügen."
|
||||
@@ -482,30 +482,30 @@
|
||||
"message-noPermission": "Du hast keine Berechtigung AreaShop Nachrichten zu senden."
|
||||
"message-notOnline": "%0% ist nicht online."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% mieten willst?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Mieten %0%|%"
|
||||
- "hover: %lang:action|Rent %0%|%"
|
||||
- "command: /areashop rent %0%"
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% mieten willst?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Mieten %0%|%"
|
||||
- "hover: %lang:action|Rent %0%|%"
|
||||
- "command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% verlängern willst?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Verlängern %0%|%"
|
||||
- "hover: %lang:action|Verlängern %0%|%"
|
||||
- "command: /areashop rent %0%"
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% verlängern willst?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Verlängern %0%|%"
|
||||
- "hover: %lang:action|Verlängern %0%|%"
|
||||
- "command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% nicht länger mieten möchtest?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Auflösen %0%|%"
|
||||
- "hover: %lang:action|Mietvertrag auslösen %0%|%"
|
||||
- "command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Bist du sicher, dass du %lang:tRegion|%0%|% nicht länger mieten möchtest?"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Auflösen %0%|%"
|
||||
- "hover: %lang:action|Mietvertrag auslösen %0%|%"
|
||||
- "command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix% Bist du sicher das du %lang:tRegion|%0%|% kaufen möchtest?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click to buy %0%|%"
|
||||
- " hover: %lang:action|Buy %0%|%"
|
||||
- " command: /areashop buy %0% "
|
||||
- "%lang:prefix% Bist du sicher das du %lang:tRegion|%0%|% kaufen möchtest?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click to buy %0%|%"
|
||||
- " hover: %lang:action|Buy %0%|%"
|
||||
- " command: /areashop buy %0% "
|
||||
"confirm-sell":
|
||||
- "%lang:prefix% Bist du sicher, dass du %lang:tRegion|%0%|% verkaufen willst?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Verkaufen von %0%|%"
|
||||
- " hover: %lang:action|Verkaufe %0%|%"
|
||||
- " command: /areashop sell %0% "
|
||||
- "%lang:prefix% Bist du sicher, dass du %lang:tRegion|%0%|% verkaufen willst?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klick zum Verkaufen von %0%|%"
|
||||
- " hover: %lang:action|Verkaufe %0%|%"
|
||||
- " command: /areashop sell %0% "
|
||||
"timeleft-years": "%0% Jahre"
|
||||
"timeleft-months": "%0% Monate"
|
||||
"timeleft-days": "%0% Tage"
|
||||
@@ -518,4 +518,4 @@
|
||||
"greeting-rented": "%region% ist vermietet an %player% bis %until%."
|
||||
"greeting-forsale": "%region% kann gekauft werden für %price%."
|
||||
"greeting-bought": "%region% ist Eigentum von %player%."
|
||||
"greeting-resale": "%region% kann für %resellprice% von 1%player% gekauft werden."
|
||||
"greeting-resale": "%region% kann für %resellprice% von 1%player% gekauft werden."
|
||||
@@ -0,0 +1,566 @@
|
||||
# ╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop
|
||||
# ║ English language file, plugin version 2.5.0
|
||||
# ║
|
||||
# ║ 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`
|
||||
# ║ 3: Change the `language` setting in config.yml to `servername`, do not include `.yml`
|
||||
# ║ 4: Change the messages in the new file to your liking
|
||||
# ║ 5: Use `/as reload`or reload/restart your server to see the changes
|
||||
# ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
||||
action: "<gold><bold><%0%></bold>"
|
||||
|
||||
button: "<bold><%0%></bold>"
|
||||
|
||||
command:
|
||||
- "<click:run_command:%1%><hover:show_text:'<gold><bold>\\<Use %1%>'><bold>%0%</bold></hover></click>"
|
||||
|
||||
helpCommand:
|
||||
- "<click:run_command:%0%><hover:show_text:'<gold><bold>\\<Use %0%>'><gold>%0% <gray>- <reset>"
|
||||
|
||||
region: "%lang:tRegion|%region%|%"
|
||||
|
||||
tRegion:
|
||||
- "<click:run_command:/areashop info region %0%><hover:show_text:'Region %0%<newline>%lang:action|Region information|%'><bold>%0%</bold></hover></click>"
|
||||
|
||||
player: "%lang:tPlayer|%player%|%"
|
||||
|
||||
tPlayer:
|
||||
- "<click:run_command:/areashop info player %0%><hover:show_text:'Player %0%<newline>%lang:action|Regions of player %0%|%'><bold>%0%</bold></hover></click>"
|
||||
|
||||
landlord:
|
||||
- "<click:run_command:/areashop info player %landlord%><hover:show_text:'Landlord %landlord%\n%lang:action|Regions of %landlord%|%'><bold>%landlord%</bold></hover></click>"
|
||||
|
||||
total-maximum: "You can't rent and buy more than %0% region(s) in total (you already have %1% in group '%2%')."
|
||||
|
||||
confirm-yes: " <gray>Click to %lang:command|Confirm|%0%|%<gray>, or repeat the command."
|
||||
|
||||
general-notReady: "AreaShop has not fully loaded yet, please wait."
|
||||
general-noWorld: "You cannot do that, the world of %lang:region% is currently unavailable (world '%world%')."
|
||||
general-noRegion: "You cannot do that, the WorldGuard region is currently unavailable (region %lang:region%)."
|
||||
general-noEconomy: "There is no Economy plugin installed or it is not setup correctly, notify the server owner about this."
|
||||
general-cancelled: "%0%"
|
||||
|
||||
cmd-notValid: "That command is not valid, use '/as help' for info."
|
||||
cmd-onlyByPlayer: "This command can only be run by a player."
|
||||
cmd-weOnlyByPlayer: "Using a WorldEdit selection is only possible as a player, specify the region name as extra argument."
|
||||
cmd-noSelection: "You don't have a WorldEdit selection."
|
||||
cmd-noRegionsFound: "No regions registered in AreaShop are found in your selection."
|
||||
cmd-noWERegionsFound: "No WorldEdit regions intersecting your selection are found."
|
||||
cmd-notRegistered: "Region '%0%' is not available in AreaShop."
|
||||
cmd-noRegion: "'%0%' is not a valid WorldGuard region."
|
||||
cmd-noRegionsAtLocation: "No regions found at your location, specify the region as argument."
|
||||
cmd-moreRegionsAtLocation: "More than one region has been found at your location, specify the region as argument."
|
||||
cmd-automaticRegionOnlyByPlayer: "Automatically determining the region is only possible for players, specify the region as argument."
|
||||
|
||||
help-header: "Help page, commands that you can execute."
|
||||
help-noPermission: "You do not have permission to view the help page."
|
||||
help-alias: "Command aliases: /areashop, /as."
|
||||
help-help: "%lang:helpCommand|/as help|% Shows this help page."
|
||||
help-info: "%lang:helpCommand|/as info|% Get info about current regions."
|
||||
help-rent: "%lang:helpCommand|/as rent|% Rent a region or extend your current rent."
|
||||
help-buy: "%lang:helpCommand|/as buy|% Buy a region."
|
||||
help-unrent: "%lang:helpCommand|/as unrent|% Unrent a region."
|
||||
help-sell: "%lang:helpCommand|/as sell|% Sell a region."
|
||||
help-reload: "%lang:helpCommand|/as reload|% Reload all files and update the regions."
|
||||
help-setrestore: "%lang:helpCommand|/as setrestore|% Set restoring on/off and choose profile."
|
||||
help-setprice: "%lang:helpCommand|/as setprice|% Change the price of a region."
|
||||
help-setduration: "%lang:helpCommand|/as setduration|% Change the duration of a rent region."
|
||||
help-teleport: "%lang:helpCommand|/as tp|% Teleport to a rent/buy region."
|
||||
help-setteleport: "%lang:helpCommand|/as settp|% Set teleport position for a region."
|
||||
help-find: "%lang:helpCommand|/as find|% Find an empty buy or rent."
|
||||
help-groupadd: "%lang:helpCommand|/as groupadd|% Add a region to a group."
|
||||
help-groupdel: "%lang:helpCommand|/as groupdel|% Delete a region from a group."
|
||||
help-grouplist: "%lang:helpCommand|/as grouplist|% Display all groups currently registered."
|
||||
help-groupinfo: "%lang:helpCommand|/as groupinfo|% Display information about a group."
|
||||
help-schemevent: "%lang:helpCommand|/as schemevent|% Trigger a schematic event for a region."
|
||||
help-add: "%lang:helpCommand|/as add|% Register a region as rent or buy."
|
||||
help-del: "%lang:helpCommand|/as del|% Delete a registered region from AreaShop."
|
||||
help-addsign: "%lang:helpCommand|/as addsign|% Add a sign to an existing region."
|
||||
help-delsign: "%lang:helpCommand|/as delsign|% Delete the sign you are looking at."
|
||||
help-me: "%lang:helpCommand|/as me|% Check which regions you have (+expiration)."
|
||||
help-setowner: "%lang:helpCommand|/as setowner|% Set region owner or extend the rent."
|
||||
help-resell: "%lang:helpCommand|/as resell|% Put a region into resell mode."
|
||||
help-stopResell: "%lang:helpCommand|/as stopresell|% Put a region back into sold mode."
|
||||
help-addFriend: "%lang:helpCommand|/as addfriend|% Add a friend to a region."
|
||||
help-delFriend: "%lang:helpCommand|/as delfriend|% Delete a friend from a region."
|
||||
help-linksigns: "%lang:helpCommand|/as linksigns|% Use bulk sign linking mode."
|
||||
help-stack: "%lang:helpCommand|/as stack|% Create multiple regions and add them."
|
||||
help-setlandlord: "%lang:helpCommand|/as setlandlord|% Set the landlord of a region."
|
||||
help-import: "%lang:helpCommand|/as import|% Import region from RegionForSale."
|
||||
|
||||
rent-help: "/as rent [region], the region you stand in will be used if not specified."
|
||||
rent-noPermission: "You don't have permission to rent a region."
|
||||
rent-maximum: "You can't rent more than %0% region(s) (you already have %1% in group '%2%')."
|
||||
rent-maximumExtend: "You can't extend this rent because you have more than %0% region(s) (you already have %1% in group '%2%')."
|
||||
rent-payError: "Something went wrong with paying, try again later."
|
||||
rent-rented: "You rented %lang:region% until %until%, you can extend your rent by rightclicking the sign again or using /as rent."
|
||||
rent-extended: "You extended your rent of %lang:region% until %until%."
|
||||
rent-extendedToMax: "You extended your rent of %lang:region% until %until% (which is the maximum rental time of %maxrenttime%)."
|
||||
rent-lowMoneyExtend: "You don't have enough money to extend the rent (you have %0% and you need %price%)."
|
||||
rent-lowMoneyRent: "You don't have enough money to rent %lang:region% (you have %0% and you need %price%)."
|
||||
rent-someoneElse: "Someone else already rented %lang:region%."
|
||||
rent-notRentable: "Region '%0%' is not available for renting (not registered in AreaShop or it is a buy region)."
|
||||
rent-maxExtends: "You cannot extend this rent anymore (the maximum is %maxextends% times), however after the rent is over you can rent %lang:region% again."
|
||||
rent-maxRentTime: "You cannot rent %lang:region% more time in advance, the maximum time is %maxrenttime% and you have currently rented it for %timeleft%."
|
||||
rent-restrictedToWorld: "You need to be in the '%world%' world to rent %lang:region% (you are in '%0%')."
|
||||
rent-restrictedToRegion: "You need to be inside %lang:region% to rent it."
|
||||
rent-expireWarning: "Your region %lang:region% has %timeleft% left, be sure to extend it if you want to keep it."
|
||||
rent-expiringSoon: "Your region %lang:tRegion|%0%|% has %1% left, be sure to extend it if you want to keep it."
|
||||
rent-alreadyAtFull: "%lang:region% is already at or above the maximum rental time, you cannot extend it yet."
|
||||
|
||||
buy-help: "/as buy [region], the region you stand in will be used if not specified."
|
||||
buy-noPermission: "You don't have permission to buy a region."
|
||||
buy-noPermissionResell: "You don't have permission to buy a region in resell mode."
|
||||
buy-noPermissionNoResell: "You don't have permission to buy a region that is not in resell mode."
|
||||
buy-notBuyable: "Region '%0%' is not available for buying (not registered in AreaShop or it is a rental region)."
|
||||
buy-maximum: "You can't buy more than %0% region(s) (you already have %1% in group '%2%')."
|
||||
buy-payError: "Something went wrong with paying, try again later."
|
||||
buy-succes: "You successfully bought %lang:region%."
|
||||
buy-successResale: "You successfully bought %lang:region% from %lang:tPlayer|%0%|%."
|
||||
buy-successSeller: "Your region %lang:region% has been sold to %lang:player% for %0%."
|
||||
buy-lowMoney: "You don't have enough money to buy %lang:region% (you have %0% and you need %price%)."
|
||||
buy-lowMoneyResell: "You don't have enough money to buy %lang:region% (you have %0% and you need %resellprice%)."
|
||||
buy-yours: "You already own %lang:region%."
|
||||
buy-someoneElse: "Someone else already bought %lang:region%."
|
||||
buy-restrictedToWorld: "You need to be in the '%world%' world to buy %lang:region% (you are in '%0%')."
|
||||
buy-restrictedToRegion: "You need to be inside %lang:region% to buy it."
|
||||
|
||||
unrent-help: "/as unrent [region], the region you stand in will be used if not specified."
|
||||
unrent-noPermission: "You don't have permission to unrent a region."
|
||||
unrent-noPermissionOther: "You don't have permission to unrent another region."
|
||||
unrent-notRegistered: "The region can't be unrented because it is not registered for renting."
|
||||
unrent-notRented: "The region can't be unrented because it is not rented."
|
||||
unrent-unrented: "%lang:region% of %lang:player% has been unrented."
|
||||
unrent-expired: "Your rent of %lang:region% has expired."
|
||||
|
||||
sell-help: "/as sell [region], the region you stand in will be used if not specified."
|
||||
sell-notRegistered: "The region can't be sold because it is not registered for buying."
|
||||
sell-notBought: "The region can't be sold because it is not someone's property."
|
||||
sell-sold: "%lang:region% of %lang:player% has been sold."
|
||||
sell-noPermission: "You don't have permission to sell a region."
|
||||
sell-noPermissionOther: "You don't have permission to sell another region."
|
||||
sell-disabled: "Selling has been disabled for this region."
|
||||
|
||||
reload-reloading: "Reloaded all configuration and region files."
|
||||
reload-updateStart: ""
|
||||
reload-updateComplete: ""
|
||||
reload-noPermission: "You don't have permission to reload the config files."
|
||||
reload-updateCommandChanged: "'/as updaterents' and '/as updatebuys' have been removed, '/as reload' will also update the regions now so use that command instead."
|
||||
|
||||
info-help:
|
||||
- "/as info<newline>"
|
||||
- " %lang:command|all|/as info all|%<newline>"
|
||||
- " %lang:command|rented|/as info rented|% [group] [page]<newline>"
|
||||
- " %lang:command|forrent|/as info forrent|% [group] [page]<newline>"
|
||||
- " %lang:command|sold|/as info sold|% [group] [page]<newline>"
|
||||
- " %lang:command|forsale|/as info forsale|% [group] [page]<newline>"
|
||||
- " %lang:command|reselling|/as info reselling|% [group] [page]<newline>"
|
||||
- " %lang:command|nogroup|/as info nogroup [page]|%<newline>"
|
||||
- " %lang:command|region|/as info region|% <region>"
|
||||
info-noPermission: "You don't have permission to get information about regions."
|
||||
info-allHeader: "All regions%0%:"
|
||||
info-rentedHeader: "Rented regions%0%:"
|
||||
info-forrentHeader: "For rent regions%0%:"
|
||||
info-forsaleHeader: "For sale regions%0%:"
|
||||
info-soldHeader: "Sold regions%0%:"
|
||||
info-resellingHeader: "Reselling regions%0%:"
|
||||
info-nogroupHeader: "Regions without group%0%:"
|
||||
info-limitedToGroup: " (limited to group %0%)"
|
||||
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: "<dark_green><bold>►<reset> %lang:region%: <gray>For rent for %price% per %duration%."
|
||||
info-entryRented: "<dark_green><bold>►<reset> %lang:region%: <gray>Rented to %lang:player%."
|
||||
info-entryForsale: "<dark_green><bold>►<reset> %lang:region%: <gray>For sale for %price%."
|
||||
info-entrySold: "<dark_green><bold>►<reset> %lang:region%: <gray>Sold to %lang:player%."
|
||||
info-entryReselling: "<dark_green><bold>►<reset> %lang:region%: <gray>Sold to %lang:player% (reselling)."
|
||||
info-pageStatus:
|
||||
- "<gold>Page %0%/%1%"
|
||||
info-pagePrevious:
|
||||
- " <click:run_command:/areashop %0%><hover:show_text:'%lang:action|Show previous page|%'><gold><bold>◄Previous</bold></hover></click> "
|
||||
info-pageNoPrevious:
|
||||
- " <hover:show_text:'This is already the first page'><dark_gray><bold>◄Previous</bold></hover> "
|
||||
info-pageNext:
|
||||
- " <click:run_command:/areashop %0%><hover:show_text:'%lang:action|Show next page|%'><gold><bold>Next►</bold></hover></click> "
|
||||
info-pageNoNext:
|
||||
- " <hover:show_text:'This is already the last page'><dark_gray><bold>Next►</bold></hover> "
|
||||
info-playerHelp: "/as info player [name]."
|
||||
info-playerRents: "Regions rented by %lang:tPlayer|%0%|%: <gray>%1%"
|
||||
info-playerNoRents: "%lang:tPlayer|%0%|% has not rented a region."
|
||||
info-playerBuys: "Regions bought by %lang:tPlayer|%0%|%: <gray>%1%."
|
||||
info-playerNoBuys: "%lang:tPlayer|%0%|% has not bought a region."
|
||||
info-regionHelp: "/as info region [name], the region you stand in will be used if not specified."
|
||||
info-regionHeaderRent: "<dark_green>Information about %lang:region%:"
|
||||
info-regionHeaderBuy: "<dark_green>Information about %lang:region%:"
|
||||
info-regionFooterRent: ""
|
||||
info-regionFooterBuy: ""
|
||||
info-regionRented: "<dark_green><bold>►<reset> Rented by %lang:player% until: <gray>%until%."
|
||||
info-regionBought: "<dark_green><bold>►<reset> Bought by %lang:player%."
|
||||
info-regionReselling: "<dark_green><bold>►<reset> Bought by %lang:player%, currently reselling."
|
||||
info-regionExtending:
|
||||
- "<dark_green><bold>►<reset> "
|
||||
- "<click:run_command:/areashop rent %region%><hover:show_text:'Extend rent of %region% with %duration% for %price%<newline>%lang:action|Extend rent of %region%|%'><bold>Extend for</bold></hover></click>"
|
||||
- ": <gray>%price% per %duration%."
|
||||
info-regionCanBeRented:
|
||||
- "<dark_green><bold>►<reset> "
|
||||
- "<click:run_command:/areashop rent %region%><hover:show_text:'Rent %region% for %price% per %duration%<newline>%lang:action|Rent %region%|%'><bold>Rent for</bold></hover></click>"
|
||||
- ": <gray>%price% per %duration%."
|
||||
info-regionCanBeBought:
|
||||
- "<dark_green><bold>►<reset> "
|
||||
- "<click:run_command:/areashop buy %region%><hover:show_text:'Buy %region% for %price%<newline>%lang:action|Buy %region%|%'><bold>Buy for</bold></hover></click>"
|
||||
- ": <gray>%price%."
|
||||
info-regionReselPrice: "<dark_green><bold>►<reset> Resell price: <gray>%resellprice% (you can buy it from %lang:player%)."
|
||||
info-regionFriends: "<dark_green><bold>►<reset> Added friends: <gray>%0%."
|
||||
info-friend: "%lang:tPlayer|%0%|%"
|
||||
info-friendRemove:
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "<click:run_command:/areashop delfriend %0% %region%><hover:show_text:'Region %region%<newline>%lang:action|Remove %0% as friend|%'><red>✕<gray></hover></click>"
|
||||
info-regionMoneyBackBuy:
|
||||
- "<dark_green><bold>►<reset> Selling payback: <gray>%moneyback% (%moneybackpercent%% of the price)."
|
||||
info-regionMoneyBackBuyClick:
|
||||
- "<dark_green><bold>►<reset> "
|
||||
- "<click:run_command:/areashop sell %region%><hover:show_text:'Sell %region% and get back %moneyback%<newline>%lang:action|Sell %region%|%'><bold>Selling payback</bold></hover></click>"
|
||||
- ": <gray>%moneyback% (%moneybackpercent%% of the price)."
|
||||
info-regionMoneyBackRent:
|
||||
- "<dark_green><bold>►<reset> Unrenting payback: <gray>%moneyback% (%moneybackpercent%% of the remaining time)."
|
||||
info-regionMoneyBackRentClick:
|
||||
- "<dark_green><bold>►<reset> "
|
||||
- "<click:run_command:/areashop unrent %region%><hover:show_text:'Unrent %region% and get back %moneyback%<newline>%lang:action|Unrent %region%|%'><bold>Unrenting payback</bold></hover></click>"
|
||||
- ": <gray>%moneyback% (%moneybackpercent%% of the remaining time)."
|
||||
info-regionMaxExtends: "<dark_green><bold>►<reset> Maximum number of extensions: <gray>%maxextends% time(s)."
|
||||
info-regionNoExtending: "<dark_green><bold>►<reset> Rent cannot be extended."
|
||||
info-regionExtendsLeft: "<dark_green><bold>►<reset> Extensions left: <gray>%extendsleft% time(s) out of %maxextends%."
|
||||
info-regionMaxRentTime: "<dark_green><bold>►<reset> In advance renting: <gray>%maxrenttime% at maximum."
|
||||
info-prefix: "<dark_green><bold>►<reset> "
|
||||
info-regionTeleport:
|
||||
- "<click:run_command:/areashop tp %region%><hover:show_text:'%lang:action|Teleport to %region%|%'><bold>Go to the region</bold></hover></click>"
|
||||
info-setRegionTeleport:
|
||||
- "<click:run_command:/areashop settp %region%><hover:show_text:'%region%<newline>%lang:action|Set teleport location|%'><bold>set teleport location</bold></hover></click>"
|
||||
info-regionSigns: "<dark_green><bold>►<reset> Connected signs: <gray>%0%."
|
||||
info-regionSignLocation: "<gray>(%0%, %1%, %2%, %3%)<reset>"
|
||||
info-regionGroups: "<dark_green><bold>►<reset> Assigned groups: <gray>%0%."
|
||||
info-regionInactiveUnrent: "<dark_green><bold>►<reset> Auto unrent after: <gray>%inactivetime% of inactivity by the player."
|
||||
info-regionInactiveSell: "<dark_green><bold>►<reset> Auto sell after: <gray>%inactivetime% of inactivity by the player."
|
||||
info-regionRestrictedRegionRent: "<dark_green><bold>►<reset> You must be inside %lang:region% to rent it."
|
||||
info-regionRestrictedWorldRent: "<dark_green><bold>►<reset> You need to be inside world '%world%' to rent %lang:region%."
|
||||
info-regionRestrictedRegionBuy: "<dark_green><bold>►<reset> You must be inside %lang:region% to buy it."
|
||||
info-regionRestrictedWorldBuy: "<dark_green><bold>►<reset> You need to be inside world '%world%' to buy %lang:region%."
|
||||
info-regionRestoringRent: "<dark_green><bold>►<reset> Restoring is enabled <gray>(region will reset at unrent)."
|
||||
info-regionRestoringBuy: "<dark_green><bold>►<reset> Restoring is enabled <gray>(region will reset at sell)."
|
||||
info-regionLandlord: "<dark_green><bold>►<reset> Landlord: <gray>%lang:landlord% (receives the money)."
|
||||
info-regionNotExisting: "The specified region is not registered: %0%."
|
||||
|
||||
setrestore-help: "/as setrestore [region] [true|false|general] [profile]."
|
||||
setrestore-noPermission: "You don't have permission to change the restore settings."
|
||||
setrestore-notRegistered: "The specified region is not registered: %0%."
|
||||
setrestore-invalidSetting: "'%0%' is not a valid state, should be true, false or general."
|
||||
setrestore-success: "Successfully set the restore setting of %lang:region% to '%0%'."
|
||||
setrestore-successProfile: "Successfully set the restore setting of %lang:region% to '%0%' and the profile to '%1%'."
|
||||
|
||||
setprice-noPermission: "You don't have permission to change the price of a region."
|
||||
setprice-help: "/as setprice [price] [region], the region you stand in will be used if not specified."
|
||||
setprice-notRegistered: "The specified region is not registered: %0%."
|
||||
setprice-wrongPrice: "'%0%' is not a valid price."
|
||||
setprice-successRent: "Price of region %lang:region% changed to %price% per %duration%."
|
||||
setprice-successBuy: "Price of region %lang:region% changed to %price%."
|
||||
setprice-successRemoved: "Price of %lang:region% has been removed, it will now use the price from a group or the default.yml file, new price: %price%."
|
||||
setprice-noLandlord: "You don't have permission to change the price because you are not the landlord of %lang:region%."
|
||||
|
||||
setduration-noPermission: "You don't have permission to change the duration of a rent."
|
||||
setduration-help: "/as setduration [amount] [identifier] [region], the region you stand in will be used if not specified."
|
||||
setduration-notRegistered: "%0% is not registered for renting."
|
||||
setduration-wrongAmount: "'%0%' is not a valid amount, use a whole number."
|
||||
setduration-wrongFormat: "'%0%' is not a proper timeformat, check the documentation on Bukkit."
|
||||
setduration-success: "Duration of region %lang:region% changed to '%duration%'."
|
||||
setduration-noLandlord: "You don't have permission to change the duration because you are not the landlord of %lang:region%."
|
||||
setduration-successRemoved: "Duration of %lang:region% has been removed, it will now use the duration from a group or the default.yml file, new duration: %duration%."
|
||||
|
||||
setup-noRegion: "You did not specify a region on the second line."
|
||||
setup-alreadyRentSign: "The region you specified is already added to AreaShop as a rent region, add signs with <as> on the first line or '/as addsign'."
|
||||
setup-alreadyOtherWorld: "The region you specified is already added to AreaShop in another world, regions from different worlds still need different names."
|
||||
setup-alreadyBuySign: "The region you specified is already added to AreaShop as a buy region, add signs with <as> on the first line or '/as addsign'."
|
||||
setup-noDuration: "You did not specify how long the region can be rented, do this on the third line."
|
||||
setup-wrongDuration: "The time specified is not in the correct format, example: 1 day."
|
||||
setup-noPrice: "You did not specify the price on the fourth line."
|
||||
setup-wrongPrice: "You did not specify the price correctly, use numbers only."
|
||||
setup-rentSuccess: "Renting of region %lang:region% is setup correctly."
|
||||
setup-buySuccess: "Buying of region %lang:region% is setup correctly."
|
||||
setup-noPermissionRent: "You don't have permission for setting up rental regions."
|
||||
setup-noPermissionBuy: "You don't have permission for setting up buy regions."
|
||||
setup-couldNotDetect: "Found multiple regions with the same priority and/or parent/child relation, specify one on the second line (2 of the regions that were found: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
setup-blacklisted: "%0% is on the blacklist and cannot be added to AreaShop."
|
||||
setup-noPermission: "You cannot add the region '%0%', you are not an owner/member or don't have the permission for it."
|
||||
|
||||
destroy-noPermissionRent: "You don't have permission for deregistering a rental region."
|
||||
destroy-noPermissionBuy: "You don't have permission for deregistering a buy region."
|
||||
destroy-successRent: "%lang:region% successfully deregistered as rental region."
|
||||
destroy-successBuy: "%lang:region% successfully deregistered as buy region."
|
||||
|
||||
teleport-help: "/as tp [region] [sign]."
|
||||
teleport-noRentOrBuy: "The specified region is not registered: %0%."
|
||||
teleport-noPermission: "You don't have permission to teleport to your region."
|
||||
teleport-noPermissionOther: "You don't have permission to teleport to regions you do not own."
|
||||
teleport-noPermissionSign: "You don't have permission to teleport to the sign of your region."
|
||||
teleport-noPermissionOtherSign: "You don't have permission to teleport to signs of regions you do not own."
|
||||
teleport-noPermissionFriend: "You don't have permission to teleport to regions you are added to as a friend."
|
||||
teleport-noPermissionFriendSign: "You don't have permission to teleport to the sign of regions you are added to as a friend."
|
||||
teleport-noPermissionAvailable: "You don't have permission to teleport to available regions."
|
||||
teleport-noPermissionAvailableSign: "You don't have permission to teleport to the sign of available regions."
|
||||
teleport-success: "You teleported to %lang:region%."
|
||||
teleport-successSign: "You teleported to the sign of %lang:region%."
|
||||
teleport-noSafe: "No safe position found in %lang:region%, no spots in the region left or maximum tries exceeded (%0%/%1%)."
|
||||
teleport-blocked: "You can't teleport because the position is outside the region, and you are forced to teleport inside."
|
||||
teleport-changedToSign: "You only have permission to teleport to the sign and not inside the region, teleporting to sign."
|
||||
teleport-changedToNoSign: "No sign available to teleport to, trying to teleport inside the region instead."
|
||||
teleport-wrongWorld: "You need to be in world '%world%' to teleport to %lang:region%, but you are in world '%0%'."
|
||||
|
||||
setteleport-help: "/as settp [region] [reset], the region you stand in will be used if not specified."
|
||||
setteleport-noPermission: "You don't have permission to set the teleport location."
|
||||
setteleport-noPermissionOther: "You don't have permission to set the teleport location for a region you do not own."
|
||||
setteleport-noRentOrBuy: "The specified region is not registered: %0%."
|
||||
setteleport-success: "Teleport location of %lang:region% set."
|
||||
setteleport-notInside: "The location has to be inside the region."
|
||||
setteleport-reset: "Teleport location of %lang:region% has been reset."
|
||||
|
||||
find-help: "/as find [buy|rent] [maxprice] [group]."
|
||||
find-noPermission: "You don't have permission to search regions and teleport to them."
|
||||
find-success: "Found a %0% region: %lang:region%, while searching with a max price of your balance: %1%%2%."
|
||||
find-successMax: "Found a %0% region: %lang:region%, while searching with a max price of %1%%2%."
|
||||
find-wrongMaxPrice: "The specified maximum price is not a correct number: %0%."
|
||||
find-wrongGroup: "The specified group does not exist: %0%."
|
||||
find-noneFound: "No %0% region found while searching with a max price of your balance: %1%%2%."
|
||||
find-noneFoundMax: "No %0% region found while searching with a max price of %1%%2%."
|
||||
find-onlyInGroup: ", only searched for regions in group: %0%."
|
||||
|
||||
groupadd-help: "/as groupadd [group] [region], if no region specified all regions from your WorldEdit selection are used."
|
||||
groupadd-noPermission: "You don't have permission to add regions to groups."
|
||||
groupadd-success: "Region %lang:region% has been added to group '%0%', this group now has %1% member(s)."
|
||||
groupadd-failed: "Region %lang:region% is already a member of group '%0%'."
|
||||
groupadd-weSuccess: "Added to group %0%: <gray>%1%."
|
||||
groupadd-weFailed: "Were already in group %0%: <gray>%1%."
|
||||
|
||||
groupdel-help: "/as groupdel [group] [region], if no region specified all regions from your WorldEdit selection are used."
|
||||
groupdel-noPermission: "You don't have permission to remove regions from groups."
|
||||
groupdel-wrongGroup: "Group %0% not found, check '/as grouplist' for registered groups."
|
||||
groupdel-success: "Region %lang:region% has been removed from group '%0%', this group now has %1% member(s)."
|
||||
groupdel-failed: "Region %lang:region% is not a member of group '%0%'."
|
||||
groupdel-weSuccess: "Removed from group %0%: <gray>%1%."
|
||||
groupdel-weFailed: "Were not in group %0% anyway: <gray>%1%."
|
||||
|
||||
grouplist-noPermission: "You don't have permission to display the registered groups."
|
||||
grouplist-noGroups: "There are currently no groups registered."
|
||||
grouplist-success: "The following groups are registered: <gray>%0%."
|
||||
|
||||
groupinfo-help: "/as groupinfo [group]."
|
||||
groupinfo-noPermission: "You don't have permission to display information about a group."
|
||||
groupinfo-noGroup: "There is no group registered with the name '%0%', use /as grouplist to check groups."
|
||||
groupinfo-members: "The following regions are member of group %0%: <gray>%1%."
|
||||
groupinfo-noMembers: "Group %0% does not have any members."
|
||||
|
||||
schemevent-help: "/as schemevent [region] [created|deleted|rented|unrented|bought|sold]."
|
||||
schemevent-wrongEvent: "The specified event '%0%' does not exist, use one of the following: <gray>%1%."
|
||||
schemevent-success: "Event '%0%' has successfully been triggered for region %lang:region%."
|
||||
schemevent-noPermission: "You don't have permission to trigger schematic events."
|
||||
|
||||
add-help: "/as add [rent|buy] [region] [world]."
|
||||
add-noPermission: "You don't have permission to add a region to AreaShop."
|
||||
add-success: "Added as %0%: <gray>%1%."
|
||||
add-failed: "Already registered: <gray>%0%."
|
||||
add-failedOtherWorld: "Already registered from another world: <gray>%0%."
|
||||
add-blacklisted: "On the blacklist: <gray>%0%."
|
||||
add-rentCancelled: "Rent cancelled: <gray>%0%."
|
||||
add-buyCancelled: "Buy cancelled: <gray>%0%."
|
||||
add-addCancelled: "Add cancelled: <gray>%0%."
|
||||
add-specifyWorld: "Specify the world of the region when using from console."
|
||||
add-incorrectWorld: "World '%0%' not found, try again (case-sensitive)."
|
||||
add-noPermissionRegions: "No permission to add: <gray>%0%."
|
||||
add-noPermissionOwnerMember: "<gray>You either are not a member/owner of these regions or have no permission to add your regions."
|
||||
|
||||
del-noPermission: "You don't have permission to remove regions."
|
||||
del-success: "Removed regions: <gray>%0%."
|
||||
del-failed: "No permission to remove or not registered: <gray>%0%."
|
||||
del-cancelled: "Delete cancelled: <gray>%0%."
|
||||
|
||||
addsign-help: "/as addsign [region] [profile]."
|
||||
addsign-noSign: "You are not looking at a sign."
|
||||
addsign-noRegions: "No region found around the sign position."
|
||||
addSign-notRegistered: "The specified region is not registered in AreaShop: %0% (it first needs to be added to AreaShop before a sign can be added)."
|
||||
addsign-couldNotDetect: "Found multiple regions around the sign, specify region as extra argument (2 of the regions that were found: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
addsign-couldNotDetectSign: "Found multiple regions around the sign, specify region on the second line (2 of the regions that were found: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
addsign-wrongProfile: "The specified profile does not exist, use one of the following (check config): <gray>%0%."
|
||||
addsign-profile:
|
||||
- "<click:run_command:/areashop linksigns %0%><hover:show_text:'Signprofile %0%<newline>%lang:action|Use this profile|%'><bold>%0%</bold></hover></click>"
|
||||
addsign-success: "The sign has been added to %lang:region%."
|
||||
addsign-successProfile: "The sign has been added to %lang:region% with profile %0%."
|
||||
addsign-alreadyRegistered: "That sign is already registered for region %lang:region%."
|
||||
addsign-noPermission: "You don't have permission to add a sign."
|
||||
|
||||
delsign-noSign: "You are not looking at a sign."
|
||||
delsign-noPermission: "You don't have permission to delete a sign."
|
||||
delsign-noRegion: "That sign does not belong to an AreaShop region."
|
||||
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:
|
||||
- "<dark_green><bold>►<reset> %lang:region% <gray>("
|
||||
- "<hover:show_text:'until %until%'>%timeleft% left</hover>"
|
||||
- ")."
|
||||
me-buyLine: "<dark_green><bold>►<reset> %lang:region%."
|
||||
me-friendLine:
|
||||
- "<dark_green><bold>►<reset> %lang:region% <gray>("
|
||||
- "<hover:show_text:'You are added as friend'>owned by %lang:player%</hover>"
|
||||
- ")."
|
||||
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."
|
||||
setowner-noPermissionRent: "You don't have permission to set the owner of rent regions."
|
||||
setowner-noPermissionBuy: "You don't have permission to set the owner of buy regions."
|
||||
setowner-notRegistered: "The specified region is not registered, owner cannot be set."
|
||||
setowner-noPlayer: "Could not get the UUID of the specified player: %0%."
|
||||
setowner-succesRent: "Owner of %lang:region% successfully changed to %lang:player%, rented until %until% (%timeleft% left)."
|
||||
setowner-succesRentExtend: "Owner was already %lang:player%, rent extended with '%duration%', now rented until %until% (%timeleft% left)."
|
||||
setowner-succesBuy: "Owner of %lang:region% successfully changed to %lang:player%."
|
||||
|
||||
resell-help: "/as resell [price] [region], the region you stand in will be used if not specified."
|
||||
resell-wrongPrice: "'%0%' is not a valid price."
|
||||
resell-notRegistered: "The specified region is not registered: %0%."
|
||||
resell-notBought: "You can't resell %lang:region% because it is not sold yet."
|
||||
resell-success: "%lang:region% is successfully put into reselling mode for %resellprice%."
|
||||
resell-noPermission: "You don't have permission to set your region in reselling mode."
|
||||
resell-noPermissionOther: "You don't have permission to set regions in reselling mode."
|
||||
resell-disabled: "Reselling has been disabled for this region."
|
||||
|
||||
stopresell-help: "/as stopresell [region], the region you stand in will be used if not specified."
|
||||
stopresell-notRegistered: "The specified region is not registered: %0%."
|
||||
stopresell-notResell: "You can't stop reselling %lang:region% because it is not in resell mode."
|
||||
stopresell-success: "%lang:region% is successfully put back into sold mode."
|
||||
stopresell-noPermission: "You don't have permission to set your region back to sold mode."
|
||||
stopresell-noPermissionOther: "You don't have permission to set regions back to sold mode."
|
||||
|
||||
addfriend-help: "/as addfriend [player] [region], the region you stand in will be used if not specified."
|
||||
addfriend-noPermissionOther: "You don't have permission to add friends to regions that are not yours."
|
||||
addfriend-noPermission: "You don't have permission to add friends to your region."
|
||||
addfriend-successOther: "%lang:tPlayer|%0%|% has been added as friend to region %lang:region%."
|
||||
addfriend-success: "%lang:tPlayer|%0%|% has been added as friend to your region %lang:region%."
|
||||
addfriend-alreadyAdded: "%lang:tPlayer|%0%|% is already added as friend to %lang:region%."
|
||||
addfriend-self: "Adding the owner of the region as friend would be pointless."
|
||||
addfriend-noOwner: "You cannot add friends to a region without owner."
|
||||
addfriend-notVisited: "You cannot add %0% because he did not visit the server yet."
|
||||
|
||||
delfriend-help: "/as delfriend [player] [region], the region you stand in will be used if not specified."
|
||||
delfriend-noPermissionOther: "You don't have permission to delete friends from regions that are not yours."
|
||||
delfriend-noPermission: "You don't have permission to delete friends from your region."
|
||||
delfriend-successOther: "%lang:tPlayer|%0%|% has been deleted as friend from region %lang:region%."
|
||||
delfriend-success: "%lang:tPlayer|%0%|% has been deleted as friend from your region %lang:region%."
|
||||
delfriend-notAdded: "%lang:tPlayer|%0%|% is not added as friend to %lang:region%."
|
||||
delfriend-noOwner: "You cannot remove friends from a region without owner."
|
||||
|
||||
linksigns-multipleRegions: "Found multiple regions: <gray>%0%."
|
||||
linksigns-multipleRegionsAdvice: "Click another time to try again or use '/as linksigns' to stop."
|
||||
linksigns-noRegions: "No AreaShop regions found in the direction of your cursor, make sure the region is added to AreaShop <gray>(maximum range 100 blocks)."
|
||||
linksigns-regionFound: "Region %lang:region% has been found, now point to a sign and leftclick to link it."
|
||||
linksigns-signFound: "Found a sign at (%0%, %1%, %2%), now point towards a region and rightclick to link it"
|
||||
linksigns-noSign: "No sign found in the direction of your cursor, make sure you have a direct sight to a sign and click again <gray>(maximum range 100 blocks)."
|
||||
linksigns-alreadyRegistered: "That sign is already registered for region %lang:region%, click again to select another sign."
|
||||
linksigns-first: "You have entered sign linking mode."
|
||||
linksigns-next: "<gray>Leftclick to select a sign, rightclick to select a region, use /as linksigns to stop."
|
||||
linksigns-noPermission: "You don't have permission to enter bulk sign linking mode."
|
||||
linksigns-stopped: "Exited sign linking mode."
|
||||
|
||||
stack-help:
|
||||
- "/as stack [amount] [gap] [name] [rent|buy] [group].<newline>"
|
||||
- " <gray>[amount] Number of regions that will be created.<newline>"
|
||||
- " <gray>[gap] Blocks distance between the regions.<newline>"
|
||||
- " <gray>[name] Name of the regions (number will be behind it).<newline>"
|
||||
- " <gray>[rent|buy] Make then rent or buy regions.<newline>"
|
||||
- " <gray>[group] A group to add the created regions to.<newline>"
|
||||
- " <gray>The regions will be created in the direction you are facing."
|
||||
stack-accepted: "Starting to create %0% %1% regions with %2% blocks in between, names start with %3% and have a number behind them.%4%"
|
||||
stack-addToGroup: " Created regions will be added to the group '%0%'."
|
||||
stack-noPermission: "You don't have permission to create and add regions to AreaShop in bulk."
|
||||
stack-wrongAmount: "'%0%' is not a correct amount of regions."
|
||||
stack-wrongGap: "'%0%' is not a correct number for the number of blocks gap between regions."
|
||||
stack-noSelection: "You don't have a selection that indicates where the first region should be created."
|
||||
stack-addStart: "<gray>Adding %0% regions at %1% per second."
|
||||
stack-addComplete: "<gray>Added %0% regions%1%."
|
||||
stack-tooHigh: ", %0% regions skipped because they were above Y=256"
|
||||
stack-tooLow: ", %0% regions skipped because they were below Y=0"
|
||||
stack-unclearDirection: "Please look clearly in the north, east, south, west, up or down direction, currently detected %0%."
|
||||
|
||||
setlandlord-help: "/as setlandlord [player] [region], the region you stand in will be used if not specified."
|
||||
setlandlord-noPermission: "You don't have permission to set the landlord for a region."
|
||||
setlandlord-success: "%lang:landlord% has successfully been set as landlord of %lang:region%."
|
||||
|
||||
message-help: "/as message [player] [message...]"
|
||||
message-noPermission: "You do not have permission to send AreaShop messages."
|
||||
message-notOnline: "%0% is not online."
|
||||
|
||||
import-help: "/as import RegionForSale"
|
||||
import-wrongSource: "Specify from where you want to import data, options: RegionForSale."
|
||||
import-noPluginFolder: "Could not find the %0% folder, are you sure you are importing from the correct source?"
|
||||
import-noWorldsFolder: "There is no 'plugins/RegionForSale/worlds' folder, therefore nothing could be imported."
|
||||
import-confirm: "Are you sure you want to import all regions from RegionForSale?"
|
||||
import-start: "Starting import of RegionForSale data:"
|
||||
import-doWorld: "<dark_green><bold>► World %0%:"
|
||||
import-noBukkitWorld: "<red>Could not find world in Bukkit."
|
||||
import-noRegionManager: "<red>Could not get RegionManager from WorldGuard, are regions enabled in this world?"
|
||||
import-noRegions: "<red>No regions.yml file found."
|
||||
import-loadRegionsFailed: "<red>Could not load regions.yml at: %0%"
|
||||
import-invalidRegionSection: "<red>Invalid section in regions.yml: %0%."
|
||||
import-noWorldGuardRegion: "<red>WorldGuard region not found: %0%."
|
||||
import-noWorldGuardRegionParent: "<red>WorldGuard region for parent region not found: %0%."
|
||||
import-buyAndRent: "<gold>%0% can be bought and rented, only adding as buy in AreaShop (cannot be both)."
|
||||
import-noBuyAndNoRent: "<red>%0% cannot be bought and cannot be rented, skipping import."
|
||||
import-imported: "<green>%lang:tRegion|%0%|% imported."
|
||||
import-loadWorldConfigFailed: "<red>Loading world-specific config.yml failed: %0%."
|
||||
import-improperParentRegion: "<red>Parent region %0% does not have readable settings."
|
||||
import-alreadyAdded: "<red>Region '%0%' has already been added."
|
||||
import-alreadyAddedOtherWorld: "<red>Region '%0%' has already been added in world %1%, regions in different worlds cannot have the same name in AreaShop."
|
||||
import-invalidSignLocation: "<red>Failed to import a sign of region '%0%', invalid location: '%1%'."
|
||||
import-signAlreadyAdded: "<red>Skipped adding sign at location '%1%' to region '%0%', it is already added to region '%2%'."
|
||||
import-moneyBackFailed: "<red>Failed to parse buy price '%0%' and sell price '%1%' to set the money back percentage."
|
||||
|
||||
confirm-rent:
|
||||
- "%lang:prefix%Are you sure you want to rent %lang:tRegion|%0%|%?<newline>"
|
||||
- "<click:run_command:/areashop rent %0%><hover:show_text:'%lang:action|Rent %0%|%'><dark_green><bold>►<reset> %lang:button|Click to rent %0%|%</hover></click>"
|
||||
confirm-extend:
|
||||
- "%lang:prefix%Are you sure you want to extend %lang:tRegion|%0%|%?<newline>"
|
||||
- "<click:run_command:/areashop rent %0%><hover:show_text:'%lang:action|Extend %0%|%'><dark_green><bold>►<reset> %lang:button|Click to extend %0%|%</hover></click>"
|
||||
confirm-unrent:
|
||||
- "%lang:prefix%Are you sure you want to stop renting %lang:tRegion|%0%|%?<newline>"
|
||||
- "<click:run_command:/areashop unrent %0%><hover:show_text:'%lang:action|Stop renting %0%|%'><dark_green><bold>►<reset> %lang:button|Click to unrent %0%|%</hover></click>"
|
||||
confirm-buy:
|
||||
- "%lang:prefix%Are you sure you want to buy %lang:tRegion|%0%|%?<newline>"
|
||||
- "<click:run_command:/areashop buy %0%><hover:show_text:'%lang:action|Buy %0%|%'><dark_green><bold>►<reset> %lang:button|Click to buy %0%|%</hover></click>"
|
||||
confirm-sell:
|
||||
- "%lang:prefix%Are you sure you want to sell %lang:tRegion|%0%|%?<newline>"
|
||||
- "<dark_green><bold>►<reset> %lang:button|Click to sell %0%|%"
|
||||
- "<click:run_command:/areashop sell %0%><hover:show_text:'%lang:action|Sell %0%|%'><dark_green><bold>►<reset> %lang:button|Click to sell %0%|%</hover></click>"
|
||||
|
||||
timeleft-years: "%0% years"
|
||||
timeleft-months: "%0% months"
|
||||
timeleft-days: "%0% days"
|
||||
timeleft-hours: "%0% hours"
|
||||
timeleft-minutes: "%0% minutes"
|
||||
timeleft-second: "%0% second"
|
||||
timeleft-seconds: "%0% seconds"
|
||||
timeleft-ended: "Expired"
|
||||
|
||||
greeting-forrent: "%region% can be rented for %price% per %duration%."
|
||||
greeting-rented: "%region% is rented by %player% until %until%."
|
||||
greeting-forsale: "%region% can be bought for %price%."
|
||||
greeting-bought: "%region% is bought by %player%."
|
||||
greeting-resale: "%region% can be bought for %resellprice% from %player%."
|
||||
|
||||
update-playerNotify:
|
||||
- "<dark_green>Update from AreaShop V%0% to AreaShop V%1% available, get the latest version at "
|
||||
- "<click:open_url:'https://github.com/md5sha256/releases'><hover:show_text:'%lang:action|Go to the AreaShop Github Releases|%'><bold>Github</bold></hover></click>"
|
||||
- " (and leave a review)."
|
||||
@@ -1,4 +1,4 @@
|
||||
# ╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
||||
# ╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
||||
# ║ Language file of the AreaShop plugin created by NLThijs48, Github can be found at https://github.com/NLthijs48/AreaShop
|
||||
# ║ English language file, plugin version 2.5.0
|
||||
# ║
|
||||
@@ -80,6 +80,7 @@ help-reload: "%lang:helpCommand|/as reload|% Reload all files and update the reg
|
||||
help-setrestore: "%lang:helpCommand|/as setrestore|% Set restoring on/off and choose profile."
|
||||
help-setprice: "%lang:helpCommand|/as setprice|% Change the price of a region."
|
||||
help-setduration: "%lang:helpCommand|/as setduration|% Change the duration of a rent region."
|
||||
help-settransfer: "%lang:helpCommand|/as settransfer|% Set transfer on/off."
|
||||
help-teleport: "%lang:helpCommand|/as tp|% Teleport to a rent/buy region."
|
||||
help-setteleport: "%lang:helpCommand|/as settp|% Set teleport position for a region."
|
||||
help-find: "%lang:helpCommand|/as find|% Find an empty buy or rent."
|
||||
@@ -102,6 +103,7 @@ help-linksigns: "%lang:helpCommand|/as linksigns|% Use bulk sign linking mode."
|
||||
help-stack: "%lang:helpCommand|/as stack|% Create multiple regions and add them."
|
||||
help-setlandlord: "%lang:helpCommand|/as setlandlord|% Set the landlord of a region."
|
||||
help-import: "%lang:helpCommand|/as import|% Import region from RegionForSale."
|
||||
help-transfer: "%lang:helpCommand|/as transfer|% Transfer a region to another player."
|
||||
|
||||
rent-help: "/as rent [region], the region you stand in will be used if not specified."
|
||||
rent-noPermission: "You don't have permission to rent a region."
|
||||
@@ -156,6 +158,15 @@ sell-noPermission: "You don't have permission to sell a region."
|
||||
sell-noPermissionOther: "You don't have permission to sell another region."
|
||||
sell-disabled: "Selling has been disabled for this region."
|
||||
|
||||
transfer-help: "/as transfer <player> [region], the region you stand in will be used if not specified."
|
||||
transfer-noPermission: "You don't have permission to transfer a region."
|
||||
transfer-disabled: "Transferring has been disabled for this region."
|
||||
transfer-transferred-owner: "%lang:region% has been transferred and is now owned by %0%."
|
||||
transfer-transferred-tenant: "%lang:region% has been transferred and is now occupied by %0%."
|
||||
transfer-noPlayer: "Unknown player: %0%"
|
||||
transfer-notCurrentTenant: "You are not the current tenant of this region."
|
||||
transfer-transferSelf: "You cannot transfer a region to yourself."
|
||||
|
||||
reload-reloading: "Reloaded all configuration and region files."
|
||||
reload-updateStart: ""
|
||||
reload-updateComplete: ""
|
||||
@@ -303,6 +314,12 @@ setrestore-invalidSetting: "'%0%' is not a valid state, should be true, false or
|
||||
setrestore-success: "Successfully set the restore setting of %lang:region% to '%0%'."
|
||||
setrestore-successProfile: "Successfully set the restore setting of %lang:region% to '%0%' and the profile to '%1%'."
|
||||
|
||||
settransfer-help: "/as settransfer <region> <true|false>."
|
||||
settransfer-noPermission: "You don't have permission to change the transfer settings."
|
||||
settransfer-notRegistered: "The specified region is not registered: %0%."
|
||||
settransfer-invalidSetting: "'%0%' is not a valid state, should be true, false or general."
|
||||
settransfer-success: "Successfully set the transfer setting of %lang:region% to '%0%'."
|
||||
|
||||
setprice-noPermission: "You don't have permission to change the price of a region."
|
||||
setprice-help: "/as setprice <price> [region], the region you stand in will be used if not specified."
|
||||
setprice-notRegistered: "The specified region is not registered: %0%."
|
||||
@@ -619,7 +636,7 @@ greeting-resale: "%region% can be bought for %resellprice% from %player%."
|
||||
|
||||
update-playerNotify:
|
||||
- "[darkgreen]Update from AreaShop V%0% to AreaShop V%1% available, get the latest version at "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Go to the Spigot AreaShop page|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (and leave a review)."
|
||||
- "[bold]Github[/bold]"
|
||||
- " hover: %lang:action|Go to the AreaShop Github Releases|%"
|
||||
- " link: https://github.com/md5sha256/releases"
|
||||
- " (and leave a review)."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Use %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Use %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Use %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Use %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Player %0%"
|
||||
- " hover: %lang:action|Regions of %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Player %0%"
|
||||
- " hover: %lang:action|Regions of %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landlord %landlord%"
|
||||
- " hover: %lang:action|Regions of %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landlord %landlord%"
|
||||
- " hover: %lang:action|Regions of %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "No puedes alquilar o comprar %0% region(es) en total (ya tienes %1% en el grupo '%2%')."
|
||||
"confirm-yes": " [gray]Haz click en %lang:command|Confirm||%[gray], o reenvía el comando."
|
||||
"general-notReady": "AreaShop no se ha cargado todavía. Espera un poco."
|
||||
@@ -143,15 +143,15 @@
|
||||
"reload-noPermission": "No tienes permiso para recargar los archivos de configuración."
|
||||
"reload-updateCommandChanged": "Los comandos '/as updaterents' y '/as updatebuys' han sido borrados, '/as reload' actualizará las regiones. Puedes usar este comando en vez de los 2 primeros."
|
||||
"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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
- "/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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
"info-noPermission": "No tienes permiso para ver información sobre las regiones."
|
||||
"info-allHeader": "Todas las regiones%0%:"
|
||||
"info-rentedHeader": "Regiones alquiladas%0%:"
|
||||
@@ -172,19 +172,19 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Vendida a %lang:player% (reventa)."
|
||||
"info-pageStatus": "[gold]Pagina %0%/%1%"
|
||||
"info-pagePrevious":
|
||||
- " [gold][bold]◄Anterior[/bold] "
|
||||
- " hover: %lang:action|Mostrar la página anterior|%"
|
||||
- " command: %0%"
|
||||
- " [gold][bold]◄Anterior[/bold] "
|
||||
- " hover: %lang:action|Mostrar la página anterior|%"
|
||||
- " command: %0%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Anterior[/bold] "
|
||||
- " hover: Esta es la primera página"
|
||||
- " [darkgray][bold]◄Anterior[/bold] "
|
||||
- " hover: Esta es la primera página"
|
||||
"info-pageNext":
|
||||
- " [gold][bold]Siguiente►[/bold]"
|
||||
- " hover: %lang:action|Mostrar la página siguiente|%"
|
||||
- " command: %0%"
|
||||
- " [gold][bold]Siguiente►[/bold]"
|
||||
- " hover: %lang:action|Mostrar la página siguiente|%"
|
||||
- " command: %0%"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Next►[/bold]"
|
||||
- " hover: Esta es la última pagina"
|
||||
- " [darkgray][bold]Next►[/bold]"
|
||||
- " hover: Esta es la última pagina"
|
||||
"info-playerHelp": "/as info player <nombre>."
|
||||
"info-playerRents": "Regiones alquiladas por %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% no ha alquilado una región."
|
||||
@@ -197,66 +197,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Comprada por %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Comprada por %lang:player%, actualvente en reventa."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Extender por[/bold]"
|
||||
- " hover: Extender el alquiler de %region%"
|
||||
- " hover: con %duration% por %price%"
|
||||
- " hover: %lang:action|Extender el alquiler de %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% por %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Extender por[/bold]"
|
||||
- " hover: Extender el alquiler de %region%"
|
||||
- " hover: con %duration% por %price%"
|
||||
- " hover: %lang:action|Extender el alquiler de %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% por %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Alquilar por[/bold]"
|
||||
- " hover: Alquilar %region% por %price% durante %duration%"
|
||||
- " hover: %lang:action|Alquilar %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% por %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Alquilar por[/bold]"
|
||||
- " hover: Alquilar %region% por %price% durante %duration%"
|
||||
- " hover: %lang:action|Alquilar %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% por %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Comprar por[/bold]"
|
||||
- " hover: Comprar %region% por %price%"
|
||||
- " hover: %lang:action|Comprar %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Comprar por[/bold]"
|
||||
- " hover: Comprar %region% por %price%"
|
||||
- " hover: %lang:action|Comprar %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Precio de reventa: [gray]%resellprice% (puedes comprarla de %lang:player%)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Jugadores agregados: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Borrar a %0% como amigo|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Borrar a %0% como amigo|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Paga de venta: [gray]%moneyback% (%moneybackpercent%% del precio)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Paga de venta[/bold]"
|
||||
- " hover: Vender %region% y recuperar %moneyback%"
|
||||
- " hover: %lang:action|Vender %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% del precio)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Paga de venta[/bold]"
|
||||
- " hover: Vender %region% y recuperar %moneyback%"
|
||||
- " hover: %lang:action|Vender %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% del precio)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Paga por desalquilar: [gray]%moneyback% (%moneybackpercent%% del tiempo restante)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Paga por desalquilar[/bold]"
|
||||
- " hover: Desalquilar %region% y recuperar %moneyback%"
|
||||
- " hover: %lang:action|Desalquilar %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% del tiempo restante)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Paga por desalquilar[/bold]"
|
||||
- " hover: Desalquilar %region% y recuperar %moneyback%"
|
||||
- " hover: %lang:action|Desalquilar %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% del tiempo restante)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Numero de extensiones máximas: [gray]%maxextends% veces."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] No se puede extender el alquiler."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Extensiones restantes: [gray]%extendsleft% veces de %maxextends%."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Alquiler por adelantado: [gray]%maxrenttime% como máximo."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Ir a la region[/bold]"
|
||||
- " hover: %lang:action|Teletransportarse a %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Ir a la region[/bold]"
|
||||
- " hover: %lang:action|Teletransportarse a %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]Configurar un punto de teletransporte[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Configurar un punto de teletransporte|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]Configurar un punto de teletransporte[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Configurar un punto de teletransporte|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Carteles conectados: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Grupos asignados: [gray]%0%."
|
||||
@@ -388,10 +388,10 @@
|
||||
"addsign-couldNotDetectSign": "Se han encontrado muchas regiones alrededor del cartel, especifica la región en la segunda línea (2 de las regiones que se han encontrado: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "El perfil especificado no existe, usa uno de los siguientes (comprueba la config): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Signprofile %0%"
|
||||
- " hover: %lang:action|Usar este perfil|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Signprofile %0%"
|
||||
- " hover: %lang:action|Usar este perfil|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "El cartel ha sido agregado a %lang:region%."
|
||||
"addsign-successProfile": "El cartel ha sido agregado a %lang:region% con el perfil %0%."
|
||||
"addsign-alreadyRegistered": "Este cartel ya está registrado para la región %lang:region%."
|
||||
@@ -404,16 +404,16 @@
|
||||
"me-header": "Regiones de %lang:tPlayer|%0%|%:"
|
||||
"me-notAPlayer": "No eres un jugador, y no puedes tener regiones."
|
||||
"me-rentLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% restante"
|
||||
- " hover: hasta %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% restante"
|
||||
- " hover: hasta %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "de %lang:player%"
|
||||
- " hover: Estás agregado como amigo"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "de %lang:player%"
|
||||
- " hover: Estás agregado como amigo"
|
||||
- ")."
|
||||
"me-nothing": "%lang:tPlayer|%0%|% no ha comprado/alquilado regiones y no está agregado como amigo a ninguna."
|
||||
"me-noPlayer": "%0% no existe. Comprueba si ha entrado al servidor."
|
||||
"me-clickHint": "[gray][italic]Haz click en un nombre de región para ver los detalles."
|
||||
@@ -468,13 +468,13 @@
|
||||
"linksigns-noPermission": "No tienes permiso para entrar en el modo de linkeo de carteles."
|
||||
"linksigns-stopped": "Has salido del modo de linkeo de carteles."
|
||||
"stack-help":
|
||||
- "/as stack <cantidad> <espacio> <ombre> <rent|buy> [grupo].[break]"
|
||||
- " [gray]<cantidad> Número de regiones que serán creadas.[break]"
|
||||
- " [gray]<espacio> Bloques de distancia entre regiones.[break]"
|
||||
- " [gray]<nombre> Nombre de las regiones (el número estará detrás).[break]"
|
||||
- " [gray]<rent|buy> Hacer las regiones de compra o alquiler.[break]"
|
||||
- " [gray][grupo] Un grupo para agregar las regiones.[break]"
|
||||
- " [gray]Las regiones serán creadas en la dirección en que estás mirando."
|
||||
- "/as stack <cantidad> <espacio> <ombre> <rent|buy> [grupo].[break]"
|
||||
- " [gray]<cantidad> Número de regiones que serán creadas.[break]"
|
||||
- " [gray]<espacio> Bloques de distancia entre regiones.[break]"
|
||||
- " [gray]<nombre> Nombre de las regiones (el número estará detrás).[break]"
|
||||
- " [gray]<rent|buy> Hacer las regiones de compra o alquiler.[break]"
|
||||
- " [gray][grupo] Un grupo para agregar las regiones.[break]"
|
||||
- " [gray]Las regiones serán creadas en la dirección en que estás mirando."
|
||||
"stack-accepted": "Empezando a crear %0% %1% regiones con %2% bloques en medio, los nombres empiezan con %3% y tienen un número detrás.%4%"
|
||||
"stack-addToGroup": "Las regiones creadas serán añadidas al grupo '%0%'."
|
||||
"stack-noPermission": "No tienes permiso para crear y agregar regiones."
|
||||
@@ -517,30 +517,30 @@
|
||||
"import-signAlreadyAdded": "[red]Omitido cartel en la ubicación '%1%' a la región '%0%', ya que ya ha sido añadida a la región '%2%"
|
||||
"import-moneyBackFailed": "[red]Fallo al analizar el precio de compra '%0%' y venta '%1%' para establecer en porcentaje de dinero devuelto"
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Quieres alquilar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Haz click para alquilarla %0%|%"
|
||||
- " hover: %lang:action|Alquilar %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Quieres alquilar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Haz click para alquilarla %0%|%"
|
||||
- " hover: %lang:action|Alquilar %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Quieres extender el alquiler de la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para extender %0%|%"
|
||||
- " hover: %lang:action|Extender %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Quieres extender el alquiler de la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para extender %0%|%"
|
||||
- " hover: %lang:action|Extender %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Quieres dejar de alquilar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para dejar de alquilar %0%|%"
|
||||
- " hover: %lang:action|Dejar de alquilar %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Quieres dejar de alquilar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para dejar de alquilar %0%|%"
|
||||
- " hover: %lang:action|Dejar de alquilar %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Quieres comprar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para comprar %0%|%"
|
||||
- " hover: %lang:action|Comprar %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
- "%lang:prefix%Quieres comprar la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click para comprar %0%|%"
|
||||
- " hover: %lang:action|Comprar %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Quieres vender la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click to sell %0%|%"
|
||||
- " hover: %lang:action|Sell %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
- "%lang:prefix%Quieres vender la %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Click to sell %0%|%"
|
||||
- " hover: %lang:action|Sell %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
"timeleft-years": "%0% años"
|
||||
"timeleft-months": "%0% meses"
|
||||
"timeleft-days": "%0% días"
|
||||
@@ -554,4 +554,4 @@
|
||||
"greeting-forsale": "%region% puede ser comprada por %price%."
|
||||
"greeting-bought": "%region% está comprada por %player%."
|
||||
"greeting-resale": "%region% puede ser comprada por %resaleprice% al jugador %player%."
|
||||
"update-playerNotify": "[darkgreen]Hay una actualización disponible para AreaShop (V%0% - %1%). Consigue la más reciente en https://github.com/NLthijs48/AreaShop/releases."
|
||||
"update-playerNotify": "[darkgreen]Hay una actualización disponible para AreaShop (V%0% - %1%). Consigue la más reciente en https://github.com/NLthijs48/AreaShop/releases."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Utilisez %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Utilisez %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Utilisez %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Utilisez %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Région %0%"
|
||||
- " hover: %lang:action|Information sur la région|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Région %0%"
|
||||
- " hover: %lang:action|Information sur la région|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Joueur %0%"
|
||||
- " hover: %lang:action|Régions de %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Joueur %0%"
|
||||
- " hover: %lang:action|Régions de %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Bailleur %landlord%"
|
||||
- " hover: %lang:action|Région de %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Bailleur %landlord%"
|
||||
- " hover: %lang:action|Région de %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "Vous ne pouvez pas louer ou acheter plus de %0% région(s) au total (vous possédez déjà %1% dans le groupe '%2%')."
|
||||
"confirm-yes": " [gray]Clique ici %lang:command|Confirm%0% |%[gray], ou refait la commande."
|
||||
"general-notReady": "AreaShop n'est pas totalement chargé, merci d'attendre."
|
||||
@@ -143,15 +143,15 @@
|
||||
"reload-noPermission": "Vous n'avez pas la permission de recharger les fichiers."
|
||||
"reload-updateCommandChanged": "'/as updaterents' et '/as updatebuys' ont été supprimées, '/as reload' est la commande à utiliser pour mettre à jour les régions."
|
||||
"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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
- "/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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
"info-noPermission": "Vous n'avez pas la permission d'avoir des informations à propos des régions."
|
||||
"info-allHeader": "Toutes les régions%0%:"
|
||||
"info-rentedHeader": "Les régions louées%0%:"
|
||||
@@ -172,19 +172,19 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Vendu à %lang:player% (revente)."
|
||||
"info-pageStatus": "[gold]Page %0%/%1%"
|
||||
"info-pagePrevious":
|
||||
- "[gold][bold]◄Précédent[/bold] "
|
||||
- "hover: %lang:action|Montrer la page précédente |%"
|
||||
- "command: /areashop %0%"
|
||||
- "[gold][bold]◄Précédent[/bold] "
|
||||
- "hover: %lang:action|Montrer la page précédente |%"
|
||||
- "command: /areashop %0%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Précédent[/bold] "
|
||||
- " hover: C'est déjà la premier page"
|
||||
- " [darkgray][bold]◄Précédent[/bold] "
|
||||
- " hover: C'est déjà la premier page"
|
||||
"info-pageNext":
|
||||
- "[gold][bold]Suivant►[/bold]"
|
||||
- "hover: %lang:action|Page suivante|%"
|
||||
- "commande: /areashop "
|
||||
- "[gold][bold]Suivant►[/bold]"
|
||||
- "hover: %lang:action|Page suivante|%"
|
||||
- "commande: /areashop "
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Suivaznt►[/bold]"
|
||||
- " hover: C'est déjà la dernière page"
|
||||
- " [darkgray][bold]Suivaznt►[/bold]"
|
||||
- " hover: C'est déjà la dernière page"
|
||||
"info-playerHelp": "/as info player <name>"
|
||||
"info-playerRents": "Régions louée par %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% n'a de régions louées."
|
||||
@@ -197,66 +197,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Achetée par %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Achetée par %lang:player%, actuellement en revente."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Etendre pour[/bold]"
|
||||
- " hover: Etendre votre location de %region%"
|
||||
- " hover: pour %duration% coutant %price%"
|
||||
- " hover: %lang:action|Etendre votre location de %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% pour %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Etendre pour[/bold]"
|
||||
- " hover: Etendre votre location de %region%"
|
||||
- " hover: pour %duration% coutant %price%"
|
||||
- " hover: %lang:action|Etendre votre location de %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% pour %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Louer pour[/bold]"
|
||||
- " hover: Louer %region% pour %price% pour %duration%"
|
||||
- " hover: %lang:action|Rent %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% pour %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Louer pour[/bold]"
|
||||
- " hover: Louer %region% pour %price% pour %duration%"
|
||||
- " hover: %lang:action|Rent %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% pour %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Prix d'achat[/bold]"
|
||||
- " hover: Acheter%region% pour %price%"
|
||||
- " hover: %lang:action|Acheter %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Prix d'achat[/bold]"
|
||||
- " hover: Acheter%region% pour %price%"
|
||||
- " hover: %lang:action|Acheter %region%|%"
|
||||
- " 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] Ami(s) ajouté(s) : [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Région %region%"
|
||||
- " hover: %lang:action|retirer %0% comme ami|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Région %region%"
|
||||
- " hover: %lang:action|retirer %0% comme ami|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Prix de revente : [gray]%moneyback% (%moneybackpercent%% du prix)"
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Retour sur investissement de la vente[/bold]"
|
||||
- " hover: Vendez %region% et recupérer %moneyback% de retour sur investissement"
|
||||
- " hover: %lang:action|Vendre %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% du prix)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Retour sur investissement de la vente[/bold]"
|
||||
- " hover: Vendez %region% et recupérer %moneyback% de retour sur investissement"
|
||||
- " hover: %lang:action|Vendre %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% du prix)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Remboursement de location : [gray]%moneyback% (%moneybackpercent%% du temps restant)"
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Prorata du loyer remboursé[/bold]"
|
||||
- " hover: Cesser la location %region% et récupérer %moneyback%"
|
||||
- " hover: %lang:action|Cesser la location%region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% du temps restant)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Prorata du loyer remboursé[/bold]"
|
||||
- " hover: Cesser la location %region% et récupérer %moneyback%"
|
||||
- " hover: %lang:action|Cesser la location%region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% du temps restant)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Nombre maximum de région : [gray]%maxextends% fois."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] La location ne peut être allongée."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Extensions restantes : [gray]%extendsleft% fois sur %maxextends%."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Location à l'avance : [gray]%maxrenttime% au maximum"
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Aller à la région[/bold]"
|
||||
- " hover: %lang:action|Se téleporter à %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Aller à la région[/bold]"
|
||||
- " hover: %lang:action|Se téleporter à %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]Définir la position de téléportation[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Définir la position de téléportation|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]Définir la position de téléportation[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Définir la position de téléportation|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Pancartes connectées: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Assigné aux groupes: [gray]%0%."
|
||||
@@ -390,10 +390,10 @@
|
||||
"addsign-couldNotDetectSign": "Plusieurs régions ont été trouvées à proximité du panneau. Spécifiez la région à la deuxième ligne (2 des régions trouvées: %lang:tRegion|%0%|% et %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Le profil spécifié n'existe pas, utilisez l'un de la liste suivante (Vérifiez la config): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Connexion profil %0%"
|
||||
- " hover: %lang:action|Utiliser ce profil|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Connexion profil %0%"
|
||||
- " hover: %lang:action|Utiliser ce profil|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "Le panneau a été ajouté à %lang:region%."
|
||||
"addsign-successProfile": "Le panneau a été ajouté à %lang:region%. avec le profile %0%."
|
||||
"addsign-alreadyRegistered": "Ce panneau est déjà enregistré pour la région %lang:region%."
|
||||
@@ -406,16 +406,16 @@
|
||||
"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]("
|
||||
- "%timeleft% restant"
|
||||
- "⇥hover: depuis %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% restant"
|
||||
- "⇥hover: depuis %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "propriétaire: %lang:player%"
|
||||
- "⇥hover: Vous avez ajouté comme ami"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "propriétaire: %lang:player%"
|
||||
- "⇥hover: Vous avez ajouté comme ami"
|
||||
- ")."
|
||||
"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% n'a pas été trouvé, il ne s'est peut être jamais connecté sur le serveur."
|
||||
"me-clickHint": "[gray][italic]Cliquez sur le nom d'une région pour voir les détails."
|
||||
@@ -470,13 +470,13 @@
|
||||
"linksigns-noPermission": "Vous n'avez pas la permission de rentrer dans le mode de liaison d'un panneau."
|
||||
"linksigns-stopped": "Vous êtes sorti du mode de liaison d'un panneau."
|
||||
"stack-help":
|
||||
- "/as stack <montant> <écart> <nom> <rent|buy> [groupe].[break]"
|
||||
- "⇥[gray<montant> Nombre de régions qui sera créé.[break]"
|
||||
- "⇥[gray]<écart> Distance en blocs entre les régions.[break]"
|
||||
- "⇥[gray]<nom> Nom des régions (un nombre sera ajouté à la fin[break]"
|
||||
- "⇥[gray]<rent|buy> Définir comme location (rent) ou achat (but).[break]"
|
||||
- "⇥[gray][groupe] Un groupe pour ajouter les régions créées..[break]"
|
||||
- "⇥[gray]Les régions seront créés dans la direction que vous faites face."
|
||||
- "/as stack <montant> <écart> <nom> <rent|buy> [groupe].[break]"
|
||||
- "⇥[gray<montant> Nombre de régions qui sera créé.[break]"
|
||||
- "⇥[gray]<écart> Distance en blocs entre les régions.[break]"
|
||||
- "⇥[gray]<nom> Nom des régions (un nombre sera ajouté à la fin[break]"
|
||||
- "⇥[gray]<rent|buy> Définir comme location (rent) ou achat (but).[break]"
|
||||
- "⇥[gray][groupe] Un groupe pour ajouter les régions créées..[break]"
|
||||
- "⇥[gray]Les régions seront créés dans la direction que vous faites face."
|
||||
"stack-accepted": "Commence à créer %0% %1% régions avec %2% blocs entre chacune, dont les noms commencent avec %3% et ont un chiffre derrière. %4%"
|
||||
"stack-addToGroup": "Les régions créées ont été ajoutées au groupe '%0%'."
|
||||
"stack-noPermission": "Vous n'avez pas la permission de créer et d'ajouter des régions à AreaShop en vrac."
|
||||
@@ -519,30 +519,30 @@
|
||||
"import-signAlreadyAdded": "[red] Ignoré l'ajout de la pancarte à la location '%1%' de la région '%0%', il est déjà ajouté à la région '%2%'."
|
||||
"import-moneyBackFailed": "[red] Échec de l'analyse du prix d'achat '%0%' et du prix de vente '%1%' pour définir le pourcentage de remboursement."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir louer %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour louer %0%|%"
|
||||
- " hover: %lang:action|Louer%0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir louer %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour louer %0%|%"
|
||||
- " hover: %lang:action|Louer%0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir prolonger la location %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour prolonger la location%0%|%"
|
||||
- " hover: %lang:action|Prolonger la location%0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir prolonger la location %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour prolonger la location%0%|%"
|
||||
- " hover: %lang:action|Prolonger la location%0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir arrêter la location %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour arrêter la location%0%|%"
|
||||
- " hover: %lang:action|Arrêter la location%0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir arrêter la location %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour arrêter la location%0%|%"
|
||||
- " hover: %lang:action|Arrêter la location%0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir acheter %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour acheter %0%|%"
|
||||
- " hover: %lang:action|Acheter%0%|%"
|
||||
- " command: /areashop buy%0%"
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir acheter %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour acheter %0%|%"
|
||||
- " hover: %lang:action|Acheter%0%|%"
|
||||
- " command: /areashop buy%0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir vendre %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour vendre %0%|%"
|
||||
- " hover: %lang:action|Vendre%0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
- "%lang:prefix%Êtes-vous sur de vouloir vendre %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Cliquez ici pour vendre %0%|%"
|
||||
- " hover: %lang:action|Vendre%0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
"timeleft-years": "%0% années"
|
||||
"timeleft-months": "%0% mois"
|
||||
"timeleft-days": "%0% jours"
|
||||
@@ -557,8 +557,8 @@
|
||||
"greeting-bought": "%region% est la propriété de %player%."
|
||||
"greeting-resale": "%region% peut être acheté pour %resellprice%. Offre par %player%."
|
||||
"update-playerNotify":
|
||||
- "[darkgreen]Mise à jours de AreaShop V%0% à AreaShop V%1% disponible, récupérez la nouvelle version sur "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Aller à la page Spigot de AreaShop|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- "(et laissez un avis)."
|
||||
- "[darkgreen]Mise à jours de AreaShop V%0% à AreaShop V%1% disponible, récupérez la nouvelle version sur "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Aller à la page Spigot de AreaShop|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- "(et laissez un avis)."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Gebruik %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Gebruik %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Gebruik %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Gebruik %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Gebied %0%"
|
||||
- " hover: %lang:action|Gebied informatie|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Gebied %0%"
|
||||
- " hover: %lang:action|Gebied informatie|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Speler %0%"
|
||||
- " hover: %lang:action|Gebieden van %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Speler %0%"
|
||||
- " hover: %lang:action|Gebieden van %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landeigenaar %landlord%"
|
||||
- " hover: %lang:action|Gebieden van %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landeigenaar %landlord%"
|
||||
- " hover: %lang:action|Gebieden van %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "Je kunt niet meer dan %0% gebied(en) kopen en huren in totaal (je hebt er al %1% in groep '%2%')."
|
||||
"confirm-yes": " [gray]Klik om te %lang:command|bevestigen|%0%|%[gray], of herhaal het commando."
|
||||
"general-notReady": "AreaShop is nog niet volledig geladen, even geduld."
|
||||
@@ -143,15 +143,15 @@
|
||||
"reload-noPermission": "Je hebt geen toestemming om configuratiebestanden te herladen."
|
||||
"reload-updateCommandChanged": "'/as updaterents' en '/as updatebuys' zijn verwijderd, '/as reload' updated nu ook de gebieden, gebruik dus dat commando."
|
||||
"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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
- "/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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
"info-noPermission": "Je hebt geen toestemming om informatie over gebieden te bekijken."
|
||||
"info-allHeader": "Alle gebieden%0%:"
|
||||
"info-rentedHeader": "Verhuurde gebieden%0%:"
|
||||
@@ -172,19 +172,19 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Verkocht aan %lang:player% (aan het doorverkopen)."
|
||||
"info-pageStatus": "[gold]Pagina %0%/%1%"
|
||||
"info-pagePrevious":
|
||||
- " [gold][bold]◄Vorige[/bold] "
|
||||
- " hover: %lang:action|Laat de vorige pagina zien|%"
|
||||
- " command: /areashop %0%"
|
||||
- " [gold][bold]◄Vorige[/bold] "
|
||||
- " hover: %lang:action|Laat de vorige pagina zien|%"
|
||||
- " command: /areashop %0%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Vorige[/bold] "
|
||||
- " hover: Dit is al de eerste pagina"
|
||||
- " [darkgray][bold]◄Vorige[/bold] "
|
||||
- " hover: Dit is al de eerste pagina"
|
||||
"info-pageNext":
|
||||
- " [gold][bold]Volgende►[/bold]"
|
||||
- " hover: %lang:action|Laat de volgende pagina zien|%"
|
||||
- " command: /areashop %0%"
|
||||
- " [gold][bold]Volgende►[/bold]"
|
||||
- " hover: %lang:action|Laat de volgende pagina zien|%"
|
||||
- " command: /areashop %0%"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Volgende►[/bold]"
|
||||
- " hover: Dit is al de laatste pagina"
|
||||
- " [darkgray][bold]Volgende►[/bold]"
|
||||
- " hover: Dit is al de laatste pagina"
|
||||
"info-playerHelp": "/as info player <naam>."
|
||||
"info-playerRents": "Gebieden gehuurd door %lang:tPlayer|%0%|%: [gray]%1%."
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% heeft geen gebieden gehuurd."
|
||||
@@ -197,66 +197,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Gekocht door %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Gekocht door %lang:player%, aan het doorverkopen."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verleng voor[/bold]"
|
||||
- " hover: Verleng huur van %region%"
|
||||
- " hover: met %duration% voor %price%"
|
||||
- " hover: %lang:action|Verleng de huur van %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verleng voor[/bold]"
|
||||
- " hover: Verleng huur van %region%"
|
||||
- " hover: met %duration% voor %price%"
|
||||
- " hover: %lang:action|Verleng de huur van %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Huur voor[/bold]"
|
||||
- " hover: Huur %region% voor %price% per %duration%"
|
||||
- " hover: %lang:action|Huur %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Huur voor[/bold]"
|
||||
- " hover: Huur %region% voor %price% per %duration%"
|
||||
- " hover: %lang:action|Huur %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Koop voor[/bold]"
|
||||
- " hover: Koop %region% voor %price%"
|
||||
- " hover: %lang:action|Koop %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Koop voor[/bold]"
|
||||
- " hover: Koop %region% voor %price%"
|
||||
- " hover: %lang:action|Koop %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Doorverkoop prijs: [gray]%resellprice% (je kunt het kopen van %lang:player%)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Toegevoegde vrienden: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Gebied %region%"
|
||||
- " hover: %lang:action|Verwijder %0% as friend|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Gebied %region%"
|
||||
- " hover: %lang:action|Verwijder %0% as friend|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Verkoop terugbetaling: [gray]%moneyback% (%moneybackpercent%% van de prijs)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verkoop terugbetaling[/bold]"
|
||||
- " hover: Verkoop %region% en krijg %moneyback% terug"
|
||||
- " hover: %lang:action|Verkoop %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% van de prijs)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Verkoop terugbetaling[/bold]"
|
||||
- " hover: Verkoop %region% en krijg %moneyback% terug"
|
||||
- " hover: %lang:action|Verkoop %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% van de prijs)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Stop met huren terugbetaling: [gray]%moneyback% (%moneybackpercent%% van de overgebleven tijd)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Stop met huren terugbetaling[/bold]"
|
||||
- " hover: Stop met huren van %region% en krijg %moneyback% terug"
|
||||
- " hover: %lang:action|Stop met huren van %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% van de overgebleven tijd)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Stop met huren terugbetaling[/bold]"
|
||||
- " hover: Stop met huren van %region% en krijg %moneyback% terug"
|
||||
- " hover: %lang:action|Stop met huren van %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% van de overgebleven tijd)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Maximaal keer verlengen: [gray]%maxextends% keer."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] Huur kan niet verlengt worden."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Verlengingen over: [gray]%extendsleft% keer van de %maxextends%."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Huurtijd: [gray]maximaal %maxrenttime%."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Ga naar het gebied[/bold]"
|
||||
- " hover: %lang:action|Ga naar %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Ga naar het gebied[/bold]"
|
||||
- " hover: %lang:action|Ga naar %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]stel teleporteer locatie in[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Stel teleporteer locatie in|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]stel teleporteer locatie in[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Stel teleporteer locatie in|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Verbonden borden: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Toegewezen groepen: [gray]%0%."
|
||||
@@ -390,10 +390,10 @@
|
||||
"addsign-couldNotDetectSign": "Meerdere gebieden gevonden op de lokatie van het bord, geef het gebied aan op de tweede regel (2 van de gevonden gebieden: %lang:tRegion|%0%|% en %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Het aangegeven profiel bestaat niet, gebruik een van de volgende (check de config): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Bord profiel %0%"
|
||||
- " hover: %lang:action|Gebruik dit profiel|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Bord profiel %0%"
|
||||
- " hover: %lang:action|Gebruik dit profiel|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "Het bord is toegevoegd aan %lang:region%."
|
||||
"addsign-successProfile": "Het bord is toegevoegd aan %lang:region% met profiel %0%."
|
||||
"addsign-alreadyRegistered": "Dat bord is al geregistreerd voor gebied %lang:region%."
|
||||
@@ -406,16 +406,16 @@
|
||||
"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]("
|
||||
- "%timeleft% over"
|
||||
- " hover: tot %until%"
|
||||
- ")."
|
||||
- "[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]("
|
||||
- "%lang:player% is eigenaar"
|
||||
- " hover: Je bent toegevoegd als vriend"
|
||||
- ")."
|
||||
- "[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."
|
||||
@@ -470,13 +470,13 @@
|
||||
"linksigns-noPermission": "Je hebt geen toestemming om massa bord-koppel modus te gebruiken."
|
||||
"linksigns-stopped": "Je bent gestopt met bord-koppel modus."
|
||||
"stack-help":
|
||||
- "/as stack <aantal> <afstand> <naam> <rent|buy> [groep].[break]"
|
||||
- " [gray]<aantal> Het aantal gebieden dat word gemaakt.[break]"
|
||||
- " [gray]<afstand> Blokken afstand tussen de gebieden.[break]"
|
||||
- " [gray]<naam> Naam van de gebieden (komt een nummer achter).[break]"
|
||||
- " [gray]<rent|buy> Maak ze huur of koop gebieden.[break]"
|
||||
- " [gray][groep] Groep waaraan de gebieden worden toegevoegd.[break]"
|
||||
- " [gray]De gebieden zullen worden gemaakt in de richting waarnaar je kijkt."
|
||||
- "/as stack <aantal> <afstand> <naam> <rent|buy> [groep].[break]"
|
||||
- " [gray]<aantal> Het aantal gebieden dat word gemaakt.[break]"
|
||||
- " [gray]<afstand> Blokken afstand tussen de gebieden.[break]"
|
||||
- " [gray]<naam> Naam van de gebieden (komt een nummer achter).[break]"
|
||||
- " [gray]<rent|buy> Maak ze huur of koop gebieden.[break]"
|
||||
- " [gray][groep] Groep waaraan de gebieden worden toegevoegd.[break]"
|
||||
- " [gray]De gebieden zullen worden gemaakt in de richting waarnaar je kijkt."
|
||||
"stack-accepted": "Begonnen met %0% %1% gebieden maken met %2% blokken ruimte ertussen, namen beginnen met %3% en hebben een nummer erachter.%4%"
|
||||
"stack-addToGroup": " Gemaakte gebieden zullen worden toegevoegd aan de groep '%0%'."
|
||||
"stack-noPermission": "Je hebt geen toestemming om in grote aantallen gebieden toe te voegen aan AreaShop."
|
||||
@@ -519,30 +519,30 @@
|
||||
"import-signAlreadyAdded": "[red]Het toevoegen van een bordje op locatie '%1%' aan gebied '%0%' is overgeslagen, het is al aan gebied '%2%' toegevoegd."
|
||||
"import-moneyBackFailed": "[red]Het ontleden van de koop prijs '%0%' en de verkoop prijs '%1%' om het geld terug percentage in te voegen is mislukt."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt huren?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te huren|%"
|
||||
- " hover: %lang:action|Huur %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt huren?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te huren|%"
|
||||
- " hover: %lang:action|Huur %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Weet je zeker dat je de huur van %lang:tRegion|%0%|% wilt verlengen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te verlengen|%"
|
||||
- " hover: %lang:action|Verleng %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Weet je zeker dat je de huur van %lang:tRegion|%0%|% wilt verlengen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te verlengen|%"
|
||||
- " hover: %lang:action|Verleng %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Weet je zeker dat je de huur van %lang:tRegion|%0%|% wilt stoppen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Stop de huur van %0%|%"
|
||||
- " hover: %lang:action|Stop de huur van %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Weet je zeker dat je de huur van %lang:tRegion|%0%|% wilt stoppen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Stop de huur van %0%|%"
|
||||
- " hover: %lang:action|Stop de huur van %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt kopen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te kopen|%"
|
||||
- " hover: %lang:action|Koop %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt kopen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te kopen|%"
|
||||
- " hover: %lang:action|Koop %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt verkopen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te verkopen|%"
|
||||
- " hover: %lang:action|Verkoop %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
- "%lang:prefix%Weet je zeker dat je %lang:tRegion|%0%|% wilt verkopen?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klik om %0% te verkopen|%"
|
||||
- " hover: %lang:action|Verkoop %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
"timeleft-years": "%0% jaren"
|
||||
"timeleft-months": "%0% maanden"
|
||||
"timeleft-days": "%0% dagen"
|
||||
@@ -557,8 +557,8 @@
|
||||
"greeting-bought": "%region% is gekocht door %player%."
|
||||
"greeting-resale": "%region% kan gekocht worden voor %resellprice% van %player%."
|
||||
"update-playerNotify":
|
||||
- "[darkgreen]Update van AreaShop V%0% naar AreaShop V%1% beschikbaar, download de laatste versie op "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Ga naar de Spigot AreaShop pagina|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (en schrijf een review)."
|
||||
- "[darkgreen]Update van AreaShop V%0% naar AreaShop V%1% beschikbaar, download de laatste versie op "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Ga naar de Spigot AreaShop pagina|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (en schrijf een review)."
|
||||
@@ -12,30 +12,30 @@
|
||||
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Bruk %1%|%"
|
||||
- " kommando: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Bruk %1%|%"
|
||||
- " kommando: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Bruk %0%|%"
|
||||
- " kommando: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Bruk %0%|%"
|
||||
- " kommando: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region informasjon|%"
|
||||
- " kommando: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|Region informasjon|%"
|
||||
- " kommando: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spiller %0%"
|
||||
- " hover: %lang:action|Regioner til %0%|%"
|
||||
- " kommando: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spiller %0%"
|
||||
- " hover: %lang:action|Regioner til %0%|%"
|
||||
- " kommando: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Grunneier %landlord%"
|
||||
- " hover: %lang:action|Regioner til %landlord%|%"
|
||||
- " kommando: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Grunneier %landlord%"
|
||||
- " hover: %lang:action|Regioner til %landlord%|%"
|
||||
- " kommando: /areashop info player %landlord%"
|
||||
"total-maximum": "Du kan ikke leie og kjøpe mer enn %0% region(er) totalt (du har allerede %1% i gruppe '%2%')."
|
||||
"general-notReady": "AreaShop har ikke lastet ferdig ennå, vennligst vent."
|
||||
"general-noWorld": "Du kan ikke gjøre det, verdenen %lang:region% er for øyeblikket utilgjengelig (world '%world%')."
|
||||
@@ -146,11 +146,11 @@
|
||||
"info-noRegions": "Ingen regioner har blitt funnet."
|
||||
"info-wrongPage": "%0% er ikke et riktig side nummer."
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Forrige[/bold] "
|
||||
- " hover: Dette er første side"
|
||||
- " [darkgray][bold]◄Forrige[/bold] "
|
||||
- " hover: Dette er første side"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Neste►[/bold]"
|
||||
- " hover: Dette er siste side"
|
||||
- " [darkgray][bold]Neste►[/bold]"
|
||||
- " hover: Dette er siste side"
|
||||
"info-playerHelp": "/as info player <navn>."
|
||||
"info-playerRents": "Regioner leid av %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% har ikke leid en region."
|
||||
@@ -163,66 +163,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Kjøpt av %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Kjøpt av %lang:player%, for øyeblikket videreselges."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Forleng for[/bold]"
|
||||
- " hover: Forleng leie av %region%"
|
||||
- " hover: med %duration% for %price%"
|
||||
- " hover: %lang:action|Extend rent of %region%|%"
|
||||
- " kommando: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Forleng for[/bold]"
|
||||
- " hover: Forleng leie av %region%"
|
||||
- " hover: med %duration% for %price%"
|
||||
- " hover: %lang:action|Extend rent of %region%|%"
|
||||
- " kommando: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Lei for[/bold]"
|
||||
- " hover: Lei %region% for %price% per %duration%"
|
||||
- " hover: %lang:action|Rent %region%|%"
|
||||
- " kommando: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Lei for[/bold]"
|
||||
- " hover: Lei %region% for %price% per %duration%"
|
||||
- " hover: %lang:action|Rent %region%|%"
|
||||
- " kommando: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kjøp for[/bold]"
|
||||
- " hover: Kjøp %region% for %price%"
|
||||
- " hover: %lang:action|Buy %region%|%"
|
||||
- " kommando: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kjøp for[/bold]"
|
||||
- " hover: Kjøp %region% for %price%"
|
||||
- " hover: %lang:action|Buy %region%|%"
|
||||
- " kommando: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Videresalgs pris: [gray]%resellprice% (du kan kjøpe den fra %lang:player%)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Venner lagt til: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Remove %0% as friend|%"
|
||||
- " kommando: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Remove %0% as friend|%"
|
||||
- " kommando: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Penger tilbake for salg: [gray]%moneyback% (%moneybackpercent%% av prisen)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Penger tilbake etter salg[/bold]"
|
||||
- " hover: Selg %region% å få igjen %moneyback%"
|
||||
- " hover: %lang:action|Sell %region%|%"
|
||||
- " kommando: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av prisen)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Penger tilbake etter salg[/bold]"
|
||||
- " hover: Selg %region% å få igjen %moneyback%"
|
||||
- " hover: %lang:action|Sell %region%|%"
|
||||
- " kommando: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av prisen)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Penger tilbake fra leie: [gray]%moneyback% (%moneybackpercent%% fra gjenstående tid)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Penger tilbake fra leie[/bold]"
|
||||
- " hover: Stopp leie %region% å få tilbake %moneyback%"
|
||||
- " hover: %lang:action|Unrent %region%|%"
|
||||
- " kommando: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av gjenstående tid)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Penger tilbake fra leie[/bold]"
|
||||
- " hover: Stopp leie %region% å få tilbake %moneyback%"
|
||||
- " hover: %lang:action|Unrent %region%|%"
|
||||
- " kommando: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av gjenstående tid)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Maks antall utvidelser: [gray]%maxextends% gang(er)."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] Leien kan ikke utvides."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Utvidelser igjen: [gray]%extendsleft% gang(er) av %maxextends%."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Leie på forhånd: [gray]%maxrenttime% på maks."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Gå til region[/bold]"
|
||||
- " hover: %lang:action|Teleporter to %region%|%"
|
||||
- " kommando: /areashop tp %region%"
|
||||
- "[bold]Gå til region[/bold]"
|
||||
- " hover: %lang:action|Teleporter to %region%|%"
|
||||
- " kommando: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]Sett teleporterings posisjon[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Sett teleporterings posisjon|%"
|
||||
- " kommando: /areashop settp %region%"
|
||||
- "[bold]Sett teleporterings posisjon[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Sett teleporterings posisjon|%"
|
||||
- " kommando: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Koblete skilt: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Fordelte grupper: [gray]%0%."
|
||||
@@ -347,10 +347,10 @@
|
||||
"addsign-couldNotDetectSign": "Flere regioner ble funnet rundt skiltet, spesifiser region som ekstra argument (2 av regionene som ble funnet: %lang:tRegion|%0%|% og %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Den spesifiserte profilen finnes ikke, bruk en av de følgende (sjekk konfigurasjon): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Skiltprofil %0%"
|
||||
- " hover: %lang:action|Use this profile|%"
|
||||
- " kommando: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Skiltprofil %0%"
|
||||
- " hover: %lang:action|Use this profile|%"
|
||||
- " kommando: /areashop linksigns %0%"
|
||||
"addsign-success": "Skiltet har blitt lagt til %lang:region%."
|
||||
"addsign-successProfile": "Skiltet har blitt lagt til %lang:region% med profil %0%."
|
||||
"addsign-alreadyRegistered": "Det skiltet er allerede registrert for region %lang:region%."
|
||||
@@ -414,13 +414,13 @@
|
||||
"linksigns-noPermission": "Du har ikke rettigheter til å aktivere masse-skilt koblings modus."
|
||||
"linksigns-stopped": "Gått ut av skilt koblings modus."
|
||||
"stack-help":
|
||||
- "/as stack <amount> <gap> <name> <rent|buy> [group].[break]"
|
||||
- " [gray]<amount> Antall regioner som vil bli laget.[break]"
|
||||
- " [gray]<gap> Antall blokker mellom regioner.[break]"
|
||||
- " [gray]<name> Navnet på regioner (nummer kommer bak).[break]"
|
||||
- " [gray]<rent|buy> Bestem om dem skal leies eller kjøpes.[break]"
|
||||
- " [gray][group] En gruppe du vil legge dem til i.[break]"
|
||||
- " [gray]Regionene vil bli laget i rettningen du ser."
|
||||
- "/as stack <amount> <gap> <name> <rent|buy> [group].[break]"
|
||||
- " [gray]<amount> Antall regioner som vil bli laget.[break]"
|
||||
- " [gray]<gap> Antall blokker mellom regioner.[break]"
|
||||
- " [gray]<name> Navnet på regioner (nummer kommer bak).[break]"
|
||||
- " [gray]<rent|buy> Bestem om dem skal leies eller kjøpes.[break]"
|
||||
- " [gray][group] En gruppe du vil legge dem til i.[break]"
|
||||
- " [gray]Regionene vil bli laget i rettningen du ser."
|
||||
"stack-accepted": "Begynner å lage %0% %1% regioner med %2% blokker mellom dem, navnene starter med %3% og vil ha nummer bak seg.%4%"
|
||||
"stack-addToGroup": "Regioner laget vil bli lagt til i gruppen '%0%'."
|
||||
"stack-noPermission": "Du har ikke rettigheter til å lage og legge til regioner i AreaShop i store mengder."
|
||||
@@ -435,31 +435,31 @@
|
||||
"message-noPermission": "Du har ikke rettigheter til å sende AreaShop meldinger."
|
||||
"message-notOnline": "%0% er ikke pålogget."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Er du sikker på at du vil leie %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å leie %0%|%"
|
||||
- " hover: %lang:action|Lei %0%|%"
|
||||
- " kommando: /areashop rent %0%"
|
||||
- "%lang:prefix%Er du sikker på at du vil leie %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å leie %0%|%"
|
||||
- " hover: %lang:action|Lei %0%|%"
|
||||
- " kommando: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Er du sikker du vil forlenge %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å utvide leie %0%|%"
|
||||
- " hover: %lang:action|Utvid leie %0%|%"
|
||||
- " kommando: /areashop rent %0%"
|
||||
- "%lang:prefix%Er du sikker du vil forlenge %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å utvide leie %0%|%"
|
||||
- " hover: %lang:action|Utvid leie %0%|%"
|
||||
- " kommando: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Er du sikker du vil stoppe leie "
|
||||
- "%lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å stoppe leie %0%|%"
|
||||
- " hover: %lang:action|Stopp leie %0%|%"
|
||||
- " kommando: /areashop unrent %0%"
|
||||
- "%lang:prefix%Er du sikker du vil stoppe leie "
|
||||
- "%lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å stoppe leie %0%|%"
|
||||
- " hover: %lang:action|Stopp leie %0%|%"
|
||||
- " kommando: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Er du sikker du vil kjøpe %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å kjøpe %0%|%"
|
||||
- " hover: %lang:action|Kjøp %0%|%"
|
||||
- " kommando: /areashop buy %0%"
|
||||
- "%lang:prefix%Er du sikker du vil kjøpe %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å kjøpe %0%|%"
|
||||
- " hover: %lang:action|Kjøp %0%|%"
|
||||
- " kommando: /areashop buy %0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Er du sikker du vil selge %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å selge %0%|%"
|
||||
- " hover: %lang:action|Selg %0%|%"
|
||||
- " kommando: /areashop sell %0%"
|
||||
- "%lang:prefix%Er du sikker du vil selge %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klikk for å selge %0%|%"
|
||||
- " hover: %lang:action|Selg %0%|%"
|
||||
- " kommando: /areashop sell %0%"
|
||||
"timeleft-years": "%0% år"
|
||||
"timeleft-months": "%0% måneder"
|
||||
"timeleft-days": "%0% dager"
|
||||
@@ -471,4 +471,4 @@
|
||||
"greeting-forrent": "%region% kan bli leid for %price% per %duration%."
|
||||
"greeting-rented": "%region% er leid av %player% til %until%."
|
||||
"greeting-forsale": "%region% kan bli kjøpt for %price%."
|
||||
"greeting-bought": "%region% er kjøpt av %player%."
|
||||
"greeting-bought": "%region% er kjøpt av %player%."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Użyj komendy %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Użyj komendy %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Użyj %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Użyj %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Działka %0%"
|
||||
- " hover: %lang:action|Informacje o działce|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Działka %0%"
|
||||
- " hover: %lang:action|Informacje o działce|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Gracz %0%"
|
||||
- " hover: %lang:action|Działki gracza %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Gracz %0%"
|
||||
- " hover: %lang:action|Działki gracza %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Zarządca %landlord%"
|
||||
- " hover: %lang:action|Działki zarządcy %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Zarządca %landlord%"
|
||||
- " hover: %lang:action|Działki zarządcy %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "Nie możesz posiadać większej ilości działek niż %0% (aktualnie posiadasz %1% w grupie '%2%')."
|
||||
"confirm-yes": " [gray]Kliknij aby %lang:command|potwierdzić|%0%|%[gray] lub powtórz komendę."
|
||||
"general-notReady": "Plugin AreaShop jeszcze się nie załadował, proszę czekać."
|
||||
@@ -143,15 +143,15 @@
|
||||
"reload-noPermission": "Nie masz uprawnień do przeładowania konfiguracji pluginu."
|
||||
"reload-updateCommandChanged": "'/as updaterents' i '/as updatebuys' zostaly usuniete, '/as reload' tez odswieza regiony, wiec uzywaj teraz tej komendy."
|
||||
"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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
- "/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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
"info-noPermission": "Nie masz uprawnień do uzyskania informacji o działkach."
|
||||
"info-allHeader": "Lista wszystkich działek%0%:"
|
||||
"info-rentedHeader": "Lista wynajmowanych działek%0%:"
|
||||
@@ -172,19 +172,19 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Działka kupiona przez gracza %lang:player%, obecnie odsprzedawana."
|
||||
"info-pageStatus": "[gold]Strona %0%/%1%"
|
||||
"info-pagePrevious":
|
||||
- " [gold][bold]◄Poprzednia[/bold] "
|
||||
- " hover: %lang:action|Wyświetl poprzednią stronę|%"
|
||||
- " command: %0%"
|
||||
- " [gold][bold]◄Poprzednia[/bold] "
|
||||
- " hover: %lang:action|Wyświetl poprzednią stronę|%"
|
||||
- " command: %0%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Poprzednia[/bold] "
|
||||
- " hover: Jesteś już na pierwszej stronie"
|
||||
- " [darkgray][bold]◄Poprzednia[/bold] "
|
||||
- " hover: Jesteś już na pierwszej stronie"
|
||||
"info-pageNext":
|
||||
- " [gold][bold]Następna►[/bold]"
|
||||
- " hover: %lang:action|Wyświetl następną stronę|%"
|
||||
- " command: %0%"
|
||||
- " [gold][bold]Następna►[/bold]"
|
||||
- " hover: %lang:action|Wyświetl następną stronę|%"
|
||||
- " command: %0%"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Nastepna►[/bold]"
|
||||
- " hover: Jesteś już na ostatniej stronie"
|
||||
- " [darkgray][bold]Nastepna►[/bold]"
|
||||
- " hover: Jesteś już na ostatniej stronie"
|
||||
"info-playerHelp": "Użycie: /as info player <nick>."
|
||||
"info-playerRents": "Działki wynajęte przez gracza %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "Gracz %lang:tPlayer|%0%|% nie wynajął żadnej działki."
|
||||
@@ -197,66 +197,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Działka kupiona przez gracza %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Działka kupiona przez gracza %lang:player%, obecnie odsprzedawana."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Przedłużenie wynajmu za[/bold]"
|
||||
- " hover: Przedłuż wynajem działki %region%"
|
||||
- " hover: o %duration% za %price%"
|
||||
- " hover: %lang:action|Przedłuż wynajem działki %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% o %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Przedłużenie wynajmu za[/bold]"
|
||||
- " hover: Przedłuż wynajem działki %region%"
|
||||
- " hover: o %duration% za %price%"
|
||||
- " hover: %lang:action|Przedłuż wynajem działki %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% o %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Wynajem działki za[/bold]"
|
||||
- " hover: Wynajmij działkę %region% za %price% na %duration%"
|
||||
- " hover: %lang:action|Wynajmij działkę %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% na %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Wynajem działki za[/bold]"
|
||||
- " hover: Wynajmij działkę %region% za %price% na %duration%"
|
||||
- " hover: %lang:action|Wynajmij działkę %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% na %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kupno działki za[/bold]"
|
||||
- " hover: Kup działkę %region% za %price%"
|
||||
- " hover: %lang:action|Kup działkę %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Kupno działki za[/bold]"
|
||||
- " hover: Kup działkę %region% za %price%"
|
||||
- " hover: %lang:action|Kup działkę %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Cena odkupienia: [gray]%resellprice% (możesz odkupić tę działkę od gracza %lang:player%)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Dodani gracze: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Działka %region%"
|
||||
- " hover: %lang:action|Usuń gracza %0% z działki|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Działka %region%"
|
||||
- " hover: %lang:action|Usuń gracza %0% z działki|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Zwrot przy sprzedaży: [gray]%moneyback% (%moneybackpercent%% ceny)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Zwrot przy sprzedaży[/bold]"
|
||||
- " hover: Sprzedaj działkę %region% i otrzymaj zwrot %moneyback%"
|
||||
- " hover: %lang:action|Sprzedaj działkę %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% ceny)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Zwrot przy sprzedaży[/bold]"
|
||||
- " hover: Sprzedaj działkę %region% i otrzymaj zwrot %moneyback%"
|
||||
- " hover: %lang:action|Sprzedaj działkę %region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% ceny)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Zwrot przy zwolnieniu: [gray]%moneyback% (%moneybackpercent%% pozostałego czasu)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Zwrot przy zwolnieniu[/bold]"
|
||||
- " hover: Zwolnij działkę %region% i otrzymaj zwrot %moneyback%"
|
||||
- " hover: %lang:action|Zwolnij działkę %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% pozostałego czasu)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Zwrot przy zwolnieniu[/bold]"
|
||||
- " hover: Zwolnij działkę %region% i otrzymaj zwrot %moneyback%"
|
||||
- " hover: %lang:action|Zwolnij działkę %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% pozostałego czasu)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Wynajem działki możesz przedłużyć maksymalnie [gray]%maxextends% raz(y)."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] Wynajem działki nie może zostać przedłużony."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Możesz przedłużyć wynajem jeszcze [gray]%extendsleft% raz(y) na %maxextends% możliwych."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Maksymalny czas wynajmu to [gray]%maxrenttime%."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Teleportuj na działkę[/bold]"
|
||||
- " hover: %lang:action|Teleportuj się na działkę %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Teleportuj na działkę[/bold]"
|
||||
- " hover: %lang:action|Teleportuj się na działkę %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]Ustaw miejsce teleportacji[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Ustaw miejsce teleportacji na działkę|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]Ustaw miejsce teleportacji[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Ustaw miejsce teleportacji na działkę|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Powiązane tabliczki: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Przydzielone grupy: [gray]%0%."
|
||||
@@ -390,10 +390,10 @@
|
||||
"addsign-couldNotDetectSign": "Znaleziono więcej niż jedną działkę w obrębie tabliczki, podaj nazwę odpowiedniej działki w 2. linijce (2 znalezione działki: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Podany profil nie istnieje, użyj jednego z następujących: [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Profil %0%"
|
||||
- " hover: %lang:action|Użyj tego profilu|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Profil %0%"
|
||||
- " hover: %lang:action|Użyj tego profilu|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "Tabliczka została pomyślnie dodana do działki %lang:region%."
|
||||
"addsign-successProfile": "Tabliczka została pomyślnie dodana do działki %lang:region% o profilu %0%."
|
||||
"addsign-alreadyRegistered": "Ta tabliczka jest już dodana do działki %lang:region%."
|
||||
@@ -406,16 +406,16 @@
|
||||
"me-header": "Działki gracza %lang:tPlayer|%0%|%:"
|
||||
"me-notAPlayer": "Tylko gracze mogą mieć działki."
|
||||
"me-rentLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "Wygasa za %timeleft%"
|
||||
- " hover: do %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "Wygasa za %timeleft%"
|
||||
- " hover: do %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "należy do gracza %lang:player%"
|
||||
- " hover: Dodano Cię do tej działki"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "należy do gracza %lang:player%"
|
||||
- " hover: Dodano Cię do tej działki"
|
||||
- ")."
|
||||
"me-nothing": "Gracz %lang:tPlayer|%0%|% nie posiada żadnej działki ani nie jest do żadnej dodany."
|
||||
"me-noPlayer": "Nie znaleziono gracza %0%, zwróć uwagę na wielkość liter."
|
||||
"me-clickHint": "[gray][italic]Kliknij na nazwę działki, aby wyświetlić informacje o niej."
|
||||
@@ -470,13 +470,13 @@
|
||||
"linksigns-noPermission": "Nie masz uprawnień do wejścia w trym wiązania tabliczki z działką."
|
||||
"linksigns-stopped": "Wyłączono tryb wiązania tabliczki z działką."
|
||||
"stack-help":
|
||||
- "Użycie: /as stack <ilość> <X> <nazwa> <rent|buy> [grupa].[break]"
|
||||
- " [gray]<ilosć> Ilość działek do ustawienia.[break]"
|
||||
- " [gray]<X> Dystans X bloków pomiędzy działkami.[break]"
|
||||
- " [gray]<nazwa> Nazwa działki (jej numer nastąpi po nazwie).[break]"
|
||||
- " [gray]<rent|buy> Określ działki jako do wynajęcia lub na sprzedaż.[break]"
|
||||
- " [gray][group] Grupa, do której zostaną przydzielone działki.[break]"
|
||||
- " [gray]Działki będą tworzone w kierunku, na który patrzysz."
|
||||
- "Użycie: /as stack <ilość> <X> <nazwa> <rent|buy> [grupa].[break]"
|
||||
- " [gray]<ilosć> Ilość działek do ustawienia.[break]"
|
||||
- " [gray]<X> Dystans X bloków pomiędzy działkami.[break]"
|
||||
- " [gray]<nazwa> Nazwa działki (jej numer nastąpi po nazwie).[break]"
|
||||
- " [gray]<rent|buy> Określ działki jako do wynajęcia lub na sprzedaż.[break]"
|
||||
- " [gray][group] Grupa, do której zostaną przydzielone działki.[break]"
|
||||
- " [gray]Działki będą tworzone w kierunku, na który patrzysz."
|
||||
"stack-accepted": "Rozpoczęto ustawianie %0% działek typu '%1%' w odstępie %2% bloków od siebie, nazwy działek będą zaczynały się od %3% oraz kończyły odpowiednią liczbą w kolejności.%4%"
|
||||
"stack-addToGroup": "Działki zostaną przydzielone do grupy '%0%'."
|
||||
"stack-noPermission": "Nie masz uprawnień do masowego ustawiania działek."
|
||||
@@ -519,30 +519,30 @@
|
||||
"import-signAlreadyAdded": "[red]Pominięto dodanie tabliczki w pozycji '%1%' do działki '%0%', jest ona już dodana do działki '%2%'."
|
||||
"import-moneyBackFailed": "[red]Nie udało się załadować ceny kupna '%0%' oraz ceny sprzedaży '%1%' aby ustawić procent zwrotu przy sprzedaży."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Czy na pewno chcesz wynająć działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby wynająć %0%|%"
|
||||
- " hover: %lang:action|Wynajmij działkę %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Czy na pewno chcesz wynająć działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby wynająć %0%|%"
|
||||
- " hover: %lang:action|Wynajmij działkę %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Czy na pewno chcesz przedłużyć wynajem działki %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby przedłużyć wynajem działki %0%|%"
|
||||
- " hover: %lang:action|Przedłuż wynajem działki %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Czy na pewno chcesz przedłużyć wynajem działki %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby przedłużyć wynajem działki %0%|%"
|
||||
- " hover: %lang:action|Przedłuż wynajem działki %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Czy na pewno chcesz zwolnić działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby zwolnić działkę %0%|%"
|
||||
- " hover: %lang:action|Zwolnij działkę %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Czy na pewno chcesz zwolnić działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby zwolnić działkę %0%|%"
|
||||
- " hover: %lang:action|Zwolnij działkę %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Czy na pewno chcesz kupić działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby kupić działkę %0%|%"
|
||||
- " hover: %lang:action|Kup działkę%0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
- "%lang:prefix%Czy na pewno chcesz kupić działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby kupić działkę %0%|%"
|
||||
- " hover: %lang:action|Kup działkę%0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Czy na pewno chcesz sprzedać działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby sprzedać działkę %0%|%"
|
||||
- " hover: %lang:action|Sprzedaj działkę %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
- "%lang:prefix%Czy na pewno chcesz sprzedać działkę %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Kliknij aby sprzedać działkę %0%|%"
|
||||
- " hover: %lang:action|Sprzedaj działkę %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
"timeleft-years": "%0% lat"
|
||||
"timeleft-months": "%0% miesięcy"
|
||||
"timeleft-days": "%0% dni"
|
||||
@@ -557,8 +557,8 @@
|
||||
"greeting-bought": "Działka %region% kupiona przez gracza %player%."
|
||||
"greeting-resale": "Odkup działkę %region% za %resellprice% od gracza %player%."
|
||||
"update-playerNotify":
|
||||
- "[darkgreen]Dostępna jest aktualizacja pluginu AreaShop z wersji V%0% na wersję V%1%. Pobierz najnowszą wersję ze strony "
|
||||
- "[bold]Spigota[/bold]"
|
||||
- " hover: %lang:action|Przejdź do strony pluginu na Spigocie|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (i pozostaw recenzję pluginu)."
|
||||
- "[darkgreen]Dostępna jest aktualizacja pluginu AreaShop z wersji V%0% na wersję V%1%. Pobierz najnowszą wersję ze strony "
|
||||
- "[bold]Spigota[/bold]"
|
||||
- " hover: %lang:action|Przejdź do strony pluginu na Spigocie|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (i pozostaw recenzję pluginu)."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Используй %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Используй %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Используй %0%|%"
|
||||
- " command: %0%"
|
||||
- "[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%"
|
||||
- "[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%"
|
||||
- "[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%"
|
||||
- "[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%')."
|
||||
@@ -141,15 +141,15 @@
|
||||
"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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
- "/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]|%[break]"
|
||||
- " %lang:command|region|/as info region|% [region]"
|
||||
"info-noPermission": "У Вас нет прав для получения информации о регионах."
|
||||
"info-allHeader": "Все регионы%0%:"
|
||||
"info-rentedHeader": "Арендовано регионов%0%:"
|
||||
@@ -170,11 +170,11 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Продан %lang:player% (перепродажа)."
|
||||
"info-pageStatus": "[gold]Страница %0%/%1%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Предыдущая[/bold] "
|
||||
- " hover: Это первая страница"
|
||||
- " [darkgray][bold]◄Предыдущая[/bold] "
|
||||
- " hover: Это первая страница"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Следующая►[/bold]"
|
||||
- " hover: Это последняя страница"
|
||||
- " [darkgray][bold]Следующая►[/bold]"
|
||||
- " hover: Это последняя страница"
|
||||
"info-playerHelp": "/as info player <имяигрока>."
|
||||
"info-playerRents": "Регионы арендованные %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% не арендовал регион."
|
||||
@@ -187,66 +187,66 @@
|
||||
"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%."
|
||||
- "[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%."
|
||||
- "[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%."
|
||||
- "[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%"
|
||||
- "%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%% от стоимости)."
|
||||
- "[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%% от оставшиеся времени)."
|
||||
- "[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%"
|
||||
- "[bold]Переместится к региону[/bold]"
|
||||
- " hover: %lang:action|Телепортация на %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]установить точку телепортации[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Установить точку телепорта|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]установить точку телепортации[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Установить точку телепорта|%"
|
||||
- " 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%."
|
||||
@@ -380,10 +380,10 @@
|
||||
"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%"
|
||||
- "[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%."
|
||||
@@ -396,16 +396,16 @@
|
||||
"me-header": "Регионы %lang:tPlayer|%0%|%:"
|
||||
"me-notAPlayer": "Вы не являетесь игроком, которому доступны какие-либо регионы."
|
||||
"me-rentLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% истек"
|
||||
- " hover: until %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% истек"
|
||||
- " hover: until %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "принадлежит %lang:player%"
|
||||
- " hover: Вы добавили друга"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "принадлежит %lang:player%"
|
||||
- " hover: Вы добавили друга"
|
||||
- ")."
|
||||
"me-nothing": "%lang:tPlayer|%0%|% не арендовали или покупали регионы и не добавлялись в друзья."
|
||||
"me-noPlayer": "%0% не может быть найден, вероятно, никогда не присоединился к серверу."
|
||||
"me-clickHint": "[gray][italic]Нажмите на имя региона , чтобы увидеть детали"
|
||||
@@ -460,13 +460,13 @@
|
||||
"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]Регионы будут созданы в направлении взгляда."
|
||||
- "/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 в большом количестве."
|
||||
@@ -488,30 +488,30 @@
|
||||
"import-confirm": "Вы действительно хотите импортировать все регионы из RegionForSale?"
|
||||
"import-noWorldGuardRegion": "[red]WorldGuard регион не найден:"
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Вы уверены, что вы хотите арендовать %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Нажмите, чтобы арендовать %0%|%"
|
||||
- " hover: %lang:action|Аренда %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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% дней"
|
||||
@@ -526,8 +526,8 @@
|
||||
"greeting-bought": "%region% куплен игроком %player%."
|
||||
"greeting-resale": "%region% может быть куплен за %resellprice% в %player%."
|
||||
"update-playerNotify":
|
||||
- "[darkgreen]Обновление для AreaShop V%0% до AreaShop V%1% доступно, получить последнюю версию на "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Перейти к странице AreaShop на Spigot|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (И оставить отзыв)."
|
||||
- "[darkgreen]Обновление для AreaShop V%0% до AreaShop V%1% доступно, получить последнюю версию на "
|
||||
- "[bold]Spigot[/bold]"
|
||||
- " hover: %lang:action|Перейти к странице AreaShop на Spigot|%"
|
||||
- " link: https://www.spigotmc.org/resources/areashop.2991/"
|
||||
- " (И оставить отзыв)."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Använd %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|Använd %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Använd %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|Använd %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Område %0%"
|
||||
- " hover: %lang:action|Regions information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Område %0%"
|
||||
- " hover: %lang:action|Regions information|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spelare %0%"
|
||||
- " hover: %lang:action|Regioner av %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Spelare %0%"
|
||||
- " hover: %lang:action|Regioner av %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Hyresvärd %landlord%"
|
||||
- " hover: %lang:action|Regioner av %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Hyresvärd %landlord%"
|
||||
- " hover: %lang:action|Regioner av %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "Du kan inte hyra/köpa mer än %0% region(er) totalt (Du har redan %1% inom grupp '%2%')."
|
||||
"general-notReady": "AreaShop har inte laddat klart, vänligen vänta."
|
||||
"general-noWorld": "Du kan inte göra detta. Världen: %lang:region% är inte tillgänglig (värld '%world%')"
|
||||
@@ -153,11 +153,11 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]Såld till %lang:player% (återsäljer)."
|
||||
"info-pageStatus": "[gold]Sida %0%/%1%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄Föregående[/bold] "
|
||||
- " hover: Detta är redan första sidan"
|
||||
- " [darkgray][bold]◄Föregående[/bold] "
|
||||
- " hover: Detta är redan första sidan"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]Nästa►[/bold]"
|
||||
- " hover: Detta är redan sista sidan"
|
||||
- " [darkgray][bold]Nästa►[/bold]"
|
||||
- " hover: Detta är redan sista sidan"
|
||||
"info-playerHelp": "/as info player <namn>."
|
||||
"info-playerRents": "Regioner hyrda av %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% har inte hyrt någon region."
|
||||
@@ -170,66 +170,66 @@
|
||||
"info-regionBought": "[darkgreen][bold]►[reset] Köpt av %lang:player%."
|
||||
"info-regionReselling": "[darkgreen][bold]►[reset] Köpt av %lang:player%, ute till återförsäljning."
|
||||
"info-regionExtending":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Förläng för[/bold]"
|
||||
- " hover: Förläng hyrning av %region%"
|
||||
- " hover: med %duration% för %price%"
|
||||
- " hover: %lang:action|Förläng hyrning av %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Förläng för[/bold]"
|
||||
- " hover: Förläng hyrning av %region%"
|
||||
- " hover: med %duration% för %price%"
|
||||
- " hover: %lang:action|Förläng hyrning av %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Hyra för[/bold]"
|
||||
- " hover: Hyr %region% för %price% per %duration%"
|
||||
- " hover: %lang:action|Hyr %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Hyra för[/bold]"
|
||||
- " hover: Hyr %region% för %price% per %duration%"
|
||||
- " hover: %lang:action|Hyr %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]%price% per %duration%."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Köp för[/bold]"
|
||||
- " hover: Köp %region% för %price%"
|
||||
- " hover: %lang:action|Köp %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Köp för[/bold]"
|
||||
- " hover: Köp %region% för %price%"
|
||||
- " hover: %lang:action|Köp %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
"info-regionReselPrice": "[darkgreen][bold]►[reset] Återsäljningspris: [gray]%resellprice% (du kan köpa den från %lang:player%)."
|
||||
"info-regionFriends": "[darkgreen][bold]►[reset] Tillagda vänner: [gray]%0%."
|
||||
"info-friend": "%lang:tPlayer|%0%|%"
|
||||
"info-friendRemove":
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Ta bort%0% som vän|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %region%"
|
||||
- " hover: %lang:action|Ta bort%0% som vän|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
"info-regionMoneyBackBuy": "[darkgreen][bold]►[reset] Försäljning återbetalning: [gray]%moneyback% (%moneybackpercent%% av priset)."
|
||||
"info-regionMoneyBackBuyClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Försäljning återbetalning[/bold]"
|
||||
- " hover: Sälj %region% och få tillbaka %moneyback%"
|
||||
- " hover: %lang:action|Sälj%region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av priset)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Försäljning återbetalning[/bold]"
|
||||
- " hover: Sälj %region% och få tillbaka %moneyback%"
|
||||
- " hover: %lang:action|Sälj%region%|%"
|
||||
- " command: /areashop sell %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av priset)."
|
||||
"info-regionMoneyBackRent": "[darkgreen][bold]►[reset] Avbruten hyras återbetalning: [gray]%moneyback% (%moneybackpercent%% av återstående tid)."
|
||||
"info-regionMoneyBackRentClick":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Avbruten hyras återbetalning[/bold]"
|
||||
- " hover: Avbryt hyra %region% och få tillbaka %moneyback%"
|
||||
- " hover: %lang:action|Avbryt hyra %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av återstående tid)."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Avbruten hyras återbetalning[/bold]"
|
||||
- " hover: Avbryt hyra %region% och få tillbaka %moneyback%"
|
||||
- " hover: %lang:action|Avbryt hyra %region%|%"
|
||||
- " command: /areashop unrent %region%"
|
||||
- ": [gray]%moneyback% (%moneybackpercent%% av återstående tid)."
|
||||
"info-regionMaxExtends": "[darkgreen][bold]►[reset] Maximalt antal expansioner: [gray]%maxextends% time(s)."
|
||||
"info-regionNoExtending": "[darkgreen][bold]►[reset] Hyran kan inte förlängas."
|
||||
"info-regionExtendsLeft": "[darkgreen][bold]►[reset] Expansioner kvar: [gray]%extendsleft% time(s) utav %maxextends%."
|
||||
"info-regionMaxRentTime": "[darkgreen][bold]►[reset] Hyra i förväg: [gray]%maxrenttime% max."
|
||||
"info-prefix": "[darkgreen][bold]►[reset] "
|
||||
"info-regionTeleport":
|
||||
- "[bold]Gå till regionen[/bold]"
|
||||
- " hover: %lang:action|Teleportera till %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
- "[bold]Gå till regionen[/bold]"
|
||||
- " hover: %lang:action|Teleportera till %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]sätt ut teleporteringsplats[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Sätt ut teleporteringsplats|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]sätt ut teleporteringsplats[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|Sätt ut teleporteringsplats|%"
|
||||
- " command: /areashop settp %region%"
|
||||
"info-regionSigns": "[darkgreen][bold]►[reset] Connected signs: [gray]%0%."
|
||||
"info-regionSignLocation": "[gray](%0%, %1%, %2%, %3%)[reset]"
|
||||
"info-regionGroups": "[darkgreen][bold]►[reset] Tilldelade grupper: [gray]%0%."
|
||||
@@ -354,10 +354,10 @@
|
||||
"addsign-couldNotDetectSign": "Hittade flera regioner runt skylten, specifiera regionen på andra raden (2 av regionerna som hittades: %lang:tRegion|%0%|% och %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "Den specifierade profilen existerar inte, använd ett av följande (kolla konfig): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Skyltprofil %0%"
|
||||
- " hover: %lang:action|Använd denna profil|%"
|
||||
- " Kommando: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Skyltprofil %0%"
|
||||
- " hover: %lang:action|Använd denna profil|%"
|
||||
- " Kommando: /areashop linksigns %0%"
|
||||
"addsign-success": "Skylten har lagts till i %lang:region%."
|
||||
"addsign-successProfile": "Skylten har lagts till i %lang:region% med profil %0%."
|
||||
"addsign-alreadyRegistered": "Den skylten är redan registrerad för %lang:region%."
|
||||
@@ -370,16 +370,16 @@
|
||||
"me-header": "Regioner för %lang:tPlayer|%0%|%:"
|
||||
"me-notAPlayer": "Du är inte en spelare så du kan inte ha någon region."
|
||||
"me-rentLine":
|
||||
- "[darkgreen][bold]►[nollställ] %lang:region% [gray]("
|
||||
- "%timeleft% kvar"
|
||||
- " hover: tills %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[nollställ] %lang:region% [gray]("
|
||||
- "%timeleft% kvar"
|
||||
- " hover: tills %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[nollställ] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[nollställ] %lang:region% [gray]("
|
||||
- "ägd av %lang:player%"
|
||||
- " hover: Du är tillagd som vän"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[nollställ] %lang:region% [gray]("
|
||||
- "ägd av %lang:player%"
|
||||
- " hover: Du är tillagd som vän"
|
||||
- ")."
|
||||
"me-nothing": "%lang:tPlayer|%0%|% har inte hyrt eller köpt någon region och är inte tillagd som vän i någon."
|
||||
"me-noPlayer": "%0% hittades inte, antagligen aldrig varit på servern."
|
||||
"me-clickHint": "[gray][italic]Klicka en regions namn för att se detaljer."
|
||||
@@ -433,13 +433,13 @@
|
||||
"linksigns-noPermission": "Du har inte rättigheterna för att gå in i mass-länknings läge."
|
||||
"linksigns-stopped": "Avslutade skylt-länknings läge."
|
||||
"stack-help":
|
||||
- "/as stack <mängd> <mellanrum> <namn> <rent|buy> [grupp].[break]"
|
||||
- " [gray]<mängd> Antal regioner som kommer skapas.[break]"
|
||||
- " [gray]<mellanrum> Avstånd i antal block mellan regionerna.[break]"
|
||||
- " [gray]<namn> Namnet på regionerna (numrering kommer hamna efter det).[break]"
|
||||
- " [gray]<rent|buy> Skapa hyr- eller köpregioner.[break]"
|
||||
- " [gray][group] En grupp att lägga till de skapade regionerna i.[break]"
|
||||
- " [gray]Regionerna kommer skapas åt det håll du är vänd åt."
|
||||
- "/as stack <mängd> <mellanrum> <namn> <rent|buy> [grupp].[break]"
|
||||
- " [gray]<mängd> Antal regioner som kommer skapas.[break]"
|
||||
- " [gray]<mellanrum> Avstånd i antal block mellan regionerna.[break]"
|
||||
- " [gray]<namn> Namnet på regionerna (numrering kommer hamna efter det).[break]"
|
||||
- " [gray]<rent|buy> Skapa hyr- eller köpregioner.[break]"
|
||||
- " [gray][group] En grupp att lägga till de skapade regionerna i.[break]"
|
||||
- " [gray]Regionerna kommer skapas åt det håll du är vänd åt."
|
||||
"stack-accepted": "Börjar skapa %0% %1% regioner med %2% block iemellan, namnen startar med %3% och har ett nummer efter sig.%4%"
|
||||
"stack-addToGroup": " Skapade regioner kommer läggas till i gruppen '%0%'."
|
||||
"stack-noPermission": "Du har inte rättigheterna att skapa och lägga till regioner i AreaShop i massläge."
|
||||
@@ -454,30 +454,30 @@
|
||||
"message-noPermission": "Du har inte rättigheterna för att skicka AreaShop meddelanden."
|
||||
"message-notOnline": "%0% är inte online."
|
||||
"confirm-rent":
|
||||
- "%lang:prefix%Är du säker på att du vill hyra %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att hyra %0%|%"
|
||||
- " hover: %lang:action|Rent %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Är du säker på att du vill hyra %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att hyra %0%|%"
|
||||
- " hover: %lang:action|Rent %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-extend":
|
||||
- "%lang:prefix%Är du säker på att du vill förlänga %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att förlänga %0%|%"
|
||||
- " hover: %lang:action|Extend %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
- "%lang:prefix%Är du säker på att du vill förlänga %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att förlänga %0%|%"
|
||||
- " hover: %lang:action|Extend %0%|%"
|
||||
- " command: /areashop rent %0%"
|
||||
"confirm-unrent":
|
||||
- "%lang:prefix%Är du säker på att du vill sluta hyra %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att sluta hyra %0%|%"
|
||||
- " hover: %lang:action|Stop renting %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
- "%lang:prefix%Är du säker på att du vill sluta hyra %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att sluta hyra %0%|%"
|
||||
- " hover: %lang:action|Stop renting %0%|%"
|
||||
- " command: /areashop unrent %0%"
|
||||
"confirm-buy":
|
||||
- "%lang:prefix%Är du säker på att du vill köpa %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att köpa %0%|%"
|
||||
- " hover: %lang:action|Buy %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
- "%lang:prefix%Är du säker på att du vill köpa %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att köpa %0%|%"
|
||||
- " hover: %lang:action|Buy %0%|%"
|
||||
- " command: /areashop buy %0%"
|
||||
"confirm-sell":
|
||||
- "%lang:prefix%Är du säker på att du vill sälja %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att sälja %0%|%"
|
||||
- " hover: %lang:action|Sell %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
- "%lang:prefix%Är du säker på att du vill sälja %lang:tRegion|%0%|%?[break]"
|
||||
- "[darkgreen][bold]►[reset] %lang:button|Klicka för att sälja %0%|%"
|
||||
- " hover: %lang:action|Sell %0%|%"
|
||||
- " command: /areashop sell %0%"
|
||||
"timeleft-years": "%0% år"
|
||||
"timeleft-months": "%0% månader"
|
||||
"timeleft-days": "%0% dagar"
|
||||
@@ -489,4 +489,4 @@
|
||||
"greeting-forrent": "%region% kan hyras för %price% per %duration%."
|
||||
"greeting-rented": "%region% hyrs av %player% fram till %until%."
|
||||
"greeting-forsale": "%region% kan köpas för %price%."
|
||||
"greeting-bought": "%region% är köpt av %player%."
|
||||
"greeting-bought": "%region% är köpt av %player%."
|
||||
@@ -13,30 +13,30 @@
|
||||
"action": "[gold][bold]<%0%>[/bold]"
|
||||
"button": "[bold]<%0%>[/bold]"
|
||||
"command":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|点击自动使用 %1%|%"
|
||||
- " command: %1%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: %lang:action|点击自动使用 %1%|%"
|
||||
- " command: %1%"
|
||||
"helpCommand":
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|点击自动使用 %0%|%"
|
||||
- " command: %0%"
|
||||
- "[gold]%0% [gray]-[reset]"
|
||||
- " hover: %lang:action|点击自动使用 %0%|%"
|
||||
- " command: %0%"
|
||||
"region": "%lang:tRegion|%region%|%"
|
||||
"tRegion":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|区域信息|%"
|
||||
- " command: /areashop info region %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Region %0%"
|
||||
- " hover: %lang:action|区域信息|%"
|
||||
- " command: /areashop info region %0%"
|
||||
"player": "%lang:tPlayer|%player%|%"
|
||||
"tPlayer":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Player %0%"
|
||||
- " hover: %lang:action|区域 %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Player %0%"
|
||||
- " hover: %lang:action|区域 %0%|%"
|
||||
- " command: /areashop info player %0%"
|
||||
"landlord":
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landlord %landlord%"
|
||||
- " hover: %lang:action|区域 %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
- "[bold]%landlord%[/bold]"
|
||||
- " hover: Landlord %landlord%"
|
||||
- " hover: %lang:action|区域 %landlord%|%"
|
||||
- " command: /areashop info player %landlord%"
|
||||
"total-maximum": "你不能租用和购买超过总共的 %0% 区域 (你在区域 '%2%'已经拥有了 %1% 区域商店)."
|
||||
"general-notReady": "区域商店还没有加载成功,请稍候..."
|
||||
"general-noWorld": "你无法这样做, 在这个世界 %lang:region% 无法使用 (当前世界:'%world%')."
|
||||
@@ -140,15 +140,15 @@
|
||||
"reload-noPermission": "你没有权限重新加载配置文件."
|
||||
"reload-updateCommandChanged": "'/as updaterents' 和 '/as updatebuys' 已被移除, '/as reload' 也会更新现在的区域,所以使用该命令."
|
||||
"info-help":
|
||||
- "/as info[break]"
|
||||
- " %lang:command|所有相关|/as info all|%[break]"
|
||||
- " %lang:command|已被租用|/as info rented|% [group] [page][break]"
|
||||
- " %lang:command|等待被租用的商店|/as info forrent|% [group] [page][break]"
|
||||
- " %lang:command|已被购买|/as info sold|% [group] [page][break]"
|
||||
- " %lang:command|等待被购买的商店|/as info forsale|% [group] [page][break]"
|
||||
- " %lang:command|转售中的商店|/as info reselling|% [group] [page][break]"
|
||||
- " %lang:command|组里面能使用的区域商店|/as info nogroup [page]|%[break]"
|
||||
- " %lang:command|当前区域商店信息|/as info region|% [region]"
|
||||
- "/as info[break]"
|
||||
- " %lang:command|所有相关|/as info all|%[break]"
|
||||
- " %lang:command|已被租用|/as info rented|% [group] [page][break]"
|
||||
- " %lang:command|等待被租用的商店|/as info forrent|% [group] [page][break]"
|
||||
- " %lang:command|已被购买|/as info sold|% [group] [page][break]"
|
||||
- " %lang:command|等待被购买的商店|/as info forsale|% [group] [page][break]"
|
||||
- " %lang:command|转售中的商店|/as info reselling|% [group] [page][break]"
|
||||
- " %lang:command|组里面能使用的区域商店|/as info nogroup [page]|%[break]"
|
||||
- " %lang:command|当前区域商店信息|/as info region|% [region]"
|
||||
"info-noPermission": "你没有权限获取有关区域商店的信息."
|
||||
"info-allHeader": "所有区域商店%0%:"
|
||||
"info-rentedHeader": "出租区域商店%0%:"
|
||||
@@ -169,11 +169,11 @@
|
||||
"info-entryReselling": "[darkgreen][bold]►[reset] %lang:region%: [gray]卖给 %lang:player% (转售)."
|
||||
"info-pageStatus": "[gold]页数 %0%/%1%"
|
||||
"info-pageNoPrevious":
|
||||
- " [darkgray][bold]◄前一页[/bold] "
|
||||
- " hover: 前一页"
|
||||
- " [darkgray][bold]◄前一页[/bold] "
|
||||
- " hover: 前一页"
|
||||
"info-pageNoNext":
|
||||
- " [darkgray][bold]下一页►[/bold]"
|
||||
- " hover: 这已经是最后一页了"
|
||||
- " [darkgray][bold]下一页►[/bold]"
|
||||
- " hover: 这已经是最后一页了"
|
||||
"info-playerHelp": "/as info player <name>."
|
||||
"info-playerRents": "该区域已被租用,拥有者是: %lang:tPlayer|%0%|%: [gray]%1%"
|
||||
"info-playerNoRents": "%lang:tPlayer|%0%|% 没有出租区域商店."
|
||||
@@ -186,66 +186,66 @@
|
||||
"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]每 %duration%需要%price%金币."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]点击续费租期[/bold]"
|
||||
- " hover: 点击续费租期: %region%"
|
||||
- " hover: %duration% 花费 %price%"
|
||||
- " hover: %lang:action|租期续费 %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]每 %duration%需要%price%金币."
|
||||
"info-regionCanBeRented":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]出租信息[/bold]"
|
||||
- " hover: 出租 %region% 每 %duration% 需要 %price% 金币"
|
||||
- " hover: %lang:action|出租 %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]每 %duration%需要%price%金币."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]出租信息[/bold]"
|
||||
- " hover: 出租 %region% 每 %duration% 需要 %price% 金币"
|
||||
- " hover: %lang:action|出租 %region%|%"
|
||||
- " command: /areashop rent %region%"
|
||||
- ": [gray]每 %duration%需要%price%金币."
|
||||
"info-regionCanBeBought":
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Buy for[/bold]"
|
||||
- " hover: Buy %region% for %price%"
|
||||
- " hover: %lang:action|Buy %region%|%"
|
||||
- " command: /areashop buy %region%"
|
||||
- ": [gray]%price%."
|
||||
- "[darkgreen][bold]►[reset] "
|
||||
- "[bold]Buy for[/bold]"
|
||||
- " hover: Buy %region% for %price%"
|
||||
- " hover: %lang:action|Buy %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 %region%"
|
||||
- " hover: %lang:action|移除 %0% 好友|%"
|
||||
- " command: /areashop delfriend %0% %region%"
|
||||
- "%lang:info-friend|%0%|%"
|
||||
- "[red]✕[gray]"
|
||||
- " hover: Region %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%% 的价格)."
|
||||
- "[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%% 剩余时间."
|
||||
- "[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%"
|
||||
- "[bold]点击传送到指定区域[/bold]"
|
||||
- " hover: %lang:action|传送到 %region%|%"
|
||||
- " command: /areashop tp %region%"
|
||||
"info-setRegionTeleport":
|
||||
- "[bold]点击设置脚下为传送点[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|设置脚下为传送点|%"
|
||||
- " command: /areashop settp %region%"
|
||||
- "[bold]点击设置脚下为传送点[/bold]"
|
||||
- " hover: %region%"
|
||||
- " hover: %lang:action|设置脚下为传送点|%"
|
||||
- " 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%."
|
||||
@@ -374,10 +374,10 @@
|
||||
"addsign-couldNotDetectSign": "在木牌附近找到多个区域, 指定第二行的区域(2个被发现的区域: %lang:tRegion|%0%|% and %lang:tRegion|%1%|%)."
|
||||
"addsign-wrongProfile": "指定的配置文件不存在,请使用以下其中一个(检查配置): [gray]%0%."
|
||||
"addsign-profile":
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Signprofile %0%"
|
||||
- " hover: %lang:action|点击自动使用指令配置文件|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
- "[bold]%0%[/bold]"
|
||||
- " hover: Signprofile %0%"
|
||||
- " hover: %lang:action|点击自动使用指令配置文件|%"
|
||||
- " command: /areashop linksigns %0%"
|
||||
"addsign-success": "木牌已被添加到区域 %lang:region%."
|
||||
"addsign-successProfile": "木牌已被添加到区域 %lang:region% 配置文件为: %0%."
|
||||
"addsign-alreadyRegistered": "该木牌已经被绑定到 %lang:region% 区域了."
|
||||
@@ -390,16 +390,16 @@
|
||||
"me-header": "该区域的主人: %lang:tPlayer|%0%|%:"
|
||||
"me-notAPlayer": "你不是玩家,不能购买任何区域."
|
||||
"me-rentLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% "
|
||||
- " hover: until %until%"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "%timeleft% "
|
||||
- " hover: until %until%"
|
||||
- ")."
|
||||
"me-buyLine": "[darkgreen][bold]►[reset] %lang:region%."
|
||||
"me-friendLine":
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "主人: %lang:player%"
|
||||
- " hover: 你被添加为好友"
|
||||
- ")."
|
||||
- "[darkgreen][bold]►[reset] %lang:region% [gray]("
|
||||
- "主人: %lang:player%"
|
||||
- " hover: 你被添加为好友"
|
||||
- ")."
|
||||
"me-nothing": "%lang:tPlayer|%0%|% 还没有租用或购买区域也没有添加为好友."
|
||||
"me-noPlayer": "%0% 无法找到,可能从没注册."
|
||||
"me-clickHint": "[gray][italic]点击区域名称查看详细信息."
|
||||
@@ -453,13 +453,13 @@
|
||||
"linksigns-noPermission": "你没有进入批量牌子关联模式的权限。"
|
||||
"linksigns-stopped": "退出牌子关联模式."
|
||||
"stack-help":
|
||||
- "/as stack <数量> <区域商店的间隔> <名称> <rent|buy> [权限组].[break]"
|
||||
- " [gray]<amount> 要创建的区域数量[break]"
|
||||
- " [gray]<gap> 阻止区域之间的间隔.[break]"
|
||||
- " [gray]<name> 区域名称(数字将在后面).[break]"
|
||||
- " [gray]<rent|buy> 出租或购买区域.[break]"
|
||||
- " [gray][group] 将创建的区域添加到权限组.[break]"
|
||||
- " [gray]这些区域将按照你的朝向创建。"
|
||||
- "/as stack <数量> <区域商店的间隔> <名称> <rent|buy> [权限组].[break]"
|
||||
- " [gray]<amount> 要创建的区域数量[break]"
|
||||
- " [gray]<gap> 阻止区域之间的间隔.[break]"
|
||||
- " [gray]<name> 区域名称(数字将在后面).[break]"
|
||||
- " [gray]<rent|buy> 出租或购买区域.[break]"
|
||||
- " [gray][group] 将创建的区域添加到权限组.[break]"
|
||||
- " [gray]这些区域将按照你的朝向创建。"
|
||||
"stack-accepted": "开始创建%0%个%1%类型的区域,间隔为%2%,名称以%3%开头,后面数字由001|%4%开始"
|
||||
"stack-addToGroup": " 创建的区域将添加到权限组 '%0%'."
|
||||
"stack-noPermission": "你没有权限批量创建和添加区域商店."
|
||||
@@ -478,30 +478,30 @@
|
||||
"message-noPermission": "你没有发送区域商店消息的权限。."
|
||||
"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%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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%"
|
||||
- "%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% 天"
|
||||
@@ -515,4 +515,4 @@
|
||||
"greeting-forsale": "区域商店:&2&l%region%&r可以花费&2&l%price%&r金币购买."
|
||||
"greeting-bought": "区域商店:&2&l%region%&r被&2&l%player%&r购买了."
|
||||
"greeting-resale": "区域商店:&2&l%region%&r可以找&2&l%player%&r购买&2&l%resaleprice%&r."
|
||||
"update-playerNotify": "[darkgreen]请更新AreaShop 版本%0% 到 %1% 版本 , 获取最新版本 https://github.com/NLthijs48/AreaShop/releases."
|
||||
"update-playerNotify": "[darkgreen]请更新AreaShop 版本%0% 到 %1% 版本 , 获取最新版本 https://github.com/NLthijs48/AreaShop/releases."
|
||||
@@ -4,7 +4,7 @@ version: "${version}"
|
||||
description: "Selling and renting WorldGuard regions to your players, highly configurable."
|
||||
depend: [Vault, WorldGuard, WorldEdit]
|
||||
softdepend: [Multiverse-Core, FastAsyncWorldEdit]
|
||||
author: NLThijs48
|
||||
authors: [NLThijs48, md5sha256, Dartanman]
|
||||
website: https://github.com/md5sha256/AreaShop
|
||||
commands:
|
||||
AreaShop:
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<br/>
|
||||
[](https://jitpack.io/#md5sha256/AreaShop)
|
||||
<br>
|
||||
**Usage and configuration:**
|
||||
[►Download (releases)](https://github.com/NLthijs48/AreaShop/releases)
|
||||
[►Download (releases)](https://github.com/md5sha256/AreasShop/releases)
|
||||
[►Commands and Permissions](https://github.com/NLthijs48/AreaShop/wiki/Commands-and-Permissions)
|
||||
<br/>
|
||||
[►Basic regions setup](https://github.com/NLthijs48/AreaShop/wiki/Basic-regions-setup)
|
||||
@@ -14,11 +16,10 @@
|
||||
[►Frequently Asked Questions](https://github.com/NLthijs48/AreaShop/wiki/Frequently-Asked-Questions)
|
||||
[►Common errors](https://github.com/NLthijs48/AreaShop/wiki/Common-errors)<br/>
|
||||
**Support:**
|
||||
[►Request a feature, report a bug or ask support](https://github.com/NLthijs48/AreaShop/issues/new/choose)
|
||||
[►Open issues](https://github.com/NLthijs48/AreaShop/issues)<br/>
|
||||
[►Request a feature, report a bug or ask support](https://github.com/md5sha256/AreasShop/issues/new/choose)
|
||||
[►Open issues](https://github.com/md5sha256/AreasShop/issues)<br/>
|
||||
**Development:**
|
||||
[►Changelog](https://github.com/NLthijs48/AreaShop/blob/master/changelog.md)
|
||||
[►Compiling](https://github.com/NLthijs48/AreaShop/wiki/Compiling-AreaShop)
|
||||
[►Compiling](https://github.com/md5sha256/AreaShop/tree/dev/bleeding/documentation/compiling.md)
|
||||
[►Modules/classes overview](https://github.com/NLthijs48/AreaShop/wiki/Modules,-packages-and-classes-overview)
|
||||
[►Javadocs](https://wiefferink.me/AreaShop/javadocs/)
|
||||
[►Development builds](http://jenkins.wiefferink.me/job/AreaShop)<br/>
|
||||
@@ -26,7 +27,19 @@
|
||||
[►AreaShop in Spigot Resources](http://www.spigotmc.org/resources/areashop.2991/)
|
||||
[►AreaShop on BukkitDev](http://dev.bukkit.org/bukkit-plugins/regionbuyandrent/)
|
||||
|
||||
***
|
||||
### Required dependencies
|
||||
* Java 17 or higher (latest recommended)
|
||||
* Bukkit/Spigot 1.17.2 or newer (hybrids such as Mohist are not supported)
|
||||
* [WorldGuard](http://dev.bukkit.org/bukkit-plugins/worldguard/): 7.0.7 or newer
|
||||
* [WorldEdit](http://dev.bukkit.org/bukkit-plugins/worldedit/): 7.2.12 or newer
|
||||
* [Vault](http://dev.bukkit.org/bukkit-plugins/vault/): 1.7.3 or higher
|
||||
* An economy plugin supported by Vault (check the [Vault page](http://dev.bukkit.org/bukkit-plugins/vault/) for a list of these)
|
||||
|
||||
### Optional Dependencies
|
||||
* [FastAsyncWorldEdit](https://www.spigotmc.org/resources/fastasyncworldedit.13932/) 2.4.5 or newer (Note: Use either FAWE or WE, not both together)
|
||||
* AreaShop has a separate adapter for FAWE which leverages its support for asynchronous edit operations. This adapter is used for region saving and restoring.
|
||||
* Note that schematics created by the FAWE adapter are not compatible with normal WorldEdit; however, schematics created by the normal WorldEdit adapter are compatible with FAWE
|
||||
* Due to a bug with FAWE, entities are not saved by the FAWE adapter but are saved in the normal WE adapter
|
||||
|
||||
AreaShop allows you selling and renting regions to players. It could be used to let them rent a jail in your prison server, a shop in the market of the survival server or a plot on a creative server. The player interacts with signs, making it easy to use. It also has a lot of commands to check the status of all regions, manage the renting and buying of a region and also features for admins. A lot of messages send to the player can be clicked, for immediately performing actions (buying the region, selling the region, etc.) or getting more information (for example clicking region name for region information). To setup the renting and selling of the regions exactly as you want AreaShop has a lot of options to custimize it to your liking.
|
||||
|
||||
@@ -36,7 +49,7 @@ AreaShop allows you selling and renting regions to players. It could be used to
|
||||
* 
|
||||
* Messages that can be clicked for more information and actions ([language](https://github.com/NLthijs48/AreaShop/wiki/Language-support) can be changed, as well as click/hover actions).
|
||||
* 
|
||||
* Change the of the plugin or use of of the already provided language files (check [here](https://github.com/NLthijs48/AreaShop/tree/master/AreaShop/src/main/resources/lang))
|
||||
* Change the of the plugin or use of the already provided language files (check [here](https://github.com/md5sha256/AreasShop/tree/dev/bleeding/AreaShop/src/main/resources/lang))
|
||||
* Automatically restore the region to its original state when sold: [restore](https://github.com/NLthijs48/AreaShop/wiki/Region-blocks-save-restore) the region with schematics.
|
||||
* Change which [commands](https://github.com/NLthijs48/AreaShop/wiki/Commands-and-Permissions) players can use with [permissions](https://github.com/NLthijs48/AreaShop/wiki/Commands-and-Permissions).
|
||||
* Customize the plugin by changing the [config files](https://github.com/NLthijs48/AreaShop/wiki/The-config-system).
|
||||
@@ -61,28 +74,4 @@ For a preview join 'mc.go-craft.com' and go to the Survival server, the shops ar
|
||||
**Made by [PerkulatorTime](https://www.youtube.com/user/PerkulatorTime)**<br/>
|
||||
[](https://www.youtube.com/watch?v=OQOsOG-EdNc)
|
||||
|
||||
Old video for AreaShop v1.0: [Tutorial by VariationVault](https://www.youtube.com/watch?v=k2HMCxCCOYo)
|
||||
|
||||
### Required dependencies
|
||||
* Java 7 or higher (latest recommended)
|
||||
* Bukkit/Spigot 1.7.9 or higher (modded servers often include Bukkit/Spigot support, so it should also work on that, but it is not specifically tested for it)
|
||||
* [WorldGuard](http://dev.bukkit.org/bukkit-plugins/worldguard/): 5.9 or higher (6.0+ recommended)
|
||||
* [WorldEdit](http://dev.bukkit.org/bukkit-plugins/worldedit/): 5.6.3 or higher (6.0+ recommended)
|
||||
* [Vault](http://dev.bukkit.org/bukkit-plugins/vault/): 1.4.1 or higher
|
||||
* An economy plugin supported by Vault (check the [Vault page](http://dev.bukkit.org/bukkit-plugins/vault/) for a list of these)
|
||||
|
||||
### Metrics
|
||||
This plugin utilizes Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:
|
||||
|
||||
*A unique identifier, the server's version of Java, whether the server is in offline or online mode, the plugin's version, the server's version, the OS version/name and architecture, the core count for the CPU, the number of players online, the Metrics version.*
|
||||
|
||||
This information will give me an indication how much the plugin is used and encourages me to continue development. Opting out of this service can be done by setting `sendStats` in the config of this plugin to `false`, if you want to disable Metrics for any plugin go to `plugins/Plugin Metrics/config.yml` and change `opt-out` to `true`. Check graphs of the statistics at this page: [mcstats.org/plugin/AreaShop](http://mcstats.org/plugin/AreaShop)
|
||||
|
||||
### Do you want to translate AreaShop?
|
||||
Help translating the plugin into different languages and to keep the translations up to date. Go to [this page](https://github.com/NLthijs48/AreaShop/wiki/Language-support#translating-on-transifex) for more information. Translating goes through the [Transifex](https://www.transifex.com/projects/p/areashop/) website and is very easy, sending files back and forth is not needed, you can translate lines online and whenever you want. Every line you translate will be saved, no need to do it all at once (this also allows for easy collaboration).
|
||||
|
||||

|
||||
|
||||
[](https://discord.gg/84kGMCQ)
|
||||
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VEECV88NG3L5C)
|
||||
Old video for AreaShop v1.0: [Tutorial by VariationVault](https://www.youtube.com/watch?v=k2HMCxCCOYo)
|
||||
@@ -1,7 +1,9 @@
|
||||
plugins.apply("io.papermc.paperweight.userdev")
|
||||
plugins {
|
||||
id("io.papermc.paperweight.userdev") apply true
|
||||
}
|
||||
|
||||
dependencies {
|
||||
paperDevBundle("1.17.1-R0.1-SNAPSHOT")
|
||||
paperweight.paperDevBundle("1.17.1-R0.1-SNAPSHOT")
|
||||
compileOnly(projects.areashopInterface)
|
||||
compileOnly(projects.areashopNms)
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_17_R1;
|
||||
package me.wiefferink.areashop.adapters.platform.legacy;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package me.wiefferink.areashop.adapters.platform.legacy;
|
||||
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.PlatformAdapter;
|
||||
|
||||
public class LegacyPlatformAdapter implements PlatformAdapter {
|
||||
|
||||
private final BlockBehaviourImpl blockBehaviourHelper = new BlockBehaviourImpl();
|
||||
|
||||
@Override
|
||||
public BlockBehaviourHelper blockBehaviourHelper() {
|
||||
return this.blockBehaviourHelper;
|
||||
}
|
||||
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_17_R1;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.nms.NMS;
|
||||
|
||||
public class NMSImpl implements NMS {
|
||||
|
||||
private final BlockBehaviourImpl blockBehaviourHelper = new BlockBehaviourImpl();
|
||||
|
||||
@Override
|
||||
public BlockBehaviourHelper blockBehaviourHelper() {
|
||||
return this.blockBehaviourHelper;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
plugins.apply("io.papermc.paperweight.userdev")
|
||||
|
||||
dependencies {
|
||||
paperDevBundle("1.18.1-R0.1-SNAPSHOT")
|
||||
compileOnly(projects.areashopInterface)
|
||||
compileOnly(projects.areashopNms)
|
||||
}
|
||||
|
||||
description = "AreaShop NMS Helper 1-18"
|
||||
|
||||
tasks {
|
||||
|
||||
assemble {
|
||||
dependsOn("reobfJar")
|
||||
}
|
||||
|
||||
named("reobfJar", io.papermc.paperweight.tasks.RemapJar::class) {
|
||||
outputJar.set(file("build/libs/${project.name}-${project.version}.jar"))
|
||||
}
|
||||
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_18_R1;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock;
|
||||
import org.bukkit.craftbukkit.v1_18_R1.block.CraftBlockState;
|
||||
import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class BlockBehaviourImpl implements BlockBehaviourHelper {
|
||||
|
||||
@Override
|
||||
public boolean canPlace(Location location, BlockData blockData) {
|
||||
Objects.requireNonNull(location.getWorld(), "Null World!");
|
||||
final BlockPos blockPosition = new BlockPos(location.getX(), location.getY(), location.getZ());
|
||||
final CraftWorld craftWorld = (CraftWorld) location.getWorld();
|
||||
final ServerLevel world = craftWorld.getHandle();
|
||||
final CraftBlockData craftBlockData = (CraftBlockData) blockData;
|
||||
final BlockState ibd = craftBlockData.getState();
|
||||
return ibd.canSurvive(world, blockPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockValid(Block block) {
|
||||
final CraftBlock craftBlock = (CraftBlock) block;
|
||||
final CraftWorld craftWorld = (CraftWorld) craftBlock.getWorld();
|
||||
final ServerLevel world = craftWorld.getHandle();
|
||||
final BlockState ibd = craftBlock.getNMS();
|
||||
return ibd.canSurvive(world, craftBlock.getPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockStateValid(org.bukkit.block.BlockState blockState) {
|
||||
final CraftBlockState craftBlockState = (CraftBlockState) blockState;
|
||||
final BlockState ibd = craftBlockState.getHandle();
|
||||
return ibd.canSurvive(craftBlockState.getBlock().getCraftWorld().getHandle(), craftBlockState.getPosition());
|
||||
}
|
||||
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_18_R1;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.nms.NMS;
|
||||
|
||||
public class NMSImpl implements NMS {
|
||||
|
||||
private final BlockBehaviourImpl blockBehaviourHelper = new BlockBehaviourImpl();
|
||||
|
||||
@Override
|
||||
public BlockBehaviourHelper blockBehaviourHelper() {
|
||||
return this.blockBehaviourHelper;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
plugins.apply("io.papermc.paperweight.userdev")
|
||||
|
||||
dependencies {
|
||||
paperDevBundle("1.18.2-R0.1-SNAPSHOT")
|
||||
compileOnly(projects.areashopInterface)
|
||||
compileOnly(projects.areashopNms)
|
||||
}
|
||||
|
||||
description = "AreaShop NMS Helper 1-18"
|
||||
|
||||
tasks {
|
||||
|
||||
assemble {
|
||||
dependsOn("reobfJar")
|
||||
}
|
||||
|
||||
named("reobfJar", io.papermc.paperweight.tasks.RemapJar::class) {
|
||||
outputJar.set(file("build/libs/${project.name}-${project.version}.jar"))
|
||||
}
|
||||
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_18_R2;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlockState;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class BlockBehaviourImpl implements BlockBehaviourHelper {
|
||||
|
||||
@Override
|
||||
public boolean canPlace(Location location, BlockData blockData) {
|
||||
Objects.requireNonNull(location.getWorld(), "Null World!");
|
||||
final BlockPos blockPosition = new BlockPos(location.getX(), location.getY(), location.getZ());
|
||||
final CraftWorld craftWorld = (CraftWorld) location.getWorld();
|
||||
final ServerLevel world = craftWorld.getHandle();
|
||||
final CraftBlockData craftBlockData = (CraftBlockData) blockData;
|
||||
final BlockState ibd = craftBlockData.getState();
|
||||
return ibd.canSurvive(world, blockPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockValid(Block block) {
|
||||
final CraftBlock craftBlock = (CraftBlock) block;
|
||||
final CraftWorld craftWorld = (CraftWorld) craftBlock.getWorld();
|
||||
final ServerLevel world = craftWorld.getHandle();
|
||||
final BlockState ibd = craftBlock.getNMS();
|
||||
return ibd.canSurvive(world, craftBlock.getPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockStateValid(org.bukkit.block.BlockState blockState) {
|
||||
final CraftBlockState craftBlockState = (CraftBlockState) blockState;
|
||||
final BlockState ibd = craftBlockState.getHandle();
|
||||
return ibd.canSurvive(craftBlockState.getBlock().getCraftWorld().getHandle(), craftBlockState.getPosition());
|
||||
}
|
||||
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package me.wiefferink.areashop.adapters.platform.v1_18_R2;
|
||||
|
||||
import me.wiefferink.areashop.nms.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.nms.NMS;
|
||||
|
||||
public class NMSImpl implements NMS {
|
||||
|
||||
private final BlockBehaviourImpl blockBehaviourHelper = new BlockBehaviourImpl();
|
||||
|
||||
@Override
|
||||
public BlockBehaviourHelper blockBehaviourHelper() {
|
||||
return this.blockBehaviourHelper;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
dependencies {
|
||||
compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT")
|
||||
compileOnly(projects.areashopInterface)
|
||||
compileOnly(projects.areashopNms)
|
||||
}
|
||||
|
||||
description = "AreaShop NMS Helper 1-18"
|
||||
|
||||
tasks {
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package me.wiefferink.areashop.adapters.platform.modern;
|
||||
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class BlockBehaviourImpl implements BlockBehaviourHelper {
|
||||
|
||||
@Override
|
||||
public boolean canPlace(Location location, BlockData blockData) {
|
||||
Objects.requireNonNull(location.getWorld(), "Null World!");
|
||||
return location.getBlock().canPlace(blockData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockValid(Block block) {
|
||||
return block.canPlace(block.getBlockData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBlockStateValid(BlockState blockState) {
|
||||
return blockState.getBlock().canPlace(blockState.getBlockData());
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package me.wiefferink.areashop.adapters.platform.modern;
|
||||
|
||||
import me.wiefferink.areashop.platform.adapter.BlockBehaviourHelper;
|
||||
import me.wiefferink.areashop.platform.adapter.PlatformAdapter;
|
||||
|
||||
public class ModernPlatformAdapter implements PlatformAdapter {
|
||||
|
||||
private final BlockBehaviourImpl blockBehaviourHelper = new BlockBehaviourImpl();
|
||||
|
||||
@Override
|
||||
public BlockBehaviourHelper blockBehaviourHelper() {
|
||||
return this.blockBehaviourHelper;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
description = "AreaShop Paper Helper"
|
||||
|
||||
dependencies {
|
||||
compileOnlyApi(libs.paper)
|
||||
compileOnlyApi(projects.adapters.platform.platformInterface)
|
||||
}
|
||||
Loaded 100 of 126 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user