Compare commits

..
121 Commits
Author SHA1 Message Date
Andrew Wong 74219ff75b Release 2.7.17 2024-01-29 16:12:16 +08:00
Andrew Wong e13a5f2bb0 Update the region immediately after a transfer has occurred. Additionally, remove the previous owner from the friend feature 2024-01-29 16:11:21 +08:00
Andrew Wong c3bc9457ef Minor code smell fixes 2024-01-29 15:52:57 +08:00
Andrew Wong 6dc97b019e Add method in FeatureManager to register feature init 2024-01-15 12:02:00 +08:00
md5sha256 41944102b6 Update dependencies 2024-01-07 10:59:42 +01:00
md5sha256 90fecd1085 Update dependencies and minor buildscript changes 2024-01-07 00:30:13 +01:00
md5sha256 e1b4df8f25 Minor code cleanup, add language converter 2024-01-07 00:28:00 +01:00
= f0e4bd12ca Use InputStream#readAllBytes 2024-01-07 00:28:00 +01:00
= 27d832f05a Simplify try-catch to instanceof 2024-01-07 00:28:00 +01:00
= 1ca846f1ec Put curly braces on the same line 2024-01-07 00:28:00 +01:00
= 2472a14cae Swap Bukkit#getLogger()#severe() for AreaShop#error() 2024-01-07 00:28:00 +01:00
= c2bfe2158e Early check in SimpleMessageBridge.send for ClassCastException 2024-01-07 00:28:00 +01:00
= 745d1dd7d7 Remove unnecessary cast to TextComponent 2024-01-07 00:28:00 +01:00
= f6977061f4 Refactor five different "send" methods into one 2024-01-07 00:28:00 +01:00
= c922b83de4 Remove * imports in ASLanguageManager 2024-01-07 00:28:00 +01:00
= 444a769f37 Use NIO StandardCharsets in ASLanguageManager 2024-01-07 00:28:00 +01:00
= 6b81be9cbb Change some comments in config 2024-01-07 00:28:00 +01:00
= cd07b899c8 Change config to be more usable 2024-01-07 00:28:00 +01:00
= 6bd916facd Add more comments to config to explain MiniMessage 2024-01-07 00:28:00 +01:00
= d16ea37269 Better config.yml comments 2024-01-07 00:27:37 +01:00
= 56ab7ef52b Support the old messaging system 2024-01-07 00:27:35 +01:00
= 6ef2d89cfc Change configuration and lang to be MiniMessage. Add wgPrefix. Create ASLanguageManager. Change how messages are sent and handled to support MiniMessage. 2024-01-07 00:27:21 +01:00
= 94a807d7c2 Change message processing to include MiniMessage formatting 2024-01-07 00:27:21 +01:00
= 0d01cb956e Add the Adventure (MiniMessage) dependency in Gradle 2024-01-07 00:27:21 +01:00
md5sha256 55c4f7f369 Expose libraries as api instead of implementation 2024-01-06 18:47:35 +01:00
md5sha256 3348e5b697 Use the non-deprecrated way to declare the paperdevbundle. Fix missing publishing task on modules 2023-12-07 02:28:24 +08:00
md5sha256 381c8b2ebe Only exclude publishing the bukkit 1.17 module 2023-12-07 02:21:11 +08:00
md5sha256 6bf344e6be Fix inverted condition in checking the if the project is the platform adapter 2023-12-07 02:13:52 +08:00
md5sha256 e2bcc57128 Shade jetbrains annotations 2023-12-07 02:08:37 +08:00
md5sha256 6df08bc713 Compare project by name 2023-12-07 01:59:28 +08:00
md5sha256 0e0b085000 Include the platformInterface project in publishing 2023-12-07 01:56:22 +08:00
md5sha256 4f9fc950f0 Refactor the buildscript to only require platform deps in a non-jitpack environment 2023-12-07 01:50:01 +08:00
md5sha256 fe16d732a2 Revert "Only publish the core plugin jar, don't publish other utility modules"
This reverts commit 8cc44cf79f.
2023-12-07 01:48:31 +08:00
md5sha256 8cc44cf79f Only publish the core plugin jar, don't publish other utility modules 2023-12-07 01:42:39 +08:00
md5sha256 4fd478dbc3 use env variable instead of system prop 2023-12-06 22:47:38 +08:00
md5sha256 fe77bf0318 Set the archive base name to the default if in the jitpack env 2023-12-06 21:35:30 +08:00
md5sha256 e4b53982b2 Don't change the name of the jar if in the jitpack env 2023-12-06 21:27:25 +08:00
md5sha256 3c953ad9a3 Bump version to 2.7.17-SNAPSHOT 2023-12-06 21:27:09 +08:00
md5sha256 88f55bb6a9 Release 2.7.16 2023-12-06 20:13:28 +08:00
md5sha256 4ba8326314 Update dependencies and minor buildscript changes 2023-12-06 20:01:08 +08:00
md5sha256 de81d92da0 Update the SDK before installing 2023-12-06 19:50:50 +08:00
md5sha256 f636a98314 Use temurin jdk in jitpack.yml 2023-12-06 19:45:08 +08:00
md5sha256 e4df5a8cc9 Update gradle wrapper to 8.5 2023-12-06 19:33:54 +08:00
Andrew Wong 56818bebdb Add transfer feature
Adds /as transfer
2023-11-24 21:50:07 +11:00
Andrew Wong 7e1d7168f1 Refactor transfer to transfer both buyers and renters. Update lang files and fix data keys in GeneralRegion 2023-11-24 21:47:40 +11:00
Andrew Wong ff1ea3ae51 Add default config for transfers 2023-11-24 21:47:38 +11:00
Andrew Wong c9dc8dd840 Add SetTransferCommand 2023-11-24 21:47:36 +11:00
Andrew Wong c0794daeeb Actually respect transfers being disabled 2023-11-24 21:47:34 +11:00
Andrew Wong d40b9c660b Fix transfer missing region arg replacement and incorrect ownership checks in TransferCommand 2023-11-24 21:47:32 +11:00
Andrew Wong f7b010b3f3 Fix lang issue with region not being replaced, fix landlord/owner not being changed 2023-11-24 21:47:30 +11:00
Andrew Wong a06d9271c4 Make sure tab complete list is mutable in transfer command 2023-11-24 21:47:27 +11:00
Andrew Wong dd343aa587 Add messages for when regions are transferred 2023-11-24 21:47:25 +11:00
Andrew Wong e09d4ebd83 Fix lang and incorrect argument access 2023-11-24 21:47:23 +11:00
Andrew Wong 5f435941e4 Add transfer region command 2023-11-24 21:47:19 +11:00
Andrew Wong 86316cdd5b Prepare for snapshot 2.7.16 2023-11-24 21:43:33 +11:00
Andrew Wong 61828d3cfd Release 2.7.15 2023-11-24 21:38:48 +11:00
Andrew Wong 54241d5ce3 Replace the warning of null owner on shutdown with null checks of the owner uuid 2023-11-15 13:06:22 +11:00
Andrew Wong d048665530 Cache the landlord instead of parsing it twice in GeneralRegion#isLandLord 2023-11-15 13:01:34 +11:00
Andrew Wong 23de68431c Replace Random instantiations with ThreadLocalRandom in FindCommand 2023-11-15 12:40:17 +11:00
Andrew Wong 95b4543f19 Fix null pointer when comparing null pre release types in VersionData 2023-11-14 03:46:28 +11:00
Andrew Wong d058bb7271 Refactor platform adapters to legacy (1.17.1) and modern (1.18+). Add semver parsing utilities. Fix bug with github updater treating snapshot versions as newer 2023-11-13 22:30:34 +11:00
Andrew Wong 63d26be369 2.7.15-SNAPSHOT 2023-11-13 21:06:58 +11:00
Andrew Wong 1020388aae Release 2.7.14 2023-11-12 18:04:01 +11:00
Andrew Wong e56107ffd6 Fix signs not being deleted from the global sign cache in memory 2023-11-12 17:59:34 +11:00
Andrew Wong 06fceb4643 Drop support for 1.20 and 1.20.1 2023-11-12 15:50:51 +11:00
Andrew Wong e2077c3b32 Fix region signs losing their interactivity after restart. Resolves #20 2023-11-12 15:40:03 +11:00
Andrew Wong fcb64c2ddb Merge pull request #22 from o0sh4d0w0o/ResoldRegionEvent-resellprice-fix
Fixed getResellPrice unsetted when ResoldRegionEvent is notified
2023-10-04 21:35:03 +11:00
o0sh4d0w0o cc51109720 Fixed getResellPrice unsetted when ResoldRegionEvent is notified 2023-10-01 16:03:07 +02:00
Andrew Wong 0b48f4dd2e Fix not including 1.20.2 adapter 2023-09-25 11:37:12 +10:00
Andrew Wong 4d7f00b0ce Add support for 1.20.2 2023-09-25 11:33:02 +10:00
Andrew Wong b27ea83982 Include 1.18-1.20 adapters for jitpack 2023-09-03 08:47:21 +10:00
Andrew Wong 66da717a77 Fix relocations 2023-09-03 08:47:19 +10:00
Andrew Wong 7f779d2df8 Bump version to 2.7.14-SNAPSHOT 2023-09-03 08:47:16 +10:00
Andrew Wong ed3bd01f2a Fix bad release url
Fixes #19
2023-09-03 07:22:58 +10:00
Andrew Wong ef03501d1c 2.7.13 release 2023-08-30 22:09:28 +10:00
Andrew Wong feb35cfd37 User api for BlockBehaviourImpl 1.18 onwards 2023-08-30 22:08:50 +10:00
Andrew Wong b6a8dcc24c Fix module desc for paper 1.20 2023-08-30 20:23:05 +10:00
Andrew Wong 5619612a6e Update gradle wrapper 2023-08-28 23:10:54 +10:00
Andrew Wong 26ac52cc0a Include plugin adapters in jitpack build 2023-08-28 22:46:14 +10:00
Andrew Wong 5f6bd55afe Don't include nms impls if on jitpack 2023-08-28 22:34:28 +10:00
Andrew Wong aba2e12c5d Don't include nms impls if on jitpack 2023-08-28 22:26:28 +10:00
Andrew Wong 2906de11de Fix merge conflicts 2023-08-28 22:17:42 +10:00
Andrew Wong 436672f85b Don't shadowJar and don't include nms providers if building on jitpack 2023-08-28 22:12:09 +10:00
Andrew Wong 5ba8ed7ad8 Add spotbugs 2023-08-28 20:57:17 +10:00
Andrew Wong 00d97f1beb Update dependencies 2023-08-28 20:36:52 +10:00
Andrew Wong f530fa40af Fix signs not being saved on server stop 2023-08-28 20:14:12 +10:00
Andrew Wong a804df2257 Add jitpack logo 2023-08-09 14:08:12 +10:00
Andrew Wong c96e0b464e More jitpack tests 2023-08-09 13:58:44 +10:00
Andrew Wong 13e52aa4f1 More jitpack tests 2023-08-09 13:55:52 +10:00
Andrew Wong 9aeb531d16 More jitpack tests 2023-08-09 13:52:23 +10:00
Andrew Wong 44f83473d1 Add jitpack.yml 2023-08-09 13:46:05 +10:00
Andrew Wong d7260998f5 Update Guice to 7.0.0 and use JakartaEE annotations 2023-06-12 00:59:16 +10:00
Andrew Wong 638382eacf Snapshot 2.7.13 2023-06-12 00:58:34 +10:00
Andrew Wong e18fe99161 Release 2.7.12 2023-06-12 00:40:46 +10:00
Andrew Wong bdc9e32c13 Add support for 1.20 2023-06-12 00:40:08 +10:00
Andrew Wong 9a46d5ae3b Bump version to 2.7.12-SNAPSHOT 2023-03-29 16:14:26 +11:00
Andrew Wong 6795fc43d9 Release 2.7.11 2023-03-29 16:13:54 +11:00
Andrew Wong dd9bd2c434 Drop support for 1.19.3 and add support for 1.19.4 2023-03-29 16:13:23 +11:00
Andrew Wong 9438166180 Prepare for development 2.7.11 2023-02-27 21:58:41 +11:00
Andrew Wong 9e06b9f268 Release 2.7.10 2023-02-27 21:58:14 +11:00
Andrew Wong 4562bf23f6 Update libs 2023-02-27 21:57:49 +11:00
Andrew Wong 24edb01754 Refactor GeneralRegion#getOwner, #isOwner and #setOwner 2023-02-27 21:46:59 +11:00
Andrew Wong 2739bf6ad4 Fix javadocs for IFileManager 2023-02-27 21:41:28 +11:00
Andrew Wong 2ce84186ab Use Server#getOfflinePlayer in PlayerOfflinePlayerHelper 2023-02-27 21:39:48 +11:00
Andrew Wong 279fa001ea Only support 1.19.3 2023-02-27 11:56:41 +11:00
Andrew Wong b56d5320a6 Add support for 1.19.3 2022-12-15 16:25:06 +08:00
Andrew Wong 30665908b9 Bump to 2.7.10-SNAPSHOT 2022-12-09 16:53:03 +08:00
Andrew Wong 0fd384833a Bump version to 2.7.9 release 2022-12-09 16:45:57 +08:00
Andrew Wong 09634de4bf Fix BukkitSchedulerExecutor not having an injectable ctor 2022-12-07 12:13:34 +08:00
Andrew Wong 7fafee82a7 Minor cleanup 2022-12-07 11:59:37 +08:00
Andrew Wong 2899b2978c Rewrite SetownerCommand 2022-12-07 11:56:50 +08:00
Andrew Wong 7afcba79c9 Rewrite SetlandlordCommand 2022-12-07 11:53:44 +08:00
Andrew Wong 72084b38f8 Use OfflinePlayerHelper in MeCommand 2022-12-07 11:49:01 +08:00
Andrew Wong 6a291feedd Rewrite DelFriendCommand 2022-12-07 11:45:16 +08:00
Andrew Wong b85566882c Rewrite AddfriendCommand 2022-12-07 11:39:09 +08:00
Andrew Wong c14407e14b Add PaperPlatform 2022-12-07 01:23:12 +08:00
Andrew Wong ae9bd60d1b Fix typo 2022-09-14 21:25:04 +08:00
Andrew Wong c689c2fae0 Fix dependency versions for WG and WE, and add a section for FAWE 2022-09-14 21:24:48 +08:00
Andrew Wong 728cfb6dfa Add a compiling.md 2022-09-14 21:16:03 +08:00
Andrew Wong 3abb6c06e4 Update readme 2022-09-14 20:56:00 +08:00
Andrew Wong 51c11738af Prepare for snapshot development 2022-09-12 22:39:45 +08:00
116 changed files with 3745 additions and 2066 deletions

No files matched your search

+46 -20
View File
@@ -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,30 +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.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-19", "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()
}
@@ -60,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 {
@@ -87,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,6 +6,9 @@ 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.WorldEditInterface;
@@ -21,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;
@@ -45,11 +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.function.Supplier;
import java.util.logging.Level;
/**
* Main class for the AreaShop plugin.
@@ -65,7 +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 PlatformAdapter platformAdapter;
private MessageBridge messageBridge;
private IFileManager fileManager = null;
private LanguageManager languageManager = null;
@@ -167,18 +179,43 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
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) {
@@ -240,7 +277,8 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
return;
}
AreaShopModule asModule = new AreaShopModule(this, messageBridge, nms, 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
@@ -252,12 +290,13 @@ public final class AreaShop extends JavaPlugin implements AreaShopApi {
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
@@ -282,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://github.com/md5sha256/releases");
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);
}
@@ -350,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
@@ -374,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")
);
}
@@ -395,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() {
@@ -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,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.features.signs.RegionSign;
import me.wiefferink.areashop.features.signs.SignManager;
@@ -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;
@@ -53,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;
@@ -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,11 +43,10 @@ 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;
@@ -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;
@@ -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,6 +1,7 @@
package me.wiefferink.areashop.commands;
import me.wiefferink.areashop.AreaShop;
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 +9,6 @@ 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;
@@ -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;
@@ -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;
@@ -7,7 +7,7 @@ import io.github.bakedlibs.dough.blocks.BlockPosition;
import io.papermc.lib.PaperLib;
import me.wiefferink.areashop.AreaShop;
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;
@@ -3,6 +3,7 @@ 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;
@@ -52,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);
@@ -10,7 +10,7 @@ import me.wiefferink.areashop.events.notify.UpdateRegionEvent;
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;
@@ -36,7 +36,6 @@ import org.bukkit.event.world.ChunkLoadEvent;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -73,8 +72,8 @@ public class SignListener implements Listener {
@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();
}
@@ -64,7 +64,11 @@ public class SignManager extends Manager {
if (location == null || location.getWorld() == null) {
return Optional.empty();
}
return getCacheForWorld(location.getWorld()).flatMap(cache -> cache.removeSign(location));
return removeSign(new BlockPosition(location));
}
public Optional<RegionSign> removeSign(BlockPosition blockPosition) {
return getCacheForWorld(blockPosition.getWorld()).flatMap(cache -> cache.removeSign(blockPosition));
}
/**
@@ -73,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;
}
@@ -102,6 +107,7 @@ public class SignManager extends Manager {
public void shutdown() {
update();
this.signCacheMap.values().forEach(SignCache::clear);
this.signCacheMap.clear();
}
@@ -9,7 +9,7 @@ import me.wiefferink.areashop.MessageBridge;
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;
@@ -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;
@@ -53,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;
@@ -78,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;
@@ -90,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<>();
@@ -118,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();
}
@@ -466,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);
}
}
@@ -940,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()) {
@@ -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,5 +1,7 @@
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;
@@ -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;
@@ -6,60 +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.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 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 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.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(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);
@@ -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;
@@ -31,7 +32,6 @@ import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import javax.annotation.Nonnull;
import java.awt.geom.Area;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
@@ -43,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;
@@ -284,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
@@ -312,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();
}
@@ -435,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).
@@ -480,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();
}
}
@@ -493,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;
@@ -512,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);
@@ -532,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);
}
/**
@@ -630,58 +617,79 @@ 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;
}
return switch (variable) {
@@ -698,6 +706,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
case AreaShop.tagTeleportWorld -> tp.getWorld().getName();
default -> null;
};
}
}
}
@@ -735,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) {
@@ -1219,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());
}
@@ -1580,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);
}
/**
@@ -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);
}
}
}
@@ -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);
}
}
}
+21 -2
View File
@@ -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.
@@ -182,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|%'
+7 -5
View File
@@ -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).
+114 -114
View File
@@ -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."
+566
View File
@@ -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)."
+19 -2
View File
@@ -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%."
@@ -622,4 +639,4 @@ update-playerNotify:
- "[bold]Github[/bold]"
- " hover: %lang:action|Go to the AreaShop Github Releases|%"
- " link: https://github.com/md5sha256/releases"
- " (and leave a review)."
- " (and leave a review)."
+120 -120
View File
@@ -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."
+124 -124
View File
@@ -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)."
+124 -124
View File
@@ -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)."
+98 -98
View File
@@ -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%."
+124 -124
View File
@@ -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)."
+118 -118
View File
@@ -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/"
- " (И оставить отзыв)."
+105 -105
View File
@@ -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%."
+114 -114
View File
@@ -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."
+1 -1
View File
@@ -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:
+21 -32
View File
@@ -1,6 +1,8 @@
![AreaShop logo](https://cloud.githubusercontent.com/assets/6951068/9471294/f016d8ee-4b4f-11e5-9bda-d61b1c423ebb.png)<br/>
[![](https://jitpack.io/v/md5sha256/AreaShop.svg)](https://jitpack.io/#md5sha256/AreaShop)
<br>
**Usage and configuration:**
[►Download (releases)](https://github.com/NLthijs48/AreaShop/releases)&nbsp;&nbsp;
[►Download (releases)](https://github.com/md5sha256/AreasShop/releases)&nbsp;&nbsp;
[►Commands and Permissions](https://github.com/NLthijs48/AreaShop/wiki/Commands-and-Permissions)
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[►Basic regions setup](https://github.com/NLthijs48/AreaShop/wiki/Basic-regions-setup)&nbsp;&nbsp;
@@ -14,11 +16,10 @@
[►Frequently Asked Questions](https://github.com/NLthijs48/AreaShop/wiki/Frequently-Asked-Questions)&nbsp;&nbsp;
[►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)&nbsp;&nbsp;
[►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)&nbsp;&nbsp;
[►Open issues](https://github.com/md5sha256/AreasShop/issues)<br/>
**Development:**
[►Changelog](https://github.com/NLthijs48/AreaShop/blob/master/changelog.md)&nbsp;&nbsp;
[►Compiling](https://github.com/NLthijs48/AreaShop/wiki/Compiling-AreaShop)&nbsp;&nbsp;
[►Compiling](https://github.com/md5sha256/AreaShop/tree/dev/bleeding/documentation/compiling.md)&nbsp;&nbsp;
[►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/)&nbsp;&nbsp;
[►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
* ![rented-sign](https://cloud.githubusercontent.com/assets/6951068/21939029/3844896a-d9be-11e6-8492-7a23ec71fce2.png)
* 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).
* ![region-information-message](https://cloud.githubusercontent.com/assets/6951068/21939161/bff2fe3c-d9be-11e6-802f-4a0bce073c64.png)
* 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/>
[![Tutorial Video](https://cloud.githubusercontent.com/assets/6951068/9532788/147526cc-4d0e-11e5-9672-1274faae280a.png)](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).
![Transifex-translation-progress](https://transifex.com/projects/p/areashop/resource/enyml/chart/image_png)
[![Discord-support-chat](https://discordapp.com/api/v6/guilds/342592311122853893/widget.png?style=banner3)](https://discord.gg/84kGMCQ)
[![Donate through PayPal to support development](https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif)](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)
}
@@ -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;
@@ -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;
}
}
@@ -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.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"))
}
}
@@ -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());
}
}
@@ -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;
}
}
@@ -1,21 +0,0 @@
plugins.apply("io.papermc.paperweight.userdev")
dependencies {
paperDevBundle("1.19.2-R0.1-SNAPSHOT")
compileOnly(projects.areashopInterface)
compileOnly(projects.areashopNms)
}
description = "AreaShop NMS Helper 1-19"
tasks {
assemble {
dependsOn("reobfJar")
}
named("reobfJar", io.papermc.paperweight.tasks.RemapJar::class) {
outputJar.set(file("build/libs/${project.name}-${project.version}.jar"))
}
}
@@ -1,46 +0,0 @@
package me.wiefferink.areashop.adapters.platform.v1_19_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_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_19_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());
}
}
@@ -1,15 +0,0 @@
package me.wiefferink.areashop.adapters.platform.v1_19_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;
}
}
@@ -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 {
}
@@ -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());
}
}
@@ -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;
}
}
+6
View File
@@ -0,0 +1,6 @@
description = "AreaShop Paper Helper"
dependencies {
compileOnlyApi(libs.paper)
compileOnlyApi(projects.adapters.platform.platformInterface)
}
@@ -0,0 +1,44 @@
package me.wiefferink.areashop.adapters.platform.paper;
import com.destroystokyo.paper.profile.PlayerProfile;
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.plugin.Plugin;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public class PaperOfflinePlayerHelper implements OfflinePlayerHelper {
private final Plugin plugin;
private final Server server;
public PaperOfflinePlayerHelper(Plugin plugin) {
this.plugin = plugin;
this.server = plugin.getServer();
}
@Override
public CompletableFuture<Optional<UUID>> lookupUuidAsync(String username) {
final PlayerProfile profile = this.server.createProfile(username);
final CompletableFuture<Optional<UUID>> future = new CompletableFuture<>();
this.server.getScheduler().runTaskAsynchronously(this.plugin, () -> {
profile.complete(false);
future.complete(Optional.ofNullable(profile.getId()));
});
return future;
}
@Override
public CompletableFuture<OfflinePlayer> lookupOfflinePlayerAsync(String username) {
final CompletableFuture<OfflinePlayer> future = new CompletableFuture<>();
this.server.getScheduler().runTaskAsynchronously(this.plugin, () -> {
@SuppressWarnings("deprecation")
OfflinePlayer offlinePlayer = plugin.getServer().getOfflinePlayer(username);
future.complete(offlinePlayer);
});
return future;
}
}
@@ -0,0 +1,20 @@
package me.wiefferink.areashop.adapters.platform.paper;
import me.wiefferink.areashop.adapters.platform.OfflinePlayerHelper;
import me.wiefferink.areashop.adapters.platform.MinecraftPlatform;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
public class PaperPlatform implements MinecraftPlatform {
private final OfflinePlayerHelper offlinePlayerHelper;
public PaperPlatform(@NotNull Plugin plugin) {
this.offlinePlayerHelper = new PaperOfflinePlayerHelper(plugin);
}
@Override
public OfflinePlayerHelper offlinePlayerHelper() {
return this.offlinePlayerHelper;
}
}
Loaded 100 of 116 files, more files were not shown because too many files have changed in this diff. Show more