diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a02dc44d..3c599c7f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,176 +1,169 @@ name: Bug report -description: Create a report to help us improve +description: Report a reproducible problem with zEssentials labels: bug assignees: Maxlego08 body: - type: markdown attributes: value: | - ## READ AND FOLLOW THE DESCRIPTIONS OF THIS ISSUE TEMPLATE! - Not doing so may result in your issue being closed without warning. Take your time and properly fill out everything as requested. - We advise you to put a maximum of image and video to better understand your problem. + Thanks for reporting a problem with zEssentials. Please fill out the fields below so we can reproduce it. + zEssentials requires Paper or a compatible fork on Minecraft 1.21.4 or newer, with a supported NMS module. + For setup help, use [Discord](https://discord.groupez.dev/). Report duplication bugs and exploits privately there, not in a public issue. - type: checkboxes id: searched attributes: - label: Terms + label: Before reporting options: - - label: "I'm using the very latest version of zEssentials and its dependencies (zMenu and PlaceholdersAPI)." + - label: "I am using the latest zEssentials release and compatible versions of zMenu and PlaceholderAPI." required: true - - label: "I am sure this is a bug and it is not caused by a misconfiguration or by another plugin." + - label: "I have searched the [existing issues](https://github.com/Maxlego08/zEssentials/issues?q=is%3Aissue) and found no report of this problem." required: true - - label: "I've looked for already existing issues on the [Issue Tracker](https://github.com/Maxlego08/zEssentials/issues) and haven't found any." - required: true - - label: "I already searched on the [plugin wiki](https://zessentials.groupez.dev/) to know if a solution is already known." - required: true - - label: "I already searched on the [discord](https://discord.groupez.dev/) to check if anyone already has a solution for this." - required: true - - label: "I tested this with just zEssentials and its dependencies and with a vanilla client of the same version as the Server." - required: true - - label: "I enabled the debug mode in config.yml and sql debug" + - label: "I have checked the [documentation](https://zessentials.groupez.dev/) for the affected feature." required: true - type: input id: discord_tag attributes: - label: Discord Username (optional) - description: So I can contact you quickly. - placeholder: ex. mydiscord123 - validations: - required: false + label: Discord username (optional) + description: Your username if you would like us to contact you on Discord. - type: dropdown id: server_version attributes: - label: Server Version + label: Minecraft version + description: Select the server version, not the client version. Only versions with an NMS module are listed. options: - - 1.21.4 - - 1.21.3 - - 1.21.2 - - 1.21.1 - - 1.21 - - 1.20.6 - - 1.20.4 + - "26.3" + - "26.2" + - "1.21.11" + - "1.21.10" + - "1.21.9" + - "1.21.8" + - "1.21.7" + - "1.21.6" + - "1.21.5" + - "1.21.4" validations: required: true - type: textarea id: server_software attributes: - label: Server Software - description: "run `/version` command and paste it here" - placeholder: | - Run `/version` command and paste it here - - Example: - This server is running Paper version git-Paper-130 (MC: 1.21) (Implementing API version 1.21-R0.1-SNAPSHOT)" + label: Server software and build + description: "Paste the full output of `/version`, including the server software and build number." + placeholder: "Full /version output" + validations: + required: true + - type: input + id: java_version + attributes: + label: Server Java version + description: "Use the version shown in the server startup log or hosting panel. Minecraft 26.x requires Java 25." + placeholder: "Java version used to run the server" validations: required: true - type: textarea id: plugin_version attributes: - label: zEssentials Version - description: "Execute `/version zEssentials` and paste the output here." - placeholder: | - Run `/version zEssentials` in your server and paste the output here. - DO NOT PUT "LATEST". DOING SO WILL GET YOUR ISSUE CLOSED! - - Example: - zEssentials version 1.0.0.6 + label: zEssentials version + description: "Paste the full output of `/version zEssentials`. For a custom build, include the branch and commit. Do not write 'latest'." + placeholder: "Full /version zEssentials output" validations: required: true - type: textarea id: zmenu_version attributes: - label: zMenu Version - description: "Execute `/version zMenu` and paste the output here." - placeholder: | - Run `/version zMenu` in your server and paste the output here. - DO NOT PUT "LATEST". DOING SO WILL GET YOUR ISSUE CLOSED! - - Example: - zMenu version 1.0.3.4 + label: zMenu version + description: "Paste the full output of `/version zMenu`. Do not write 'latest'." + placeholder: "Full /version zMenu output" + validations: + required: true + - type: textarea + id: placeholderapi_version + attributes: + label: PlaceholderAPI version + description: "Paste the full output of `/version PlaceholderAPI`. Do not write 'latest'." + placeholder: "Full /version PlaceholderAPI output" + validations: + required: true + - type: dropdown + id: storage_type + attributes: + label: Storage type + description: "Select the `storage-type` configured in zEssentials/config.yml." + options: + - "SQLITE" + - "MYSQL" + - "MARIADB" + - "HIKARICP" + - "JSON" + validations: + required: true + - type: dropdown + id: reproduction_environment + attributes: + label: Reproduction environment + description: If possible, try with only zEssentials, zMenu and PlaceholderAPI on Paper, using a vanilla client matching the server version. + options: + - "Reproduces with only zEssentials and its required dependencies" + - "Only reproduces with additional plugins, datapacks or client modifications" + - "Not tested with only the required dependencies" validations: required: true - type: textarea id: what-happened attributes: label: What happened? - description: A clear and concise description of what the bug is. - placeholder: "Example: The command /gamemode creative does not put me in creative" + description: Describe the actual behavior and the affected command or module. + validations: + required: true + - type: textarea + id: expected_behavior + attributes: + label: What did you expect to happen? + description: Describe the expected result. validations: required: true - type: textarea id: steps attributes: - label: Steps to reproduce the issue - description: Describe how to reproduce the issue step by step + label: Steps to reproduce + description: Include exact commands, relevant settings and item or enchantment identifiers. Mention whether the target player is online and whether the problem follows a reload or restart. placeholder: | - 1. Go to '...' - 2. Click on '....' - 3. Scroll down to '....' - 4. See error + 1. Configure... + 2. Run... + 3. Observe... validations: required: true - type: input id: full_server_log attributes: - label: Full Server Log - description: |- - Upload your latest.log file to [mclo.gs](https://mclo.gs) and share the generated URL here. - Sensitive info such as IPs will automatically be censored for your privacy. + label: latest.log (mclo.gs link) + description: | + Enable `enable-debug: true` in zEssentials/config.yml before reproducing; for database problems, also enable `database-configuration.debug`. + 1. Open [mclo.gs](https://mclo.gs/). + 2. Upload your server's `logs/latest.log` file, including startup and reproduction of the problem. + 3. Save the log on mclo.gs and paste the generated link in the field below. + Review the log for sensitive information before sharing it and disable debug logging afterwards. placeholder: "https://mclo.gs/..." validations: required: true - type: textarea id: errors attributes: - label: Error (optional) - description: "Paste any errors you have here. Text pasted here will be formatted as code. This allows us to see the problem directly without having to search in the logs." - render: shell - placeholder: | - [16:59:59 WARN]: java.sql.SQLException: Failed to execute upsert: No operations allowed after statement closed. - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.libs.sarah.requests.UpsertRequest.execute(UpsertRequest.java:82) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.libs.sarah.SchemaBuilder.execute(SchemaBuilder.java:605) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.storage.database.Repository.upsert(Repository.java:38) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.storage.database.repositeries.UserEconomyRepository.upsert(UserEconomyRepository.java:21) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.storage.storages.SqlStorage.lambda$updateEconomy$4(SqlStorage.java:215) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.zutils.utils.StorageHelper.lambda$async$0(StorageHelper.java:31) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.libs.folialib.impl.SpigotImplementation.lambda$runAsync$1(SpigotImplementation.java:51) - [16:59:59 WARN]: at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:88) - [16:59:59 WARN]: at org.bukkit.craftbukkit.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) - [16:59:59 WARN]: at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) - [16:59:59 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - [16:59:59 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - [16:59:59 WARN]: at java.base/java.lang.Thread.run(Thread.java:1583) - [16:59:59 WARN]: Caused by: java.sql.SQLException: No operations allowed after statement closed. - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:81) - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:55) - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:65) - [16:59:59 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:73) - [16:59:59 WARN]: at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1404) - [16:59:59 WARN]: at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1408) - [16:59:59 WARN]: at com.mysql.cj.jdbc.ClientPreparedStatement.setObject(ClientPreparedStatement.java:1682) - [16:59:59 WARN]: at zEssentials-1.0.0.4.jar//fr.maxlego08.essentials.libs.sarah.requests.UpsertRequest.execute(UpsertRequest.java:76) - [16:59:59 WARN]: ... 12 more - [16:59:59 WARN]: Caused by: com.mysql.cj.exceptions.StatementIsClosedException: No operations allowed after statement closed. - [16:59:59 WARN]: at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) - [16:59:59 WARN]: at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) - [16:59:59 WARN]: at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) - [16:59:59 WARN]: at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:52) - [16:59:59 WARN]: at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:76) - [16:59:59 WARN]: at com.mysql.cj.jdbc.StatementImpl.checkClosed(StatementImpl.java:352) - [16:59:59 WARN]: at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1390) - [16:59:59 WARN]: ... 15 more + label: Relevant errors (optional) + description: Paste the complete error and stack trace, if any. This does not replace the full server log. + render: text - type: textarea id: configuration_files attributes: - label: Other files, you can drag and drop them here to upload. (optional) - description: "Drag and drop your files here. Be careful not to upload a file that contains passwords or url of discord webhook" + label: Relevant configuration and integrations (optional) + description: | + Paste the relevant configuration or attach the affected files. Include related plugins, datapacks and client modifications with their versions. + For custom items or enchantments, include their identifiers and the plugin or datapack providing them. Mention REDIS or proxy setups when relevant. + Remove database credentials, tokens, webhook URLs and other secrets before sharing files. - type: textarea id: screenshots attributes: - label: Screenshots/Videos (you can drag and drop files or paste links) - description: "If applicable, add screenshots to help explain your problem (you can drag and drop files or paste links)." + label: Screenshots or videos (optional) + description: Attach images or a video if they help show the problem. - type: markdown attributes: - value: | - ## Thanks for taking the time to fill out this bug report! + value: Thanks for taking the time to provide a complete bug report! diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9f78ca24..12587a83 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,14 +1,14 @@ blank_issues_enabled: false contact_links: - - name: Report duplication bugs and exploits + - name: Report duplication bugs and exploits privately url: https://discord.groupez.dev/ - about: DO NOT REPORT DUPLICATION BUGS ON GITHUB! - - name: Discord server + about: Contact the team on Discord. Do not publish duplication bugs or exploits in a public issue. + - name: Discord support url: https://discord.groupez.dev/ - about: My personal Discord server - - name: zEssentials Documentation + about: Ask for setup help and discuss zEssentials with the community. + - name: zEssentials documentation url: https://zessentials.groupez.dev/ - about: Official wiki of zEssentials - - name: zEssentials Spigot page + about: Read the documentation for commands, modules, permissions and configuration. + - name: zEssentials SpigotMC page url: https://www.spigotmc.org/resources/118014/ - about: Official SpigotMC.org page of zEssentials + about: Download zEssentials and read the release information. Paper is required to run the plugin. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 0c74e3b3..749ccab2 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,53 +1,52 @@ name: Feature request -description: Suggest an idea for this project +description: Suggest an improvement to zEssentials labels: enhancement assignees: Maxlego08 body: - type: markdown attributes: value: | - ## READ AND FOLLOW THE DESCRIPTIONS OF THIS ISSUE TEMPLATE! - Not doing so may result in your issue being closed without warning. Take your time and properly fill out everything as requested. - We advise you to put a maximum of image and video to better understand your problem. + Thanks for suggesting an improvement to zEssentials. Describe the use case and how the feature would fit the plugin. + zEssentials targets Paper and compatible forks, starting at Minecraft 1.21.4. Mention any version-specific requirements. + For configuration help, use [Discord](https://discord.groupez.dev/). - type: checkboxes id: searched attributes: - label: Terms + label: Before suggesting options: - - label: "I'm using the very latest version of zEssentials and its dependencies (zMenu and PlaceholdersAPI)." + - label: "I have searched the [existing issues](https://github.com/Maxlego08/zEssentials/issues?q=is%3Aissue) and found no matching suggestion." required: true - - label: "I already searched on this [Github page](https://github.com/Maxlego08/zEssentials/issues) to check if the same suggestion was already reported." - required: true - - label: "I already searched on the [plugin wiki](https://zessentials.groupez.dev/) to know if a solution is already known." - required: true - - label: "I already searched on the [discord](https://discord.groupez.dev/) to check if anyone already has a solution for this or if the feature was already suggested." + - label: "I have checked the [documentation](https://zessentials.groupez.dev/) and this feature is not already available." required: true - type: input id: discord_tag attributes: - label: Discord Username (optional) - description: So I can contact you quickly. - placeholder: ex. mydiscord123 + label: Discord username (optional) + description: Your username if you would like us to contact you on Discord. + - type: textarea + id: use_case + attributes: + label: What problem would this solve? + description: Describe a concrete use case and who would benefit from the feature. validations: - required: false + required: true - type: textarea id: description attributes: - label: "Describe your suggestions" - placeholder: "A clear and concise description of what you want to happen." + label: Describe your suggestion + description: Explain the expected behavior, affected module or commands, and any relevant permissions or configuration. Include an example of how it would be used. validations: - required: true + required: true - type: textarea id: alternatives attributes: - label: "Describe alternatives you've considered (Optional)" - placeholder: "A clear and concise description of any alternative solutions or features you've considered. (others plugins/configurations)" + label: Alternatives considered (optional) + description: Describe any existing settings, workarounds or other plugins you have considered, and why they do not cover the use case. - type: textarea id: additional_context attributes: - label: "Additional context (Optional)" - placeholder: "Add any other context or screenshots about the feature request here." + label: Additional context (optional) + description: Add screenshots, examples or links that help explain the suggestion. Include Minecraft versions or third-party plugin details if the feature depends on them. - type: markdown attributes: - value: | - ## Thanks for taking the time to fill out this suggestion page! + value: Thanks for taking the time to describe your suggestion! diff --git a/.gitignore b/.gitignore index cc57a315..58bc0397 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ target-api/ # IntelliJ out/ +!**/src/main/**/out/ +!**/src/test/**/out/ # mpeltonen/sbt-idea plugin .idea_modules/ @@ -112,15 +114,49 @@ gradle-app.setting .gradletasknamecache **/build/ +!**/src/main/**/build/ +!**/src/test/**/build/ # Common working directory run/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar +!gradle/wrapper/gradle-wrapper.jar !**/libs/*.jar CLAUDE.md .claude updates.md AGENTS.md prompt-cmi-parity.md + +# Kotlin +.kotlin/ + +# Eclipse +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +# NetBeans +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +# VS Code +.vscode/ + +# Local development tools and notes +opencode.json +build-and-deploy.sh +GEMINI.md +TODO.md +docs/triage-issues.md diff --git a/API/build.gradle.kts b/API/build.gradle.kts index 09214250..1299e914 100644 --- a/API/build.gradle.kts +++ b/API/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("re.alwyn974.groupez.publish") version "1.0.0" + alias(libs.plugins.groupez.publish) } rootProject.extra.properties["sha"]?.let { sha -> @@ -7,12 +7,12 @@ rootProject.extra.properties["sha"]?.let { sha -> } dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") - compileOnly(files("../libs/zMenu-1.1.1.6.jar")) + compileOnly(libs.paper.api) + compileOnly(files("../libs/zMenu-1.1.2.0.jar")) - implementation("fr.maxlego08.sarah:sarah:1.23") - implementation("com.tcoded:FoliaLib:0.5.1") - implementation("fr.mrmicky:fastboard:2.2.2") + implementation(libs.sarah) + implementation(libs.folialib) + implementation(libs.fastboard) } tasks { diff --git a/API/src/main/java/fr/maxlego08/essentials/api/discord/DiscordConfiguration.java b/API/src/main/java/fr/maxlego08/essentials/api/discord/DiscordConfiguration.java index 3a6094ba..2aba829c 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/discord/DiscordConfiguration.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/discord/DiscordConfiguration.java @@ -1,7 +1,6 @@ package fr.maxlego08.essentials.api.discord; import fr.maxlego08.essentials.api.functionnals.ReturnConsumer; -import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; diff --git a/API/src/main/java/fr/maxlego08/essentials/api/enchantment/Enchantments.java b/API/src/main/java/fr/maxlego08/essentials/api/enchantment/Enchantments.java index cbebf4b5..66fc56ce 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/enchantment/Enchantments.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/enchantment/Enchantments.java @@ -1,31 +1,49 @@ package fr.maxlego08.essentials.api.enchantment; +import org.bukkit.enchantments.Enchantment; + import java.util.List; import java.util.Optional; /** - * Interface for managing custom enchantments in the plugin. - * Provides methods to retrieve, register, and list available enchantments. + * Provides access to enchantments registered on the server, including datapack and plugin enchantments. */ public interface Enchantments { /** - * Retrieves an enchantment by its name. + * Retrieves an enchantment by its namespaced key. + * Keys without a namespace use the Minecraft namespace. * - * @param enchantment the name of the enchantment + * @param enchantment the key of the enchantment * @return an {@link Optional} containing the enchantment if found, otherwise empty */ + default Optional getEnchantment(String enchantment) { + return getEnchantments(enchantment).map(EssentialsEnchantment::enchantment); + } + + /** + * Retrieves an enchantment using the legacy wrapper. + * + * @param enchantment the key of the enchantment + * @return an {@link Optional} containing the wrapper if found, otherwise empty + * @deprecated Use {@link #getEnchantment(String)} to retrieve the Bukkit enchantment directly. + */ + @Deprecated Optional getEnchantments(String enchantment); /** - * Registers all custom enchantments within the plugin. + * Retained for compatibility; zEssentials reads enchantments directly from the server registry. + * + * @deprecated Registration is no longer required. This method has no effect in zEssentials. */ + @Deprecated void register(); /** - * Retrieves a list of all registered enchantments' names. + * Retrieves the identifiers of all enchantments registered on the server. + * The Minecraft namespace is omitted; custom namespaces are preserved. * - * @return a list of enchantment names + * @return a sorted list of enchantment identifiers */ List getEnchantments(); } diff --git a/API/src/main/java/fr/maxlego08/essentials/api/enchantment/EssentialsEnchantment.java b/API/src/main/java/fr/maxlego08/essentials/api/enchantment/EssentialsEnchantment.java index 87789201..8cda2625 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/enchantment/EssentialsEnchantment.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/enchantment/EssentialsEnchantment.java @@ -5,23 +5,26 @@ import java.util.List; /** - * Interface representing a custom enchantment in the plugin. - * Provides methods to retrieve the underlying enchantment and its associated aliases. + * Legacy wrapper for a registered enchantment. + * + * @deprecated Use {@link Enchantment} and {@link Enchantments#getEnchantment(String)} directly. */ +@Deprecated public interface EssentialsEnchantment { /** - * Retrieves the underlying Bukkit Enchantment associated with this custom enchantment. + * Retrieves the underlying Bukkit enchantment. * - * @return the {@link Enchantment} associated with this custom enchantment + * @return the enchantment */ Enchantment enchantment(); /** - * Retrieves the list of aliases for this custom enchantment. - * Aliases are alternative names that can be used to refer to the enchantment. + * Retrieves the identifiers associated with this wrapper. + * Wrappers returned by zEssentials contain only the canonical identifier; + * the legacy enchantment aliases are no longer supported. * - * @return a list of aliases for the enchantment + * @return the enchantment identifiers */ List aliases(); } diff --git a/API/src/main/java/fr/maxlego08/essentials/api/hologram/HologramManager.java b/API/src/main/java/fr/maxlego08/essentials/api/hologram/HologramManager.java index 2b471f5f..4ed9c16e 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/hologram/HologramManager.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/hologram/HologramManager.java @@ -4,7 +4,6 @@ import fr.maxlego08.essentials.api.hologram.configuration.HologramConfiguration; import fr.maxlego08.essentials.api.modules.Module; import fr.maxlego08.essentials.api.utils.SafeLocation; -import org.bukkit.Location; import org.bukkit.entity.Player; import java.io.File; diff --git a/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/BlockHologramConfiguration.java b/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/BlockHologramConfiguration.java index 2a1bf63c..20283ad7 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/BlockHologramConfiguration.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/BlockHologramConfiguration.java @@ -2,8 +2,6 @@ import org.bukkit.Material; -import org.bukkit.Material; - /** * This class represents the configuration settings for a block hologram. * It extends the {@link HologramConfiguration} class to include properties diff --git a/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/ItemHologramConfiguration.java b/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/ItemHologramConfiguration.java index 2a927c75..0c167598 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/ItemHologramConfiguration.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/hologram/configuration/ItemHologramConfiguration.java @@ -4,9 +4,6 @@ import org.bukkit.entity.ItemDisplay; import org.bukkit.inventory.ItemStack; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - /** * This class represents the configuration settings for an item hologram. * It extends the {@link HologramConfiguration} class to include additional properties diff --git a/API/src/main/java/fr/maxlego08/essentials/api/messages/Message.java b/API/src/main/java/fr/maxlego08/essentials/api/messages/Message.java index c62f5f4e..660598dc 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/messages/Message.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/messages/Message.java @@ -15,15 +15,15 @@ public enum Message { PREFIX("zEssentials • "), CONSOLE("Console"), EXPIRED("Expired"), - PLAYER_NOT_FOUND("&f%player% was not found."), - MODULE_DISABLE("The &f%name% module is disabled. You cannot use this command."), + PLAYER_NOT_FOUND("%player% was not found."), + MODULE_DISABLE("The %name% module is disabled. You cannot use this command."), RULES( - "#ffd353ℹ sᴇʀᴠᴇʀ ʀᴜʟᴇs#3f3f3f:", - "#3f3f3f• &7Respect all players and staff.", - "#3f3f3f• &7No grieging or stealing.", - "#3f3f3f• &7No cheating or hacking.", - "#3f3f3f• &7Keep chat clean and respectful.", - "#3f3f3f• &7No spamming or advertising." + "ℹ sᴇʀᴠᴇʀ ʀᴜʟᴇs:", + "• Respect all players and staff.", + "• No grieging or stealing.", + "• No cheating or hacking.", + "• Keep chat clean and respectful.", + "• No spamming or advertising." ), FORMAT_SECOND(" second"), @@ -38,148 +38,148 @@ public enum Message { FORMAT_DAY(" d"), FORMAT_DAYS(" days"), - COMMAND_SYNTAX_ERROR("You must execute the command like this&7: %syntax%"), + COMMAND_SYNTAX_ERROR("You must execute the command like this: %syntax%"), COMMAND_NO_PERMISSION("You do not have permission to run this command."), COMMAND_NO_CONSOLE("Only one player can execute this command."), COMMAND_NO_ARG("Impossible to find the command with its arguments."), COMMAND_RESTRICTED("You cannot use this command here."), - COMMAND_SYNTAXE_HELP("&f%syntax% &7» &7%description%"), + COMMAND_SYNTAXE_HELP("%syntax% » %description%"), COMMAND_RELOAD("You have just reloaded the configuration files."), - COMMAND_RELOAD_MODULE("You have just reloaded the configuration files of the module &f%module%."), - COMMAND_RELOAD_ERROR("&f%module% was not found !"), + COMMAND_RELOAD_MODULE("You have just reloaded the configuration files of the module %module%."), + COMMAND_RELOAD_ERROR("%module% was not found !"), COMMAND_ESSENTIALS("zEssentials, version %version%"), - COMMAND_GAMEMODE("&fSet game mode&e %gamemode% &ffor &b%player%&f."), + COMMAND_GAMEMODE("Set game mode %gamemode% for %player%."), COMMAND_GAMEMODE_INVALID("You need to specify a valid player."), COMMAND_TIME_ERROR("You need to specify a world."), - COMMAND_TIME_ALREADY_CHANGING("Time is already changing in &f%world%."), - COMMAND_DAY("&fYou have just brought &edaylight&f into the world %world%&f."), - COMMAND_NIGHT("&fYou have just brought &enightfall&f into the world %world%&f."), - COMMAND_SUN("&fYou have just brought the &esun&f into the world %world%&f."), - COMMAND_ENDERSEE_ERROR("Unable to load the ender chest of &f%player%."), - COMMAND_TOP("&7You've just been teleported to &etop&7."), - COMMAND_BOTTOM("&7You've just been teleported to &ebottom&7."), + COMMAND_TIME_ALREADY_CHANGING("Time is already changing in %world%."), + COMMAND_DAY("You have just brought daylight into the world %world%."), + COMMAND_NIGHT("You have just brought nightfall into the world %world%."), + COMMAND_SUN("You have just brought the sun into the world %world%."), + COMMAND_ENDERSEE_ERROR("Unable to load the ender chest of %player%."), + COMMAND_TOP("You've just been teleported to top."), + COMMAND_BOTTOM("You've just been teleported to bottom."), COMMAND_BOTTOM_ERROR("Unable to find a position to transport you safely."), COMMAND_TOP_ERROR("Unable to find a position to transport you safely."), COMMAND_SPEED_INVALID("You need to specify a valid player."), - COMMAND_SPEED_FLY("&7You have just set your &nfly&r&7 speed to &f%speed%&7 for &f%player%&7. &8(&f2 &7by default&8)"), - COMMAND_SPEED_WALK("&7You have just set your &nwalk&r&7 speed to &f%speed%&7 for &f%player%&7. &8(&f2 &7by default&8)"), - COMMAND_SPEED_ERROR("You must enter a number between &60 and &610. &8(&f2 &7by default&8)"), + COMMAND_SPEED_FLY("You have just set your fly speed to %speed% for %player%. (2 by default)"), + COMMAND_SPEED_WALK("You have just set your walk speed to %speed% for %player%. (2 by default)"), + COMMAND_SPEED_ERROR("You must enter a number between 0 and 10. (2 by default)"), COMMAND_FLY_ERROR_WORLD("You can’t fly in this world."), - COMMAND_FLY_ENABLE("&7Flight mode enable &7for &f%player%."), - COMMAND_FLY_ENABLE_SECONDS("&7Flight mode enable &7for &f%player%. &8(&7time remaining %time%&8)"), - COMMAND_FLY_DISABLE("&7Flight mode disable &7for &f%player%."), + COMMAND_FLY_ENABLE("Flight mode enable for %player%."), + COMMAND_FLY_ENABLE_SECONDS("Flight mode enable for %player%. (time remaining %time%)"), + COMMAND_FLY_DISABLE("Flight mode disable for %player%."), COMMAND_FLY_ERROR("You have no more fly time available."), COMMAND_FLY_END("You have used up your entire flight time, you can no longer fly"), COMMAND_FLY_ERROR_OTHER("%player% has no more flight time available."), - COMMAND_FLY_ADD("You just added %time% of fly time to &f%player%."), - COMMAND_FLY_GET("%player%&8: &f%player%."), + COMMAND_FLY_ADD("You just added %time% of fly time to %player%."), + COMMAND_FLY_GET("%player%: %player%."), COMMAND_FLY_INFO_EMPTY("You do not have time to fly available."), - COMMAND_FLY_INFO("You have &f%time%."), - COMMAND_FLY_REMOVE("You just removed %time% of fly time to &f%player%."), - COMMAND_FLY_SET("You just set %time% of fly time to &f%player%."), - COMMAND_FLY_REMAINING("You have &f%time% remaining flight time."), - COMMAND_GOD_ENABLE("&7God mode enable &7for &f%player%."), - COMMAND_GOD_DISABLE("&7God mode disable &7for &f%player%."), - COMMAND_VANISH_ENABLE("&7Vanish enable &7for &f%player%."), - COMMAND_VANISH_DISABLE("&7Vanish disable &7for &f%player%."), - COMMAND_NIGHT_VISION_ENABLE("&7Night vision enable &7for &f%player%."), - COMMAND_NIGHT_VISION_DISABLE("&7Night vision disable &7for &f%player%."), - COMMAND_PHANTOMS_ENABLE("&7Phantom spawning enable &7for &f%player%."), - COMMAND_PHANTOMS_DISABLE("&7Phantom spawning disable &7for &f%player%."), - COMMAND_EXT_SENDER("&7You just extinguished the player &f%player%&7."), + COMMAND_FLY_INFO("You have %time%."), + COMMAND_FLY_REMOVE("You just removed %time% of fly time to %player%."), + COMMAND_FLY_SET("You just set %time% of fly time to %player%."), + COMMAND_FLY_REMAINING("You have %time% remaining flight time."), + COMMAND_GOD_ENABLE("God mode enable for %player%."), + COMMAND_GOD_DISABLE("God mode disable for %player%."), + COMMAND_VANISH_ENABLE("Vanish enable for %player%."), + COMMAND_VANISH_DISABLE("Vanish disable for %player%."), + COMMAND_NIGHT_VISION_ENABLE("Night vision enable for %player%."), + COMMAND_NIGHT_VISION_DISABLE("Night vision disable for %player%."), + COMMAND_PHANTOMS_ENABLE("Phantom spawning enable for %player%."), + COMMAND_PHANTOMS_DISABLE("Phantom spawning disable for %player%."), + COMMAND_EXT_SENDER("You just extinguished the player %player%."), COMMAND_EXT_RECEIVER("You are no longer burning."), COMMAND_EXT_ERROR("You cannot extinguish someone who is dead!"), - COMMAND_HEAL_ALL("&7You just healed all players on the server."), - COMMAND_HEAL_SENDER("&7You just healed the player &f%player%&7."), + COMMAND_HEAL_ALL("You just healed all players on the server."), + COMMAND_HEAL_SENDER("You just healed the player %player%."), COMMAND_HEAL_RECEIVER("You have been healed."), COMMAND_HEAL_ERROR("You cannot heal someone who is dead !"), - COMMAND_LIGHTING_ALL("&7You just struck all players with lightning."), - COMMAND_LIGHTING("&7You just summoned lightning at the targeted location."), - COMMAND_LIGHTING_SENDER("&7You just summoned lightning at the location of &f%player%&7."), - COMMAND_LIGHTING_RECEIVER("&cYou have been struck by lightning."), + COMMAND_LIGHTING_ALL("You just struck all players with lightning."), + COMMAND_LIGHTING("You just summoned lightning at the targeted location."), + COMMAND_LIGHTING_SENDER("You just summoned lightning at the location of %player%."), + COMMAND_LIGHTING_RECEIVER("You have been struck by lightning."), COMMAND_LIGHTING_ERROR("You cannot strike a dead player with lightning!"), - COMMAND_FEED_ALL("&7You just feed all players on the server."), - COMMAND_FEED_SENDER("&7You just feed the player &f%player%&7."), + COMMAND_FEED_ALL("You just feed all players on the server."), + COMMAND_FEED_SENDER("You just feed the player %player%."), COMMAND_FEED_RECEIVER("You have been feed."), COMMAND_FEED_ERROR("You cannot feed someone who is dead !"), - COMMAND_AFK_ENABLE("&7You are now marked as AFK&7."), + COMMAND_AFK_ENABLE("You are now marked as AFK."), COMMAND_AFK_DISABLE("You are no longer marked as AFK."), - COMMAND_MESSAGE_TARGET_AFK("&f%player% &7is currently AFK&7."), + COMMAND_MESSAGE_TARGET_AFK("%player% is currently AFK."), COMMAND_CLEARINVENTORY_SUCCESS("You have cleared your inventory."), - COMMAND_CLEARINVENTORY_SUCCESS_OTHER("You have cleared the inventory of &f%player%."), + COMMAND_CLEARINVENTORY_SUCCESS_OTHER("You have cleared the inventory of %player%."), // Teleport Command - COMMAND_TPA_ERROR("You have already sent a request to #34cfe0%player%."), + COMMAND_TPA_ERROR("You have already sent a request to %player%."), COMMAND_TPA_ERROR_SAME("You cannot teleport to yourself."), COMMAND_TPA_ERROR_OFFLINE("Unable to find player, must be offline."), COMMAND_TPA_ERROR_TO_LATE_EMPTY("You do not have a teleport request."), COMMAND_TPA_ERROR_TO_LATE_EXPIRE("The teleport request has expired."), - COMMAND_TPA_SENDER("&7You have just sent a teleport request to #34cfe0%player%&7."), + COMMAND_TPA_SENDER("You have just sent a teleport request to %player%."), COMMAND_TPA_RECEIVER( - "&7You have just received a teleport request from #34cfe0%player%&7.", - "&7You have 60 &6seconds&e to accept the teleport request.", - "&7To accept the request do #0EEA93/tpaccept&7." + "You have just received a teleport request from %player%.", + "You have 60 seconds to accept the teleport request.", + "To accept the request do /tpaccept." ), - COMMAND_TPA_ACCEPT_RECEIVER("You have just accepted the teleport request from #34cfe0%player%."), - COMMAND_TPA_ACCEPT_SENDER("#34cfe0%player% has just accepted your teleport request."), + COMMAND_TPA_ACCEPT_RECEIVER("You have just accepted the teleport request from %player%."), + COMMAND_TPA_ACCEPT_SENDER("%player% has just accepted your teleport request."), - COMMAND_TPA_HERE_ERROR("You have already sent a request to #34cfe0%player%."), + COMMAND_TPA_HERE_ERROR("You have already sent a request to %player%."), COMMAND_TPA_HERE_ERROR_SAME("You cannot teleport to yourself."), - COMMAND_TPA_HERE_SENDER("&7You have just sent a teleport request to #34cfe0%player%&7."), + COMMAND_TPA_HERE_SENDER("You have just sent a teleport request to %player%."), COMMAND_TPA_HERE_RECEIVER( - "#34cfe0%player% &7request to teleport you to him.", - "&7You have 60 &6seconds&e to accept the teleport request.", - "&7To accept the request do #0EEA93/tpaccept&7." + "%player% request to teleport you to him.", + "You have 60 seconds to accept the teleport request.", + "To accept the request do /tpaccept." ), - COMMAND_TPA_HERE_ACCEPT_RECEIVER("You have just accepted the teleport request from #34cfe0%player%."), - COMMAND_TPA_HERE_ACCEPT_SENDER("#34cfe0%player% has just accepted your teleport request."), + COMMAND_TPA_HERE_ACCEPT_RECEIVER("You have just accepted the teleport request from %player%."), + COMMAND_TPA_HERE_ACCEPT_SENDER("%player% has just accepted your teleport request."), - COMMAND_TELEPORT_IGNORE_PLAYER("You cannot send a teleport request to #34cfe0%player% they are ignoring you."), + COMMAND_TELEPORT_IGNORE_PLAYER("You cannot send a teleport request to %player% they are ignoring you."), COMMAND_TELEPORT_WORLD("You need to be in the same world to teleport."), COMMAND_TPA_ERROR_TO_LATE("You do not have a teleport request."), COMMAND_TPA_ERROR_TO_LATE_2("The request has expired."), - COMMAND_TPA_ERROR_NO_REQUEST_FROM_PLAYER("You do not have a teleport request from &f%player%."), - COMMAND_TPA_ACCEPT_ALL_SUCCESS("You have accepted &f%count% teleport request(s)."), - COMMAND_TPA_DENY_ALL_SUCCESS("You have denied &f%count% teleport request(s)."), + COMMAND_TPA_ERROR_NO_REQUEST_FROM_PLAYER("You do not have a teleport request from %player%."), + COMMAND_TPA_ACCEPT_ALL_SUCCESS("You have accepted %count% teleport request(s)."), + COMMAND_TPA_DENY_ALL_SUCCESS("You have denied %count% teleport request(s)."), COMMAND_TP_DENY_SENDER("Denied %player% teleport request."), COMMAND_TP_DENY_RECEIVER("%player% has denied your teleport request"), - COMMAND_TP_CANCEL_ERROR("You did not send a teleport request at &f%player%."), - COMMAND_TP_CANCEL_SENDER("Cancelled #99E0FFyour teleport request to %player%."), - COMMAND_TP_CANCEL_RECEIVER("&f%player% cancelled their teleport request to you."), - COMMAND_TP("&7You just teleport to the player #34cfe0%player%&f."), - COMMAND_TP_LOCATION("&7You just teleport to #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f."), + COMMAND_TP_CANCEL_ERROR("You did not send a teleport request at %player%."), + COMMAND_TP_CANCEL_SENDER("Cancelled your teleport request to %player%."), + COMMAND_TP_CANCEL_RECEIVER("%player% cancelled their teleport request to you."), + COMMAND_TP("You just teleport to the player %player%."), + COMMAND_TP_LOCATION("You just teleport to %x%, %y%, %z%."), COMMAND_TP_LOCATION_ERROR("The coordinates are outside of the world."), - COMMAND_TP_LOCATION_OTHER("&7You just teleport #34cfe0%player% &fto #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f."), - COMMAND_TP_ALL("&7You just teleported all the players onto you."), - COMMAND_TP_SELF("&7You just teleported #34cfe0%player%&7 to your position."), - COMMAND_TP_OTHER("&7You just teleported #34cfe0%player% &7to #34cfe0%target%&7."), - COMMAND_BACK("&7Returning to previous location."), + COMMAND_TP_LOCATION_OTHER("You just teleport %player% to %x%, %y%, %z%."), + COMMAND_TP_ALL("You just teleported all the players onto you."), + COMMAND_TP_SELF("You just teleported %player% to your position."), + COMMAND_TP_OTHER("You just teleported %player% to %target%."), + COMMAND_BACK("Returning to previous location."), COMMAND_BACK_ERROR("You have no last location. Impossible to go back."), COMMAND_MORE_ERROR("You cannot make this order in item in hand."), - COMMAND_MORE_SUCCESS("&7You just put your item to &f64&7."), - COMMAND_WORLD_TELEPORT_SELF("You have just been teleported into the world &f%world%."), - COMMAND_WORLD_TELEPORT_OTHER("You just teleported the player &f%player% in the world &f%world%."), - COMMAND_RANDOM_TP_OTHER("You just randomly teleported the player &f%player% in the world &f%world%."), - - COMMAND_COMPACT_TYPE("Impossible to compact the material &f%material%."), - COMMAND_COMPACT_ERROR("You have no &f%item% in your inventory."), - COMMAND_COMPACT_SUCCESS("&7You have just transformed #0EEA93x%amount% #34cfe0%item% &7into #0EEA93x%toAmount% #34cfe0%toItem%&7."), - COMMAND_COMPACT_SUCCESS_ALL("&7You just converted all your items."), - COMMAND_HAT_SUCCESS("&7You just put #0ef0ce%item% &7on your head."), + COMMAND_MORE_SUCCESS("You just put your item to 64."), + COMMAND_WORLD_TELEPORT_SELF("You have just been teleported into the world %world%."), + COMMAND_WORLD_TELEPORT_OTHER("You just teleported the player %player% in the world %world%."), + COMMAND_RANDOM_TP_OTHER("You just randomly teleported the player %player% in the world %world%."), + + COMMAND_COMPACT_TYPE("Impossible to compact the material %material%."), + COMMAND_COMPACT_ERROR("You have no %item% in your inventory."), + COMMAND_COMPACT_SUCCESS("You have just transformed x%amount% %item% into x%toAmount% %toItem%."), + COMMAND_COMPACT_SUCCESS_ALL("You just converted all your items."), + COMMAND_HAT_SUCCESS("You just put %item% on your head."), COMMAND_HAT_ERROR("You cannot put air on your head."), - COMMAND_PLAYER_WEATHER_RESET("&7You just changed the weather to that of the server."), - COMMAND_PLAYER_WEATHER_DOWNFALL("&7You just put the rain on for yourself."), - COMMAND_PLAYER_TIME_RESET("&7You just changed the time to that of the server."), - COMMAND_PLAYER_TIME_CHANGE("&7You’re here to change your time."), + COMMAND_PLAYER_WEATHER_RESET("You just changed the weather to that of the server."), + COMMAND_PLAYER_WEATHER_DOWNFALL("You just put the rain on for yourself."), + COMMAND_PLAYER_TIME_RESET("You just changed the time to that of the server."), + COMMAND_PLAYER_TIME_CHANGE("You’re here to change your time."), - COMMAND_LAG_WORLD_LINE("&a%world%&7: &a%peaceful% peaceful&7, &c%monsters% monsters&7, &e%items% items"), - COMMAND_LAG_WORLD_HEADER("&aEntities for world &2%world%&a:"), - COMMAND_LAG_WORLD_ENTRY("&7- &a%type%&7: &f%amount%"), - COMMAND_LAG_CLEAR_SUCCESS("&7Removed &a%amount% &7entities in &a%world%&7."), - COMMAND_LAG_CLEAR_COUNTDOWN("&cEntity removal in &e%time% &cseconds!"), + COMMAND_LAG_WORLD_LINE("%world%: %peaceful% peaceful, %monsters% monsters, %items% items"), + COMMAND_LAG_WORLD_HEADER("Entities for world %world%:"), + COMMAND_LAG_WORLD_ENTRY("- %type%: %amount%"), + COMMAND_LAG_CLEAR_SUCCESS("Removed %amount% entities in %world%."), + COMMAND_LAG_CLEAR_COUNTDOWN("Entity removal in %time% seconds!"), DESCRIPTION_CLEAR_RANDOM_WORD("Clear random words"), DESCRIPTION_RELOAD("Reload configuration files"), @@ -418,219 +418,219 @@ public enum Message { DESCRIPTION_STEP_FINISH("Finish a step"), YOU("you"), - TRASH("&8Trash"), + TRASH("Trash"), // Teleportation TELEPORT_MOVE("You must not move!"), - TELEPORT_MESSAGE(MessageType.ACTION, "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move."), - TELEPORT_SUCCESS(MessageType.ACTION, "#99E0FFYou have just teleported successfully!"), - TELEPORT_RANDOM_START("&7Searching for a destination... you must not move."), - TELEPORT_MESSAGE_RANDOM(MessageType.ACTION, "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move."), - TELEPORT_SUCCESS_RANDOM(MessageType.ACTION, "#99E0FFYou have just teleported successfully!"), + TELEPORT_MESSAGE(MessageType.ACTION, "Teleporting in %seconds% seconds, you must not move."), + TELEPORT_SUCCESS(MessageType.ACTION, "You have just teleported successfully!"), + TELEPORT_RANDOM_START("Searching for a destination... you must not move."), + TELEPORT_MESSAGE_RANDOM(MessageType.ACTION, "Teleporting in %seconds% seconds, you must not move."), + TELEPORT_SUCCESS_RANDOM(MessageType.ACTION, "You have just teleported successfully!"), TELEPORT_MESSAGE_SPAWN( - ClassicMessage.tchat("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move."), - ClassicMessage.action("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move.") + ClassicMessage.tchat("Teleporting in %seconds% seconds, you must not move."), + ClassicMessage.action("Teleporting in %seconds% seconds, you must not move.") ), - TELEPORT_MESSAGE_SPAWN_CONSOLE("You just teleported the player %player% to spawn."), + TELEPORT_MESSAGE_SPAWN_CONSOLE("You just teleported the player %player% to spawn."), TELEPORT_SUCCESS_SPAWN( - ClassicMessage.tchat("&7You just teleported to #0EEA93spawn &7!"), - ClassicMessage.action("&7You just teleported to #0EEA93spawn &7!") + ClassicMessage.tchat("You just teleported to spawn !"), + ClassicMessage.action("You just teleported to spawn !") ), TELEPORT_MESSAGE_WARP( - ClassicMessage.tchat("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move."), - ClassicMessage.action("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move.") + ClassicMessage.tchat("Teleporting in %seconds% seconds, you must not move."), + ClassicMessage.action("Teleporting in %seconds% seconds, you must not move.") ), TELEPORT_SUCCESS_WARP( - ClassicMessage.tchat("&7You just teleported to warp #0EEA93%name% &7!"), - ClassicMessage.action("&7You just teleported to warp #0EEA93%name% &7!") + ClassicMessage.tchat("You just teleported to warp %name% !"), + ClassicMessage.action("You just teleported to warp %name% !") ), TELEPORT_MESSAGE_HOME( - ClassicMessage.tchat("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move."), - ClassicMessage.action("&7Teleporting in #0EEA93%seconds% &7seconds, you must not move.") + ClassicMessage.tchat("Teleporting in %seconds% seconds, you must not move."), + ClassicMessage.action("Teleporting in %seconds% seconds, you must not move.") ), TELEPORT_SUCCESS_HOME( - ClassicMessage.tchat("&7You just teleported to home #0EEA93%name% &7!"), - ClassicMessage.action("&7You just teleported to home #0EEA93%name% &7!") + ClassicMessage.tchat("You just teleported to home %name% !"), + ClassicMessage.action("You just teleported to home %name% !") ), TELEPORT_DAMAGE("You must not take damage during teleportation."), TELEPORT_ERROR_LOCATION("Unable to teleport you safely."), TELEPORT_CROSS_SERVER_NOT_SUPPORTED("Cross-server teleportation is not supported on this server."), - TELEPORT_CROSS_SERVER_CONNECTING("Connecting to server &f%server%..."), - TELEPORT_CROSS_SERVER_PLAYER_NOT_FOUND("Player &f%player% was not found on any server."), + TELEPORT_CROSS_SERVER_CONNECTING("Connecting to server %server%..."), + TELEPORT_CROSS_SERVER_PLAYER_NOT_FOUND("Player %player% was not found on any server."), // RTP Queue System Messages TELEPORT_ALREADY_IN_QUEUE("You are already in the teleportation queue!"), - TELEPORT_ADDED_TO_QUEUE("You have been added to the teleportation queue. Position: #0EEA93%position%"), + TELEPORT_ADDED_TO_QUEUE("You have been added to the teleportation queue. Position: %position%"), - COOLDOWN("✘ You must wait for &f%cooldown% before performing this action."), - COOLDOWN_COMMANDS("✘ You must wait for &f%cooldown% before performing this commands."), + COOLDOWN("✘ You must wait for %cooldown% before performing this action."), + COOLDOWN_COMMANDS("✘ You must wait for %cooldown% before performing this commands."), // Economy - COMMAND_ECONOMY_NOT_FOUND(" Can’t find a economy with the name &f%name%."), - COMMAND_ECONOMY_RESET_ALL_CONFIRM("You are about to reset every balance for &f%economy%. Run the command again within &f%seconds% seconds to confirm."), - COMMAND_ECONOMY_RESET_ALL_SUCCESS("#99E0FFYou reset all balances for &f%economy%#99E0FF."), - COMMAND_ECONOMY_GIVE_ALL_SENDER("#99E0FFYou just gave &f%economyFormat% #99E0FFto the online players."), - COMMAND_ECONOMY_GIVE_SENDER("#99E0FFYou just gave &f%economyFormat% #99E0FFto the player &7%player%#99E0FF."), - COMMAND_ECONOMY_GIVE_RECEIVER("#99E0FFYou have just received &f%economyFormat%."), - COMMAND_ECONOMY_SET_SENDER("#99E0FFYou just set &f%economyFormat% #99E0FFto the player &7%player%#99E0FF."), - COMMAND_ECONOMY_SET_RECEIVER("#99E0FFYou have just been modified &f%economyFormat%."), - COMMAND_ECONOMY_TAKE_SENDER("#99E0FFYou just take &f%economyFormat% #99E0FFto the player &7%player%#99E0FF."), - COMMAND_ECONOMY_TAKE_RECEIVER("#99E0FFYou have just lost &f%economyFormat%."), - COMMAND_ECONOMY_SHOW_EMPTY("&f%player% has no money."), - COMMAND_ECONOMY_SHOW_INFO("&7- #99E0FF%economy% &f%amount%."), + COMMAND_ECONOMY_NOT_FOUND(" Can’t find a economy with the name %name%."), + COMMAND_ECONOMY_RESET_ALL_CONFIRM("You are about to reset every balance for %economy%. Run the command again within %seconds% seconds to confirm."), + COMMAND_ECONOMY_RESET_ALL_SUCCESS("You reset all balances for %economy%."), + COMMAND_ECONOMY_GIVE_ALL_SENDER("You just gave %economyFormat% to the online players."), + COMMAND_ECONOMY_GIVE_SENDER("You just gave %economyFormat% to the player %player%."), + COMMAND_ECONOMY_GIVE_RECEIVER("You have just received %economyFormat%."), + COMMAND_ECONOMY_SET_SENDER("You just set %economyFormat% to the player %player%."), + COMMAND_ECONOMY_SET_RECEIVER("You have just been modified %economyFormat%."), + COMMAND_ECONOMY_TAKE_SENDER("You just take %economyFormat% to the player %player%."), + COMMAND_ECONOMY_TAKE_RECEIVER("You have just lost %economyFormat%."), + COMMAND_ECONOMY_SHOW_EMPTY("%player% has no money."), + COMMAND_ECONOMY_SHOW_INFO("- %economy% %amount%."), COMMAND_MONEY( - "#99E0FFYou have&8:", - " &7- #99E0FF%economy-name-money% &f%economy-money%.", - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + "You have:", + " - %economy-name-money% %economy-money%.", + " - %economy-name-coins% %economy-coins%." ), COMMAND_MONEY_OTHER( - "#99E0FF%player% have&8:", - " &7- #99E0FF%economy-name-money% &f%economy-money%.", - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + "%player% have:", + " - %economy-name-money% %economy-money%.", + " - %economy-name-coins% %economy-coins%." ), COMMAND_PAY_NEGATIVE("Amount to pay must be positive."), - COMMAND_PAY_MIN("The minimum amount you can pay is &f%amount%."), - COMMAND_PAY_MAX("The maximum amount you can pay is &f%amount%."), - COMMAND_PAY_SENDER("#99E0FFYou just sent #F8F327%amount%#99E0FF to the player &f%player%#99E0FF."), - COMMAND_PAY_RECEIVER("&f%player% #99E0FFjust sent you #F8F327%amount%#99E0FF."), + COMMAND_PAY_MIN("The minimum amount you can pay is %amount%."), + COMMAND_PAY_MAX("The maximum amount you can pay is %amount%."), + COMMAND_PAY_SENDER("You just sent %amount% to the player %player%."), + COMMAND_PAY_RECEIVER("%player% just sent you %amount%."), COMMAND_PAY_DISABLE("You can’t send %name%."), COMMAND_PAY_SELF("You cannot send money to yourself."), COMMAND_PAY_NOT_ENOUGH("You don't have enough money."), COMMAND_PAY_DISABLED("You cannot send money to this player."), - JOIN_MESSAGE("#99E0FF%player% &7joined the game"), - QUIT_MESSAGE("#99E0FF%player% &7left the game"), - FIRST_JOIN_MESSAGE("&7Welcome #99E0FF%player% &7on ! &8(&f%totalUserFormat% &7registered players&8)"), + JOIN_MESSAGE("%player% joined the game"), + QUIT_MESSAGE("%player% left the game"), + FIRST_JOIN_MESSAGE("Welcome %player% on ! (%totalUserFormat% registered players)"), FIRST_JOIN_MOTD( "", - "✔ #99E0FFWelcome %player%#99E0FF !", + "✔ Welcome %player% !", "", - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/", - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/", + "Discord: Join the server Discord !'>https://discord.groupez.dev/", + "Website: Open the Website !'>https://minecraft-inventory-builder.com/", "" ), JOIN_MOTD( "", - "#99E0FFWelcome back %player%#99E0FF !", + "Welcome back %player% !", "", - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/", - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/", + "Discord: Join the server Discord !'>https://discord.groupez.dev/", + "Website: Open the Website !'>https://minecraft-inventory-builder.com/", "" ), - COMMAND_SET_SPAWN("&fYou just set the spawn location."), + COMMAND_SET_SPAWN("You just set the spawn location."), COMMAND_SPAWN_NOT_DEFINE("The spawn does not exist. Please contact an administrator."), COMMAND_SPAWN_FIRST_NOT_DEFINE("The first spawn does not exist. Please contact an administrator."), COMMAND_SPAWN_LOCATION_INVALID("The spawn is invalid, please contact an administrator"), - COMMAND_WARP_ALREADY_EXIST("Warp &f%name% already exists. &7Use &n/setwarp %name% true&r command to modify the warp"), - COMMAND_WARP_DOESNT_EXIST("Warp &f%name% does not exist."), - COMMAND_WARP_NO_PERMISSION("You do not have permission to use the warp &f%name%."), + COMMAND_WARP_ALREADY_EXIST("Warp %name% already exists. Use Use this command'>/setwarp %name% true command to modify the warp"), + COMMAND_WARP_DOESNT_EXIST("Warp %name% does not exist."), + COMMAND_WARP_NO_PERMISSION("You do not have permission to use the warp %name%."), COMMAND_WARP_CREATE( - "You just created the warp &f%name% to your position.", - "&7Warp Permission is: permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + "You just created the warp %name% to your position.", + "Warp Permission is: Copy command to add permission to a player'> permission set essentials.warp.%name%'>essentials.warp.%name%" ), COMMAND_WARP_USE( - "Usage&8: &f/warp ", - "&7Warps&8:&f%destinations%" + "Usage: /warp ", + "Warps:%destinations%" ), - COMMAND_WARP_EMPTY("No warp defined, use command &f/setwarp "), - COMMAND_WARP_DESTINATION(" &f%name%&7"), - COMMAND_WARP_LIST("&7Warps&8:&f%destinations%"), - COMMAND_WARP_LIST_INFO(" &f%name%&7"), - COMMAND_WARP_DELETE("You just removed the warp &f%name%."), - COMMAND_WARP_INVALID("Warp &f%name% has an invalide location."), + COMMAND_WARP_EMPTY("No warp defined, use command /setwarp "), + COMMAND_WARP_DESTINATION(" Click to teleport to warp %name%'>%name%"), + COMMAND_WARP_LIST("Warps:%destinations%"), + COMMAND_WARP_LIST_INFO(" Click to teleport to warp %name%'>%name%"), + COMMAND_WARP_DELETE("You just removed the warp %name%."), + COMMAND_WARP_INVALID("Warp %name% has an invalide location."), COMMAND_RANDOM_TP_ERROR("No safe location found after multiple attempts, please try again."), - COMMAND_RANDOM_TP_CONFIGURATION_NOT_FOUND("Impossible to find the random tp configuration for the world &f%world%."), + COMMAND_RANDOM_TP_CONFIGURATION_NOT_FOUND("Impossible to find the random tp configuration for the world %world%."), - COMMAND_SET_HOME_INVALIDE_NAME("&f%name% is not a valid name, please choose another one."), - COMMAND_SET_HOME_TOO_LONG("&f%name% is too long, please choose another one."), - COMMAND_SET_HOME_TOO_SHORT("&f%name% is too short name, please choose another one."), - COMMAND_SET_HOME_MAX("You cannot have more than &f%max% homes."), + COMMAND_SET_HOME_INVALIDE_NAME("%name% is not a valid name, please choose another one."), + COMMAND_SET_HOME_TOO_LONG("%name% is too long, please choose another one."), + COMMAND_SET_HOME_TOO_SHORT("%name% is too short name, please choose another one."), + COMMAND_SET_HOME_MAX("You cannot have more than %max% homes."), COMMAND_SET_HOME_WORLD("You cannot create a home here"), COMMAND_SET_HOME_CREATE( "", - "#99E0FFYou just created the home &f%name%#99E0FF. &8(&7%current%&8/&7%max%&8)", - "&fUse &n/home %name%&r command to teleport to it", + "You just created the home %name%. (%current%/%max%)", + "Use Click to teleport to home'>/home %name% command to teleport to it", "" ), COMMAND_SET_HOME_CREATE_CONFIRM( "", - "#99E0FFThe home &f%name%#99E0FF. already exists. Do you want to overwrite it?", - "ᴄᴏɴғɪʀᴍ", + "The home %name%. already exists. Do you want to overwrite it?", + "Click to overwrite the home %name%'>ᴄᴏɴғɪʀᴍ", "" ), - COMMAND_HOME_DOESNT_EXIST("The home &f%name% does not exist."), + COMMAND_HOME_DOESNT_EXIST("The home %name% does not exist."), COMMAND_HOME_INFORMATION_MULTI_LINE_HEADER( "", - "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%) &8- &7(Max: %max%)" + "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%) - (Max: %max%)" ), COMMAND_HOME_INFORMATION_MULTI_LINE_CONTENT(MessageType.WITHOUT_PREFIX, - " #8cc0cc♢ &f%name% &7in %world% (%environment%) [CLICK]"), + " ♢ %name% in %world% (%environment%) Click to teleport to home %name%'>[CLICK]"), COMMAND_HOME_INFORMATION_MULTI_LINE_FOOTER(MessageType.WITHOUT_PREFIX, ""), - COMMAND_HOME_INFORMATION_IN_LINE(MessageType.WITHOUT_PREFIX, "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%/%max%)&8:&f%homes%"), - COMMAND_HOME_INFORMATION_IN_LINE_INFO(" &f%name%&7"), + COMMAND_HOME_INFORMATION_IN_LINE(MessageType.WITHOUT_PREFIX, "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%/%max%):%homes%"), + COMMAND_HOME_INFORMATION_IN_LINE_INFO(" Click to teleport to home %name%'>%name%"), COMMAND_HOME_ICON_ERROR("You must have an item in your hand to change the icon of your home."), - COMMAND_HOME_ICON_SUCCESS("You just changed the home icon &f%name%."), - COMMAND_HOME_ICON_RESET("You just reset the home icon &f%name%."), - COMMAND_HOME_DELETE("#99E0FFYou just deleted the home &f%name%#99E0FF."), + COMMAND_HOME_ICON_SUCCESS("You just changed the home icon %name%."), + COMMAND_HOME_ICON_RESET("You just reset the home icon %name%."), + COMMAND_HOME_DELETE("You just deleted the home %name%."), COMMAND_HOME_DELETE_CONFIRM( "", - "#99E0FFYou really want to delete the home &f%name%#99E0FF.", - "ᴄᴏɴғɪʀᴍ", + "You really want to delete the home %name%.", + "Click to overwrite the home %name%'>ᴄᴏɴғɪʀᴍ", "" ), - COMMAND_HOME_ADMIN_DELETE("You just deleted home &f%name% of &b%player%."), - COMMAND_HOME_ADMIN_SET("You just created home &f%name% of &b%player%."), + COMMAND_HOME_ADMIN_DELETE("You just deleted home %name% of %player%."), + COMMAND_HOME_ADMIN_SET("You just created home %name% of %player%."), COMMAND_HOME_FEATURE_DISABLED("This home feature is disabled on this server."), - COMMAND_HOME_PUBLIC_ENABLE("Your home &f%name% is now public."), - COMMAND_HOME_PUBLIC_DISABLE("Your home &f%name% is no longer public."), - COMMAND_HOME_PUBLIC_LIMIT("You have reached the maximum number of public homes (&f%max%)."), - COMMAND_HOME_NOT_ACCESSIBLE("The home &f%name% of &f%player% is not accessible to you."), - COMMAND_PUBLIC_HOMES_HEADER("Public homes (&f%count%):"), - COMMAND_PUBLIC_HOMES_LINE("&7- &f%player%&7:&f%name% <#34cfe0>[Teleport]"), + COMMAND_HOME_PUBLIC_ENABLE("Your home %name% is now public."), + COMMAND_HOME_PUBLIC_DISABLE("Your home %name% is no longer public."), + COMMAND_HOME_PUBLIC_LIMIT("You have reached the maximum number of public homes (%max%)."), + COMMAND_HOME_NOT_ACCESSIBLE("The home %name% of %player% is not accessible to you."), + COMMAND_PUBLIC_HOMES_HEADER("Public homes (%count%):"), + COMMAND_PUBLIC_HOMES_LINE("- %player%:%name% Teleport to this home'>[Teleport]"), COMMAND_PUBLIC_HOMES_EMPTY("There is no public home."), - COMMAND_HOME_SHARE_ADD("You shared your home &f%name% with &f%player%."), - COMMAND_HOME_SHARE_REMOVE("You stopped sharing your home &f%name% with &f%player%."), - COMMAND_HOME_SHARE_ALREADY("Your home &f%name% is already shared with &f%player%."), - COMMAND_HOME_SHARE_NOT("Your home &f%name% is not shared with &f%player%."), + COMMAND_HOME_SHARE_ADD("You shared your home %name% with %player%."), + COMMAND_HOME_SHARE_REMOVE("You stopped sharing your home %name% with %player%."), + COMMAND_HOME_SHARE_ALREADY("Your home %name% is already shared with %player%."), + COMMAND_HOME_SHARE_NOT("Your home %name% is not shared with %player%."), COMMAND_HOME_SHARE_SELF("You cannot share a home with yourself."), - COMMAND_HOME_SHARE_LIMIT("You have reached the maximum number of shares for this home (&f%max%)."), - COMMAND_HOME_SHARE_LIST_HEADER("Home &f%name% is shared with &f%count% player(s):"), - COMMAND_HOME_SHARE_LIST_LINE("&7- &f%player%"), - COMMAND_HOME_SHARE_LIST_EMPTY("Home &f%name% is not shared with anyone."), - COMMAND_HOME_CATEGORY_SET("The category of your home &f%name% is now &f%category%."), - COMMAND_HOME_CATEGORY_RESET("The category of your home &f%name% has been removed."), + COMMAND_HOME_SHARE_LIMIT("You have reached the maximum number of shares for this home (%max%)."), + COMMAND_HOME_SHARE_LIST_HEADER("Home %name% is shared with %count% player(s):"), + COMMAND_HOME_SHARE_LIST_LINE("- %player%"), + COMMAND_HOME_SHARE_LIST_EMPTY("Home %name% is not shared with anyone."), + COMMAND_HOME_CATEGORY_SET("The category of your home %name% is now %category%."), + COMMAND_HOME_CATEGORY_RESET("The category of your home %name% has been removed."), COMMAND_HOME_CATEGORY_INVALID("Invalid category name."), - COMMAND_HOME_FAVORITE_ADD("Your home &f%name% is now a favorite."), - COMMAND_HOME_FAVORITE_REMOVE("Your home &f%name% is no longer a favorite."), - COMMAND_HOME_PREVIEW("&7Home &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teleport]"), - COMMAND_HOME_IMPORT_START("Importing homes from &f%source%..."), - COMMAND_HOME_IMPORT_DONE("Import finished: &f%imported% imported, &f%skipped% skipped, &f%errors% errors."), - COMMAND_HOME_IMPORT_UNKNOWN("Unknown import source &f%source%. Available: essentialsx."), + COMMAND_HOME_FAVORITE_ADD("Your home %name% is now a favorite."), + COMMAND_HOME_FAVORITE_REMOVE("Your home %name% is no longer a favorite."), + COMMAND_HOME_PREVIEW("Home %name% - %world% (%x%, %y%, %z%) [Teleport]"), + COMMAND_HOME_IMPORT_START("Importing homes from %source%..."), + COMMAND_HOME_IMPORT_DONE("Import finished: %imported% imported, %skipped% skipped, %errors% errors."), + COMMAND_HOME_IMPORT_UNKNOWN("Unknown import source %source%. Available: essentialsx."), COMMAND_HOME_IMPORT_ERROR("An error occurred during the import, check the console."), - COMMAND_HOME_ADMIN_LIST("#8cc0cc%player% ʜᴏᴍᴇs&8:&f%homes%"), - COMMAND_HOME_ADMIN_LIST_INFO(" &f%name%&7"), + COMMAND_HOME_ADMIN_LIST("%player% ʜᴏᴍᴇs:%homes%"), + COMMAND_HOME_ADMIN_LIST_INFO(" Click to teleport to home %name%'>%name%"), COMMAND_HOME_ADMIN_LIST_EMPTY("The player has no home"), COMMAND_HOME_ERROR_TELEPORT("Unable to find the position for teleportation, please delete your home."), - COMMAND_KICK_NOTIFY(MessageType.WITHOUT_PREFIX, "%sender%&7Duration: %duration%&7Reason: %reason%&7Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just kicked the player #e0d12d%target%#e33414."), - COMMAND_BAN_NOTIFY(MessageType.WITHOUT_PREFIX, "%sender%&7Duration: %duration%&7Reason: %reason%&7Date: %created_at%&7Expires: %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just banned the player #e0d12d%target%#e33414."), - COMMAND_MUTE_NOTIFY(MessageType.WITHOUT_PREFIX, "%sender%&7Duration: %duration%&7Reason: %reason%&7Date: %created_at%&7Expires: %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just muted the player #e0d12d%target%#e33414."), - COMMAND_UNMUTE_NOTIFY(MessageType.WITHOUT_PREFIX, "%sender%&7Duration: %duration%&7Reason: %reason%&7Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just unmuted the player #e0d12d%target%#e33414."), - COMMAND_UNBAN_NOTIFY(MessageType.WITHOUT_PREFIX, "%sender%&7Duration: %duration%&7Reason: %reason%&7Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just unbanned the player #e0d12d%target%#e33414."), + COMMAND_KICK_NOTIFY(MessageType.WITHOUT_PREFIX, "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just kicked the player %target%."), + COMMAND_BAN_NOTIFY(MessageType.WITHOUT_PREFIX, "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>(Sanction) %player% just banned the player %target%."), + COMMAND_MUTE_NOTIFY(MessageType.WITHOUT_PREFIX, "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>(Sanction) %player% just muted the player %target%."), + COMMAND_UNMUTE_NOTIFY(MessageType.WITHOUT_PREFIX, "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just unmuted the player %target%."), + COMMAND_UNBAN_NOTIFY(MessageType.WITHOUT_PREFIX, "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just unbanned the player %target%."), COMMAND_BAN_ERROR_DURATION("The duration of a banishment must be at least 1 second."), COMMAND_MUTE_ERROR_DURATION("The duration of a mute must be at least 1 second."), - COMMAND_UN_MUTE_ERROR("&f%player% is not mute."), - COMMAND_UN_BAN_ERROR("&f%player% is not ban."), + COMMAND_UN_MUTE_ERROR("%player% is not mute."), + COMMAND_UN_BAN_ERROR("%player% is not ban."), COMMAND_SANCTION_ERROR("You can’t sanction that player. He’s protected."), MESSAGE_KICK( @@ -638,73 +638,73 @@ public enum Message { "You have just been kicked from the server for the reason:", "%reason%", "", - "&fMinecraft-Inventory-Builder.com", + "Minecraft-Inventory-Builder.com", "" ), - COMMAND_FREEZE_SUCCESS("&7You just freeze the player &f%player%&7."), - COMMAND_UN_FREEZE_SUCCESS("&7You just unfreeze the player &f%player%&7."), + COMMAND_FREEZE_SUCCESS("You just freeze the player %player%."), + COMMAND_UN_FREEZE_SUCCESS("You just unfreeze the player %player%."), MESSAGE_FREEZE( "", - "&cYou have just been frozen.", + "You have just been frozen.", "" ), MESSAGE_UN_FREEZE( "", - "&aYou have just been unfrozen.", + "You have just been unfrozen.", "" ), MESSAGE_MUTE( "", - "&fYou have just lost your voice.", - "&fDuration&8: %duration%", - "&fReason&8: #82d1ff%reason%", + "You have just lost your voice.", + "Duration: %duration%", + "Reason: %reason%", "" ), MESSAGE_UNMUTE( "", - "&fYou have just regained your voice, congratulations !", - "&fReason&8: #82d1ff%reason%", + "You have just regained your voice, congratulations !", + "Reason: %reason%", "" ), MESSAGE_MUTE_TALK( "", - "&fYou do not have the right to speak.", + "You do not have the right to speak.", "", - "&fDuration&8: %duration%", - "&fReason&8: #82d1ff%reason%", + "Duration: %duration%", + "Reason: %reason%", "" ), MESSAGE_BAN( "", "You have just been ban from the server for the reason:", - "&f%reason%", - "&fDuration&8: &7%duration%", + "%reason%", + "Duration: %duration%", "", - "&fMinecraft-Inventory-Builder.com", + "Minecraft-Inventory-Builder.com", "" ), MESSAGE_BAN_JOIN( "", "You are banned on server:", - "&f%reason%", - "&fRemaining time&8: &7%remaining%", + "%reason%", + "Remaining time: %remaining%", "", - "&fMinecraft-Inventory-Builder.com", + "Minecraft-Inventory-Builder.com", "" ), // Chat CHAT_ERROR("Impossible to let you speak, your data is not loaded."), CHAT_ALPHANUMERIC_REGEX("You use a forbidden character."), - CHAT_COOLDOWN("Please wait before sending your next message. &8(&7%cooldown%&8)"), + CHAT_COOLDOWN("Please wait before sending your next message. (%cooldown%)"), CHAT_SAME("You can’t put the same sentence."), CHAT_CAPS("You don’t have to scream to talk !"), CHAT_FLOOD("You can’t talk like that."), @@ -712,278 +712,278 @@ public enum Message { CHAT_ITEM_FORBIDDEN_CHARACTERS("You cannot display this item because its name contains forbidden characters."), CHAT_DISABLE("The chat is currently unavailable."), - CHAT_DEFAULT_FORMAT("%displayName% <#656665>• &7%message%"), - CHAT_MESSAGES_EMPTY("&f%player% did not write a message."), - CHAT_MESSAGES_LINE(MessageType.WITHOUT_PREFIX, "&f%date% &7%message%"), - CHAT_MESSAGES_FOOTER(MessageType.WITHOUT_PREFIX, "⬅ &7%page%/%maxPage% ➡"), + CHAT_DEFAULT_FORMAT("%displayName% • %message%"), + CHAT_MESSAGES_EMPTY("%player% did not write a message."), + CHAT_MESSAGES_LINE(MessageType.WITHOUT_PREFIX, "%date% %message%"), + CHAT_MESSAGES_FOOTER(MessageType.WITHOUT_PREFIX, "⬅ %page%/%maxPage% ➡"), COMMAND_CHAT_CLEAR("The chat just got clear."), COMMAND_CHAT_DISABLE_ERROR("Chat is already disable."), COMMAND_CHAT_DISABLE_SUCCESS("You just deactivated the chat."), COMMAND_CHAT_ENABLE_ERROR("Chat is already enable."), COMMAND_CHAT_ENABLE_SUCCESS("You just activated the chat."), - COMMAND_CHAT_BROADCAST(MessageType.WITHOUT_PREFIX, "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%"), + COMMAND_CHAT_BROADCAST(MessageType.WITHOUT_PREFIX, "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%"), COMMAND_MESSAGE_SELF("You can’t talk to yourself."), - COMMAND_MESSAGE_DISABLE("&f%%player% has disabled private messages."), + COMMAND_MESSAGE_DISABLE("%%player% has disabled private messages."), COMMAND_MESSAGE_MUTE("You’re not allowed to speak."), - COMMAND_MESSAGE_ME("&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6"), - COMMAND_MESSAGE_OTHER("&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6"), - COMMAND_MESSAGE_SOCIAL_SPY(MessageType.WITHOUT_PREFIX, "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%"), + COMMAND_MESSAGE_ME("Click to reply'>(me -> %target%) "), + COMMAND_MESSAGE_OTHER("Click to reply'>(%target% -> me) "), + COMMAND_MESSAGE_SOCIAL_SPY(MessageType.WITHOUT_PREFIX, "(SocialSpy) (Open sanction for %sender%'>%sender% -> Open sanction for %receiver%'>%receiver%) %message%"), COMMAND_MESSAGE_ERROR("You have no one to answer."), - COMMAND_MESSAGE_TOGGLE_ENABLE("&7Private message enable &7for &f%player%."), - COMMAND_MESSAGE_TOGGLE_DISABLE("&7Private message disable &7for &f%player%."), - COMMAND_SOCIAL_SPY_ENABLE("&7Social spy enable &7for &f%player%."), - COMMAND_SOCIAL_SPY_DISABLE("&7Social spy disable &7for &f%player%."), - COMMAND_PAY_TOGGLE_ENABLE("&7Pay enable &7for &f%player%."), - COMMAND_PAY_TOGGLE_DISABLE("All of your power tools have been disabled &7for &f%player%."), - COMMAND_PAY_NOTIFICATION_TOGGLE_ENABLE("&7Pay notifications enabled &7for &f%player%."), - COMMAND_PAY_NOTIFICATION_TOGGLE_DISABLE("&7Pay notifications disabled &7for &f%player%."), - COMMAND_POWER_TOOLS_TOGGLE_ENABLE("All of your power tools have been enabled &7for &f%player%."), - COMMAND_POWER_TOOLS_TOGGLE_DISABLE("&7Pay disable &7for &f%player%."), - COMMAND_TELEPORT_REQUEST_DISABLED("The player &f%player% has disabled teleport requests."), - COMMAND_TP_TOGGLE_ENABLE("&7Teleport requests enabled &7for &f%player%."), - COMMAND_TP_TOGGLE_DISABLE("&7Teleport requests disabled &7for &f%player%."), - COMMAND_PING_SOUND_ENABLE("&7Chat ping sound enabled &7for &f%player%."), - COMMAND_PING_SOUND_DISABLE("&7Chat ping sound disabled &7for &f%player%."), - COMMAND_IGNORE_ADD("You are now ignoring &f%player%. You will no longer receive their private messages or teleport requests."), - COMMAND_IGNORE_REMOVE("You are no longer ignoring &f%player%."), - COMMAND_IGNORE_ALREADY("You are already ignoring &f%player%."), - COMMAND_IGNORE_NOT("You are not ignoring &f%player%."), + COMMAND_MESSAGE_TOGGLE_ENABLE("Private message enable for %player%."), + COMMAND_MESSAGE_TOGGLE_DISABLE("Private message disable for %player%."), + COMMAND_SOCIAL_SPY_ENABLE("Social spy enable for %player%."), + COMMAND_SOCIAL_SPY_DISABLE("Social spy disable for %player%."), + COMMAND_PAY_TOGGLE_ENABLE("Pay enable for %player%."), + COMMAND_PAY_TOGGLE_DISABLE("All of your power tools have been disabled for %player%."), + COMMAND_PAY_NOTIFICATION_TOGGLE_ENABLE("Pay notifications enabled for %player%."), + COMMAND_PAY_NOTIFICATION_TOGGLE_DISABLE("Pay notifications disabled for %player%."), + COMMAND_POWER_TOOLS_TOGGLE_ENABLE("All of your power tools have been enabled for %player%."), + COMMAND_POWER_TOOLS_TOGGLE_DISABLE("Pay disable for %player%."), + COMMAND_TELEPORT_REQUEST_DISABLED("The player %player% has disabled teleport requests."), + COMMAND_TP_TOGGLE_ENABLE("Teleport requests enabled for %player%."), + COMMAND_TP_TOGGLE_DISABLE("Teleport requests disabled for %player%."), + COMMAND_PING_SOUND_ENABLE("Chat ping sound enabled for %player%."), + COMMAND_PING_SOUND_DISABLE("Chat ping sound disabled for %player%."), + COMMAND_IGNORE_ADD("You are now ignoring %player%. You will no longer receive their private messages or teleport requests."), + COMMAND_IGNORE_REMOVE("You are no longer ignoring %player%."), + COMMAND_IGNORE_ALREADY("You are already ignoring %player%."), + COMMAND_IGNORE_NOT("You are not ignoring %player%."), COMMAND_IGNORE_SELF("You cannot ignore yourself."), COMMAND_IGNORE_LIST_EMPTY("You are not ignoring anyone."), - COMMAND_IGNORE_LIST_HEADER("You are ignoring &f%count% player(s):"), - COMMAND_IGNORE_LIST_LINE("&7- &f%player%"), - COMMAND_MESSAGE_IGNORE_PLAYER("You cannot send a message to #34cfe0%player% they are ignoring you."), - COMMAND_TELEPORT_HERE_REQUEST_DISABLED("The player &f%player% has disabled tpahere requests."), - COMMAND_TPA_HERE_TOGGLE_ENABLE("&7Tpahere requests enabled &7for &f%player%."), - COMMAND_TPA_HERE_TOGGLE_DISABLE("&7Tpahere requests disabled &7for &f%player%."), - - COMMAND_FURNACE_TYPE("Impossible to smelt the material &f%material%."), - COMMAND_FURNACE_ERROR("You have no &f%item% in your inventory."), - COMMAND_FURNACE_SUCCESS("&7You have just transformed #0EEA93x%amount% #34cfe0%item% &7into #0EEA93x%toAmount% #34cfe0%toItem%&7."), - COMMAND_SKULL("You just got the player’s head &f%name%."), + COMMAND_IGNORE_LIST_HEADER("You are ignoring %count% player(s):"), + COMMAND_IGNORE_LIST_LINE("- %player%"), + COMMAND_MESSAGE_IGNORE_PLAYER("You cannot send a message to %player% they are ignoring you."), + COMMAND_TELEPORT_HERE_REQUEST_DISABLED("The player %player% has disabled tpahere requests."), + COMMAND_TPA_HERE_TOGGLE_ENABLE("Tpahere requests enabled for %player%."), + COMMAND_TPA_HERE_TOGGLE_DISABLE("Tpahere requests disabled for %player%."), + + COMMAND_FURNACE_TYPE("Impossible to smelt the material %material%."), + COMMAND_FURNACE_ERROR("You have no %item% in your inventory."), + COMMAND_FURNACE_SUCCESS("You have just transformed x%amount% %item% into x%toAmount% %toItem%."), + COMMAND_SKULL("You just got the player’s head %name%."), COMMAND_REPAIR_ERROR("The item in your hand cannot be repaired."), COMMAND_REPAIR_SUCCESS("You just fixed the item in your hand."), COMMAND_REPAIR_ALL_ERROR("You have no items to repair."), COMMAND_REPAIR_ALL_SUCCESS("You have just repaired all the items in your inventory"), COMMAND_NEAR_EMPTY("No player near to you."), - COMMAND_NEAR_PLAYER("&fPlayers near to you&7:%players%"), - COMMAND_NEAR_INFO("&6%direction% &7%player% &8(&e%distance%m&8)"), + COMMAND_NEAR_PLAYER("Players near to you:%players%"), + COMMAND_NEAR_INFO("%direction% %player% (%distance%m)"), COMMAND_PLAY_TIME( - "&7You played&8: %playtime%", - "&7Current session&8: %playtime_session%" + "You played: %playtime%", + "Current session: %playtime_session%" ), - COMMAND_REMOVE("&7Removed %amount% &7entities."), + COMMAND_REMOVE("Removed %amount% entities."), - COMMAND_SEEN_OFFLINE(MessageType.WITHOUT_PREFIX, "#99E0FFPlayer &f%player% #99E0FFhas been offline #99E0FFsince &7%date%#99E0FF."), - COMMAND_SEEN_ONLINE(MessageType.WITHOUT_PREFIX, "#99E0FFPlayer &f%player% #99E0FFhas been online #99E0FFsince %date%#99E0FF."), - COMMAND_SEEN_PLAYTIME(MessageType.WITHOUT_PREFIX, "#99E0FFPlayTime&8: &f%playtime%"), - COMMAND_SEEN_UUID(MessageType.WITHOUT_PREFIX, "#99E0FFUUID&8: &f%uuid%"), - COMMAND_SEEN_IP(MessageType.WITHOUT_PREFIX, "#99E0FFIP Address&8:&f%ips%"), - COMMAND_SEEN_LAST_LOCATION(MessageType.WITHOUT_PREFIX, "#99E0FFLast Location&8: &f%world%, %x%, %y%, %z%"), - COMMAND_SEEN_FIRST_JOIN(MessageType.WITHOUT_PREFIX, "#99E0FFFirst Join&8:&f%created_at%"), + COMMAND_SEEN_OFFLINE(MessageType.WITHOUT_PREFIX, "Player %player% has been offline since %date%."), + COMMAND_SEEN_ONLINE(MessageType.WITHOUT_PREFIX, "Player %player% has been online since %date%."), + COMMAND_SEEN_PLAYTIME(MessageType.WITHOUT_PREFIX, "PlayTime: %playtime%"), + COMMAND_SEEN_UUID(MessageType.WITHOUT_PREFIX, "UUID: %uuid%"), + COMMAND_SEEN_IP(MessageType.WITHOUT_PREFIX, "IP Address:%ips%"), + COMMAND_SEEN_LAST_LOCATION(MessageType.WITHOUT_PREFIX, "Last Location: %world%, %x%, %y%, %z%"), + COMMAND_SEEN_FIRST_JOIN(MessageType.WITHOUT_PREFIX, "First Join:%created_at%"), - COMMAND_SEEN_ADDRESS(MessageType.WITHOUT_PREFIX, " %ip%"), + COMMAND_SEEN_ADDRESS(MessageType.WITHOUT_PREFIX, " Show players who have the same address'>%ip%"), - COMMAND_SEEN_IP_EMPTY("Unable to find players with ip &f%ip%."), - COMMAND_SEEN_IP_LINE("#99E0FFPlayers with the ip &f%ip%&8:%players%"), - COMMAND_SEEN_IP_INFO(" %name%&8"), + COMMAND_SEEN_IP_EMPTY("Unable to find players with ip %ip%."), + COMMAND_SEEN_IP_LINE("Players with the ip %ip%:%players%"), + COMMAND_SEEN_IP_INFO(" Show player's information'>%name%"), - COMMAND_KIT_NO_PERMISSION("You do not have permission to use the kit &f%kit%."), - COMMAND_KIT_NOT_FOUND("Unable to find the kit &f%kit%."), - COMMAND_KIT_ALREADY_EXISTS("The &f%kit% kit already exists."), - COMMAND_KIT_INFORMATION_IN_LINE_EMPTY(MessageType.WITHOUT_PREFIX, "#8cc0ccʏᴏᴜʀ ᴋɪᴛs ♦ &7(%count%/%max%)&8: ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ"), - COMMAND_KIT_INFORMATION_IN_LINE(MessageType.WITHOUT_PREFIX, "#8cc0ccʏᴏᴜʀ ᴋɪᴛs&8:&f%kits%"), - COMMAND_KIT_INFORMATION_IN_LINE_INFO_AVAILABLE(" <#1fde65>%name%&7"), - COMMAND_KIT_INFORMATION_IN_LINE_INFO_UNAVAILABLE(" %time% before getting the kit &f&n%name%'><#de1f1f>%name%&7"), + COMMAND_KIT_NO_PERMISSION("You do not have permission to use the kit %kit%."), + COMMAND_KIT_NOT_FOUND("Unable to find the kit %kit%."), + COMMAND_KIT_ALREADY_EXISTS("The %kit% kit already exists."), + COMMAND_KIT_INFORMATION_IN_LINE_EMPTY(MessageType.WITHOUT_PREFIX, "ʏᴏᴜʀ ᴋɪᴛs ♦ (%count%/%max%): ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ"), + COMMAND_KIT_INFORMATION_IN_LINE(MessageType.WITHOUT_PREFIX, "ʏᴏᴜʀ ᴋɪᴛs:%kits%"), + COMMAND_KIT_INFORMATION_IN_LINE_INFO_AVAILABLE(" Click to get the kit %name%'>%name%"), + COMMAND_KIT_INFORMATION_IN_LINE_INFO_UNAVAILABLE(" You must wait %time% before getting the kit %name%'>%name%"), COMMAND_KIT_INFORMATION_MULTI_LINE_HEADER( "", - "#8cc0ccʏᴏᴜʀ ᴋɪᴛs&8:" + "ʏᴏᴜʀ ᴋɪᴛs:" ), - COMMAND_KIT_INFORMATION_MULTI_LINE_CONTENT_AVAILABLE(MessageType.WITHOUT_PREFIX, "<#8cc0cc>♢ <#1fde65>%name% "), - COMMAND_KIT_INFORMATION_MULTI_LINE_CONTENT_UNAVAILABLE(MessageType.WITHOUT_PREFIX, "<#8cc0cc>♢ %time% before getting the kit &f&n%name%'><#de1f1f>%name% &8(&7%time%&8)"), + COMMAND_KIT_INFORMATION_MULTI_LINE_CONTENT_AVAILABLE(MessageType.WITHOUT_PREFIX, "♢ Click to get the kit %name%'>%name% "), + COMMAND_KIT_INFORMATION_MULTI_LINE_CONTENT_UNAVAILABLE(MessageType.WITHOUT_PREFIX, "♢ You must wait %time% before getting the kit %name%'>%name% (%time%)"), COMMAND_KIT_INFORMATION_MULTI_LINE_FOOTER(MessageType.WITHOUT_PREFIX, ""), - COMMAND_KIT_EDITOR_SAVE("You have just modified the kit &f%kit%."), - COMMAND_KIT_CREATE("You just created the kit &f%kit%."), - COMMAND_KIT_DELETE("You just deleted the kit &f%kit%."), - COMMAND_KIT_DELETE_ERROR("Impossible to delete the kit &f%kit%."), - COMMAND_KIT_GIVE("You just gave the kit &f%kit% to %player%."), - - COMMAND_COOLDOWN_HEADER("&fPlayer cooldown %player% &8(&7%amount%&8)"), - COMMAND_COOLDOWN_EMPTY("&f%player% has no cooldown."), - COMMAND_COOLDOWN_LINE(MessageType.WITHOUT_PREFIX, "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴅᴇʟᴇᴛᴇ&8]"), - COMMAND_COOLDOWN_NOT_FOUND("&f%cooldown% was not found."), - COMMAND_COOLDOWN_DELETE("You just removed the cooldown &f%cooldown% from &n%player%&r."), - COMMAND_COOLDOWN_CREATE("You just created the cooldown &f%key% for &n%player%&r."), + COMMAND_KIT_EDITOR_SAVE("You have just modified the kit %kit%."), + COMMAND_KIT_CREATE("You just created the kit %kit%."), + COMMAND_KIT_DELETE("You just deleted the kit %kit%."), + COMMAND_KIT_DELETE_ERROR("Impossible to delete the kit %kit%."), + COMMAND_KIT_GIVE("You just gave the kit %kit% to %player%."), + + COMMAND_COOLDOWN_HEADER("Player cooldown %player% (%amount%)"), + COMMAND_COOLDOWN_EMPTY("%player% has no cooldown."), + COMMAND_COOLDOWN_LINE(MessageType.WITHOUT_PREFIX, "%key% - %createdAt% - %timeLeft% - Click to remove the cooldown'>[ᴅᴇʟᴇᴛᴇ]"), + COMMAND_COOLDOWN_NOT_FOUND("%cooldown% was not found."), + COMMAND_COOLDOWN_DELETE("You just removed the cooldown %cooldown% from %player%."), + COMMAND_COOLDOWN_CREATE("You just created the cooldown %key% for %player%."), COMMAND_ITEM_EMPTY("You have no item in your hand."), COMMAND_ITEM_CLEAR("You have cleared this item's name"), - COMMAND_ITEM_SET("You have renamed your held item to &f%name%."), - COMMAND_ITEM_LORE_ADD("You just added the line &f%text%."), - COMMAND_ITEM_LORE_SET("You just set line %line% to &f%text%."), + COMMAND_ITEM_SET("You have renamed your held item to %name%."), + COMMAND_ITEM_LORE_ADD("You just added the line %text%."), + COMMAND_ITEM_LORE_SET("You just set line %line% to %text%."), COMMAND_ITEM_LORE_CLEAR("You just clear the item lore."), - COMMAND_ITEM_LORE_SET_ERROR("Can’t find the line &f%line%."), - COMMAND_GIVE_ERROR("Can’t find the item &f%item%."), - COMMAND_GIVE("You just gave &n&fx%amount% %item%&r to player &f%player%."), - COMMAND_GIVE_VAULT("You just gave &n&fx%amount% %item%&r to &f%player% vault's."), - COMMAND_GIVE_ALL("You just gave &n&fx%amount% %item%&r to online player."), + COMMAND_ITEM_LORE_SET_ERROR("Can’t find the line %line%."), + COMMAND_GIVE_ERROR("Can’t find the item %item%."), + COMMAND_GIVE("You just gave x%amount% %item% to player %player%."), + COMMAND_GIVE_VAULT("You just gave x%amount% %item% to %player% vault's."), + COMMAND_GIVE_ALL("You just gave x%amount% %item% to online player."), COMMAND_POWER_TOOL_ERROR_ITEM("You have no item in your hand."), COMMAND_POWER_TOOL_ERROR_RESET("This item has no recorded command."), - COMMAND_POWER_TOOL_INFO("You just put the command &f/%command% on the item &f%item%."), - COMMAND_POWER_TOOL_RESET("You have just deleted the command on the item &f%item%."), + COMMAND_POWER_TOOL_INFO("You just put the command /%command% on the item %item%."), + COMMAND_POWER_TOOL_RESET("You have just deleted the command on the item %item%."), MAILBOX_REMOVE_FULL("You must have space in your inventory to retrieve an item."), MAILBOX_REMOVE_EXPIRE("You can no longer retrieve this item, it has expired."), - MAILBOX_ADD(MessageType.ACTION, "An item has just been added to your mailbox &8(&f/mail&8)"), - MAILBOX_GIVE_ERROR("Can’t find the item &f%item%."), - MAILBOX_GIVE("You just gave &n&fx%amount% %item%&r to player &f%player% mailbox."), - MAILBOX_GIVE_ALL("You just gave &n&fx%amount% %item%&r to online player mailbox."), - MAILBOX_GIVE_HAND("You just sent the item in your hand to &f%player%'s mailbox (&fx%amount% %item%)."), - MAILBOX_GIVE_ALL_HAND("You just sent the item in your hand (&fx%amount% %item%) to every online player's mailbox."), - MAILBOX_CLEAR("You have just cleared the mailbox of &f%player%."), - - MAILBOX_MESSAGE_SEND("Your mail was sent to &f%player%."), - MAILBOX_MESSAGE_RECEIVE("&f%player% sent you a mail &8(&f/mail read&8)"), - MAILBOX_MESSAGE_SEND_ALL("Your mail was sent to &f%amount% player(s)."), - MAILBOX_MESSAGE_NOTIFY("You have &f%amount% unread mail(s), use &f/mail read."), + MAILBOX_ADD(MessageType.ACTION, "An item has just been added to your mailbox (/mail)"), + MAILBOX_GIVE_ERROR("Can’t find the item %item%."), + MAILBOX_GIVE("You just gave x%amount% %item% to player %player% mailbox."), + MAILBOX_GIVE_ALL("You just gave x%amount% %item% to online player mailbox."), + MAILBOX_GIVE_HAND("You just sent the item in your hand to %player%'s mailbox (x%amount% %item%)."), + MAILBOX_GIVE_ALL_HAND("You just sent the item in your hand (x%amount% %item%) to every online player's mailbox."), + MAILBOX_CLEAR("You have just cleared the mailbox of %player%."), + + MAILBOX_MESSAGE_SEND("Your mail was sent to %player%."), + MAILBOX_MESSAGE_RECEIVE("%player% sent you a mail (/mail read)"), + MAILBOX_MESSAGE_SEND_ALL("Your mail was sent to %amount% player(s)."), + MAILBOX_MESSAGE_NOTIFY("You have %amount% unread mail(s), use Click to read your mails'>/mail read."), MAILBOX_MESSAGE_EMPTY("You don't have any mail."), - MAILBOX_MESSAGE_HEADER(MessageType.WITHOUT_PREFIX, "", "Your mails (&f%amount%)", ""), - MAILBOX_MESSAGE_LINE(MessageType.WITHOUT_PREFIX, "&8[&f%date%&8] %player%: &f%message%"), - MAILBOX_MESSAGE_FOOTER(MessageType.WITHOUT_PREFIX, "", "Use &f/mail clearmessages to delete them.", ""), - MAILBOX_MESSAGE_CLEAR("You have just deleted the mails of &f%player%."), + MAILBOX_MESSAGE_HEADER(MessageType.WITHOUT_PREFIX, "", "Your mails (%amount%)", ""), + MAILBOX_MESSAGE_LINE(MessageType.WITHOUT_PREFIX, "[%date%] %player%: %message%"), + MAILBOX_MESSAGE_FOOTER(MessageType.WITHOUT_PREFIX, "", "Use Click to delete your mails'>/mail clearmessages to delete them.", ""), + MAILBOX_MESSAGE_CLEAR("You have just deleted the mails of %player%."), MAILBOX_MESSAGE_SELF("You cannot send a mail to yourself."), MAILBOX_MESSAGE_MUTE("You cannot send a mail while you are muted."), - MAILBOX_MESSAGE_IGNORE("&f%player% does not want to receive your mails."), - MAILBOX_MESSAGE_FULL("The mailbox of &f%player% is full."), - MAILBOX_MESSAGE_TOO_LONG("Your mail cannot be longer than &f%max% characters."), + MAILBOX_MESSAGE_IGNORE("%player% does not want to receive your mails."), + MAILBOX_MESSAGE_FULL("The mailbox of %player% is full."), + MAILBOX_MESSAGE_TOO_LONG("Your mail cannot be longer than %max% characters."), - HOLOGRAM_CREATE_ERROR("Hologram &f%name% already exists."), + HOLOGRAM_CREATE_ERROR("Hologram %name% already exists."), HOLOGRAM_CREATE(MessageType.WITHOUT_PREFIX, - "You just created the hologram &f%name%.", - "&7Use &n/hologram %command% %name%&r&7 command to edit the hologram" + "You just created the hologram %name%.", + "Use /hologram %command% %name% command to edit the hologram" ), - HOLOGRAM_DELETE("Hologram &f%name% has been deleted."), - HOLOGRAM_DOESNT_EXIST("Hologram &f%name% doesn't exists."), - HOLOGRAM_IS_NOT_A_TEXT("Hologram &f%name% is not a text hologram."), - HOLOGRAM_IS_NOT_A_BLOCK("Hologram &f%name% is not a block hologram."), - HOLOGRAM_IS_NOT_A_ITEM("Hologram &f%name% is not a item hologram."), - HOLOGRAM_ADD_LINE("You just added a line to the hologram &f%name%."), - HOLOGRAM_SET_LINE("You just set the line &f%line% to the hologram &f%name%."), - HOLOGRAM_INSERT_BEFORE_LINE("You just set a new line before the line &f%line% to the hologram &f%name%."), - HOLOGRAM_INSERT_AFTER_LINE("You just set a new line after the line &f%line% to the hologram &f%name%."), - HOLOGRAM_LINE_DOESNT_EXIST("The line &f%line% does not exist for the hologram &f%name%."), - HOLOGRAM_REMOVE_LINE("You just remove the line &f%line% to the hologram &f%name%."), - HOLOGRAM_SCALE("You just changed the scale of the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%"), - HOLOGRAM_TRANSLATION("You just changed the translation of the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%"), - HOLOGRAM_MOVE_HERE("You just teleported the hologram &f%name% to your position."), - HOLOGRAM_MOVE_TO("You just teleported the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%"), - HOLOGRAM_BILLBOARD("You just change the billboard of the hologram &f%name% to &f%billboard%."), - HOLOGRAM_TEXT_ALIGNMENT("You just change the text alignment of the hologram &f%name% to &f%textAlignment%."), - HOLOGRAM_YAW("You just change the yaw of the hologram &f%name% to &f%yaw%."), - HOLOGRAM_PITCH("You just change the pitch of the hologram &f%name% to &f%pitch%."), - HOLOGRAM_TEXT_BACKGROUND("You just change the background color of the hologram &f%name% to &f%color%."), + HOLOGRAM_DELETE("Hologram %name% has been deleted."), + HOLOGRAM_DOESNT_EXIST("Hologram %name% doesn't exists."), + HOLOGRAM_IS_NOT_A_TEXT("Hologram %name% is not a text hologram."), + HOLOGRAM_IS_NOT_A_BLOCK("Hologram %name% is not a block hologram."), + HOLOGRAM_IS_NOT_A_ITEM("Hologram %name% is not a item hologram."), + HOLOGRAM_ADD_LINE("You just added a line to the hologram %name%."), + HOLOGRAM_SET_LINE("You just set the line %line% to the hologram %name%."), + HOLOGRAM_INSERT_BEFORE_LINE("You just set a new line before the line %line% to the hologram %name%."), + HOLOGRAM_INSERT_AFTER_LINE("You just set a new line after the line %line% to the hologram %name%."), + HOLOGRAM_LINE_DOESNT_EXIST("The line %line% does not exist for the hologram %name%."), + HOLOGRAM_REMOVE_LINE("You just remove the line %line% to the hologram %name%."), + HOLOGRAM_SCALE("You just changed the scale of the hologram %name% to %x%, %y%, %z%"), + HOLOGRAM_TRANSLATION("You just changed the translation of the hologram %name% to %x%, %y%, %z%"), + HOLOGRAM_MOVE_HERE("You just teleported the hologram %name% to your position."), + HOLOGRAM_MOVE_TO("You just teleported the hologram %name% to %x%, %y%, %z%"), + HOLOGRAM_BILLBOARD("You just change the billboard of the hologram %name% to %billboard%."), + HOLOGRAM_TEXT_ALIGNMENT("You just change the text alignment of the hologram %name% to %textAlignment%."), + HOLOGRAM_YAW("You just change the yaw of the hologram %name% to %yaw%."), + HOLOGRAM_PITCH("You just change the pitch of the hologram %name% to %pitch%."), + HOLOGRAM_TEXT_BACKGROUND("You just change the background color of the hologram %name% to %color%."), HOLOGRAM_TEXT_BACKGROUND_ERROR("Could not parse background color."), - HOLOGRAM_TEXT_SHADOW("You set the text shadow to &f%textshadow% for the hologram &f%name%."), - HOLOGRAM_SEE_THROUGH("You set the see through to &f%seethrough% for the hologram &f%name%."), - HOLOGRAM_SHADOW_STRENGTH("You set the shadow strength to &f%shadow% for the hologram &f%name%."), - HOLOGRAM_SHADOW_RADIUS("You set the shadow radius to &f%shadow% for the hologram &f%name%."), - HOLOGRAM_VIEW_DISTANCE("You set the view distance to &f%distance% for the hologram &f%name%."), - HOLOGRAM_LIST_EMPTY("There is no hologram, to create one please use the command &f/holo create "), - HOLOGRAM_LIST(MessageType.WITHOUT_PREFIX, "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛ Click to delete this hologram'>ᴅᴇʟᴇᴛᴇ"), + HOLOGRAM_TEXT_SHADOW("You set the text shadow to %textshadow% for the hologram %name%."), + HOLOGRAM_SEE_THROUGH("You set the see through to %seethrough% for the hologram %name%."), + HOLOGRAM_SHADOW_STRENGTH("You set the shadow strength to %shadow% for the hologram %name%."), + HOLOGRAM_SHADOW_RADIUS("You set the shadow radius to %shadow% for the hologram %name%."), + HOLOGRAM_VIEW_DISTANCE("You set the view distance to %distance% for the hologram %name%."), + HOLOGRAM_LIST_EMPTY("There is no hologram, to create one please use the command /holo create "), + HOLOGRAM_LIST(MessageType.WITHOUT_PREFIX, "%name% - %world%: %x%, %y%, %z% - Click to be teleported to this hologram'>ᴛᴇʟᴇᴘᴏʀᴛ Click to delete this hologram'>ᴅᴇʟᴇᴛᴇ"), HOLOGRAM_ITEM_ERROR("You can't use air for this hologram."), - HOLOGRAM_ITEM("You just modified the item of the hologram &f%name%."), - HOLOGRAM_BLOCK("You just modified the block of the hologram &f%name% to &f%material%."), + HOLOGRAM_ITEM("You just modified the item of the hologram %name%."), + HOLOGRAM_BLOCK("You just modified the block of the hologram %name% to %material%."), SCOREBOARD_DISABLE("You just disabled the scoreboard."), SCOREBOARD_ENABLE("You just enabled the scoreboard."), - COMMAND_BALTOP_ERROR("Can’t find the economy &f%name%."), - COMMAND_BALTOP_HEADER(MessageType.WITHOUT_PREFIX, "#00f986ᴍᴏsᴛ ᴍᴏɴᴇʏ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶"), - COMMAND_BALTOP(MessageType.WITHOUT_PREFIX, "#00f986#%position% &f%name%&8: %amount%"), + COMMAND_BALTOP_ERROR("Can’t find the economy %name%."), + COMMAND_BALTOP_HEADER(MessageType.WITHOUT_PREFIX, "ᴍᴏsᴛ ᴍᴏɴᴇʏ (%page%/%maxPage%) ◀ - ▶"), + COMMAND_BALTOP(MessageType.WITHOUT_PREFIX, "#%position% %name%: %amount%"), - CODE_NOT_FOUND("Cannot find the code."), + CODE_NOT_FOUND("Cannot find the code."), - COMMAND_VOTEPARTY_SET("You just set the voteparty to &f%amount% votes."), - COMMAND_VOTEPARTY_ADD("You just added &f%amount% vote in the voteparty."), - COMMAND_VOTEPARTY_REMOVE("You have just removed &f%amount% vote in the voteparty."), - COMMAND_VOTEPARTY_INFORMATIONS("VoteParty: %amount%/%objective%"), + COMMAND_VOTEPARTY_SET("You just set the voteparty to %amount% votes."), + COMMAND_VOTEPARTY_ADD("You just added %amount% vote in the voteparty."), + COMMAND_VOTEPARTY_REMOVE("You have just removed %amount% vote in the voteparty."), + COMMAND_VOTEPARTY_INFORMATIONS("VoteParty: %amount%/%objective%"), - COMMAND_VOTE_ADD("You just added a vote to &f%player%."), - COMMAND_VOTE_ADD_ERROR("The site &f%site% doesn't exist !"), + COMMAND_VOTE_ADD("You just added a vote to %player%."), + COMMAND_VOTE_ADD_ERROR("The site %site% doesn't exist !"), COMMAND_VOTE(MessageType.ACTION, "You just voted and received a vote key."), VOTE_OFFLINE( "", - "You have voted %amount% times while offline, use the command /mailbox to get your items !", + "You have voted %amount% times while offline, use the command /mailbox to get your items !", "" ), VAULT_LORE( "", - "&fɪɴғᴏʀᴍᴀᴛɪᴏɴs", - " #f8b175• &7Quantity&8: &e%quantity%", + "ɪɴғᴏʀᴍᴀᴛɪᴏɴs", + " • Quantity: %quantity%", "", - "&f➥ #fc99f8Left Click &7for take 1", - "&f➥ #fc99f8Right Click &7for take 64", - "&f➥ #fc99f8Sneak + Right Click &7for take all" + "➥ Left Click for take 1", + "➥ Right Click for take 64", + "➥ Sneak + Right Click for take all" ), - COMMAND_VAULT_NOT_FOUND("Cannot find the vault &f%vaultId%."), + COMMAND_VAULT_NOT_FOUND("Cannot find the vault %vaultId%."), COMMAND_VAULT_NO_PERMISSION("You do not have permission to view se vault."), - COMMAND_VAULT_SET_SLOT("You just defined the slot of &f%player% to &7%slots%."), - COMMAND_VAULT_ADD_SLOT("you've just added &7%amount% slot to &f%player%."), - COMMAND_VAULT_INFO("Vault info for &f%player%: max &7%max%, permission &7%permissionSlots%, plugin &7%pluginSlots%, used &7%used%, free &7%available%."), - COMMAND_VAULT_GET_SLOT_EMPTY("No item was found in vault &f%vault% slot &f%slot% for &f%player%."), - COMMAND_VAULT_GET_SLOT_SUCCESS("Vault slot for &f%player%: vault &7%vault%, slot &7%slot%, amount &7%amount%, item &f%item%."), - COMMAND_VAULT_DELETE_SLOT_SUCCESS("You just deleted slot &7%slot% from vault &7%vault% for &f%player%."), - COMMAND_VAULT_DELETE_SLOT_EMPTY("Cannot find slot &f%slot% in vault &f%vault% for &f%player%."), + COMMAND_VAULT_SET_SLOT("You just defined the slot of %player% to %slots%."), + COMMAND_VAULT_ADD_SLOT("you've just added %amount% slot to %player%."), + COMMAND_VAULT_INFO("Vault info for %player%: max %max%, permission %permissionSlots%, plugin %pluginSlots%, used %used%, free %available%."), + COMMAND_VAULT_GET_SLOT_EMPTY("No item was found in vault %vault% slot %slot% for %player%."), + COMMAND_VAULT_GET_SLOT_SUCCESS("Vault slot for %player%: vault %vault%, slot %slot%, amount %amount%, item %item%."), + COMMAND_VAULT_DELETE_SLOT_SUCCESS("You just deleted slot %slot% from vault %vault% for %player%."), + COMMAND_VAULT_DELETE_SLOT_EMPTY("Cannot find slot %slot% in vault %vault% for %player%."), COMMAND_VAULT_CHANGE_ICON_ERROR("You have an item in your hand."), COMMAND_VAULT_CHANGE_ICON_SUCCESS("You just changed the icon of your vault."), COMMAND_VAULT_RESET_ICON("You just reset the icon of your vault."), COMMAND_VAULT_RENAME_START("Please write in the chat the new name of the vault."), - COMMAND_VAULT_RENAME_SUCCESS("You just set the vault name to &f%name%."), + COMMAND_VAULT_RENAME_SUCCESS("You just set the vault name to %name%."), COMMAND_VAULT_RENAME_ERROR("You cannot use this name for your vault."), COMMAND_VAULT_RENAME_RESET("You just reset the name of your vault."), COMMAND_ENCHANT_INVALID("You need to specify a valid player."), - COMMAND_ENCHANT_ERROR_ENCHANT("Impossible to find the enchantment &f%name%."), + COMMAND_ENCHANT_ERROR_ENCHANT("Impossible to find the enchantment %enchant%."), COMMAND_ENCHANT_ERROR_ITEM_SELF("You must have an item in your hand."), COMMAND_ENCHANT_ERROR_ITEM_PLAYER("%player% has no item in his hand."), - COMMAND_ENCHANT_REMOVE_SELF("The enchantment &f%enchant% has been removed from your item in hand."), - COMMAND_ENCHANT_REMOVE_PLAYER("The enchantment &f%enchant% has been removed from the item from &f%player%’s hand."), - COMMAND_ENCHANT_SUCCESS_SELF("The enchantment &f%enchant% has been applied to your item in hand."), - COMMAND_ENCHANT_SUCCESS_PLAYER("The enchantment &f%enchant% has been applied to the item from &f%player%’s hand."), + COMMAND_ENCHANT_REMOVE_SELF("The enchantment %enchant% has been removed from your item in hand."), + COMMAND_ENCHANT_REMOVE_PLAYER("The enchantment %enchant% has been removed from the item from %player%’s hand."), + COMMAND_ENCHANT_SUCCESS_SELF("The enchantment %enchant% has been applied to your item in hand."), + COMMAND_ENCHANT_SUCCESS_PLAYER("The enchantment %enchant% has been applied to the item from %player%’s hand."), COMMAND_SUDO_ERROR("You cannot force the player to execute commands."), - COMMAND_SUDO_COMMAND("You just forced the player %player% to execute the command %command%."), - COMMAND_SUDO_MESSAGE("You just forced the player %player% to send the message %message%."), + COMMAND_SUDO_COMMAND("You just forced the player %player% to execute the command %command%."), + COMMAND_SUDO_MESSAGE("You just forced the player %player% to send the message %message%."), - COMMAND_WORLDEDIT_GIVE_ERROR("Unable to find item &f%name%"), - COMMAND_WORLDEDIT_GIVE_SENDER("You just gave &f%item% to the player &f%player%."), - COMMAND_WORLDEDIT_GIVE_RECEIVER("you just received &f%item%."), - COMMAND_WORLDEDIT_MATERIAL_NOT_FOUND("Unable to find the material &f%material%."), + COMMAND_WORLDEDIT_GIVE_ERROR("Unable to find item %name%"), + COMMAND_WORLDEDIT_GIVE_SENDER("You just gave %item% to the player %player%."), + COMMAND_WORLDEDIT_GIVE_RECEIVER("you just received %item%."), + COMMAND_WORLDEDIT_MATERIAL_NOT_FOUND("Unable to find the material %material%."), COMMAND_WORLDEDIT_CONFIRM_PRICE( "", - "Price: %price%", - "Blocks: %materials%", - "Duration: %duration% (%blocks% at %speed% block%s%/s)", + "Price: %price%", + "Blocks: %materials%", + "Duration: %duration% (%blocks% at %speed% block%s%/s)", "", - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" + "Click to confirm action'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" ), COMMAND_WORLDEDIT_CONFIRM_PRICE_CUT( "", - "Price: %price%", - "Duration: %duration% (%blocks% at %speed% block%s%/s)", + "Price: %price%", + "Duration: %duration% (%blocks% at %speed% block%s%/s)", "", - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" + "Click to confirm action'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" ), - COMMAND_WORLDEDIT_CONFIRM_MATERIAL("Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>"), + COMMAND_WORLDEDIT_CONFIRM_MATERIAL("Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>"), COMMAND_WORLDEDIT_CONFIRM_ERROR("You can’t do that now."), COMMAND_WORLDEDIT_STOP_EMPTY("You have no current edition."), @@ -997,8 +997,8 @@ public enum Message { COMMAND_WORLDEDIT_CANCEL("You have just cancelled your current selection."), WORLDEDIT_SELECTION_ERROR("You must select two positions before you make this command."), - WORLDEDIT_SELECTION_VOLUME("You cannot change more than &f%blocks% at the same time."), - WORLDEDIT_SELECTION_DISTANCE("The distance between your two points in your selection is too large. (Maximum %distance% blocks)"), + WORLDEDIT_SELECTION_VOLUME("You cannot change more than %blocks% at the same time."), + WORLDEDIT_SELECTION_DISTANCE("The distance between your two points in your selection is too large. (Maximum %distance% blocks)"), WORLDEDIT_ALREADY_RUNNING("You already have an edit in progress, please wait until it is finished."), WORLDEDIT_NOT_ENOUGH_MONEY("You don’t have enough money to make this edition."), WORLDEDIT_NOT_ENOUGH_ITEMS("You don’t have the items in your inventory, you can’t do that."), @@ -1007,24 +1007,24 @@ public enum Message { WORLDEDIT_SPEED_ERROR("You have no permission to set speed per second."), WORLDEDIT_PERMISSION_ERROR("You cannot use the worldedit here."), - WORLDEDIT_START_CALCULATE_PRICE("&7Price calculation in progress, please wait..."), - WORLDEDIT_START_CHECK_INVENTORY("&7Checking that you have enough items in your inventory, please wait..."), - WORLDEDIT_START_RUNNING("&7Launch of current edition, please wait..."), + WORLDEDIT_START_CALCULATE_PRICE("Price calculation in progress, please wait..."), + WORLDEDIT_START_CHECK_INVENTORY("Checking that you have enough items in your inventory, please wait..."), + WORLDEDIT_START_RUNNING("Launch of current edition, please wait..."), WORLDEDIT_FINISH("Edition completed !"), WORLDEDIT_REFUND( "ʏᴏᴜ'ᴠᴇ ᴊᴜsᴛ ʙᴇᴇɴ ʀᴇғᴜɴᴅ", "", - "Price: %price%", - "Blocks:%materials%" + "Price: %price%", + "Blocks:%materials%" ), - WORLDEDIT_REFUND_MATERIAL(" Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>"), + WORLDEDIT_REFUND_MATERIAL(" Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>"), WORLDEDIT_REFUND_EMPTY("No block to refund"), - WORLDEDIT_BOSSBAR("#45ff45Time remaining: %time%"), + WORLDEDIT_BOSSBAR("Time remaining: %time%"), - EXPERIENCE_TAKEN("You have just taken %amount% %type% to %player%."), - EXPERIENCE_GRANTED("You have just given %amount% %type% to %player%."), - EXPERIENCE_SETTED("You have just set %amount% %type% to %player%."), - EXPERIENCE_QUERIED("%player% have %amount% %type%."), + EXPERIENCE_TAKEN("You have just taken %amount% %type% to %player%."), + EXPERIENCE_GRANTED("You have just given %amount% %type% to %player%."), + EXPERIENCE_SETTED("You have just set %amount% %type% to %player%."), + EXPERIENCE_QUERIED("%player% have %amount% %type%."), DESCRIPTION_EXPERIENCE_QUERY("Query player experience"), DESCRIPTION_EXPERIENCE_SET("Set player experience"), DESCRIPTION_EXPERIENCE_GRANT("Grant experience to player"), @@ -1034,65 +1034,65 @@ public enum Message { COMMAND_LINK_ACCOUNT_ALREADY_LINKED("You are already linked to an account."), COMMAND_LINK_ACCOUNT_INVALID_CODE("Invalid code."), - COMMAND_LINK_ACCOUNT_SUCCESS("You have just linked your account %discord%."), + COMMAND_LINK_ACCOUNT_SUCCESS("You have just linked your account %discord%."), COMMAND_LINK_ACCOUNT_DISABLED("You cannot link your account at this time."), COMMAND_LINK_ACCOUNT_NOT_LINKED("You are not linked to an account."), COMMAND_LINK_ACCOUNT_RESET("You have just reset your account link."), COMMAND_PUB_PATTERN_ERROR("Your message contains forbidden characters."), - COMMAND_PUB(MessageType.WITHOUT_PREFIX, "&8[&fPUB&8] %player%: %message%"), - STEP_DOESNT_EXIST("Step &f%step% does not exist."), - STEP_ALREADY_EXIST("Step &f%step% already started."), - STEP_DOESNT_STARTED("Step &f%step% doesn't started."), + COMMAND_PUB(MessageType.WITHOUT_PREFIX, "[PUB] %player%: %message%"), + STEP_DOESNT_EXIST("Step %step% does not exist."), + STEP_ALREADY_EXIST("Step %step% already started."), + STEP_DOESNT_STARTED("Step %step% doesn't started."), // ItemFrame DESCRIPTION_ITEMFRAME("Toggle item frame visibility"), - COMMAND_ITEMFRAME_INVISIBLE("Item frame is now invisible."), - COMMAND_ITEMFRAME_VISIBLE("Item frame is now visible."), + COMMAND_ITEMFRAME_INVISIBLE("Item frame is now invisible."), + COMMAND_ITEMFRAME_VISIBLE("Item frame is now visible."), COMMAND_ITEMFRAME_NOT_FOUND("No item frame found. Look at an item frame and try again."), // Death Message Module DESCRIPTION_DEATH_MESSAGE("Custom death messages"), - DEATH_GENERIC("#C084FC☠ #E9D5FF%player% #B794F4died."), - DEATH_BY_PLAYER("#C084FC⚔ #E9D5FF%player% #B794F4was slain by #E9D5FF%killer%#B794F4."), - DEATH_BY_MOB("#C084FC☠ #E9D5FF%player% #B794F4was killed by #E9D5FF%killer%#B794F4."), - DEATH_BY_PROJECTILE("#C084FC🏹 #E9D5FF%player% #B794F4was shot by #E9D5FF%killer%#B794F4."), - DEATH_BY_MOB_EXPLOSION("#C084FC💥 #E9D5FF%player% #B794F4was blown up by #E9D5FF%killer%#B794F4."), - DEATH_BY_FALL("#C084FC⬇ #E9D5FF%player% #B794F4fell from a high place."), - DEATH_BY_FIRE("#C084FC🔥 #E9D5FF%player% #B794F4burned to death."), - DEATH_BY_LAVA("#C084FC🌋 #E9D5FF%player% #B794F4tried to swim in lava."), - DEATH_BY_DROWNING("#C084FC💧 #E9D5FF%player% #B794F4drowned."), - DEATH_BY_EXPLOSION("#C084FC💥 #E9D5FF%player% #B794F4was blown up."), - DEATH_BY_LIGHTNING("#C084FC⚡ #E9D5FF%player% #B794F4was struck by lightning."), - DEATH_BY_SUFFOCATION("#C084FC▓ #E9D5FF%player% #B794F4suffocated in a wall."), - DEATH_BY_STARVATION("#C084FC🍖 #E9D5FF%player% #B794F4starved to death."), - DEATH_BY_POISON("#C084FC☣ #E9D5FF%player% #B794F4was poisoned."), - DEATH_BY_MAGIC("#C084FC✦ #E9D5FF%player% #B794F4was killed by magic."), - DEATH_BY_WITHER("#C084FC💀 #E9D5FF%player% #B794F4withered away."), - DEATH_BY_FALLING_BLOCK("#C084FC▼ #E9D5FF%player% #B794F4was squashed by a falling block."), - DEATH_BY_FLY_INTO_WALL("#C084FC💨 #E9D5FF%player% #B794F4experienced kinetic energy."), - DEATH_BY_VOID("#C084FC✧ #E9D5FF%player% #B794F4fell out of the world."), - DEATH_BY_CACTUS("#C084FC🌵 #E9D5FF%player% #B794F4was pricked to death."), - DEATH_BY_CRAMMING("#C084FC⊞ #E9D5FF%player% #B794F4was squished too much."), - DEATH_BY_FREEZE("#C084FC❄ #E9D5FF%player% #B794F4froze to death."), - DEATH_BY_SONIC_BOOM("#C084FC◈ #E9D5FF%player% #B794F4was obliterated by a sonic boom."), - DEATH_BY_MAGMA("#C084FC♨ #E9D5FF%player% #B794F4discovered that the floor was lava."), - DEATH_BY_THORNS("#C084FC✵ #E9D5FF%player% #B794F4was killed trying to hurt someone."), - DEATH_BY_CAMPFIRE("#C084FC🔥 #E9D5FF%player% #B794F4walked into a campfire."), - - DEATH_HOVER_DETAILS("#D8B4FE☠ Death Location#B794F4:\n#E9D5FF▸ World: #D8B4FE%world%\n#E9D5FF▸ Position: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oClick to teleport"), - - COMMAND_DEATH_MESSAGE_TOGGLE_DISABLE("#C084FC☠ #B794F4Death messages are now #E9D5FFhidden #B794F4for %player%#B794F4."), - COMMAND_DEATH_MESSAGE_TOGGLE_ENABLE("#C084FC☠ #B794F4Death messages are now #E9D5FFvisible #B794F4for %player%#B794F4."), + DEATH_GENERIC("☠ %player% died."), + DEATH_BY_PLAYER("⚔ %player% was slain by %killer%."), + DEATH_BY_MOB("☠ %player% was killed by %killer%."), + DEATH_BY_PROJECTILE("🏹 %player% was shot by %killer%."), + DEATH_BY_MOB_EXPLOSION("💥 %player% was blown up by %killer%."), + DEATH_BY_FALL("⬇ %player% fell from a high place."), + DEATH_BY_FIRE("🔥 %player% burned to death."), + DEATH_BY_LAVA("🌋 %player% tried to swim in lava."), + DEATH_BY_DROWNING("💧 %player% drowned."), + DEATH_BY_EXPLOSION("💥 %player% was blown up."), + DEATH_BY_LIGHTNING("⚡ %player% was struck by lightning."), + DEATH_BY_SUFFOCATION("▓ %player% suffocated in a wall."), + DEATH_BY_STARVATION("🍖 %player% starved to death."), + DEATH_BY_POISON("☣ %player% was poisoned."), + DEATH_BY_MAGIC("✦ %player% was killed by magic."), + DEATH_BY_WITHER("💀 %player% withered away."), + DEATH_BY_FALLING_BLOCK("▼ %player% was squashed by a falling block."), + DEATH_BY_FLY_INTO_WALL("💨 %player% experienced kinetic energy."), + DEATH_BY_VOID("✧ %player% fell out of the world."), + DEATH_BY_CACTUS("🌵 %player% was pricked to death."), + DEATH_BY_CRAMMING("⊞ %player% was squished too much."), + DEATH_BY_FREEZE("❄ %player% froze to death."), + DEATH_BY_SONIC_BOOM("◈ %player% was obliterated by a sonic boom."), + DEATH_BY_MAGMA("♨ %player% discovered that the floor was lava."), + DEATH_BY_THORNS("✵ %player% was killed trying to hurt someone."), + DEATH_BY_CAMPFIRE("🔥 %player% walked into a campfire."), + + DEATH_HOVER_DETAILS("☠ Death Location:\n▸ World: %world%\n▸ Position: %x%, %y%, %z%\n\nClick to teleport"), + + COMMAND_DEATH_MESSAGE_TOGGLE_DISABLE("☠ Death messages are now hidden for %player%."), + COMMAND_DEATH_MESSAGE_TOGGLE_ENABLE("☠ Death messages are now visible for %player%."), DESCRIPTION_DEATH_MESSAGE_TOGGLE("Toggle death messages visibility"), // Death messages used by DeathMessageModule (fallback messages when no custom config is set) - DEATH_MESSAGE_GENERIC("#99E0FF%player% &7died."), - DEATH_MESSAGE_PLAYER("#99E0FF%player% &7was slain by #34cfe0%killer% &7using %weapon%&7."), - DEATH_MESSAGE_MOB("#99E0FF%player% &7was killed by &c%mob%&7."), - DEATH_MESSAGE_MYTHIC_MOB("#99E0FF%player% &7was slain by %mob%&7!"), - DEATH_MESSAGE_FISTS("&7fists"), + DEATH_MESSAGE_GENERIC("%player% died."), + DEATH_MESSAGE_PLAYER("%player% was slain by %killer% using %weapon%."), + DEATH_MESSAGE_MOB("%player% was killed by %mob%."), + DEATH_MESSAGE_MYTHIC_MOB("%player% was slain by %mob%!"), + DEATH_MESSAGE_FISTS("fists"), ; private EssentialsPlugin plugin; diff --git a/API/src/main/java/fr/maxlego08/essentials/api/messages/MessageHelper.java b/API/src/main/java/fr/maxlego08/essentials/api/messages/MessageHelper.java index 22b66a8e..1fbfeeb0 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/messages/MessageHelper.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/messages/MessageHelper.java @@ -1,5 +1,11 @@ package fr.maxlego08.essentials.api.messages; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; + +import java.util.List; import java.util.Random; public class MessageHelper { @@ -7,35 +13,40 @@ public class MessageHelper { private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; public static int getStringLength(String message) { + return getStringLength(MiniMessage.miniMessage().deserialize(message), false); + } + + private static int getStringLength(Component component, boolean inheritedBold) { + TextDecoration.State boldState = component.decoration(TextDecoration.BOLD); + boolean bold = boldState == TextDecoration.State.TRUE || (boldState == TextDecoration.State.NOT_SET && inheritedBold); + String text = PlainTextComponentSerializer.plainText().serialize(component.children(List.of())); int messagePxSize = 0; - boolean previousCode = false; - boolean isBold = false; - - for (char c : message.toCharArray()) { - if (c == '§') { - previousCode = true; - } else if (previousCode) { - previousCode = false; - isBold = c == 'l' || c == 'L'; - } else { - DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); - messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); - messagePxSize++; - } + for (char character : text.toCharArray()) { + DefaultFontInfo fontInfo = DefaultFontInfo.getDefaultFontInfo(character); + messagePxSize += (bold ? fontInfo.getBoldLength() : fontInfo.getLength()) + 1; + } + for (Component child : component.children()) { + messagePxSize += getStringLength(child, bold); } return messagePxSize; } + public static String getPlainText(String input) { + return PlainTextComponentSerializer.plainText().serialize(MiniMessage.miniMessage().deserialize(input)); + } + + /** + * @deprecated Use {@link #getPlainText(String)}. MiniMessage formatting is stripped from the input. + */ + @Deprecated(forRemoval = false) public static String removeColorCodes(String input) { - input = input.replaceAll("#[0-9a-fA-F]{6}", ""); - input = input.replaceAll("§[0-9a-fA-Fk-oK-OrR]", ""); - return input.replaceAll("&[0-9a-fA-Fk-oK-OrR]", ""); + return getPlainText(input); } public static String getFormattedString(String start, String end, int size) { - int startSize = getStringLength(removeColorCodes(start)); - int endSize = getStringLength(removeColorCodes(end)); + int startSize = getStringLength(start); + int endSize = getStringLength(end); int needSize = size - startSize - endSize; if (needSize <= 0) return start + end; diff --git a/API/src/main/java/fr/maxlego08/essentials/api/sanction/Sanction.java b/API/src/main/java/fr/maxlego08/essentials/api/sanction/Sanction.java index 9d8ab100..0126bbf2 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/sanction/Sanction.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/sanction/Sanction.java @@ -6,10 +6,6 @@ import java.util.Date; import java.util.UUID; -import java.time.Duration; -import java.util.Date; -import java.util.UUID; - /** * Represents a sanction imposed on a player, such as a ban, mute, or kick. */ diff --git a/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/PlayerBoard.java b/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/PlayerBoard.java index 313ecdbe..c91c17fb 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/PlayerBoard.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/PlayerBoard.java @@ -64,7 +64,7 @@ public interface PlayerBoard { boolean isDeleted(); /** - * Get if the server supports custom scoreboard scores (1.20.3+ servers only). + * Get if the server supports custom scoreboard scores. * * @return true if the server supports custom scores */ diff --git a/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/ScoreboardAnimation.java b/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/ScoreboardAnimation.java index 9276aa52..90c69644 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/ScoreboardAnimation.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/scoreboard/ScoreboardAnimation.java @@ -55,7 +55,7 @@ protected String blendColors(String baseColorHex, String highlightColorHex, int int baseColor = Integer.parseInt(baseColorHex.substring(1), 16); int highlightColor = Integer.parseInt(highlightColorHex.substring(1), 16); - float ratio = (float) Math.abs(currentIndex - highlightIndex) / textLength; + float ratio = Math.min(1.0f, (float) Math.abs(currentIndex - highlightIndex) / Math.max(1, textLength)); int rBase = (baseColor >> 16) & 0xFF; int gBase = (baseColor >> 8) & 0xFF; diff --git a/API/src/main/java/fr/maxlego08/essentials/api/storage/DiscUtils.java b/API/src/main/java/fr/maxlego08/essentials/api/storage/DiscUtils.java index b1917b53..b7adf2d2 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/storage/DiscUtils.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/storage/DiscUtils.java @@ -1,15 +1,14 @@ package fr.maxlego08.essentials.api.storage; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; +import java.net.URI; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; public class DiscUtils { @@ -17,28 +16,16 @@ public class DiscUtils { // CONSTANTS // -------------------------------------------- // - private final static String UTF8 = "UTF-8"; - // -------------------------------------------- // // BYTE // -------------------------------------------- // public static byte[] readBytes(File file) throws IOException { - int length = (int) file.length(); - byte[] output = new byte[length]; - InputStream in = new FileInputStream(file); - int offset = 0; - while (offset < length) { - offset += in.read(output, offset, (length - offset)); - } - in.close(); - return output; + return Files.readAllBytes(file.toPath()); } public static void writeBytes(File file, byte[] bytes) throws IOException { - FileOutputStream out = new FileOutputStream(file); - out.write(bytes); - out.close(); + Files.write(file.toPath(), bytes); } // -------------------------------------------- // @@ -80,11 +67,12 @@ public static String readCatch(File file) { public static boolean downloadUrl(String urlstring, File file) { try { - URL url = new URL(urlstring); - ReadableByteChannel rbc = Channels.newChannel(url.openStream()); - @SuppressWarnings("resource") - FileOutputStream fos = new FileOutputStream(file); - fos.getChannel().transferFrom(rbc, 0, 1 << 24); + URLConnection connection = URI.create(urlstring).toURL().openConnection(); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + try (InputStream in = connection.getInputStream(); FileOutputStream out = new FileOutputStream(file)) { + in.transferTo(out); + } return true; } catch (Exception e) { e.printStackTrace(); @@ -117,21 +105,11 @@ public static boolean deleteRecursive(File path) throws FileNotFoundException { // -------------------------------------------- // public static byte[] utf8(String string) { - try { - return string.getBytes(UTF8); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return null; - } + return string.getBytes(StandardCharsets.UTF_8); } public static String utf8(byte[] bytes) { - try { - return new String(bytes, UTF8); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return null; - } + return new String(bytes, StandardCharsets.UTF_8); } } diff --git a/API/src/main/java/fr/maxlego08/essentials/api/utils/Warp.java b/API/src/main/java/fr/maxlego08/essentials/api/utils/Warp.java index 5b94596d..1c8ae06c 100644 --- a/API/src/main/java/fr/maxlego08/essentials/api/utils/Warp.java +++ b/API/src/main/java/fr/maxlego08/essentials/api/utils/Warp.java @@ -1,7 +1,6 @@ package fr.maxlego08.essentials.api.utils; import fr.maxlego08.essentials.api.commands.Permission; -import org.bukkit.Location; import org.bukkit.permissions.Permissible; /** diff --git a/DiscordBot/build.gradle.kts b/DiscordBot/build.gradle.kts index 2a11a75b..d8ab3a7a 100644 --- a/DiscordBot/build.gradle.kts +++ b/DiscordBot/build.gradle.kts @@ -1,7 +1,7 @@ plugins { `java-library` id("application") - id("com.gradleup.shadow") version "9.0.0-beta11" + alias(libs.plugins.shadow) } application { @@ -9,25 +9,26 @@ application { } group = "zEssentialsDiscord" -version = "1.0.0" repositories { mavenCentral() } dependencies { - testImplementation(platform("org.junit:junit-bom:5.10.0")) - testImplementation("org.junit.jupiter:junit-jupiter") - - implementation("org.yaml:snakeyaml:2.3") - implementation("net.dv8tion:JDA:5.2.0") - implementation("mysql:mysql-connector-java:8.0.33") + implementation(libs.snakeyaml) + implementation(libs.jda) + implementation(libs.mysql.connector) + implementation(libs.mariadb.connector) implementation(project(":API")) } tasks { shadowJar { + relocate("com.tcoded.folialib", "fr.maxlego08.essentials.libs.folialib") + relocate("fr.maxlego08.sarah", "fr.maxlego08.essentials.libs.sarah") + relocate("fr.mrmicky.fastboard", "fr.maxlego08.essentials.libs.fastboard") + rootProject.extra.properties["sha"]?.let { sha -> archiveClassifier.set("${rootProject.extra.properties["classifier"]}-${sha}") } ?: run { diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/CommandManager.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/CommandManager.java index 11a11151..f28bd643 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/CommandManager.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/CommandManager.java @@ -81,7 +81,7 @@ private CommandResultType processRequirements(VCommand command, String[] strings var member = event.getMember(); if (member == null) return CommandResultType.DEFAULT; - if (command.getPermission() == null || member.hasPermission(command.getPermission())) { + if (command.getPermission() == null || member.hasPermission(event.getGuildChannel(), command.getPermission())) { return command.prePerform(instance, strings, event); } diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/commands/CommandSetLinkMessage.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/commands/CommandSetLinkMessage.java index 4c2c8b08..e2f6e0fb 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/commands/CommandSetLinkMessage.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/command/commands/CommandSetLinkMessage.java @@ -16,8 +16,7 @@ public CommandSetLinkMessage(CommandManager commandManager) { @Override protected CommandResultType perform(DiscordBot instance) { - event.reply("The link message has just been sent").setEphemeral(true).queue(); - instance.getLinkManager().sendLinkMessage(this.textChannel); + event.reply("The link message has just been sent").setEphemeral(true).queue(instance.getLinkManager()::sendLinkMessage); return CommandResultType.SUCCESS; } diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/ButtonConfiguration.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/ButtonConfiguration.java index 503fbb98..afd163e5 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/ButtonConfiguration.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/ButtonConfiguration.java @@ -1,6 +1,6 @@ package fr.maxlego08.essentials.bot.config; -import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle; +import net.dv8tion.jda.api.components.buttons.ButtonStyle; public record ButtonConfiguration(String name, ButtonStyle style, boolean disabled, String emoji) { diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/DiscordDatabaseConfiguration.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/DiscordDatabaseConfiguration.java index f1f682d5..e232643b 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/DiscordDatabaseConfiguration.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/config/DiscordDatabaseConfiguration.java @@ -4,9 +4,17 @@ import fr.maxlego08.sarah.database.DatabaseType; public record DiscordDatabaseConfiguration(String tablePrefix, String user, String password, int port, String host, - String database, boolean debug) { + String database, boolean debug, DatabaseType type) { + + public DiscordDatabaseConfiguration(String tablePrefix, String user, String password, int port, String host, String database, boolean debug) { + this(tablePrefix, user, password, port, host, database, debug, DatabaseType.MYSQL); + } public DatabaseConfiguration toDatabaseConfiguration() { - return new DatabaseConfiguration(tablePrefix, user, password, port, host, database, debug, DatabaseType.MYSQL); + DatabaseType databaseType = type == null ? DatabaseType.MYSQL : type; + if (databaseType != DatabaseType.MYSQL && databaseType != DatabaseType.MARIADB) { + throw new IllegalArgumentException("The Discord bot database type must be MYSQL or MARIADB."); + } + return new DatabaseConfiguration(tablePrefix, user, password, port, host, database, debug, databaseType); } } diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/link/LinkManager.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/link/LinkManager.java index 25867adf..18680c8e 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/link/LinkManager.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/link/LinkManager.java @@ -4,14 +4,14 @@ import fr.maxlego08.essentials.api.dto.DiscordCodeDTO; import fr.maxlego08.essentials.bot.DiscordBot; import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.components.actionrow.ActionRow; +import net.dv8tion.jda.api.components.buttons.Button; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.User; -import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.dv8tion.jda.api.interactions.components.buttons.Button; -import net.dv8tion.jda.internal.interactions.component.ButtonImpl; +import net.dv8tion.jda.api.interactions.InteractionHook; import org.jetbrains.annotations.NotNull; import java.util.Optional; @@ -26,14 +26,17 @@ public LinkManager(DiscordBot instance) { this.instance = instance; } - public void sendLinkMessage(MessageChannelUnion textChannel) { + public void sendLinkMessage(InteractionHook hook) { EmbedBuilder builder = instance.getConfiguration().getLink().embed().toEmbed(); var config = instance.getConfiguration().getLink().button(); - Button action = new ButtonImpl(BUTTON_LINK_NAME, config.name(), config.style(), config.disabled(), config.emoji() == null ? null : Emoji.fromUnicode(config.emoji())); + Button action = Button.of(config.style(), BUTTON_LINK_NAME, config.name()).withDisabled(config.disabled()); + if (config.emoji() != null) { + action = action.withEmoji(Emoji.fromUnicode(config.emoji())); + } - textChannel.sendMessageEmbeds(builder.build()).addActionRow(action).queue(); + hook.sendMessageEmbeds(builder.build()).addComponents(ActionRow.of(action)).setEphemeral(false).queue(); } @Override diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/storage/StorageManager.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/storage/StorageManager.java index 874bff3d..37145349 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/storage/StorageManager.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/storage/StorageManager.java @@ -9,9 +9,11 @@ import fr.maxlego08.sarah.DatabaseConnection; import fr.maxlego08.sarah.HikariDatabaseConnection; import fr.maxlego08.sarah.RequestHelper; -import fr.maxlego08.sarah.logger.JULogger; import fr.maxlego08.sarah.logger.Logger; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.util.Locale; import java.util.Optional; import java.util.UUID; import java.util.concurrent.Executor; @@ -34,9 +36,27 @@ public void connect(Configuration configuration) { return; } + checkDatabaseVersion(databaseConnection); this.requestHelper = new RequestHelper(databaseConnection, logger); } + private void checkDatabaseVersion(DatabaseConnection databaseConnection) { + try (Connection connection = databaseConnection.getConnection()) { + DatabaseMetaData metadata = connection.getMetaData(); + String version = metadata.getDatabaseProductVersion(); + if (!"MySQL".equalsIgnoreCase(metadata.getDatabaseProductName()) || version.toLowerCase(Locale.ROOT).contains("mariadb")) { + return; + } + int major = metadata.getDatabaseMajorVersion(); + int minor = metadata.getDatabaseMinorVersion(); + if (major < 8 || (major == 8 && minor < 4)) { + System.err.println("WARNING: Detected MySQL " + version + ". MySQL Connector/J 26.10.0 supports MySQL 8.4 or newer. Please upgrade your database server."); + } + } catch (Exception exception) { + System.err.println("WARNING: Unable to check the database server version: " + exception.getMessage()); + } + } + public RequestHelper getRequestHelper() { return requestHelper; } diff --git a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/utils/ConfigurationUtils.java b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/utils/ConfigurationUtils.java index 60644de1..ad61b0d3 100644 --- a/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/utils/ConfigurationUtils.java +++ b/DiscordBot/src/main/java/fr/maxlego08/essentials/bot/utils/ConfigurationUtils.java @@ -3,13 +3,14 @@ import fr.maxlego08.essentials.api.configuration.NonLoadable; import fr.maxlego08.essentials.api.modules.Loadable; -import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; +import java.lang.reflect.RecordComponent; import java.lang.reflect.Type; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.UUID; @@ -64,7 +65,11 @@ public void loadConfiguration(Map configuration) { } else { Map map = (Map) configuration.get(configKey); - field.set(this, createInstanceFromMap(((Class) field.getGenericType()).getConstructors()[0], map)); + Class type = field.getType(); + Constructor constructor = type.isRecord() + ? type.getDeclaredConstructor(Arrays.stream(type.getRecordComponents()).map(RecordComponent::getType).toArray(Class[]::new)) + : type.getConstructors()[0]; + field.set(this, createInstanceFromMap(constructor, map)); } } catch (Exception exception) { diff --git a/DiscordBot/src/main/resources/config.yml b/DiscordBot/src/main/resources/config.yml index 018f02a2..8c523598 100644 --- a/DiscordBot/src/main/resources/config.yml +++ b/DiscordBot/src/main/resources/config.yml @@ -4,9 +4,11 @@ bot-token: "DISCORD-TOKEN" # The guild ID of your Discord Server -guild-id: 511516467615760405 +guild-id: "511516467615760405" database-configuration: + # Database engine: MYSQL or MARIADB. (MySQL 8.4 or newer is required) + type: MYSQL # The prefix that will be applied to all tables, if you have several plugins with the same database you must have one. # It is advisable not to change this value tablePrefix: "zessentials_" @@ -29,7 +31,7 @@ link: # Allows logs of actions performed by a user log: - channel: 1324025378142163025 + channel: "1324025378142163025" create: "**%name%** (%id%) has just created the code `%code%`." ask: "**%name%** (%id%) has just requested the code `%code%`." @@ -48,7 +50,11 @@ link: title: title: "Link my account" # url: "https://zessentials.net" # The URL of the title - description: "To link your account, follow these steps:\n1. Click the button above.\n2. Run the command in-game to complete the linking of your account." + description: "To link your account, follow these steps: + + 1. Click the button above. + + 2. Run the command in-game to complete the linking of your account." color: r: 10 g: 150 @@ -57,11 +63,11 @@ link: footer: text: "zEssentials - 2025" # iconUrl: "https://groupez.dev/storage/images/users/0/0/0/1.png" # Optional - # thumbnail: + # thumbnail: # url: "https://groupez.dev/storage/images/users/0/0/0/1.png" - # image: + # image: # url: "https://example.com/image.png" - # author: + # author: # name: "Author Name" # url: "https://authorwebsite.net" # Optional - # iconUrl: "https://groupez.dev/storage/images/users/0/0/0/1.png" \ No newline at end of file + # iconUrl: "https://groupez.dev/storage/images/users/0/0/0/1.png" diff --git a/Hooks/AxVault/build.gradle.kts b/Hooks/AxVault/build.gradle.kts index 5c8eccc9..97129d0b 100644 --- a/Hooks/AxVault/build.gradle.kts +++ b/Hooks/AxVault/build.gradle.kts @@ -4,5 +4,5 @@ dependencies { compileOnly(project(":API")) compileOnly(files("libs/AxVaults.jar")) - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/BlockTracker/build.gradle.kts b/Hooks/BlockTracker/build.gradle.kts index 43dcc681..52d85e3a 100644 --- a/Hooks/BlockTracker/build.gradle.kts +++ b/Hooks/BlockTracker/build.gradle.kts @@ -2,6 +2,6 @@ group = "Hooks:BlockTracker" dependencies { compileOnly(project(":API")) - compileOnly("dev.krakenied:blocktracker:1.0.6") - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.blocktracker) + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/MythicMobs/build.gradle.kts b/Hooks/MythicMobs/build.gradle.kts index 9db5cd9b..097dfa22 100644 --- a/Hooks/MythicMobs/build.gradle.kts +++ b/Hooks/MythicMobs/build.gradle.kts @@ -6,6 +6,6 @@ repositories { dependencies { compileOnly(project(":API")) - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") - compileOnly("io.lumine:Mythic-Dist:5.7.2") + compileOnly(libs.paper.api) + compileOnly(libs.mythicmobs) } diff --git a/Hooks/NChat/build.gradle.kts b/Hooks/NChat/build.gradle.kts index d5b7b625..19ce2fdb 100644 --- a/Hooks/NChat/build.gradle.kts +++ b/Hooks/NChat/build.gradle.kts @@ -6,6 +6,6 @@ repositories { dependencies { compileOnly(project(":API")) - compileOnly("com.nickuc.chat:api:5.6") - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.nchat) + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/NuVotifier/build.gradle.kts b/Hooks/NuVotifier/build.gradle.kts index 7926df2b..3628c5ae 100644 --- a/Hooks/NuVotifier/build.gradle.kts +++ b/Hooks/NuVotifier/build.gradle.kts @@ -8,5 +8,5 @@ dependencies { compileOnly(project(":API")) compileOnly(files("libs/nuvotifier.jar")) - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/ProtocolLib/build.gradle.kts b/Hooks/ProtocolLib/build.gradle.kts index 7cf572e8..74be6852 100644 --- a/Hooks/ProtocolLib/build.gradle.kts +++ b/Hooks/ProtocolLib/build.gradle.kts @@ -2,6 +2,6 @@ group = "Hooks:ProtocolLib" dependencies { compileOnly(project(":API")) - compileOnly("net.dmulloy2:ProtocolLib:5.4.0") - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.protocollib) + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/ProtocolLib/src/main/java/fr/maxlego08/essentials/hooks/protocollib/PacketChatListener.java b/Hooks/ProtocolLib/src/main/java/fr/maxlego08/essentials/hooks/protocollib/PacketChatListener.java index 0d3b5ae7..281810a4 100644 --- a/Hooks/ProtocolLib/src/main/java/fr/maxlego08/essentials/hooks/protocollib/PacketChatListener.java +++ b/Hooks/ProtocolLib/src/main/java/fr/maxlego08/essentials/hooks/protocollib/PacketChatListener.java @@ -12,14 +12,12 @@ import fr.maxlego08.essentials.api.utils.component.AdventureComponent; // import fr.maxlego08.essentials.zutils.utils.component.AbstractComponent; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public class PacketChatListener extends PacketAdapter implements PacketRegister { @@ -52,7 +50,7 @@ public void onPacketSending(PacketEvent event) { Matcher matcher = PacketChatListener.this.pattern.matcher(serializedMessage); if (matcher.find()) { - var newComponent = fixClickEvent(parseComponent(serializedMessage)); + var newComponent = parseComponent(serializedMessage); packet.getChatComponents().write(0, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(newComponent))); } } @@ -90,24 +88,4 @@ private Component parseComponent(String message) { return adventureComponent.getComponent(formattedMessage.toString(), builder.build()); } - /** - * Fixes the click event of a component by removing a specific prefix from the event value. - * - *

This method processes the given component and its children recursively to ensure that - * if a click event's value starts with "&f", this prefix is removed.

- * - * @param component The component to be processed. - * @return A new component with the corrected click event values. - */ - private Component fixClickEvent(final Component component) { - final ClickEvent event = component.clickEvent(); - Component copied = component; - - if (event != null && event.value().startsWith("&f")) { - copied = component.clickEvent(ClickEvent.clickEvent(event.action(), event.value().substring(2))); - } - - copied = copied.children(copied.children().stream().map(this::fixClickEvent).collect(Collectors.toList())); - return copied; - } } diff --git a/Hooks/Redis/build.gradle.kts b/Hooks/Redis/build.gradle.kts index c37269cd..33c8993d 100644 --- a/Hooks/Redis/build.gradle.kts +++ b/Hooks/Redis/build.gradle.kts @@ -4,9 +4,9 @@ group = "Hooks:Redis" dependencies { compileOnly(project(":API")) - implementation("redis.clients:jedis:4.3.1") { + implementation(libs.jedis) { exclude(group = "com.google.code.gson", module = "gson") exclude(group = "org.slf4j", module = "slf4j-api") } - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisServer.java b/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisServer.java index 4b2829a4..60b262d7 100644 --- a/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisServer.java +++ b/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisServer.java @@ -37,10 +37,11 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.jetbrains.annotations.NotNull; +import redis.clients.jedis.DefaultJedisClientConfig; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; -import redis.clients.jedis.Protocol; import java.util.ArrayList; import java.util.Arrays; @@ -71,13 +72,11 @@ public void onEnable() { RedisConfiguration redisConfiguration = this.plugin.getConfiguration().getRedisConfiguration(); - String password = redisConfiguration.password(); - if (password == null) { - this.jedisPool = new JedisPool(redisConfiguration.host(), redisConfiguration.port()); - } else { - JedisPoolConfig poolConfigBuilder = new JedisPoolConfig(); - this.jedisPool = new JedisPool(poolConfigBuilder, redisConfiguration.host(), redisConfiguration.port(), Protocol.DEFAULT_TIMEOUT, password); - } + var clientConfig = DefaultJedisClientConfig.builder() + .serverDefaultProtocol() + .password(redisConfiguration.password()) + .build(); + this.jedisPool = new JedisPool(new JedisPoolConfig(), new HostAndPort(redisConfiguration.host(), redisConfiguration.port()), clientConfig); this.plugin.getLogger().info("Redis connected to " + redisConfiguration.host() + ":" + redisConfiguration.port()); @@ -90,7 +89,7 @@ public void onEnable() { Bukkit.getPluginManager().registerEvents(this, this.plugin); // Fetch players name every minute - plugin.getScheduler().runTimerAsync(() -> this.playerCache.setPlayers(jedisPool.getResource().smembers(this.playersKey)), 1, 1, TimeUnit.MINUTES); + plugin.getScheduler().runTimerAsync(() -> execute(jedis -> this.playerCache.setPlayers(jedis.smembers(this.playersKey)), false), 1, 1, TimeUnit.MINUTES); } private void registerListener() { @@ -106,8 +105,15 @@ private void registerListener() { @Override public void onDisable() { if (this.jedisPool != null) { - execute(jedis -> jedis.srem(this.playersKey, Bukkit.getOnlinePlayers().stream().map(Player::getName).toList().toArray(new String[0])), false); - this.jedisPool.close(); + try { + String[] players = Bukkit.getOnlinePlayers().stream().map(Player::getName).toArray(String[]::new); + if (players.length != 0) { + execute(jedis -> jedis.srem(this.playersKey, players), false); + } + } finally { + this.redisSubscriberRunnable.close(); + this.jedisPool.close(); + } } } @@ -193,7 +199,11 @@ public void kickPlayer(UUID uuid, Message message, Object... objects) { @Override public boolean isOnline(String userName) { - return this.onlineCache.get(userName, () -> jedisPool.getResource().sismember(playersKey, userName)); + return this.onlineCache.get(userName, () -> { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.sismember(this.playersKey, userName); + } + }); } @Override @@ -232,7 +242,7 @@ private void sendMessage(T message) { this.plugin.getScheduler().runAsync(wrappedTask -> { String jsonMessage = this.plugin.getGson().toJson(new RedisMessage<>(this.instanceId, message, message.getClass().getName())); this.plugin.debug("Send: " + jsonMessage); - jedisPool.getResource().publish(RedisSubscriberRunnable.messagesChannel, jsonMessage); + execute(jedis -> jedis.publish(RedisSubscriberRunnable.messagesChannel, jsonMessage), false); }); } @@ -278,7 +288,9 @@ private void execute(Consumer consumer, boolean async) { Runnable runnable = () -> { try { if (!jedisPool.isClosed()) { - consumer.accept(jedisPool.getResource()); + try (Jedis jedis = this.jedisPool.getResource()) { + consumer.accept(jedis); + } } } catch (Exception exception) { exception.printStackTrace(); diff --git a/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisSubscriberRunnable.java b/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisSubscriberRunnable.java index 292365e9..cab1f9ba 100644 --- a/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisSubscriberRunnable.java +++ b/Hooks/Redis/src/main/java/fr/maxlego08/essentials/hooks/redis/RedisSubscriberRunnable.java @@ -15,6 +15,8 @@ public class RedisSubscriberRunnable implements Runnable { private final EssentialsPlugin plugin; private final RedisServer server; private final Map, RedisListener> listeners = new HashMap<>(); + private volatile boolean running = true; + private volatile JedisPubSub jedisPubSub; public RedisSubscriberRunnable(EssentialsPlugin plugin, RedisServer server) { this.plugin = plugin; @@ -33,9 +35,20 @@ private RedisListener getListener(Class messageClass) { @Override public void run() { + if (!this.running) { + return; + } + try (Jedis jedis = this.server.getJedisPool().getResource()) { Gson gson = this.plugin.getGson(); - JedisPubSub jedisPubSub = new JedisPubSub() { + this.jedisPubSub = new JedisPubSub() { + @Override + public void onSubscribe(String channel, int subscribedChannels) { + if (!running) { + unsubscribe(); + } + } + @Override public void onMessage(String channel, String message) { @@ -73,9 +86,23 @@ public void onMessage(String channel, String message) { } }; - jedis.subscribe(jedisPubSub, messagesChannel); + jedis.subscribe(this.jedisPubSub, messagesChannel); } catch (Exception exception) { - this.plugin.getLogger().severe("Failed to subscribe: " + exception.getMessage()); + if (this.running) { + this.plugin.getLogger().severe("Failed to subscribe: " + exception.getMessage()); + } + } + } + + public void close() { + this.running = false; + JedisPubSub subscriber = this.jedisPubSub; + if (subscriber != null && subscriber.isSubscribed()) { + try { + subscriber.unsubscribe(); + } catch (Exception exception) { + this.plugin.getLogger().warning("Failed to unsubscribe: " + exception.getMessage()); + } } } } diff --git a/Hooks/SuperiorSkyBlock2/build.gradle.kts b/Hooks/SuperiorSkyBlock2/build.gradle.kts index 99e40204..8154ada6 100644 --- a/Hooks/SuperiorSkyBlock2/build.gradle.kts +++ b/Hooks/SuperiorSkyBlock2/build.gradle.kts @@ -5,7 +5,7 @@ repositories { } dependencies { - compileOnly("com.bgsoftware:SuperiorSkyblockAPI:2024.4") + compileOnly(libs.superiorskyblock) compileOnly(project(":API")) - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/Vault/build.gradle.kts b/Hooks/Vault/build.gradle.kts index be1c8075..929eab28 100644 --- a/Hooks/Vault/build.gradle.kts +++ b/Hooks/Vault/build.gradle.kts @@ -2,8 +2,8 @@ group = "Hooks:Vault" dependencies { compileOnly(project(":API")) - compileOnly("com.github.MilkBowl:VaultAPI:1.7") { + compileOnly(libs.vault) { exclude(group = "org.bukkit", module = "bukkit") } - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.paper.api) } \ No newline at end of file diff --git a/Hooks/WorldGuard/build.gradle.kts b/Hooks/WorldGuard/build.gradle.kts index 95151d4c..f10c6f04 100644 --- a/Hooks/WorldGuard/build.gradle.kts +++ b/Hooks/WorldGuard/build.gradle.kts @@ -7,7 +7,7 @@ repositories { dependencies { compileOnly(project(":API")) - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") - compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.13") - compileOnly("com.sk89q.worldedit:worldedit-core:7.3.12") + compileOnly(libs.paper.api) + compileOnly(libs.worldguard) + compileOnly(libs.worldedit) } \ No newline at end of file diff --git a/NMS/V1_20_6/build.gradle.kts b/NMS/V1_20_6/build.gradle.kts deleted file mode 100644 index 48d03100..00000000 --- a/NMS/V1_20_6/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("io.papermc.paperweight.userdev") -} - -group "NMS:V1_20_6" - -dependencies { - compileOnly(project(":API")) - paperweight.paperDevBundle("1.20.6-R0.1-SNAPSHOT") -} - -paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION - -java { - toolchain.languageVersion = JavaLanguageVersion.of(21) -} - diff --git a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/CraftHologram.java b/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/CraftHologram.java deleted file mode 100644 index 19045777..00000000 --- a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/CraftHologram.java +++ /dev/null @@ -1,151 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_20_6; - -import com.mojang.math.Transformation; -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.hologram.Hologram; -import fr.maxlego08.essentials.api.hologram.HologramType; -import fr.maxlego08.essentials.api.hologram.configuration.BlockHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.HologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.ItemHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.TextHologramConfiguration; -import fr.maxlego08.essentials.api.utils.ReflectionUtils; -import fr.maxlego08.essentials.api.utils.SafeLocation; -import io.papermc.paper.adventure.PaperAdventure; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.Brightness; -import net.minecraft.world.entity.Display; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import org.bukkit.Location; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.joml.Quaternionf; - -import java.util.ArrayList; - -public class CraftHologram extends Hologram { - - private Display display = null; - - public CraftHologram(EssentialsPlugin plugin, HologramType hologramType, HologramConfiguration configuration, String fileName, String name, SafeLocation location) { - super(plugin, hologramType, name, fileName, location, configuration); - } - - @Override - public void create(Player player) { - send(player, new ClientboundAddEntityPacket(display)); - - this.update(player); - } - - @Override - public void delete(Player player) { - this.send(player, new ClientboundRemoveEntitiesPacket(display.getId())); - } - - @Override - public void update(Player player) { - - send(player, new ClientboundTeleportEntityPacket(display)); - - if (display instanceof Display.TextDisplay textDisplay) { - textDisplay.setText(PaperAdventure.asVanilla(getComponentText(player))); - } - - final var values = new ArrayList>(); - for (final var item : ((SynchedEntityData.DataItem[]) ReflectionUtils.getValue(display.getEntityData(), "itemsById"))) { - values.add(item.value()); - } - send(player, new ClientboundSetEntityDataPacket(display.getId(), values)); - } - - @Override - public void create() { - ServerLevel serverLevel = ((CraftWorld) location.getLocation().getWorld()).getHandle(); - switch (hologramType) { - case BLOCK -> this.display = new Display.BlockDisplay(EntityType.BLOCK_DISPLAY, serverLevel); - case ITEM -> this.display = new Display.ItemDisplay(EntityType.ITEM_DISPLAY, serverLevel); - case TEXT -> this.display = new Display.TextDisplay(EntityType.TEXT_DISPLAY, serverLevel); - } - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID"), 1); // Transformation duration - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_START_DELTA_TICKS_ID"), 0); // Interpolation start - - this.updateLocation(); - this.update(); - } - - @Override - public void updateLocation() { - display.setPosRaw(location.getX(), location.getY(), location.getZ()); - display.setYRot(location.getYaw()); - display.setXRot(location.getPitch()); - } - - @Override - public void update() { - - display.setBillboardConstraints(switch (this.configuration.getBillboard()) { - case FIXED -> Display.BillboardConstraints.FIXED; - case VERTICAL -> Display.BillboardConstraints.VERTICAL; - case HORIZONTAL -> Display.BillboardConstraints.HORIZONTAL; - case CENTER -> Display.BillboardConstraints.CENTER; - }); - - if (display instanceof Display.TextDisplay textDisplay && configuration instanceof TextHologramConfiguration textHologramConfiguration) { - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_LINE_WIDTH_ID"), Hologram.LINE_WIDTH); - - var backgroundColor = (EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_BACKGROUND_COLOR_ID"); - var background = textHologramConfiguration.getBackground(); - int backgroundValue = (background == null) ? Display.TextDisplay.INITIAL_BACKGROUND : (background == Hologram.TRANSPARENT) ? 0 : background.value() | 0xC8000000; - display.getEntityData().set(backgroundColor, backgroundValue); - - byte flags = textDisplay.getFlags(); - flags = (byte) (textHologramConfiguration.isTextShadow() ? (flags | Display.TextDisplay.FLAG_SHADOW) : (flags & ~Display.TextDisplay.FLAG_SHADOW)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.LEFT ? (flags | Display.TextDisplay.FLAG_ALIGN_LEFT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_LEFT)); - flags = (byte) (textHologramConfiguration.isSeeThrough() ? (flags | Display.TextDisplay.FLAG_SEE_THROUGH) : (flags & ~Display.TextDisplay.FLAG_SEE_THROUGH)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.RIGHT ? (flags | Display.TextDisplay.FLAG_ALIGN_RIGHT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_RIGHT)); - textDisplay.setFlags(flags); - } else if (display instanceof Display.ItemDisplay itemDisplay && configuration instanceof ItemHologramConfiguration itemHologramConfiguration) { - - itemDisplay.setItemStack(ItemStack.fromBukkitCopy(itemHologramConfiguration.getItemStack())); - } else if (display instanceof Display.BlockDisplay blockDisplay && configuration instanceof BlockHologramConfiguration blockData) { - - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.of("minecraft:" + blockData.getMaterial().name().toLowerCase(), ':')); - blockDisplay.setBlockState(block.defaultBlockState()); - } - - - if (this.configuration.getBrightness() != null) { - display.setBrightnessOverride(new Brightness(this.configuration.getBrightness().getBlockLight(), this.configuration.getBrightness().getSkyLight())); - } - - display.setTransformation(new Transformation( - this.configuration.getTranslation(), - new Quaternionf(), - this.configuration.getScale(), - new Quaternionf()) - ); - - display.setShadowRadius(this.configuration.getShadowRadius()); - display.setShadowStrength(this.configuration.getShadowStrength()); - } - - private void send(Player player, Packet packet) { - ((CraftPlayer) player).getHandle().connection.send(packet); - } - -} diff --git a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/PlayerUtils.java b/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/PlayerUtils.java deleted file mode 100644 index a25cda31..00000000 --- a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/PlayerUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_20_6; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.nms.PlayerUtil; -import fr.maxlego08.essentials.api.utils.inventory.EnderChestHolder; -import fr.maxlego08.essentials.api.utils.inventory.PlayerInventoryHolder; -import fr.maxlego08.essentials.nms.v1_20_6.enderchest.CraftPlayerManager; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -public class PlayerUtils implements PlayerUtil { - - private final EssentialsPlugin plugin; - - public PlayerUtils(EssentialsPlugin plugin) { - this.plugin = plugin; - } - - @Override - public boolean openEnderChest(Player player, OfflinePlayer offlinePlayer) { - - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - EnderChestHolder enderChestHolder = new EnderChestHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - - @Override - public boolean openPlayerInventory(Player player, OfflinePlayer offlinePlayer) { - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - PlayerInventoryHolder enderChestHolder = new PlayerInventoryHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - -} diff --git a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/CraftPlayerManager.java b/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/CraftPlayerManager.java deleted file mode 100644 index 43f10092..00000000 --- a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/CraftPlayerManager.java +++ /dev/null @@ -1,213 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_20_6.enderchest; - -import com.mojang.authlib.GameProfile; -import com.mojang.serialization.Dynamic; -import fr.maxlego08.essentials.api.nms.PlayerManager; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ClientInformation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.ChatVisiblity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.UUID; -import java.util.logging.Logger; - -public class CraftPlayerManager implements PlayerManager { - - private static boolean paper; - - static { - try { - Class.forName("io.papermc.paper.configuration.Configuration"); - paper = true; - } catch (ClassNotFoundException ignored) { - paper = false; - } - } - - private final @NotNull Logger logger; - private @Nullable Field bukkitEntity; - - public CraftPlayerManager(@NotNull Logger logger) { - this.logger = logger; - try { - bukkitEntity = Entity.class.getDeclaredField("bukkitEntity"); - } catch (NoSuchFieldException e) { - logger.warning("Unable to obtain field to inject custom save process - certain player data may be lost when saving!"); - logger.log(java.util.logging.Level.WARNING, e.getMessage(), e); - bukkitEntity = null; - } - } - - public static @NotNull ServerPlayer getHandle(final Player player) { - if (player instanceof CraftPlayer) { - return ((CraftPlayer) player).getHandle(); - } - - Server server = player.getServer(); - ServerPlayer nmsPlayer = null; - - if (server instanceof CraftServer) { - nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getUniqueId()); - } - - if (nmsPlayer == null) { - // Could use reflection to examine fields, but it's honestly not worth the bother. - throw new RuntimeException("Unable to fetch EntityPlayer from Player implementation " + player.getClass().getName()); - } - - return nmsPlayer; - } - - @Override - public @Nullable Player loadPlayer(@NotNull final OfflinePlayer offline) { - MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); - ServerLevel worldServer = server.getLevel(Level.OVERWORLD); - - if (worldServer == null) { - return null; - } - - // Create a new ServerPlayer. - ServerPlayer entity = createNewPlayer(server, worldServer, offline); - - // Stop listening for advancement progression - if this is not cleaned up, loading causes a memory leak. - entity.getAdvancements().stopListening(); - - // Try to load the player's data. - if (loadData(entity)) { - // If data is loaded successfully, return the Bukkit entity. - return entity.getBukkitEntity(); - } - - return null; - } - - private @NotNull ServerPlayer createNewPlayer( - @NotNull MinecraftServer server, - @NotNull ServerLevel worldServer, - @NotNull final OfflinePlayer offline) { - // See net.minecraft.server.players.PlayerList#canPlayerLogin(ServerLoginPacketListenerImpl, GameProfile) - // See net.minecraft.server.network.ServerLoginPacketListenerImpl#handleHello(ServerboundHelloPacket) - GameProfile profile = new GameProfile(offline.getUniqueId(), - offline.getName() != null ? offline.getName() : offline.getUniqueId().toString()); - - ClientInformation dummyInfo = new ClientInformation( - "en_us", - 1, // Reduce distance just in case. - ChatVisiblity.HIDDEN, // Don't accept chat. - false, - ServerPlayer.DEFAULT_MODEL_CUSTOMIZATION, - ServerPlayer.DEFAULT_MAIN_HAND, - true, - false // Don't list in player list (not that this player is in the list anyway). - ); - - ServerPlayer entity = new ServerPlayer(server, worldServer, profile, dummyInfo); - - try { - injectPlayer(entity); - } catch (IllegalAccessException e) { - logger.log( - java.util.logging.Level.WARNING, - e, - () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - } - - return entity; - } - - boolean loadData(@NotNull ServerPlayer player) { - // See CraftPlayer#loadData - CompoundTag loadedData = player.server.getPlayerList().playerIo.load(player).orElse(null); - - if (loadedData == null) { - // Exceptions with loading are logged by Mojang. - return false; - } - - // Read basic data into the player. - player.load(loadedData); - // Also read "extra" data. - player.readAdditionalSaveData(loadedData); - // Game type settings are also loaded separately. - player.loadGameTypes(loadedData); - - if (paper) { - // Paper: world is not loaded by ServerPlayer#load(CompoundTag). - parseWorld(player, loadedData); - } - - return true; - } - - private void parseWorld(@NotNull ServerPlayer player, @NotNull CompoundTag loadedData) { - // See PlayerList#placeNewPlayer - World bukkitWorld; - if (loadedData.contains("WorldUUIDMost") && loadedData.contains("WorldUUIDLeast")) { - // Modern Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(new UUID(loadedData.getLong("WorldUUIDMost"), loadedData.getLong("WorldUUIDLeast"))); - } else if (loadedData.contains("world", net.minecraft.nbt.Tag.TAG_STRING)) { - // Legacy Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(loadedData.getString("world")); - } else { - // Vanilla player data. - DimensionType.parseLegacy(new Dynamic<>(NbtOps.INSTANCE, loadedData.get("Dimension"))) - .resultOrPartial(logger::warning) - .map(player.server::getLevel) - // If ServerLevel exists, set, otherwise move to spawn. - .ifPresentOrElse(player::setServerLevel, () -> player.spawnIn(null)); - return; - } - if (bukkitWorld == null) { - player.spawnIn(null); - return; - } - player.setServerLevel(((CraftWorld) bukkitWorld).getHandle()); - } - - private void injectPlayer(ServerPlayer player) throws IllegalAccessException { - if (bukkitEntity == null) { - return; - } - - bukkitEntity.setAccessible(true); - - bukkitEntity.set(player, new OpenPlayer(player.server.server, player, this)); - } - - @Override - public @NotNull Player inject(@NotNull Player player) { - try { - ServerPlayer nmsPlayer = getHandle(player); - if (nmsPlayer.getBukkitEntity() instanceof OpenPlayer openPlayer) { - return openPlayer; - } - injectPlayer(nmsPlayer); - return nmsPlayer.getBukkitEntity(); - } catch (IllegalAccessException e) { - logger.log( - java.util.logging.Level.WARNING, - e, - () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - return player; - } - } - -} \ No newline at end of file diff --git a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/OpenPlayer.java b/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/OpenPlayer.java deleted file mode 100644 index 689dd755..00000000 --- a/NMS/V1_20_6/src/main/java/fr/maxlego08/essentials/nms/v1_20_6/enderchest/OpenPlayer.java +++ /dev/null @@ -1,174 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_20_6.enderchest; - -import com.mojang.logging.LogUtils; -import net.minecraft.Util; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.Tag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.storage.PlayerDataStorage; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Set; - -public class OpenPlayer extends CraftPlayer { - - /** - * List of tags to always reset when saving. - * - * @see net.minecraft.world.entity.Entity#saveWithoutId(CompoundTag) - * @see net.minecraft.server.level.ServerPlayer#addAdditionalSaveData(CompoundTag) - * @see net.minecraft.world.entity.player.Player#addAdditionalSaveData(CompoundTag) - * @see net.minecraft.world.entity.LivingEntity#addAdditionalSaveData(CompoundTag) - */ - private static final Set RESET_TAGS = Set.of( - // Entity#saveWithoutId(CompoundTag) - "CustomName", - "CustomNameVisible", - "Silent", - "NoGravity", - "Glowing", - "TicksFrozen", - "HasVisualFire", - "Tags", - "Passengers", - // ServerPlayer#addAdditionalSaveData(CompoundTag) - // Intentional omissions to prevent mount loss: Attach, Entity, and RootVehicle - "warden_spawn_tracker", - "enteredNetherPosition", - "SpawnX", - "SpawnY", - "SpawnZ", - "SpawnForced", - "SpawnAngle", - "SpawnDimension", - "raid_omen_position", - // Player#addAdditionalSaveData(CompoundTag) - "ShoulderEntityLeft", - "ShoulderEntityRight", - "LastDeathLocation", - "current_explosion_impact_pos", - // LivingEntity#addAdditionalSaveData(CompoundTag) - "ActiveEffects", // Backwards compat: Renamed from 1.19 - "active_effects", - "SleepingX", - "SleepingY", - "SleepingZ", - "Brain" - ); - - private final CraftPlayerManager manager; - - OpenPlayer(CraftServer server, ServerPlayer entity, CraftPlayerManager manager) { - super(server, entity); - this.manager = manager; - } - - @Override - public void loadData() { - manager.loadData(getHandle()); - } - - @Override - public void saveData() { - - ServerPlayer player = this.getHandle(); - // See net.minecraft.world.level.storage.PlayerDataStorage#save(EntityHuman) - try { - PlayerDataStorage worldNBTStorage = player.server.getPlayerList().playerIo; - - CompoundTag oldData = isOnline() ? null : worldNBTStorage.load(player.getName().getString(), player.getStringUUID()).orElse(null); - CompoundTag playerData = getWritableTag(oldData); - playerData = player.saveWithoutId(playerData); - setExtraData(playerData); - - if (oldData != null) { - // Revert certain special data values when offline. - revertSpecialValues(playerData, oldData); - } - - Path playerDataDir = worldNBTStorage.getPlayerDir().toPath(); - Path tempFile = Files.createTempFile(playerDataDir, player.getStringUUID() + "-", ".dat"); - NbtIo.writeCompressed(playerData, tempFile); - Path dataFile = playerDataDir.resolve(player.getStringUUID() + ".dat"); - Path backupFile = playerDataDir.resolve(player.getStringUUID() + ".dat_old"); - Util.safeReplaceFile(dataFile, tempFile, backupFile); - } catch (Exception e) { - LogUtils.getLogger().warn("Failed to save player data for {}: {}", player.getScoreboardName(), e); - } - } - - @Contract("null -> new") - private @NotNull CompoundTag getWritableTag(@Nullable CompoundTag oldData) { - if (oldData == null) { - return new CompoundTag(); - } - - // Copy old data. This is a deep clone, so operating on it should be safe. - oldData = oldData.copy(); - - // Remove vanilla/server data that is not written every time. - oldData.getAllKeys() - .removeIf(key -> RESET_TAGS.contains(key) || key.startsWith("Bukkit")); - - return oldData; - } - - private void revertSpecialValues(@NotNull CompoundTag newData, @NotNull CompoundTag oldData) { - // Revert automatic updates to play timestamps. - copyValue(oldData, newData, "bukkit", "lastPlayed", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastSeen", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastLogin", NumericTag.class); - } - - private void copyValue( - @NotNull CompoundTag source, - @NotNull CompoundTag target, - @NotNull String container, - @NotNull String key, - @NotNull Class tagType) { - CompoundTag oldContainer = getTag(source, container, CompoundTag.class); - CompoundTag newContainer = getTag(target, container, CompoundTag.class); - - // New container being null means the server implementation doesn't store this data. - if (newContainer == null) { - return; - } - - // If old tag exists, copy it to new location, removing otherwise. - setTag(newContainer, key, getTag(oldContainer, key, tagType)); - } - - private @Nullable T getTag( - @Nullable CompoundTag container, - @NotNull String key, - @NotNull Class dataType) { - if (container == null) { - return null; - } - Tag value = container.get(key); - if (value == null || !dataType.isAssignableFrom(value.getClass())) { - return null; - } - return dataType.cast(value); - } - - private void setTag( - @NotNull CompoundTag container, - @NotNull String key, - @Nullable T data) { - if (data == null) { - container.remove(key); - } else { - container.put(key, data); - } - } - -} \ No newline at end of file diff --git a/NMS/V1_21/build.gradle.kts b/NMS/V1_21/build.gradle.kts deleted file mode 100644 index 45730b0c..00000000 --- a/NMS/V1_21/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("io.papermc.paperweight.userdev") -} - -group "NMS:V1_21" - -dependencies { - compileOnly(project(":API")) - paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT") -} - -paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION - -java { - toolchain.languageVersion = JavaLanguageVersion.of(21) -} - diff --git a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/CraftHologram.java b/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/CraftHologram.java deleted file mode 100644 index 47afefd4..00000000 --- a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/CraftHologram.java +++ /dev/null @@ -1,156 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21; - -import com.mojang.math.Transformation; -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.hologram.Hologram; -import fr.maxlego08.essentials.api.hologram.HologramType; -import fr.maxlego08.essentials.api.hologram.configuration.BlockHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.HologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.ItemHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.TextHologramConfiguration; -import fr.maxlego08.essentials.api.utils.ReflectionUtils; -import fr.maxlego08.essentials.api.utils.SafeLocation; -import io.papermc.paper.adventure.PaperAdventure; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.util.Brightness; -import net.minecraft.world.entity.Display; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import org.bukkit.Location; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.joml.Quaternionf; - -import java.util.ArrayList; -import java.util.Set; - -public class CraftHologram extends Hologram { - - private Display display = null; - - public CraftHologram(EssentialsPlugin plugin, HologramType hologramType, HologramConfiguration configuration, String fileName, String name, SafeLocation location) { - super(plugin, hologramType, name, fileName, location, configuration); - } - - @Override - public void create(Player player) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - ServerEntity serverEntity = new ServerEntity(serverPlayer.serverLevel(), display, 0, false, packet -> { - }, Set.of()); - send(player, new ClientboundAddEntityPacket(display, serverEntity)); - - this.update(player); - } - - @Override - public void delete(Player player) { - this.send(player, new ClientboundRemoveEntitiesPacket(display.getId())); - } - - @Override - public void update(Player player) { - - send(player, new ClientboundTeleportEntityPacket(display)); - - if (display instanceof Display.TextDisplay textDisplay) { - textDisplay.setText(PaperAdventure.asVanilla(getComponentText(player))); - } - - final var values = new ArrayList>(); - for (final var item : ((SynchedEntityData.DataItem[]) ReflectionUtils.getValue(display.getEntityData(), "itemsById"))) { - values.add(item.value()); - } - send(player, new ClientboundSetEntityDataPacket(display.getId(), values)); - } - - @Override - public void create() { - ServerLevel serverLevel = ((CraftWorld) location.getLocation().getWorld()).getHandle(); - switch (hologramType) { - case BLOCK -> this.display = new Display.BlockDisplay(EntityType.BLOCK_DISPLAY, serverLevel); - case ITEM -> this.display = new Display.ItemDisplay(EntityType.ITEM_DISPLAY, serverLevel); - case TEXT -> this.display = new Display.TextDisplay(EntityType.TEXT_DISPLAY, serverLevel); - } - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID"), 1); // Transformation duration - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_START_DELTA_TICKS_ID"), 0); // Interpolation start - - this.updateLocation(); - this.update(); - } - - @Override - public void updateLocation() { - display.setPosRaw(location.getX(), location.getY(), location.getZ()); - display.setYRot(location.getYaw()); - display.setXRot(location.getPitch()); - } - - @Override - public void update() { - - display.setBillboardConstraints(switch (this.configuration.getBillboard()) { - case FIXED -> Display.BillboardConstraints.FIXED; - case VERTICAL -> Display.BillboardConstraints.VERTICAL; - case HORIZONTAL -> Display.BillboardConstraints.HORIZONTAL; - case CENTER -> Display.BillboardConstraints.CENTER; - }); - - if (display instanceof Display.TextDisplay textDisplay && configuration instanceof TextHologramConfiguration textHologramConfiguration) { - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_LINE_WIDTH_ID"), Hologram.LINE_WIDTH); - - var backgroundColor = (EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_BACKGROUND_COLOR_ID"); - var background = textHologramConfiguration.getBackground(); - int backgroundValue = (background == null) ? Display.TextDisplay.INITIAL_BACKGROUND : (background == Hologram.TRANSPARENT) ? 0 : background.value() | 0xC8000000; - display.getEntityData().set(backgroundColor, backgroundValue); - - byte flags = textDisplay.getFlags(); - flags = (byte) (textHologramConfiguration.isTextShadow() ? (flags | Display.TextDisplay.FLAG_SHADOW) : (flags & ~Display.TextDisplay.FLAG_SHADOW)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.LEFT ? (flags | Display.TextDisplay.FLAG_ALIGN_LEFT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_LEFT)); - flags = (byte) (textHologramConfiguration.isSeeThrough() ? (flags | Display.TextDisplay.FLAG_SEE_THROUGH) : (flags & ~Display.TextDisplay.FLAG_SEE_THROUGH)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.RIGHT ? (flags | Display.TextDisplay.FLAG_ALIGN_RIGHT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_RIGHT)); - textDisplay.setFlags(flags); - } else if (display instanceof Display.ItemDisplay itemDisplay && configuration instanceof ItemHologramConfiguration itemHologramConfiguration) { - - itemDisplay.setItemStack(ItemStack.fromBukkitCopy(itemHologramConfiguration.getItemStack())); - } else if (display instanceof Display.BlockDisplay blockDisplay && configuration instanceof BlockHologramConfiguration blockData) { - - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockData.getMaterial().name().toLowerCase())); - blockDisplay.setBlockState(block.defaultBlockState()); - } - - - if (this.configuration.getBrightness() != null) { - display.setBrightnessOverride(new Brightness(this.configuration.getBrightness().getBlockLight(), this.configuration.getBrightness().getSkyLight())); - } - - display.setTransformation(new Transformation( - this.configuration.getTranslation(), - new Quaternionf(), - this.configuration.getScale(), - new Quaternionf()) - ); - - display.setShadowRadius(this.configuration.getShadowRadius()); - display.setShadowStrength(this.configuration.getShadowStrength()); - } - - private void send(Player player, Packet packet) { - ((CraftPlayer) player).getHandle().connection.send(packet); - } - -} diff --git a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/CraftPlayerManager.java b/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/CraftPlayerManager.java deleted file mode 100644 index 6dce3189..00000000 --- a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/CraftPlayerManager.java +++ /dev/null @@ -1,197 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21.enderchest; - -import com.mojang.authlib.GameProfile; -import com.mojang.serialization.Dynamic; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ClientInformation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.ChatVisiblity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.UUID; -import java.util.logging.Logger; - -/** - * Based on: OpenInv - */ -public class CraftPlayerManager implements fr.maxlego08.essentials.api.nms.PlayerManager { - - private static boolean paper; - - static { - try { - Class.forName("io.papermc.paper.configuration.Configuration"); - paper = true; - } catch (ClassNotFoundException ignored) { - paper = false; - } - } - - private final @NotNull Logger logger; - private @Nullable Field bukkitEntity; - - public CraftPlayerManager(@NotNull Logger logger) { - this.logger = logger; - try { - bukkitEntity = Entity.class.getDeclaredField("bukkitEntity"); - } catch (NoSuchFieldException e) { - logger.warning("Unable to obtain field to inject custom save process - certain player data may be lost when saving!"); - logger.log(java.util.logging.Level.WARNING, e.getMessage(), e); - bukkitEntity = null; - } - } - - public static @NotNull ServerPlayer getHandle(final Player player) { - if (player instanceof CraftPlayer) { - return ((CraftPlayer) player).getHandle(); - } - - Server server = player.getServer(); - ServerPlayer nmsPlayer = null; - - if (server instanceof CraftServer) { - nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getUniqueId()); - } - - if (nmsPlayer == null) { - // Could use reflection to examine fields, but it's honestly not worth the bother. - throw new RuntimeException("Unable to fetch EntityPlayer from Player implementation " + player.getClass().getName()); - } - - return nmsPlayer; - } - - @Override - public @Nullable Player loadPlayer(@NotNull final OfflinePlayer offline) { - MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); - ServerLevel worldServer = server.getLevel(Level.OVERWORLD); - - if (worldServer == null) { - return null; - } - - // Create a new ServerPlayer. - ServerPlayer entity = createNewPlayer(server, worldServer, offline); - - // Stop listening for advancement progression - if this is not cleaned up, loading causes a memory leak. - entity.getAdvancements().stopListening(); - - // Try to load the player's data. - if (loadData(entity)) { - // If data is loaded successfully, return the Bukkit entity. - return entity.getBukkitEntity(); - } - - return null; - } - - private @NotNull ServerPlayer createNewPlayer(@NotNull MinecraftServer server, @NotNull ServerLevel worldServer, @NotNull final OfflinePlayer offline) { - // See net.minecraft.server.players.PlayerList#canPlayerLogin(ServerLoginPacketListenerImpl, GameProfile) - // See net.minecraft.server.network.ServerLoginPacketListenerImpl#handleHello(ServerboundHelloPacket) - GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName() != null ? offline.getName() : offline.getUniqueId().toString()); - - ClientInformation dummyInfo = new ClientInformation("en_us", 1, // Reduce distance just in case. - ChatVisiblity.HIDDEN, // Don't accept chat. - false, ServerPlayer.DEFAULT_MODEL_CUSTOMIZATION, ServerPlayer.DEFAULT_MAIN_HAND, true, false // Don't list in player list (not that this player is in the list anyway). - ); - - ServerPlayer entity = new ServerPlayer(server, worldServer, profile, dummyInfo); - - try { - injectPlayer(entity); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - } - - return entity; - } - - boolean loadData(@NotNull ServerPlayer player) { - // See CraftPlayer#loadData - CompoundTag loadedData = player.server.getPlayerList().playerIo.load(player).orElse(null); - - if (loadedData == null) { - // Exceptions with loading are logged by Mojang. - return false; - } - - // Read basic data into the player. - player.load(loadedData); - // Also read "extra" data. - player.readAdditionalSaveData(loadedData); - // Game type settings are also loaded separately. - player.loadGameTypes(loadedData); - - if (paper) { - // Paper: world is not loaded by ServerPlayer#load(CompoundTag). - parseWorld(player, loadedData); - } - - return true; - } - - private void parseWorld(@NotNull ServerPlayer player, @NotNull CompoundTag loadedData) { - // See PlayerList#placeNewPlayer - World bukkitWorld; - if (loadedData.contains("WorldUUIDMost") && loadedData.contains("WorldUUIDLeast")) { - // Modern Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(new UUID(loadedData.getLong("WorldUUIDMost"), loadedData.getLong("WorldUUIDLeast"))); - } else if (loadedData.contains("world", net.minecraft.nbt.Tag.TAG_STRING)) { - // Legacy Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(loadedData.getString("world")); - } else { - // Vanilla player data. - DimensionType.parseLegacy(new Dynamic<>(NbtOps.INSTANCE, loadedData.get("Dimension"))).resultOrPartial(logger::warning).map(player.server::getLevel) - // If ServerLevel exists, set, otherwise move to spawn. - .ifPresentOrElse(player::setServerLevel, () -> player.spawnIn(null)); - return; - } - if (bukkitWorld == null) { - player.spawnIn(null); - return; - } - player.setServerLevel(((CraftWorld) bukkitWorld).getHandle()); - } - - private void injectPlayer(ServerPlayer player) throws IllegalAccessException { - if (bukkitEntity == null) { - return; - } - - bukkitEntity.setAccessible(true); - - bukkitEntity.set(player, new OpenPlayer(player.server.server, player, this)); - } - - @Override - public @NotNull Player inject(@NotNull Player player) { - try { - ServerPlayer nmsPlayer = getHandle(player); - if (nmsPlayer.getBukkitEntity() instanceof OpenPlayer openPlayer) { - return openPlayer; - } - injectPlayer(nmsPlayer); - return nmsPlayer.getBukkitEntity(); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - return player; - } - } - -} diff --git a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/OpenPlayer.java b/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/OpenPlayer.java deleted file mode 100644 index 3a66e367..00000000 --- a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/enderchest/OpenPlayer.java +++ /dev/null @@ -1,136 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21.enderchest; - -import com.mojang.logging.LogUtils; -import net.minecraft.Util; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.Tag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.storage.PlayerDataStorage; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Set; - -public class OpenPlayer extends CraftPlayer { - - /** - * List of tags to always reset when saving. - * - * @see net.minecraft.world.entity.Entity#saveWithoutId(CompoundTag) - * @see ServerPlayer#addAdditionalSaveData(CompoundTag) - * @see net.minecraft.world.entity.LivingEntity#addAdditionalSaveData(CompoundTag) - */ - private static final Set RESET_TAGS = Set.of( - // Entity#saveWithoutId(CompoundTag) - "CustomName", "CustomNameVisible", "Silent", "NoGravity", "Glowing", "TicksFrozen", "HasVisualFire", "Tags", "Passengers", - // ServerPlayer#addAdditionalSaveData(CompoundTag) - // Intentional omissions to prevent mount loss: Attach, Entity, and RootVehicle - "warden_spawn_tracker", "enteredNetherPosition", "SpawnX", "SpawnY", "SpawnZ", "SpawnForced", "SpawnAngle", "SpawnDimension", "raid_omen_position", - // Player#addAdditionalSaveData(CompoundTag) - "ShoulderEntityLeft", "ShoulderEntityRight", "LastDeathLocation", "current_explosion_impact_pos", - // LivingEntity#addAdditionalSaveData(CompoundTag) - "active_effects", "SleepingX", "SleepingY", "SleepingZ", "Brain"); - - private final CraftPlayerManager manager; - - OpenPlayer(CraftServer server, ServerPlayer entity, CraftPlayerManager manager) { - super(server, entity); - this.manager = manager; - } - - @Override - public void loadData() { - manager.loadData(getHandle()); - } - - @Override - public void saveData() { - - ServerPlayer player = this.getHandle(); - // See net.minecraft.world.level.storage.PlayerDataStorage#save(EntityHuman) - try { - PlayerDataStorage worldNBTStorage = player.server.getPlayerList().playerIo; - - CompoundTag oldData = isOnline() ? null : worldNBTStorage.load(player.getName().getString(), player.getStringUUID()).orElse(null); - CompoundTag playerData = getWritableTag(oldData); - playerData = player.saveWithoutId(playerData); - setExtraData(playerData); - - if (oldData != null) { - // Revert certain special data values when offline. - revertSpecialValues(playerData, oldData); - } - - Path playerDataDir = worldNBTStorage.getPlayerDir().toPath(); - Path tempFile = Files.createTempFile(playerDataDir, player.getStringUUID() + "-", ".dat"); - NbtIo.writeCompressed(playerData, tempFile); - Path dataFile = playerDataDir.resolve(player.getStringUUID() + ".dat"); - Path backupFile = playerDataDir.resolve(player.getStringUUID() + ".dat_old"); - Util.safeReplaceFile(dataFile, tempFile, backupFile); - } catch (Exception e) { - LogUtils.getLogger().warn("Failed to save player data for {}: {}", player.getScoreboardName(), e); - } - } - - @Contract("null -> new") - private @NotNull CompoundTag getWritableTag(@Nullable CompoundTag oldData) { - if (oldData == null) { - return new CompoundTag(); - } - - // Copy old data. This is a deep clone, so operating on it should be safe. - oldData = oldData.copy(); - - // Remove vanilla/server data that is not written every time. - oldData.getAllKeys().removeIf(key -> RESET_TAGS.contains(key) || key.startsWith("Bukkit")); - - return oldData; - } - - private void revertSpecialValues(@NotNull CompoundTag newData, @NotNull CompoundTag oldData) { - // Revert automatic updates to play timestamps. - copyValue(oldData, newData, "bukkit", "lastPlayed", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastSeen", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastLogin", NumericTag.class); - } - - private void copyValue(@NotNull CompoundTag source, @NotNull CompoundTag target, @NotNull String container, @NotNull String key, @SuppressWarnings("SameParameterValue") @NotNull Class tagType) { - CompoundTag oldContainer = getTag(source, container, CompoundTag.class); - CompoundTag newContainer = getTag(target, container, CompoundTag.class); - - // New container being null means the server implementation doesn't store this data. - if (newContainer == null) { - return; - } - - // If old tag exists, copy it to new location, removing otherwise. - setTag(newContainer, key, getTag(oldContainer, key, tagType)); - } - - private @Nullable T getTag(@Nullable CompoundTag container, @NotNull String key, @NotNull Class dataType) { - if (container == null) { - return null; - } - Tag value = container.get(key); - if (value == null || !dataType.isAssignableFrom(value.getClass())) { - return null; - } - return dataType.cast(value); - } - - private void setTag(@NotNull CompoundTag container, @NotNull String key, @Nullable T data) { - if (data == null) { - container.remove(key); - } else { - container.put(key, data); - } - } - -} diff --git a/NMS/V1_21_1/build.gradle.kts b/NMS/V1_21_1/build.gradle.kts deleted file mode 100644 index 75abbc99..00000000 --- a/NMS/V1_21_1/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("io.papermc.paperweight.userdev") -} - -group "NMS:V1_21_1" - -dependencies { - compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT") -} - -paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION - -java { - toolchain.languageVersion = JavaLanguageVersion.of(21) -} - diff --git a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/CraftHologram.java b/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/CraftHologram.java deleted file mode 100644 index f4da07ce..00000000 --- a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/CraftHologram.java +++ /dev/null @@ -1,155 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_1; - -import com.mojang.math.Transformation; -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.hologram.Hologram; -import fr.maxlego08.essentials.api.hologram.HologramType; -import fr.maxlego08.essentials.api.hologram.configuration.BlockHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.HologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.ItemHologramConfiguration; -import fr.maxlego08.essentials.api.hologram.configuration.TextHologramConfiguration; -import fr.maxlego08.essentials.api.utils.ReflectionUtils; -import fr.maxlego08.essentials.api.utils.SafeLocation; -import io.papermc.paper.adventure.PaperAdventure; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.util.Brightness; -import net.minecraft.world.entity.Display; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.joml.Quaternionf; - -import java.util.ArrayList; -import java.util.Set; - -public class CraftHologram extends Hologram { - - private Display display = null; - - public CraftHologram(EssentialsPlugin plugin, HologramType hologramType, HologramConfiguration configuration, String fileName, String name, SafeLocation location) { - super(plugin, hologramType, name, fileName, location, configuration); - } - - @Override - public void create(Player player) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - ServerEntity serverEntity = new ServerEntity(serverPlayer.serverLevel(), display, 0, false, packet -> { - }, Set.of()); - send(player, new ClientboundAddEntityPacket(display, serverEntity)); - - this.update(player); - } - - @Override - public void delete(Player player) { - this.send(player, new ClientboundRemoveEntitiesPacket(display.getId())); - } - - @Override - public void update(Player player) { - - send(player, new ClientboundTeleportEntityPacket(display)); - - if (display instanceof Display.TextDisplay textDisplay) { - textDisplay.setText(PaperAdventure.asVanilla(getComponentText(player))); - } - - final var values = new ArrayList>(); - for (final var item : ((SynchedEntityData.DataItem[]) ReflectionUtils.getValue(display.getEntityData(), "itemsById"))) { - values.add(item.value()); - } - send(player, new ClientboundSetEntityDataPacket(display.getId(), values)); - } - - @Override - public void create() { - ServerLevel serverLevel = ((CraftWorld) location.getLocation().getWorld()).getHandle(); - switch (hologramType) { - case BLOCK -> this.display = new Display.BlockDisplay(EntityType.BLOCK_DISPLAY, serverLevel); - case ITEM -> this.display = new Display.ItemDisplay(EntityType.ITEM_DISPLAY, serverLevel); - case TEXT -> this.display = new Display.TextDisplay(EntityType.TEXT_DISPLAY, serverLevel); - } - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID"), 1); // Transformation duration - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_START_DELTA_TICKS_ID"), 0); // Interpolation start - - this.updateLocation(); - this.update(); - } - - @Override - public void updateLocation() { - display.setPosRaw(location.getX(), location.getY(), location.getZ()); - display.setYRot(location.getYaw()); - display.setXRot(location.getPitch()); - } - - @Override - public void update() { - - display.setBillboardConstraints(switch (this.configuration.getBillboard()) { - case FIXED -> Display.BillboardConstraints.FIXED; - case VERTICAL -> Display.BillboardConstraints.VERTICAL; - case HORIZONTAL -> Display.BillboardConstraints.HORIZONTAL; - case CENTER -> Display.BillboardConstraints.CENTER; - }); - - if (display instanceof Display.TextDisplay textDisplay && configuration instanceof TextHologramConfiguration textHologramConfiguration) { - - display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_LINE_WIDTH_ID"), Hologram.LINE_WIDTH); - - var backgroundColor = (EntityDataAccessor) ReflectionUtils.getStaticValue(Display.TextDisplay.class, "DATA_BACKGROUND_COLOR_ID"); - var background = textHologramConfiguration.getBackground(); - int backgroundValue = (background == null) ? Display.TextDisplay.INITIAL_BACKGROUND : (background == Hologram.TRANSPARENT) ? 0 : background.value() | 0xC8000000; - display.getEntityData().set(backgroundColor, backgroundValue); - - byte flags = textDisplay.getFlags(); - flags = (byte) (textHologramConfiguration.isTextShadow() ? (flags | Display.TextDisplay.FLAG_SHADOW) : (flags & ~Display.TextDisplay.FLAG_SHADOW)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.LEFT ? (flags | Display.TextDisplay.FLAG_ALIGN_LEFT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_LEFT)); - flags = (byte) (textHologramConfiguration.isSeeThrough() ? (flags | Display.TextDisplay.FLAG_SEE_THROUGH) : (flags & ~Display.TextDisplay.FLAG_SEE_THROUGH)); - flags = (byte) (textHologramConfiguration.getTextAlignment() == org.bukkit.entity.TextDisplay.TextAlignment.RIGHT ? (flags | Display.TextDisplay.FLAG_ALIGN_RIGHT) : (flags & ~Display.TextDisplay.FLAG_ALIGN_RIGHT)); - textDisplay.setFlags(flags); - } else if (display instanceof Display.ItemDisplay itemDisplay && configuration instanceof ItemHologramConfiguration itemHologramConfiguration) { - - itemDisplay.setItemStack(ItemStack.fromBukkitCopy(itemHologramConfiguration.getItemStack())); - } else if (display instanceof Display.BlockDisplay blockDisplay && configuration instanceof BlockHologramConfiguration blockData) { - - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockData.getMaterial().name().toLowerCase())); - blockDisplay.setBlockState(block.defaultBlockState()); - } - - - if (this.configuration.getBrightness() != null) { - display.setBrightnessOverride(new Brightness(this.configuration.getBrightness().getBlockLight(), this.configuration.getBrightness().getSkyLight())); - } - - display.setTransformation(new Transformation( - this.configuration.getTranslation(), - new Quaternionf(), - this.configuration.getScale(), - new Quaternionf()) - ); - - display.setShadowRadius(this.configuration.getShadowRadius()); - display.setShadowStrength(this.configuration.getShadowStrength()); - } - - private void send(Player player, Packet packet) { - ((CraftPlayer) player).getHandle().connection.send(packet); - } - -} diff --git a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/PlayerUtils.java b/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/PlayerUtils.java deleted file mode 100644 index b8733e06..00000000 --- a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/PlayerUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_1; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.nms.PlayerUtil; -import fr.maxlego08.essentials.api.utils.inventory.EnderChestHolder; -import fr.maxlego08.essentials.api.utils.inventory.PlayerInventoryHolder; -import fr.maxlego08.essentials.nms.v1_21_1.enderchest.CraftPlayerManager; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -public class PlayerUtils implements PlayerUtil { - - private final EssentialsPlugin plugin; - - public PlayerUtils(EssentialsPlugin plugin) { - this.plugin = plugin; - } - - @Override - public boolean openEnderChest(Player player, OfflinePlayer offlinePlayer) { - - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - EnderChestHolder enderChestHolder = new EnderChestHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - - @Override - public boolean openPlayerInventory(Player player, OfflinePlayer offlinePlayer) { - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - PlayerInventoryHolder enderChestHolder = new PlayerInventoryHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - -} diff --git a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/CraftPlayerManager.java b/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/CraftPlayerManager.java deleted file mode 100644 index c8b9822f..00000000 --- a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/CraftPlayerManager.java +++ /dev/null @@ -1,197 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_1.enderchest; - -import com.mojang.authlib.GameProfile; -import com.mojang.serialization.Dynamic; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ClientInformation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.ChatVisiblity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.UUID; -import java.util.logging.Logger; - -/** - * Based on: OpenInv - */ -public class CraftPlayerManager implements fr.maxlego08.essentials.api.nms.PlayerManager { - - private static boolean paper; - - static { - try { - Class.forName("io.papermc.paper.configuration.Configuration"); - paper = true; - } catch (ClassNotFoundException ignored) { - paper = false; - } - } - - private final @NotNull Logger logger; - private @Nullable Field bukkitEntity; - - public CraftPlayerManager(@NotNull Logger logger) { - this.logger = logger; - try { - bukkitEntity = Entity.class.getDeclaredField("bukkitEntity"); - } catch (NoSuchFieldException e) { - logger.warning("Unable to obtain field to inject custom save process - certain player data may be lost when saving!"); - logger.log(java.util.logging.Level.WARNING, e.getMessage(), e); - bukkitEntity = null; - } - } - - public static @NotNull ServerPlayer getHandle(final Player player) { - if (player instanceof CraftPlayer) { - return ((CraftPlayer) player).getHandle(); - } - - Server server = player.getServer(); - ServerPlayer nmsPlayer = null; - - if (server instanceof CraftServer) { - nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getUniqueId()); - } - - if (nmsPlayer == null) { - // Could use reflection to examine fields, but it's honestly not worth the bother. - throw new RuntimeException("Unable to fetch EntityPlayer from Player implementation " + player.getClass().getName()); - } - - return nmsPlayer; - } - - @Override - public @Nullable Player loadPlayer(@NotNull final OfflinePlayer offline) { - MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); - ServerLevel worldServer = server.getLevel(Level.OVERWORLD); - - if (worldServer == null) { - return null; - } - - // Create a new ServerPlayer. - ServerPlayer entity = createNewPlayer(server, worldServer, offline); - - // Stop listening for advancement progression - if this is not cleaned up, loading causes a memory leak. - entity.getAdvancements().stopListening(); - - // Try to load the player's data. - if (loadData(entity)) { - // If data is loaded successfully, return the Bukkit entity. - return entity.getBukkitEntity(); - } - - return null; - } - - private @NotNull ServerPlayer createNewPlayer(@NotNull MinecraftServer server, @NotNull ServerLevel worldServer, @NotNull final OfflinePlayer offline) { - // See net.minecraft.server.players.PlayerList#canPlayerLogin(ServerLoginPacketListenerImpl, GameProfile) - // See net.minecraft.server.network.ServerLoginPacketListenerImpl#handleHello(ServerboundHelloPacket) - GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName() != null ? offline.getName() : offline.getUniqueId().toString()); - - ClientInformation dummyInfo = new ClientInformation("en_us", 1, // Reduce distance just in case. - ChatVisiblity.HIDDEN, // Don't accept chat. - false, ServerPlayer.DEFAULT_MODEL_CUSTOMIZATION, ServerPlayer.DEFAULT_MAIN_HAND, true, false // Don't list in player list (not that this player is in the list anyway). - ); - - ServerPlayer entity = new ServerPlayer(server, worldServer, profile, dummyInfo); - - try { - injectPlayer(entity); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - } - - return entity; - } - - boolean loadData(@NotNull ServerPlayer player) { - // See CraftPlayer#loadData - CompoundTag loadedData = player.server.getPlayerList().playerIo.load(player).orElse(null); - - if (loadedData == null) { - // Exceptions with loading are logged by Mojang. - return false; - } - - // Read basic data into the player. - player.load(loadedData); - // Also read "extra" data. - player.readAdditionalSaveData(loadedData); - // Game type settings are also loaded separately. - player.loadGameTypes(loadedData); - - if (paper) { - // Paper: world is not loaded by ServerPlayer#load(CompoundTag). - parseWorld(player, loadedData); - } - - return true; - } - - private void parseWorld(@NotNull ServerPlayer player, @NotNull CompoundTag loadedData) { - // See PlayerList#placeNewPlayer - World bukkitWorld; - if (loadedData.contains("WorldUUIDMost") && loadedData.contains("WorldUUIDLeast")) { - // Modern Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(new UUID(loadedData.getLong("WorldUUIDMost"), loadedData.getLong("WorldUUIDLeast"))); - } else if (loadedData.contains("world", net.minecraft.nbt.Tag.TAG_STRING)) { - // Legacy Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(loadedData.getString("world")); - } else { - // Vanilla player data. - DimensionType.parseLegacy(new Dynamic<>(NbtOps.INSTANCE, loadedData.get("Dimension"))).resultOrPartial(logger::warning).map(player.server::getLevel) - // If ServerLevel exists, set, otherwise move to spawn. - .ifPresentOrElse(player::setServerLevel, () -> player.spawnIn(null)); - return; - } - if (bukkitWorld == null) { - player.spawnIn(null); - return; - } - player.setServerLevel(((CraftWorld) bukkitWorld).getHandle()); - } - - private void injectPlayer(ServerPlayer player) throws IllegalAccessException { - if (bukkitEntity == null) { - return; - } - - bukkitEntity.setAccessible(true); - - bukkitEntity.set(player, new OpenPlayer(player.server.server, player, this)); - } - - @Override - public @NotNull Player inject(@NotNull Player player) { - try { - ServerPlayer nmsPlayer = getHandle(player); - if (nmsPlayer.getBukkitEntity() instanceof OpenPlayer openPlayer) { - return openPlayer; - } - injectPlayer(nmsPlayer); - return nmsPlayer.getBukkitEntity(); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - return player; - } - } - -} diff --git a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/OpenPlayer.java b/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/OpenPlayer.java deleted file mode 100644 index 3c9e1e21..00000000 --- a/NMS/V1_21_1/src/main/java/fr/maxlego08/essentials/nms/v1_21_1/enderchest/OpenPlayer.java +++ /dev/null @@ -1,136 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_1.enderchest; - -import com.mojang.logging.LogUtils; -import net.minecraft.Util; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.Tag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.storage.PlayerDataStorage; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Set; - -public class OpenPlayer extends CraftPlayer { - - /** - * List of tags to always reset when saving. - * - * @see net.minecraft.world.entity.Entity#saveWithoutId(CompoundTag) - * @see ServerPlayer#addAdditionalSaveData(CompoundTag) - * @see net.minecraft.world.entity.LivingEntity#addAdditionalSaveData(CompoundTag) - */ - private static final Set RESET_TAGS = Set.of( - // Entity#saveWithoutId(CompoundTag) - "CustomName", "CustomNameVisible", "Silent", "NoGravity", "Glowing", "TicksFrozen", "HasVisualFire", "Tags", "Passengers", - // ServerPlayer#addAdditionalSaveData(CompoundTag) - // Intentional omissions to prevent mount loss: Attach, Entity, and RootVehicle - "warden_spawn_tracker", "enteredNetherPosition", "SpawnX", "SpawnY", "SpawnZ", "SpawnForced", "SpawnAngle", "SpawnDimension", "raid_omen_position", - // Player#addAdditionalSaveData(CompoundTag) - "ShoulderEntityLeft", "ShoulderEntityRight", "LastDeathLocation", "current_explosion_impact_pos", - // LivingEntity#addAdditionalSaveData(CompoundTag) - "active_effects", "SleepingX", "SleepingY", "SleepingZ", "Brain"); - - private final CraftPlayerManager manager; - - OpenPlayer(CraftServer server, ServerPlayer entity, CraftPlayerManager manager) { - super(server, entity); - this.manager = manager; - } - - @Override - public void loadData() { - manager.loadData(getHandle()); - } - - @Override - public void saveData() { - - ServerPlayer player = this.getHandle(); - // See net.minecraft.world.level.storage.PlayerDataStorage#save(EntityHuman) - try { - PlayerDataStorage worldNBTStorage = player.server.getPlayerList().playerIo; - - CompoundTag oldData = isOnline() ? null : worldNBTStorage.load(player.getName().getString(), player.getStringUUID()).orElse(null); - CompoundTag playerData = getWritableTag(oldData); - playerData = player.saveWithoutId(playerData); - setExtraData(playerData); - - if (oldData != null) { - // Revert certain special data values when offline. - revertSpecialValues(playerData, oldData); - } - - Path playerDataDir = worldNBTStorage.getPlayerDir().toPath(); - Path tempFile = Files.createTempFile(playerDataDir, player.getStringUUID() + "-", ".dat"); - NbtIo.writeCompressed(playerData, tempFile); - Path dataFile = playerDataDir.resolve(player.getStringUUID() + ".dat"); - Path backupFile = playerDataDir.resolve(player.getStringUUID() + ".dat_old"); - Util.safeReplaceFile(dataFile, tempFile, backupFile); - } catch (Exception e) { - LogUtils.getLogger().warn("Failed to save player data for {}: {}", player.getScoreboardName(), e); - } - } - - @Contract("null -> new") - private @NotNull CompoundTag getWritableTag(@Nullable CompoundTag oldData) { - if (oldData == null) { - return new CompoundTag(); - } - - // Copy old data. This is a deep clone, so operating on it should be safe. - oldData = oldData.copy(); - - // Remove vanilla/server data that is not written every time. - oldData.getAllKeys().removeIf(key -> RESET_TAGS.contains(key) || key.startsWith("Bukkit")); - - return oldData; - } - - private void revertSpecialValues(@NotNull CompoundTag newData, @NotNull CompoundTag oldData) { - // Revert automatic updates to play timestamps. - copyValue(oldData, newData, "bukkit", "lastPlayed", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastSeen", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastLogin", NumericTag.class); - } - - private void copyValue(@NotNull CompoundTag source, @NotNull CompoundTag target, @NotNull String container, @NotNull String key, @SuppressWarnings("SameParameterValue") @NotNull Class tagType) { - CompoundTag oldContainer = getTag(source, container, CompoundTag.class); - CompoundTag newContainer = getTag(target, container, CompoundTag.class); - - // New container being null means the server implementation doesn't store this data. - if (newContainer == null) { - return; - } - - // If old tag exists, copy it to new location, removing otherwise. - setTag(newContainer, key, getTag(oldContainer, key, tagType)); - } - - private @Nullable T getTag(@Nullable CompoundTag container, @NotNull String key, @NotNull Class dataType) { - if (container == null) { - return null; - } - Tag value = container.get(key); - if (value == null || !dataType.isAssignableFrom(value.getClass())) { - return null; - } - return dataType.cast(value); - } - - private void setTag(@NotNull CompoundTag container, @NotNull String key, @Nullable T data) { - if (data == null) { - container.remove(key); - } else { - container.put(key, data); - } - } - -} diff --git a/NMS/V1_21_10/build.gradle.kts b/NMS/V1_21_10/build.gradle.kts index 2393f324..745f8d42 100644 --- a/NMS/V1_21_10/build.gradle.kts +++ b/NMS/V1_21_10/build.gradle.kts @@ -1,13 +1,13 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_10" dependencies { compileOnly(project(":API")) - compileOnly("net.kyori:adventure-api:4.26.1") - paperweight.paperDevBundle("1.21.10-R0.1-SNAPSHOT") + compileOnly(libs.adventure.api) + paperweight.devBundle(libs.paperDevBundle12110) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_11/build.gradle.kts b/NMS/V1_21_11/build.gradle.kts index 76d9aa6a..67ff0b2a 100644 --- a/NMS/V1_21_11/build.gradle.kts +++ b/NMS/V1_21_11/build.gradle.kts @@ -1,13 +1,13 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_11" dependencies { compileOnly(project(":API")) - compileOnly("net.kyori:adventure-api:4.26.1") - paperweight.paperDevBundle("1.21.11-R0.1-SNAPSHOT") + compileOnly(libs.adventure.api) + paperweight.devBundle(libs.paperDevBundle12111) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_3/build.gradle.kts b/NMS/V1_21_3/build.gradle.kts deleted file mode 100644 index 49528a3c..00000000 --- a/NMS/V1_21_3/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("io.papermc.paperweight.userdev") -} - -group "NMS:V1_21_3" - -dependencies { - compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.3-R0.1-SNAPSHOT") -} - -paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION - -java { - toolchain.languageVersion = JavaLanguageVersion.of(21) -} - diff --git a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/PlayerUtils.java b/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/PlayerUtils.java deleted file mode 100644 index 46006b1b..00000000 --- a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/PlayerUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_3; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.nms.PlayerUtil; -import fr.maxlego08.essentials.api.utils.inventory.EnderChestHolder; -import fr.maxlego08.essentials.api.utils.inventory.PlayerInventoryHolder; -import fr.maxlego08.essentials.nms.v1_21_3.enderchest.CraftPlayerManager; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -public class PlayerUtils implements PlayerUtil { - - private final EssentialsPlugin plugin; - - public PlayerUtils(EssentialsPlugin plugin) { - this.plugin = plugin; - } - - @Override - public boolean openEnderChest(Player player, OfflinePlayer offlinePlayer) { - - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - EnderChestHolder enderChestHolder = new EnderChestHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - - @Override - public boolean openPlayerInventory(Player player, OfflinePlayer offlinePlayer) { - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); - var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); - - if (loadPlayer != null) { - PlayerInventoryHolder enderChestHolder = new PlayerInventoryHolder(loadPlayer); - player.openInventory(enderChestHolder.getInventory()); - return true; - } - return false; - } - -} diff --git a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/CraftPlayerManager.java b/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/CraftPlayerManager.java deleted file mode 100644 index b672a8ff..00000000 --- a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/CraftPlayerManager.java +++ /dev/null @@ -1,199 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_3.enderchest; - -import com.mojang.authlib.GameProfile; -import com.mojang.serialization.Dynamic; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ClientInformation; -import net.minecraft.server.level.ParticleStatus; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.ChatVisiblity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.UUID; -import java.util.logging.Logger; - -/** - * Based on: OpenInv - */ -public class CraftPlayerManager implements fr.maxlego08.essentials.api.nms.PlayerManager { - - private static boolean paper; - - static { - try { - Class.forName("io.papermc.paper.configuration.Configuration"); - paper = true; - } catch (ClassNotFoundException ignored) { - paper = false; - } - } - - private final @NotNull Logger logger; - private @Nullable Field bukkitEntity; - - public CraftPlayerManager(@NotNull Logger logger) { - this.logger = logger; - try { - bukkitEntity = Entity.class.getDeclaredField("bukkitEntity"); - } catch (NoSuchFieldException e) { - logger.warning("Unable to obtain field to inject custom save process - certain player data may be lost when saving!"); - logger.log(java.util.logging.Level.WARNING, e.getMessage(), e); - bukkitEntity = null; - } - } - - public static @NotNull ServerPlayer getHandle(final Player player) { - if (player instanceof CraftPlayer) { - return ((CraftPlayer) player).getHandle(); - } - - Server server = player.getServer(); - ServerPlayer nmsPlayer = null; - - if (server instanceof CraftServer) { - nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getUniqueId()); - } - - if (nmsPlayer == null) { - // Could use reflection to examine fields, but it's honestly not worth the bother. - throw new RuntimeException("Unable to fetch EntityPlayer from Player implementation " + player.getClass().getName()); - } - - return nmsPlayer; - } - - @Override - public @Nullable Player loadPlayer(@NotNull final OfflinePlayer offline) { - MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); - ServerLevel worldServer = server.getLevel(Level.OVERWORLD); - - if (worldServer == null) { - return null; - } - - // Create a new ServerPlayer. - ServerPlayer entity = createNewPlayer(server, worldServer, offline); - - // Stop listening for advancement progression - if this is not cleaned up, loading causes a memory leak. - entity.getAdvancements().stopListening(); - - // Try to load the player's data. - if (loadData(entity)) { - // If data is loaded successfully, return the Bukkit entity. - return entity.getBukkitEntity(); - } - - return null; - } - - private @NotNull ServerPlayer createNewPlayer(@NotNull MinecraftServer server, @NotNull ServerLevel worldServer, @NotNull final OfflinePlayer offline) { - // See net.minecraft.server.players.PlayerList#canPlayerLogin(ServerLoginPacketListenerImpl, GameProfile) - // See net.minecraft.server.network.ServerLoginPacketListenerImpl#handleHello(ServerboundHelloPacket) - GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName() != null ? offline.getName() : offline.getUniqueId().toString()); - - ClientInformation dummyInfo = new ClientInformation("en_us", 1, // Reduce distance just in case. - ChatVisiblity.HIDDEN, // Don't accept chat. - false, ServerPlayer.DEFAULT_MODEL_CUSTOMIZATION, ServerPlayer.DEFAULT_MAIN_HAND, true, false, // Don't list in player list (not that this player is in the list anyway). - ParticleStatus.ALL - ); - - ServerPlayer entity = new ServerPlayer(server, worldServer, profile, dummyInfo); - - try { - injectPlayer(entity); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - } - - return entity; - } - - boolean loadData(@NotNull ServerPlayer player) { - // See CraftPlayer#loadData - CompoundTag loadedData = player.server.getPlayerList().playerIo.load(player).orElse(null); - - if (loadedData == null) { - // Exceptions with loading are logged by Mojang. - return false; - } - - // Read basic data into the player. - player.load(loadedData); - // Also read "extra" data. - player.readAdditionalSaveData(loadedData); - // Game type settings are also loaded separately. - player.loadGameTypes(loadedData); - - if (paper) { - // Paper: world is not loaded by ServerPlayer#load(CompoundTag). - parseWorld(player, loadedData); - } - - return true; - } - - private void parseWorld(@NotNull ServerPlayer player, @NotNull CompoundTag loadedData) { - // See PlayerList#placeNewPlayer - World bukkitWorld; - if (loadedData.contains("WorldUUIDMost") && loadedData.contains("WorldUUIDLeast")) { - // Modern Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(new UUID(loadedData.getLong("WorldUUIDMost"), loadedData.getLong("WorldUUIDLeast"))); - } else if (loadedData.contains("world", net.minecraft.nbt.Tag.TAG_STRING)) { - // Legacy Bukkit world. - bukkitWorld = Bukkit.getServer().getWorld(loadedData.getString("world")); - } else { - // Vanilla player data. - DimensionType.parseLegacy(new Dynamic<>(NbtOps.INSTANCE, loadedData.get("Dimension"))).resultOrPartial(logger::warning).map(player.server::getLevel) - // If ServerLevel exists, set, otherwise move to spawn. - .ifPresentOrElse(player::setServerLevel, () -> player.spawnIn(null)); - return; - } - if (bukkitWorld == null) { - player.spawnIn(null); - return; - } - player.setServerLevel(((CraftWorld) bukkitWorld).getHandle()); - } - - private void injectPlayer(ServerPlayer player) throws IllegalAccessException { - if (bukkitEntity == null) { - return; - } - - bukkitEntity.setAccessible(true); - - bukkitEntity.set(player, new OpenPlayer(player.server.server, player, this)); - } - - @Override - public @NotNull Player inject(@NotNull Player player) { - try { - ServerPlayer nmsPlayer = getHandle(player); - if (nmsPlayer.getBukkitEntity() instanceof OpenPlayer openPlayer) { - return openPlayer; - } - injectPlayer(nmsPlayer); - return nmsPlayer.getBukkitEntity(); - } catch (IllegalAccessException e) { - logger.log(java.util.logging.Level.WARNING, e, () -> "Unable to inject ServerPlayer, certain player data may be lost when saving!"); - return player; - } - } - -} diff --git a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/OpenPlayer.java b/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/OpenPlayer.java deleted file mode 100644 index a1030203..00000000 --- a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/enderchest/OpenPlayer.java +++ /dev/null @@ -1,136 +0,0 @@ -package fr.maxlego08.essentials.nms.v1_21_3.enderchest; - -import com.mojang.logging.LogUtils; -import net.minecraft.Util; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.Tag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.storage.PlayerDataStorage; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Set; - -public class OpenPlayer extends CraftPlayer { - - /** - * List of tags to always reset when saving. - * - * @see net.minecraft.world.entity.Entity#saveWithoutId(CompoundTag) - * @see ServerPlayer#addAdditionalSaveData(CompoundTag) - * @see net.minecraft.world.entity.LivingEntity#addAdditionalSaveData(CompoundTag) - */ - private static final Set RESET_TAGS = Set.of( - // Entity#saveWithoutId(CompoundTag) - "CustomName", "CustomNameVisible", "Silent", "NoGravity", "Glowing", "TicksFrozen", "HasVisualFire", "Tags", "Passengers", - // ServerPlayer#addAdditionalSaveData(CompoundTag) - // Intentional omissions to prevent mount loss: Attach, Entity, and RootVehicle - "warden_spawn_tracker", "enteredNetherPosition", "SpawnX", "SpawnY", "SpawnZ", "SpawnForced", "SpawnAngle", "SpawnDimension", "raid_omen_position", - // Player#addAdditionalSaveData(CompoundTag) - "ShoulderEntityLeft", "ShoulderEntityRight", "LastDeathLocation", "current_explosion_impact_pos", - // LivingEntity#addAdditionalSaveData(CompoundTag) - "active_effects", "SleepingX", "SleepingY", "SleepingZ", "Brain"); - - private final CraftPlayerManager manager; - - OpenPlayer(CraftServer server, ServerPlayer entity, CraftPlayerManager manager) { - super(server, entity); - this.manager = manager; - } - - @Override - public void loadData() { - manager.loadData(getHandle()); - } - - @Override - public void saveData() { - - ServerPlayer player = this.getHandle(); - // See net.minecraft.world.level.storage.PlayerDataStorage#save(EntityHuman) - try { - PlayerDataStorage worldNBTStorage = player.server.getPlayerList().playerIo; - - CompoundTag oldData = isOnline() ? null : worldNBTStorage.load(player.getName().getString(), player.getStringUUID()).orElse(null); - CompoundTag playerData = getWritableTag(oldData); - playerData = player.saveWithoutId(playerData); - setExtraData(playerData); - - if (oldData != null) { - // Revert certain special data values when offline. - revertSpecialValues(playerData, oldData); - } - - Path playerDataDir = worldNBTStorage.getPlayerDir().toPath(); - Path tempFile = Files.createTempFile(playerDataDir, player.getStringUUID() + "-", ".dat"); - NbtIo.writeCompressed(playerData, tempFile); - Path dataFile = playerDataDir.resolve(player.getStringUUID() + ".dat"); - Path backupFile = playerDataDir.resolve(player.getStringUUID() + ".dat_old"); - Util.safeReplaceFile(dataFile, tempFile, backupFile); - } catch (Exception e) { - LogUtils.getLogger().warn("Failed to save player data for {}: {}", player.getScoreboardName(), e); - } - } - - @Contract("null -> new") - private @NotNull CompoundTag getWritableTag(@Nullable CompoundTag oldData) { - if (oldData == null) { - return new CompoundTag(); - } - - // Copy old data. This is a deep clone, so operating on it should be safe. - oldData = oldData.copy(); - - // Remove vanilla/server data that is not written every time. - oldData.getAllKeys().removeIf(key -> RESET_TAGS.contains(key) || key.startsWith("Bukkit")); - - return oldData; - } - - private void revertSpecialValues(@NotNull CompoundTag newData, @NotNull CompoundTag oldData) { - // Revert automatic updates to play timestamps. - copyValue(oldData, newData, "bukkit", "lastPlayed", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastSeen", NumericTag.class); - copyValue(oldData, newData, "Paper", "LastLogin", NumericTag.class); - } - - private void copyValue(@NotNull CompoundTag source, @NotNull CompoundTag target, @NotNull String container, @NotNull String key, @SuppressWarnings("SameParameterValue") @NotNull Class tagType) { - CompoundTag oldContainer = getTag(source, container, CompoundTag.class); - CompoundTag newContainer = getTag(target, container, CompoundTag.class); - - // New container being null means the server implementation doesn't store this data. - if (newContainer == null) { - return; - } - - // If old tag exists, copy it to new location, removing otherwise. - setTag(newContainer, key, getTag(oldContainer, key, tagType)); - } - - private @Nullable T getTag(@Nullable CompoundTag container, @NotNull String key, @NotNull Class dataType) { - if (container == null) { - return null; - } - Tag value = container.get(key); - if (value == null || !dataType.isAssignableFrom(value.getClass())) { - return null; - } - return dataType.cast(value); - } - - private void setTag(@NotNull CompoundTag container, @NotNull String key, @Nullable T data) { - if (data == null) { - container.remove(key); - } else { - container.put(key, data); - } - } - -} diff --git a/NMS/V1_21_4/build.gradle.kts b/NMS/V1_21_4/build.gradle.kts index 75087331..f45ccf10 100644 --- a/NMS/V1_21_4/build.gradle.kts +++ b/NMS/V1_21_4/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_4" dependencies { compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.4-R0.1-SNAPSHOT") + paperweight.devBundle(libs.paperDevBundle1214) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_4/src/main/java/fr/maxlego08/essentials/nms/v1_21_4/enderchest/CraftPlayerManager.java b/NMS/V1_21_4/src/main/java/fr/maxlego08/essentials/nms/v1_21_4/enderchest/CraftPlayerManager.java index 575779d4..8a070659 100644 --- a/NMS/V1_21_4/src/main/java/fr/maxlego08/essentials/nms/v1_21_4/enderchest/CraftPlayerManager.java +++ b/NMS/V1_21_4/src/main/java/fr/maxlego08/essentials/nms/v1_21_4/enderchest/CraftPlayerManager.java @@ -33,17 +33,6 @@ */ public class CraftPlayerManager implements fr.maxlego08.essentials.api.nms.PlayerManager { - private static boolean paper; - - static { - try { - Class.forName("io.papermc.paper.configuration.Configuration"); - paper = true; - } catch (ClassNotFoundException ignored) { - paper = false; - } - } - private final @NotNull Logger logger; private @Nullable Field bukkitEntity; @@ -140,10 +129,8 @@ boolean loadData(@NotNull ServerPlayer player) { // Game type settings are also loaded separately. player.loadGameTypes(loadedData); - if (paper) { - // Paper: world is not loaded by ServerPlayer#load(CompoundTag). - parseWorld(player, loadedData); - } + // Paper: world is not loaded by ServerPlayer#load(CompoundTag). + parseWorld(player, loadedData); return true; } diff --git a/NMS/V1_21_5/build.gradle.kts b/NMS/V1_21_5/build.gradle.kts index 83dfd58d..26907270 100644 --- a/NMS/V1_21_5/build.gradle.kts +++ b/NMS/V1_21_5/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_5" dependencies { compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.5-R0.1-SNAPSHOT") + paperweight.devBundle(libs.paperDevBundle1215) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_6/build.gradle.kts b/NMS/V1_21_6/build.gradle.kts index a795bdbb..4b873042 100644 --- a/NMS/V1_21_6/build.gradle.kts +++ b/NMS/V1_21_6/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_6" dependencies { compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.6-R0.1-SNAPSHOT") + paperweight.devBundle(libs.paperDevBundle1216) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_7/build.gradle.kts b/NMS/V1_21_7/build.gradle.kts index ac9af858..d04a6f3f 100644 --- a/NMS/V1_21_7/build.gradle.kts +++ b/NMS/V1_21_7/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_7" dependencies { compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.7-R0.1-SNAPSHOT") + paperweight.devBundle(libs.paperDevBundle1217) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_8/build.gradle.kts b/NMS/V1_21_8/build.gradle.kts index 6f90e903..02d15dcb 100644 --- a/NMS/V1_21_8/build.gradle.kts +++ b/NMS/V1_21_8/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_8" dependencies { compileOnly(project(":API")) - paperweight.paperDevBundle("1.21.8-R0.1-SNAPSHOT") + paperweight.devBundle(libs.paperDevBundle1218) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V1_21_9/build.gradle.kts b/NMS/V1_21_9/build.gradle.kts index 5baf40ef..86024f28 100644 --- a/NMS/V1_21_9/build.gradle.kts +++ b/NMS/V1_21_9/build.gradle.kts @@ -1,13 +1,13 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V1_21_9" dependencies { compileOnly(project(":API")) - compileOnly("net.kyori:adventure-api:4.26.1") - paperweight.paperDevBundle("1.21.9-R0.1-SNAPSHOT") + compileOnly(libs.adventure.api) + paperweight.devBundle(libs.paperDevBundle1219) } paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION diff --git a/NMS/V26_2/build.gradle.kts b/NMS/V26_2/build.gradle.kts index a93737a0..60bc5f41 100644 --- a/NMS/V26_2/build.gradle.kts +++ b/NMS/V26_2/build.gradle.kts @@ -1,13 +1,13 @@ plugins { - id("io.papermc.paperweight.userdev") + alias(libs.plugins.paperweight) } group "NMS:V26_2" dependencies { compileOnly(project(":API")) - compileOnly("net.kyori:adventure-api:4.26.1") - paperweight.paperDevBundle("26.2.build.+") + compileOnly(libs.adventure.api.latest) + paperweight.devBundle(libs.paperDevBundle262) } // Minecraft 26.x is Mojang-mapped only (no Spigot reobfuscation since 26.1), so the default @@ -19,8 +19,5 @@ java { } tasks.withType().configureEach { - // The Java 25 toolchain is required to read the Mojang-mapped 26.2 dev bundle, but the bytecode - // is emitted for Java 21: the shadow plugin remaps every class with ASM when shading, and its - // ASM version cannot read class file major version 69 (Java 25). - options.release = 21 + options.release = 25 } diff --git a/NMS/V26_3/build.gradle.kts b/NMS/V26_3/build.gradle.kts new file mode 100644 index 00000000..a51b3197 --- /dev/null +++ b/NMS/V26_3/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + alias(libs.plugins.paperweight) +} + +group "NMS:V26_3" + +dependencies { + compileOnly(project(":API")) + compileOnly(libs.adventure.api.latest) + paperweight.devBundle(libs.paperDevBundle263) +} + +// Minecraft 26.x is Mojang-mapped only (no Spigot reobfuscation since 26.1), so the default +// production artifact is already Mojang-mapped and no reobfArtifactConfiguration is required. + +java { + // Minecraft 26.x targets Java 25. + toolchain.languageVersion = JavaLanguageVersion.of(25) +} + +tasks.withType().configureEach { + options.release = 25 +} diff --git a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/CraftHologram.java b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/CraftHologram.java similarity index 88% rename from NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/CraftHologram.java rename to NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/CraftHologram.java index 1c9ad187..0a099a86 100644 --- a/NMS/V1_21_3/src/main/java/fr/maxlego08/essentials/nms/v1_21_3/CraftHologram.java +++ b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/CraftHologram.java @@ -1,4 +1,4 @@ -package fr.maxlego08.essentials.nms.v1_21_3; +package fr.maxlego08.essentials.nms.v26_3; import com.mojang.math.Transformation; import fr.maxlego08.essentials.api.EssentialsPlugin; @@ -11,7 +11,6 @@ import fr.maxlego08.essentials.api.utils.ReflectionUtils; import fr.maxlego08.essentials.api.utils.SafeLocation; import io.papermc.paper.adventure.PaperAdventure; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; @@ -19,19 +18,20 @@ import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Brightness; import net.minecraft.world.entity.Display; -import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.PositionMoveRotation; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.UpdateInterval; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.Block; import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.block.CraftBlockType; import org.bukkit.craftbukkit.entity.CraftPlayer; -import net.minecraft.world.item.ItemDisplayContext; +import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.joml.Quaternionf; @@ -49,8 +49,7 @@ public CraftHologram(EssentialsPlugin plugin, HologramType hologramType, Hologra @Override public void create(Player player) { ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - ServerEntity serverEntity = new ServerEntity(serverPlayer.serverLevel(), display, 0, false, packet -> { - }, Set.of()); + ServerEntity serverEntity = new ServerEntity(serverPlayer.level(), display, UpdateInterval.NEVER, false, null, Set.of()); send(player, new ClientboundAddEntityPacket(display, serverEntity)); this.update(player); @@ -81,9 +80,10 @@ public void update(Player player) { public void create() { ServerLevel serverLevel = ((CraftWorld) location.getLocation().getWorld()).getHandle(); switch (hologramType) { - case BLOCK -> this.display = new Display.BlockDisplay(EntityType.BLOCK_DISPLAY, serverLevel); - case ITEM -> this.display = new Display.ItemDisplay(EntityType.ITEM_DISPLAY, serverLevel); - case TEXT -> this.display = new Display.TextDisplay(EntityType.TEXT_DISPLAY, serverLevel); + // Since 26.1 the built in entity types are declared in EntityTypes, not in EntityType + case BLOCK -> this.display = new Display.BlockDisplay(EntityTypes.BLOCK_DISPLAY, serverLevel); + case ITEM -> this.display = new Display.ItemDisplay(EntityTypes.ITEM_DISPLAY, serverLevel); + case TEXT -> this.display = new Display.TextDisplay(EntityTypes.TEXT_DISPLAY, serverLevel); } display.getEntityData().set((EntityDataAccessor) ReflectionUtils.getStaticValue(Display.class, "DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID"), 1); // Transformation duration @@ -135,26 +135,18 @@ public void update() { default -> ItemDisplayContext.valueOf(itemHologramConfiguration.getItemDisplayTransform().name()); }; itemDisplay.setItemTransform(context); - itemDisplay.setItemStack(ItemStack.fromBukkitCopy(itemHologramConfiguration.getItemStack())); + itemDisplay.setItemStack(CraftItemStack.asNMSCopy(itemHologramConfiguration.getItemStack())); } else if (display instanceof Display.BlockDisplay blockDisplay && configuration instanceof BlockHologramConfiguration blockData) { - var optional = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockData.getMaterial().name().toLowerCase())); - if (optional.isPresent()) { - Block block = optional.get().value(); - blockDisplay.setBlockState(block.defaultBlockState()); - } + Block block = CraftBlockType.bukkitToMinecraft(blockData.getMaterial()); + blockDisplay.setBlockState(block.defaultBlockState()); } if (this.configuration.getBrightness() != null) { display.setBrightnessOverride(new Brightness(this.configuration.getBrightness().getBlockLight(), this.configuration.getBrightness().getSkyLight())); } - display.setTransformation(new Transformation( - this.configuration.getTranslation(), - new Quaternionf(), - this.configuration.getScale(), - new Quaternionf()) - ); + display.setTransformation(new Transformation(this.configuration.getTranslation(), new Quaternionf(), this.configuration.getScale(), new Quaternionf())); display.setShadowRadius(this.configuration.getShadowRadius()); display.setShadowStrength(this.configuration.getShadowStrength()); diff --git a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/PlayerUtils.java b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/PlayerUtils.java similarity index 71% rename from NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/PlayerUtils.java rename to NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/PlayerUtils.java index 460af8b6..f15fd687 100644 --- a/NMS/V1_21/src/main/java/fr/maxlego08/essentials/nms/v1_21/PlayerUtils.java +++ b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/PlayerUtils.java @@ -1,10 +1,7 @@ -package fr.maxlego08.essentials.nms.v1_21; +package fr.maxlego08.essentials.nms.v26_3; import fr.maxlego08.essentials.api.EssentialsPlugin; import fr.maxlego08.essentials.api.nms.PlayerUtil; -import fr.maxlego08.essentials.api.utils.inventory.EnderChestHolder; -import fr.maxlego08.essentials.api.utils.inventory.PlayerInventoryHolder; -import fr.maxlego08.essentials.nms.v1_21.enderchest.CraftPlayerManager; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -19,27 +16,27 @@ public PlayerUtils(EssentialsPlugin plugin) { @Override public boolean openEnderChest(Player player, OfflinePlayer offlinePlayer) { - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); + /*CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); if (loadPlayer != null) { EnderChestHolder enderChestHolder = new EnderChestHolder(loadPlayer); player.openInventory(enderChestHolder.getInventory()); return true; - } + }*/ return false; } @Override public boolean openPlayerInventory(Player player, OfflinePlayer offlinePlayer) { - CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); + /*CraftPlayerManager craftPlayerManager = new CraftPlayerManager(plugin.getLogger()); var loadPlayer = craftPlayerManager.loadPlayer(offlinePlayer); if (loadPlayer != null) { PlayerInventoryHolder enderChestHolder = new PlayerInventoryHolder(loadPlayer); player.openInventory(enderChestHolder.getInventory()); return true; - } + }*/ return false; } diff --git a/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/WayPointPacket.java b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/WayPointPacket.java new file mode 100644 index 00000000..fde3f8fc --- /dev/null +++ b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/WayPointPacket.java @@ -0,0 +1,91 @@ +package fr.maxlego08.essentials.nms.v26_3; + +import fr.maxlego08.essentials.api.waypoint.WayPointHelper; +import fr.maxlego08.essentials.api.waypoint.WayPointIcon; +import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundTrackedWaypointPacket; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.waypoints.Waypoint; +import net.minecraft.world.waypoints.WaypointStyleAssets; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import java.util.Optional; +import java.util.UUID; + +public class WayPointPacket implements WayPointHelper { + + @Override + public void addWayPoint(Player player, UUID uniqueId, Location location, WayPointIcon wayPointIcon) { + + var icon = toIcon(wayPointIcon); + var blockPos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + var packet = ClientboundTrackedWaypointPacket.addWaypointPosition(uniqueId, icon, blockPos); + + sendPacket(player, packet); + } + + @Override + public void updateWayPointPosition(Player player, UUID uniqueId, Location location, WayPointIcon wayPointIcon) { + + var icon = toIcon(wayPointIcon); + var blockPos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + var packet = ClientboundTrackedWaypointPacket.updateWaypointPosition(uniqueId, icon, blockPos); + + sendPacket(player, packet); + } + + @Override + public void addWayPoint(Player player, UUID uniqueId, Chunk chunk, WayPointIcon wayPointIcon) { + + var icon = toIcon(wayPointIcon); + var chunkPos = new ChunkPos(chunk.getX(), chunk.getZ()); + var packet = ClientboundTrackedWaypointPacket.addWaypointChunk(uniqueId, icon, chunkPos); + + sendPacket(player, packet); + } + + @Override + public void updateWayPointPosition(Player player, UUID uniqueId, Chunk chunk, WayPointIcon wayPointIcon) { + + var icon = toIcon(wayPointIcon); + var chunkPos = new ChunkPos(chunk.getX(), chunk.getZ()); + var packet = ClientboundTrackedWaypointPacket.updateWaypointChunk(uniqueId, icon, chunkPos); + + sendPacket(player, packet); + } + + @Override + public void removeWayPoint(Player player, UUID uniqueId) { + + var packet = ClientboundTrackedWaypointPacket.removeWaypoint(uniqueId); + sendPacket(player, packet); + } + + private void sendPacket(Player player, Packet packet) { + ((CraftPlayer) player).getHandle().connection.send(packet); + } + + /** + * Converts a {@link WayPointIcon} to a {@link Waypoint.Icon}. + *

+ * If the given {@link WayPointIcon} has a texture, then the style of the resulting icon will be set to the + * death waypoint style. Otherwise, the style will be left unchanged. + *

+ * The color of the resulting icon will be set to the color of the given {@link WayPointIcon}. + * + * @param wayPointIcon the icon to convert + * @return the converted icon + */ + private Waypoint.Icon toIcon(WayPointIcon wayPointIcon) { + var icon = new Waypoint.Icon(); + if (wayPointIcon.texture() != null) { + icon.style = WaypointStyleAssets.createId(wayPointIcon.texture()); + } + icon.color = Optional.of(wayPointIcon.color().getRGB() & 0xFFFFFF); + return icon; + } +} diff --git a/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/enderchest/CraftPlayerManager.java b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/enderchest/CraftPlayerManager.java new file mode 100644 index 00000000..1e6c25f3 --- /dev/null +++ b/NMS/V26_3/src/main/java/fr/maxlego08/essentials/nms/v26_3/enderchest/CraftPlayerManager.java @@ -0,0 +1,24 @@ +package fr.maxlego08.essentials.nms.v26_3.enderchest; + +import org.apache.commons.lang3.NotImplementedException; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Based on: OpenInv + */ +public class CraftPlayerManager implements fr.maxlego08.essentials.api.nms.PlayerManager { + + + @Override + public @Nullable Player loadPlayer(@NotNull OfflinePlayer offline) { + throw new NotImplementedException(); + } + + @Override + public @NotNull Player inject(@NotNull Player player) { + throw new NotImplementedException(); + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 77b46326..bd674ed0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,8 @@ plugins { `java-library` - id("com.gradleup.shadow") version "9.0.0-beta11" - id("io.papermc.paperweight.userdev") version "2.0.0-beta.21" apply false - id("re.alwyn974.groupez.repository") version "1.0.0" + alias(libs.plugins.shadow) + alias(libs.plugins.paperweight) apply false + alias(libs.plugins.groupez.repository) } group = "fr.maxlego08.essentials" @@ -14,6 +14,7 @@ extra.set("apiFolder", file("target-api/")) extra.set("classifier", System.getProperty("archive.classifier")) extra.set("sha", System.getProperty("github.sha")) +val rootLibs = libs allprojects { apply(plugin = "java-library") apply(plugin = "com.gradleup.shadow") @@ -39,7 +40,7 @@ allprojects { configurations.all { resolutionStrategy.eachDependency { if (requested.group == "net.kyori" && requested.name == "adventure-text-serializer-ansi" && (requested.version.isNullOrBlank() || requested.version == ".")) { - useVersion("4.20.0") + useVersion(rootLibs.versions.adventure.text.serializer.ansi.get()) } } } @@ -73,20 +74,21 @@ allprojects { } dependencies { -// compileOnly("fr.maxlego08.menu:zmenu-api:1.1.0.0") - compileOnly(files("libs/zMenu-1.1.1.6.jar")) + compileOnly(rootLibs.zmenu.api) + // Still needed for item persistence and sound helpers not exposed by the zMenu API. + compileOnly(files("libs/zMenu-1.1.2.0.jar")) - compileOnly("fr.maxlego08.sarah:sarah:1.23") - compileOnly("com.tcoded:FoliaLib:0.5.1") - compileOnly("fr.mrmicky:fastboard:2.2.2") + compileOnly(rootLibs.sarah) + compileOnly(rootLibs.folialib) + compileOnly(rootLibs.fastboard) } } dependencies { - compileOnly("me.clip:placeholderapi:2.11.6") - compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") + compileOnly(libs.placeholderapi) + compileOnly(libs.paper.api) - implementation("dev.faststats.metrics:bukkit:0.29.4") { + implementation(libs.fastStatsBukkit) { exclude(group = "com.google.code.gson", module = "gson") } @@ -95,10 +97,6 @@ dependencies { // Since Minecraft 1.20.5 Paper ships a Mojang-mapped runtime, and since 26.1 Spigot // reobfuscation is gone entirely. Every NMS module is therefore Mojang-mapped // (MOJANG_PRODUCTION) and consumed as a plain project dependency (no "reobf" variant). - api(project(":NMS:V1_20_6")) - api(project(":NMS:V1_21")) - api(project(":NMS:V1_21_1")) - api(project(":NMS:V1_21_3")) api(project(":NMS:V1_21_4")) api(project(":NMS:V1_21_5")) api(project(":NMS:V1_21_6")) @@ -108,6 +106,7 @@ dependencies { api(project(":NMS:V1_21_10")) api(project(":NMS:V1_21_11")) api(project(":NMS:V26_2")) + api(project(":NMS:V26_3")) rootProject.subprojects.filter { it.path.startsWith(":Hooks:") }.forEach { subproject -> api(project(subproject.path)) diff --git a/changelog.md b/changelog.md index f57d171e..3f97dc45 100644 --- a/changelog.md +++ b/changelog.md @@ -1,11 +1,50 @@ -# Idée: +# Idées : -- Ajouter un broadcast de message centré avec le support des \n pour ajouter plusieurs lignes +- Ajouter un broadcast de message centré avec le support des `\n` pour ajouter plusieurs lignes - Ajouter une option pour désactiver la tabulation des joueurs hors ligne -- Ajouter un placeholder pour transformed les caractères en lettre spécial +- Ajouter un placeholder pour transformer les caractères en lettre spécial +- Ajouter une commande type `/oplist` pour afficher la liste des opérateurs du serveur (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/4) +- Améliorer la commande `/nightvision` pour qu'elle soit persistente lors d'un kill et de déconnexion/reconnexion du joueur (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/4) +- Ajouter la possibilité d'utiliser la commande `/invsee` sur les joueurs hors ligne +- Ajouter la commande `/nick` pour changer le pseudo d'un joueur (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/161) + - Rajouter une permission pour limiter l'utilisation des couleurs + - Rajouter une permission pour que le pseudo à l'output du /nick (raw) soit le même (sans prendre en compte les couleurs) que le pseudo initial +- Grosse refonte des hologrammes : + - Rajouter les hologrammes à double face (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/27) + - Rajouter les hologrammes "cliquables" avec une hitbox pour créer des interactions + - Rajouter les hologrammes avec de la pagination (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/40) + - Ajouter une API complète pour que les développeurs puissent se hook à zEssentials pour créer leurs hologrammes +- Rajouter la commande `/signedit` pour éditer une pancarte juste en la regardant +- Utiliser les dialogs là où c'est possible dans les versions récentes (entrer du texte...) +- Faire en sorte que si le NMS d'une version n'est pas encore ajouté, ça fallback vers la version précédente disponible +- Ajouter un module de TAB (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/147) +- Ajouter un module pour pour désactiver l'apparition des phantoms pour un joueur (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/147) +- Ajouter deux nouvelles permissions distinctes pour désactiver la perte d'inventaire et la perte d'expérience à la mort du joueur +- Ajouter un module de fly temporaire avec une commande pour give/take du temps +- Dans le module du chat, rajouter deux nouveaux placeholders pour montrer le contenu de son inventaire et le contenu de son coffre de l'ender (**ISSUE:** https://github.com/Maxlego08/zEssentials/issues/127) +- Dans les informations au démarrage, indiquer la liste des modules qui sont activés/désactivés +- Ajouter la commande `/zessentials modules` pour connaître la liste des modules qui sont activés/désactivés +- Ajouter pleinement le support de "VaultUnlocked: https://github.com/TheNewEconomy/VaultUnlocked" +- Lorsqu'un module est désactivé, faire en sorte qu'il soit complètement désactiver sur le serveur (commandes, status, checks...) # Unreleased +- Added Minecraft/Paper **26.3** support; **Paper 1.21.4 is now the minimum supported version** +- Removed unused Spigot implementations and simplified Paper integration +- `/enchant` now uses server registry identifiers, including datapack and plugin enchantments; legacy API methods remain available and deprecated +- Unified item lookup and suggestions for give, mailbox and vault commands; feedback uses translated item names and preserves custom names +- Fixed custom item delivery to offline mail recipients and stale custom items after reloads +- Use the published zMenu **1.1.2.0** API for skulls and kit conversion/saving; the local JAR remains required for item persistence and sound helpers +- Migrated messages and configuration examples to native MiniMessage hex colors, including scoreboard animations; existing files must replace legacy `&`, `§` and bare hex color codes +- Fixed MiniMessage text serialization, italic formatting and bold text alignment, and preserved click events with Adventure `5.x` +- Fixed feedback placeholders, duplicate Death Message registration, version comparisons and incomplete downloads; existing `command-enchant-error-enchant` messages must use `%enchant%` +- Updated Gradle to `9.8.2`, Shadow to `9.6.1` and paperweight to `2.0.0-beta.24`; centralized dependency versions and retained Java 21 for common code and Java 25 for 26.x NMS +- Updated PlaceholderAPI to `2.12.3` and aligned Adventure dependencies with recent NMS versions +- Updated Sarah to `1.26`, added connection `max-lifetime` configuration and simplified SQLite migrations +- Updated Jedis to `8.0.2` (Redis `7.2+`), fixed pooled connection leaks and cleaned up subscription shutdown +- Updated the Discord bot to SnakeYAML `2.7`, JDA `6.7.0` and MySQL Connector/J `26.10.0`; added MariaDB selection and MySQL version warnings +- Aligned module versions and updated issue templates + # 1.0.4.0 - **zEssentials now loads as a Paper plugin** (`paper-plugin.yml`): @@ -41,7 +80,7 @@ - Added a new **custom commands** module (`modules/customcommands/config.yml`) to create your own commands without any other plugin, for `/discord`, `/map`, `/vote`, `/store`, `/updates`... - Each command can define `aliases`, a `permission`, a `description`, a `cooldown` in seconds (bypassed with `essentials.bypass.cooldown`) and a list of `messages` - `type` selects how the content is displayed: `TCHAT`, `CENTER`, `ACTION`, `TITLE`, `BOSSBAR` or `NONE` - - MiniMessage, legacy colors and PlaceholderAPI placeholders are supported, so `` can be used to display clickable links + - MiniMessage and PlaceholderAPI placeholders are supported, so `` can be used to display clickable links - zMenu `actions` can be run after the messages (sound, command, inventory, ...) - Commands are registered at runtime and `/zessentials reload` updates them without duplicating anything; a custom command that would override an existing zEssentials command is refused with a message in the console - Added display options for `/seen` in `modules/sanction/config.yml` — `seen-show-uuid`, `seen-show-ip`, `seen-show-last-location`, `seen-show-created-at` and `seen-show-playtime`. The IP address can now be hidden globally, even from operators: until now it was only protected by the `essentials.seen.show.ip` permission, which an operator always has diff --git a/gradle.properties b/gradle.properties index 399c6c36..6675062a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,3 @@ systemProp.file.encoding=utf-8 java.version=21 -version=1.0.3.9 org.gradle.jvmargs=-Dfile.encoding=UTF-8 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..2986087a --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,91 @@ +[versions] +# Build / Plugins +shadow = "9.6.1" +groupez = "1.0.0" +paperweight = "2.0.0-beta.24" + +# Platforms (Paper / NMS) +paper-api = "1.21.4-R0.1-SNAPSHOT" +adventure-api = "4.26.1" +adventure-api-latest = "5.2.0" +adventure-text-serializer-ansi = "4.26.1" +paperDevBundle1214 = "1.21.4-R0.1-SNAPSHOT" +paperDevBundle1215 = "1.21.5-R0.1-SNAPSHOT" +paperDevBundle1216 = "1.21.6-R0.1-SNAPSHOT" +paperDevBundle1217 = "1.21.7-R0.1-SNAPSHOT" +paperDevBundle1218 = "1.21.8-R0.1-SNAPSHOT" +paperDevBundle1219 = "1.21.9-R0.1-SNAPSHOT" +paperDevBundle12110 = "1.21.10-R0.1-SNAPSHOT" +paperDevBundle12111 = "1.21.11-R0.1-SNAPSHOT" +paperDevBundle262 = "26.2.build.+" +paperDevBundle263 = "26.3.build.+" + +# Utilities / Libraries +sarah = "1.26" +folialib = "0.5.1" +fastboard = "2.2.2" +faststats = "0.29.4" +snakeyaml = "2.7" +jda = "6.7.0" +mysql-connector = "26.10.0" +mariadb-connector = "3.5.6" + +# Integration Hooks +zmenu-api = "1.1.2.0" +placeholderapi = "2.12.3" +blocktracker = "1.0.6" +mythicmobs = "5.7.2" +nchat = "5.6" +protocollib = "5.4.0" +jedis = "8.0.2" +superiorskyblock = "2024.4" +vault = "1.7" +worldguard = "7.0.13" +worldedit = "7.3.12" + +[libraries] +# Platforms (Paper / NMS) +paper-api = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper-api" } +adventure-api = { group = "net.kyori", name = "adventure-api", version.ref = "adventure-api" } +adventure-api-latest = { group = "net.kyori", name = "adventure-api", version.ref = "adventure-api-latest" } +paperDevBundle1214 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1214" } +paperDevBundle1215 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1215" } +paperDevBundle1216 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1216" } +paperDevBundle1217 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1217" } +paperDevBundle1218 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1218" } +paperDevBundle1219 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle1219" } +paperDevBundle12110 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle12110" } +paperDevBundle12111 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle12111" } +paperDevBundle262 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle262" } +paperDevBundle263 = { group = "io.papermc.paper", name = "dev-bundle", version.ref = "paperDevBundle263" } + +# Utilities / Libraries +sarah = { group = "fr.maxlego08.sarah", name = "sarah", version.ref = "sarah" } +folialib = { group = "com.tcoded", name = "FoliaLib", version.ref = "folialib" } +fastboard = { group = "fr.mrmicky", name = "fastboard", version.ref = "fastboard" } +fastStatsBukkit = { group = "dev.faststats.metrics", name = "bukkit", version.ref = "faststats" } +snakeyaml = { group = "org.yaml", name = "snakeyaml", version.ref = "snakeyaml" } +jda = { group = "net.dv8tion", name = "JDA", version.ref = "jda" } +mysql-connector = { group = "com.mysql", name = "mysql-connector-j", version.ref = "mysql-connector" } +mariadb-connector = { group = "org.mariadb.jdbc", name = "mariadb-java-client", version.ref = "mariadb-connector" } + +# Integration Hooks +zmenu-api = { group = "fr.maxlego08.menu", name = "zmenu-api", version.ref = "zmenu-api" } +placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" } +blocktracker = { group = "dev.krakenied", name = "blocktracker", version.ref = "blocktracker" } +mythicmobs = { group = "io.lumine", name = "Mythic-Dist", version.ref = "mythicmobs" } +nchat = { group = "com.nickuc.chat", name = "api", version.ref = "nchat" } +protocollib = { group = "net.dmulloy2", name = "ProtocolLib", version.ref = "protocollib" } +jedis = { group = "redis.clients", name = "jedis", version.ref = "jedis" } +superiorskyblock = { group = "com.bgsoftware", name = "SuperiorSkyblockAPI", version.ref = "superiorskyblock" } +vault = { group = "com.github.MilkBowl", name = "VaultAPI", version.ref = "vault" } +worldguard = { group = "com.sk89q.worldguard", name = "worldguard-bukkit", version.ref = "worldguard" } +worldedit = { group = "com.sk89q.worldedit", name = "worldedit-core", version.ref = "worldedit" } + +[plugins] +# Build Tools +shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } +groupez-repository = { id = "re.alwyn974.groupez.repository", version.ref = "groupez" } +groupez-publish = { id = "re.alwyn974.groupez.publish", version.ref = "groupez" } +# Platforms +paperweight = { id = "io.papermc.paperweight.userdev", version.ref = "paperweight" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1a31fd1b..5907d39c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,10 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.1-bin.zip +distributionSha256Sum=21bd5da2de49b642904077f38c0efdc7778e92b3ed0889392dca61b97e389607 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/libs/zMenu-1.1.1.0.jar b/libs/zMenu-1.1.1.0.jar deleted file mode 100644 index c9f5854e..00000000 Binary files a/libs/zMenu-1.1.1.0.jar and /dev/null differ diff --git a/libs/zMenu-1.1.1.2.jar b/libs/zMenu-1.1.1.2.jar deleted file mode 100644 index ecec6652..00000000 Binary files a/libs/zMenu-1.1.1.2.jar and /dev/null differ diff --git a/libs/zMenu-1.1.1.6.jar b/libs/zMenu-1.1.1.6.jar deleted file mode 100644 index 4c2d35f4..00000000 Binary files a/libs/zMenu-1.1.1.6.jar and /dev/null differ diff --git a/libs/zMenu-1.1.2.0.jar b/libs/zMenu-1.1.2.0.jar new file mode 100644 index 00000000..d364e61c Binary files /dev/null and b/libs/zMenu-1.1.2.0.jar differ diff --git a/settings.gradle.kts b/settings.gradle.kts index 871096e5..7e204b25 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -27,10 +27,6 @@ include("Hooks:NChat") include("Hooks:WorldGuard") include("Hooks:MythicMobs") -include("NMS:V1_20_6") -include("NMS:V1_21") -include("NMS:V1_21_1") -include("NMS:V1_21_3") include("NMS:V1_21_4") include("NMS:V1_21_5") include("NMS:V1_21_6") @@ -40,4 +36,5 @@ include("NMS:V1_21_9") include("NMS:V1_21_10") include("NMS:V1_21_11") include("NMS:V26_2") +include("NMS:V26_3") diff --git a/src/main/java/fr/maxlego08/essentials/ZEssentialsPlugin.java b/src/main/java/fr/maxlego08/essentials/ZEssentialsPlugin.java index 71a0442e..f4af7182 100644 --- a/src/main/java/fr/maxlego08/essentials/ZEssentialsPlugin.java +++ b/src/main/java/fr/maxlego08/essentials/ZEssentialsPlugin.java @@ -65,7 +65,6 @@ import fr.maxlego08.essentials.module.modules.afk.AFKModule; import fr.maxlego08.essentials.module.modules.chat.interactive.InteractiveChatHelper; import fr.maxlego08.essentials.module.modules.chat.interactive.InteractiveChatPaperListener; -import fr.maxlego08.essentials.module.modules.chat.interactive.InteractiveChatSpigotListener; import fr.maxlego08.essentials.module.modules.discord.DiscordModule; import fr.maxlego08.essentials.module.modules.economy.EconomyModule; import fr.maxlego08.essentials.module.modules.hologram.HologramModule; @@ -76,7 +75,6 @@ import fr.maxlego08.essentials.placeholders.DistantPlaceholder; import fr.maxlego08.essentials.placeholders.LocalPlaceholder; import fr.maxlego08.essentials.server.PaperServer; -import fr.maxlego08.essentials.server.SpigotServer; import fr.maxlego08.essentials.storage.ConfigStorage; import fr.maxlego08.essentials.storage.ZStorageManager; import fr.maxlego08.essentials.storage.adapter.UserTypeAdapter; @@ -91,12 +89,10 @@ import fr.maxlego08.essentials.zutils.utils.documentation.PermissionMarkdownGenerator; import fr.maxlego08.essentials.zutils.utils.documentation.PlaceholderMarkdownGenerator; import fr.maxlego08.essentials.zutils.utils.paper.PaperUtils; -import fr.maxlego08.essentials.zutils.utils.spigot.SpigotUtils; import fr.maxlego08.menu.api.ButtonManager; import fr.maxlego08.menu.api.InventoryManager; import fr.maxlego08.menu.api.loader.NoneLoader; import fr.maxlego08.menu.api.pattern.PatternManager; -import fr.maxlego08.menu.api.utils.version.MinecraftVersion; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.FileConfiguration; @@ -148,15 +144,13 @@ public void onEnable() { this.serverStartUptime = System.currentTimeMillis(); this.saveDefaultConfig(); this.saveOrUpdateConfiguration("config.yml", true); - this.enchantments.register(); FoliaLib foliaLib = new FoliaLib(this); this.platformScheduler = foliaLib.getScheduler(); - var isPaper = isPaperVersion(); - this.essentialsUtils = isPaper ? new PaperUtils(this) : new SpigotUtils(this); - this.essentialsServer = isPaper ? new PaperServer(this) : new SpigotServer(this); - this.interactiveChatHelper = isPaper ? new InteractiveChatPaperListener() : new InteractiveChatSpigotListener(); + this.essentialsUtils = new PaperUtils(this); + this.essentialsServer = new PaperServer(this); + this.interactiveChatHelper = new InteractiveChatPaperListener(); this.registerListener(this.interactiveChatHelper); this.placeholder = new LocalPlaceholder(this); @@ -212,9 +206,7 @@ public void onEnable() { this.registerListener(new PlayerListener(this)); this.registerPlaceholder(UserPlaceholders.class); this.registerPlaceholder(UserItemsPlaceholders.class); - if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.parse("1.21"))) { - this.registerPlaceholder(UserItems1_21Placeholders.class); - } + this.registerPlaceholder(UserItems1_21Placeholders.class); this.registerPlaceholder(UserHomePlaceholders.class); this.registerPlaceholder(UserPlayTimePlaceholders.class); this.registerPlaceholder(UserKitPlaceholders.class); @@ -233,12 +225,6 @@ public void onEnable() { new VersionChecker(this, 325); context.ready(); - // Load ProtocolLib - /*if (this.moduleManager.getModuleConfiguration("chat").getBoolean("command-placeholder.enable-replace-all-message") && getServer().getPluginManager().isPluginEnabled("ProtocolLib") && this.isPaperVersion()) { - PacketListener packetListener = new PacketListener(); - packetListener.registerPackets(this); - }*/ - this.loadHooks(); this.getServer().getServicesManager().register(EssentialsPlugin.class, this, this, ServicePriority.Normal); diff --git a/src/main/java/fr/maxlego08/essentials/ZEssentialsPluginLoader.java b/src/main/java/fr/maxlego08/essentials/ZEssentialsPluginLoader.java index 1bbd109d..4bc9f205 100644 --- a/src/main/java/fr/maxlego08/essentials/ZEssentialsPluginLoader.java +++ b/src/main/java/fr/maxlego08/essentials/ZEssentialsPluginLoader.java @@ -19,7 +19,7 @@ public void classloader(PluginClasspathBuilder classpathBuilder) { } // Same precedence and default as Paper's MAVEN_CENTRAL_DEFAULT_MIRROR. Resolve it here because - // the minimum supported compile API (1.21.5) predates that field. No reflection is needed. + // the minimum supported compile API (1.21.4) predates that field. No reflection is needed. static String centralMirror() { String mirror = System.getenv("PAPER_DEFAULT_CENTRAL_REPOSITORY"); if (mirror == null) mirror = System.getProperty("org.bukkit.plugin.java.LibraryLoader.centralURL"); diff --git a/src/main/java/fr/maxlego08/essentials/ZEssentialsSpigotFallback.java b/src/main/java/fr/maxlego08/essentials/ZEssentialsSpigotFallback.java index 0b0c54fb..799f2071 100644 --- a/src/main/java/fr/maxlego08/essentials/ZEssentialsSpigotFallback.java +++ b/src/main/java/fr/maxlego08/essentials/ZEssentialsSpigotFallback.java @@ -1,6 +1,5 @@ package fr.maxlego08.essentials; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -35,9 +34,9 @@ public void onJoin(PlayerJoinEvent event) { this.getServer().getScheduler().runTaskLater(this, () -> { if (!player.isOnline()) return; - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lzEssentials is not running")); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7This server runs &cSpigot&7, zEssentials requires &aPaper&7.")); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Download Paper: &f" + DOWNLOAD_URL)); + player.sendMessage("zEssentials is not running"); + player.sendMessage("This server runs Spigot, zEssentials requires Paper."); + player.sendMessage("Download Paper: " + DOWNLOAD_URL); }, JOIN_MESSAGE_DELAY); } } diff --git a/src/main/java/fr/maxlego08/essentials/buttons/mail/ButtonMailBoxHelper.java b/src/main/java/fr/maxlego08/essentials/buttons/mail/ButtonMailBoxHelper.java index 09497246..962a42c6 100644 --- a/src/main/java/fr/maxlego08/essentials/buttons/mail/ButtonMailBoxHelper.java +++ b/src/main/java/fr/maxlego08/essentials/buttons/mail/ButtonMailBoxHelper.java @@ -8,7 +8,6 @@ import fr.maxlego08.essentials.zutils.utils.TimerBuilder; import fr.maxlego08.menu.api.button.PaginateButton; import fr.maxlego08.menu.api.utils.Placeholders; -import fr.maxlego08.menu.api.button.Button; import fr.maxlego08.menu.api.engine.InventoryEngine; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/fr/maxlego08/essentials/buttons/sanction/ButtonSanction.java b/src/main/java/fr/maxlego08/essentials/buttons/sanction/ButtonSanction.java index a56e4afd..2d731451 100644 --- a/src/main/java/fr/maxlego08/essentials/buttons/sanction/ButtonSanction.java +++ b/src/main/java/fr/maxlego08/essentials/buttons/sanction/ButtonSanction.java @@ -46,7 +46,7 @@ public void onClick(Player player, InventoryClickEvent event, InventoryEngine in case UNBAN -> sanctionModule.unban(player, targetuser.getUniqueId(), targetuser.getName(), reason); case UNMUTE -> sanctionModule.unmute(player, targetuser.getUniqueId(), targetuser.getName(), reason); case WARN -> { - player.sendMessage("§cTODO"); + this.plugin.getComponentMessage().sendMessage(player, "TODO"); } case FREEZE -> { sanctionModule.freeze(player, targetuser.getUniqueId(), targetuser.getName()); diff --git a/src/main/java/fr/maxlego08/essentials/commands/ZCommandManager.java b/src/main/java/fr/maxlego08/essentials/commands/ZCommandManager.java index 268477e2..a043a292 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/ZCommandManager.java +++ b/src/main/java/fr/maxlego08/essentials/commands/ZCommandManager.java @@ -330,7 +330,7 @@ public void registerCommand(Plugin plugin, String mainCommand, EssentialsCommand commands.add(essentialsCommand); this.registeredCommands.put(essentialsCommand, command); - if (!commandMap.register(command.getName(), plugin.getDescription().getName(), command)) { + if (!commandMap.register(command.getName(), plugin.getPluginMeta().getName(), command)) { plugin.getLogger().warning("Unable to add the command /" + mainCommand + " (already registered by another plugin). Use /zessentials:" + mainCommand + " instead."); } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentials.java b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentials.java index 1f039f69..b2ae74a6 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentials.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentials.java @@ -22,7 +22,7 @@ public CommandEssentials(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - message(sender, Message.COMMAND_ESSENTIALS, "%version%", plugin.getDescription().getVersion()); + message(sender, Message.COMMAND_ESSENTIALS, "%version%", plugin.getPluginMeta().getVersion()); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsDeleteWorld.java b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsDeleteWorld.java index 938b355c..a5c08fb0 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsDeleteWorld.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsDeleteWorld.java @@ -24,21 +24,21 @@ protected CommandResultType perform(EssentialsPlugin plugin) { String worldName = this.argAsString(0); if (sender instanceof Player) { - message(sender, "&cOnly the console can run this command!"); + message(sender, "Only the console can run this command!"); return CommandResultType.DEFAULT; } if (Bukkit.getOnlinePlayers().size() != 0) { - message(sender, "&cThere must be no players connected to execute this command!"); + message(sender, "There must be no players connected to execute this command!"); return CommandResultType.DEFAULT; } - message(sender, "&aStart of deletion of &f" + worldName + "&c world related data."); + message(sender, "Start of deletion of " + worldName + " world related data."); var storage = plugin.getStorageManager().getStorage(); storage.deleteWorldData(worldName); - message(sender, "&f" + worldName + "&a world data has been deleted!"); + message(sender, "" + worldName + " world data has been deleted!"); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsTestWayPoint.java b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsTestWayPoint.java index 25b6a85b..e48b4c04 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsTestWayPoint.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/essentials/CommandEssentialsTestWayPoint.java @@ -45,13 +45,13 @@ protected CommandResultType perform(EssentialsPlugin plugin) { if (method.equals("create")) { helper.addWayPoint(player, uuid, location, WayPointIcon.of(texture,new Color(color))); - message(sender, "&fWayPoint created!"); + message(sender, "WayPoint created!"); } else if (method.equals("update")) { helper.updateWayPointPosition(player, uuid, location, WayPointIcon.of(texture, new Color(color))); - message(sender, "&fWayPoint updated!"); + message(sender, "WayPoint updated!"); } else if (method.equals("remove")) { helper.removeWayPoint(player, uuid); - message(sender, "&fWayPoint deleted!"); + message(sender, "WayPoint deleted!"); } else { return CommandResultType.SYNTAX_ERROR; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/block/CommandHologramBlock.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/block/CommandHologramBlock.java index 507d57a8..69749084 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/block/CommandHologramBlock.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/block/CommandHologramBlock.java @@ -33,6 +33,6 @@ protected void perform(EssentialsPlugin plugin, Hologram hologram, HologramManag hologram.updateForAllPlayers(); manager.saveHologram(hologram); - message(sender, Message.HOLOGRAM_BLOCK, "%name%", hologram.getName(), "%material%", material.name()); + message(sender, Message.HOLOGRAM_BLOCK, "%name%", hologram.getName(), "%material%", getMaterialName(material)); } } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramMoveTo.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramMoveTo.java index f56cb0e8..9f787358 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramMoveTo.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramMoveTo.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.commands.commands.hologram.VCommandHologram; -import org.bukkit.Location; import org.bukkit.entity.Player; import java.util.ArrayList; diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramPitch.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramPitch.java index 1beab5f9..a54cbe89 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramPitch.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramPitch.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.commands.commands.hologram.VCommandHologram; -import org.bukkit.Location; import java.util.Arrays; diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramTeleport.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramTeleport.java index d834f593..88b70536 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramTeleport.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramTeleport.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.commands.commands.hologram.VCommandHologram; -import org.bukkit.Location; public class CommandHologramTeleport extends VCommandHologram { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramYaw.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramYaw.java index f6c8564a..39d62ca3 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramYaw.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/global/CommandHologramYaw.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.commands.commands.hologram.VCommandHologram; -import org.bukkit.Location; import java.util.Arrays; diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/text/CommandHologramTextShadow.java b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/text/CommandHologramTextShadow.java index b29dc5f0..1fa6c959 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/text/CommandHologramTextShadow.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/hologram/text/CommandHologramTextShadow.java @@ -33,6 +33,6 @@ protected void perform(EssentialsPlugin plugin, Hologram hologram, HologramManag manager.saveHologram(hologram); - message(sender, Message.HOLOGRAM_SEE_THROUGH, "%name%", hologram.getName(), "%textshadow%", shadow); + message(sender, Message.HOLOGRAM_TEXT_SHADOW, "%name%", hologram.getName(), "%textshadow%", shadow); } } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGive.java b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGive.java index 2517c60a..de31d390 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGive.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGive.java @@ -7,6 +7,7 @@ import fr.maxlego08.essentials.module.modules.ItemModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -21,7 +22,9 @@ public CommandGive(EssentialsPlugin plugin) { this.setDescription(Message.DESCRIPTION_GIVE); this.addRequirePlayerNameArg(); this.addRequireArg("item", (sender, args) -> { - List materials = new ArrayList<>(plugin.getMaterials().stream().map(Material::name).map(String::toLowerCase).toList()); + List materials = new ArrayList<>(plugin.getMaterials().stream() + .filter(material -> material.isItem() && !material.isAir()) + .map(Material::getKey).map(NamespacedKey::getKey).toList()); var itemModule = plugin.getModuleManager().getModule(ItemModule.class); if (itemModule != null) materials.addAll(itemModule.getItemsName()); return materials; diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGiveAll.java b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGiveAll.java index 34f3ac0b..30ec064f 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGiveAll.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandGiveAll.java @@ -7,6 +7,7 @@ import fr.maxlego08.essentials.module.modules.ItemModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import java.util.ArrayList; import java.util.Arrays; @@ -19,7 +20,9 @@ public CommandGiveAll(EssentialsPlugin plugin) { this.setPermission(Permission.ESSENTIALS_GIVE_ALL); this.setDescription(Message.DESCRIPTION_GIVE_ALL); this.addRequireArg("item", (sender, args) -> { - List materials = new ArrayList<>(plugin.getMaterials().stream().map(Material::name).map(String::toLowerCase).toList()); + List materials = new ArrayList<>(plugin.getMaterials().stream() + .filter(material -> material.isItem() && !material.isAir()) + .map(Material::getKey).map(NamespacedKey::getKey).toList()); materials.addAll(plugin.getModuleManager().getModule(ItemModule.class).getItemsName()); return materials; }); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemLoreSet.java b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemLoreSet.java index 751a8b7c..522950d3 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemLoreSet.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemLoreSet.java @@ -9,7 +9,6 @@ import fr.maxlego08.essentials.zutils.utils.paper.PaperComponent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -62,7 +61,7 @@ public CommandItemLoreSet(EssentialsPlugin plugin) { } var component = lore.get(index); - return List.of(component == null ? "" : colorReverse(LegacyComponentSerializer.legacyAmpersand().serialize(component))); + return List.of(component == null ? "" : PaperComponent.serializeMiniMessage(component)); } catch (Exception ignored) { } } @@ -114,7 +113,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { for (int i = 0; i != components.size(); i++) { if (rawLoreLines[i] == null) { - rawLoreLines[i] = colorReverse(LegacyComponentSerializer.legacyAmpersand().serialize(components.get(i))); + rawLoreLines[i] = PaperComponent.serializeMiniMessage(components.get(i)); } } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemName.java b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemName.java index 1af6d71d..0ffb6d5b 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemName.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/items/CommandItemName.java @@ -9,7 +9,6 @@ import fr.maxlego08.essentials.zutils.utils.paper.PaperComponent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -41,7 +40,7 @@ public CommandItemName(EssentialsPlugin plugin) { return List.of(itemMeta.getPersistentDataContainer().getOrDefault(this.itemNameRaw, PersistentDataType.STRING, "")); } var component = itemMeta.displayName(); - return List.of(component == null ? "" : colorReverse(LegacyComponentSerializer.legacyAmpersand().serialize(component))); + return List.of(component == null ? "" : PaperComponent.serializeMiniMessage(component)); } } } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailClear.java b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailClear.java index 6d8beb80..c058381d 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailClear.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailClear.java @@ -4,14 +4,8 @@ import fr.maxlego08.essentials.api.commands.CommandResultType; import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.module.modules.ItemModule; import fr.maxlego08.essentials.module.modules.MailBoxModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; -import org.bukkit.Material; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; public class CommandMailClear extends VCommand { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGive.java b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGive.java index 3a102602..64cfab81 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGive.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGive.java @@ -4,11 +4,11 @@ import fr.maxlego08.essentials.api.commands.CommandResultType; import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.api.user.User; import fr.maxlego08.essentials.module.modules.ItemModule; import fr.maxlego08.essentials.module.modules.MailBoxModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import java.util.ArrayList; import java.util.Arrays; @@ -24,8 +24,11 @@ public CommandMailGive(EssentialsPlugin plugin) { this.addSubCommand("give"); this.addRequireOfflinePlayerNameArg(); this.addRequireArg("item", (sender, args) -> { - List materials = new ArrayList<>(plugin.getMaterials().stream().map(Material::name).map(String::toLowerCase).toList()); - materials.addAll(plugin.getModuleManager().getModule(ItemModule.class).getItemsName()); + List materials = new ArrayList<>(plugin.getMaterials().stream() + .filter(material -> material.isItem() && !material.isAir()) + .map(Material::getKey).map(NamespacedKey::getKey).toList()); + var itemModule = plugin.getModuleManager().getModule(ItemModule.class); + if (itemModule != null) materials.addAll(itemModule.getItemsName()); return materials; }); this.addOptionalArg("amount", (sender, args) -> Arrays.asList("1", "64")); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGiveAll.java b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGiveAll.java index e1261eb6..566c97f4 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGiveAll.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/mail/CommandMailGiveAll.java @@ -8,6 +8,7 @@ import fr.maxlego08.essentials.module.modules.MailBoxModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import java.util.ArrayList; import java.util.Arrays; @@ -22,8 +23,11 @@ public CommandMailGiveAll(EssentialsPlugin plugin) { this.setPermission(Permission.ESSENTIALS_MAIL_GIVEALL); this.addSubCommand("giveall"); this.addRequireArg("item", (sender, args) -> { - List materials = new ArrayList<>(plugin.getMaterials().stream().map(Material::name).map(String::toLowerCase).toList()); - materials.addAll(plugin.getModuleManager().getModule(ItemModule.class).getItemsName()); + List materials = new ArrayList<>(plugin.getMaterials().stream() + .filter(material -> material.isItem() && !material.isAir()) + .map(Material::getKey).map(NamespacedKey::getKey).toList()); + var itemModule = plugin.getModuleManager().getModule(ItemModule.class); + if (itemModule != null) materials.addAll(itemModule.getItemsName()); return materials; }); this.addOptionalArg("amount", (sender, args) -> Arrays.asList("1", "64")); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/sanction/CommandKickAll.java b/src/main/java/fr/maxlego08/essentials/commands/commands/sanction/CommandKickAll.java index 172ad4cd..02eac92b 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/sanction/CommandKickAll.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/sanction/CommandKickAll.java @@ -8,6 +8,9 @@ import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Bukkit; +import java.text.SimpleDateFormat; +import java.util.Date; + public class CommandKickAll extends VCommand { public CommandKickAll(EssentialsPlugin plugin) { super(plugin); @@ -21,14 +24,16 @@ public CommandKickAll(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - String reason = args.length > 0 ? getArgs(0) : plugin.getModuleManager().getModule(SanctionModule.class).getKickDefaultReason(); + SanctionModule sanctionModule = plugin.getModuleManager().getModule(SanctionModule.class); + String reason = args.length > 0 ? getArgs(0) : sanctionModule.getKickDefaultReason(); Bukkit.getOnlinePlayers().forEach(player -> { if (!hasPermission(player, Permission.ESSENTIALS_KICK_BYPASS_ALL)) { plugin.getEssentialsServer().kickPlayer(player.getUniqueId(), Message.MESSAGE_KICK, "%reason%", reason); } }); - broadcast(Permission.ESSENTIALS_KICK_NOTIFY, Message.COMMAND_KICK_NOTIFY, "%player%", sender.getName(), "%target%", "all", "%reason%", reason); + broadcast(Permission.ESSENTIALS_KICK_NOTIFY, Message.COMMAND_KICK_NOTIFY, "%player%", sender.getName(), "%target%", "all", "%reason%", reason, + "%sender%", sanctionModule.getSanctionBy(sender), "%duration%", "0", "%created_at%", new SimpleDateFormat(sanctionModule.getDateFormat()).format(new Date())); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/step/CommandStep.java b/src/main/java/fr/maxlego08/essentials/commands/commands/step/CommandStep.java index 2bb58c16..e8687413 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/step/CommandStep.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/step/CommandStep.java @@ -4,7 +4,6 @@ import fr.maxlego08.essentials.api.commands.CommandResultType; import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.api.steps.Step; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; public class CommandStep extends VCommand { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCompact.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCompact.java index b33c2343..d4ab4ad8 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCompact.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCompact.java @@ -29,7 +29,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { Optional optional = this.configuration.getCompactMaterials().stream().filter(e -> e.from().equals(material)).findFirst(); if (optional.isEmpty()) { - message(sender, Message.COMMAND_COMPACT_TYPE, "%material%", name(material.name())); + message(sender, Message.COMMAND_COMPACT_TYPE, "%material%", getMaterialName(material)); return CommandResultType.DEFAULT; } @@ -40,15 +40,15 @@ protected CommandResultType perform(EssentialsPlugin plugin) { int amountOf = count(inventory, material); if (amountOf < 9) { - message(getPlayer(), Message.COMMAND_COMPACT_ERROR, "%item%", name(material.name())); + message(getPlayer(), Message.COMMAND_COMPACT_ERROR, "%item%", getMaterialName(material)); return CommandResultType.DEFAULT; } int realAmount = amountOf / 9; removeItems(inventory, new ItemStack(material), realAmount * 9); this.plugin.give(this.player, new ItemStack(newMaterial, realAmount)); - message(this.player, Message.COMMAND_COMPACT_SUCCESS, "%amount%", realAmount * 9, "%item%", name(material.name()), - "%toAmount%", realAmount, "%toItem%", name(newMaterial.name())); + message(this.player, Message.COMMAND_COMPACT_SUCCESS, "%amount%", realAmount * 9, "%item%", getMaterialName(material), + "%toAmount%", realAmount, "%toItem%", getMaterialName(newMaterial)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCraft.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCraft.java index 7e855b3e..2f8a9c92 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCraft.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandCraft.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandCraft extends VCommand { public CommandCraft(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandCraft(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openWorkbench(this.player.getLocation(), true); + this.player.openInventory(MenuType.CRAFTING.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandFurnace.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandFurnace.java index 8b13cc2e..07818fb9 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandFurnace.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandFurnace.java @@ -25,14 +25,14 @@ protected CommandResultType perform(EssentialsPlugin plugin) { ItemStack itemStack = this.player.getInventory().getItemInMainHand(); if (itemStack.getType().isAir()) { - message(sender, Message.COMMAND_FURNACE_TYPE, "%material%", "AIR"); + message(sender, Message.COMMAND_FURNACE_TYPE, "%material%", getMaterialName(Material.AIR)); return CommandResultType.DEFAULT; } Material material = itemStack.getType(); Optional optional = this.configuration.getSmeltableMaterials().stream().filter(e -> e.from().equals(material)).findFirst(); if (optional.isEmpty()) { - message(sender, Message.COMMAND_FURNACE_TYPE, "%material%", name(material.name())); + message(sender, Message.COMMAND_FURNACE_TYPE, "%material%", getMaterialName(material)); return CommandResultType.DEFAULT; } @@ -43,13 +43,13 @@ protected CommandResultType perform(EssentialsPlugin plugin) { int realAmount = count(inventory, material); if (realAmount <= 0) { - message(getPlayer(), Message.COMMAND_FURNACE_ERROR, "%item%", name(material.name())); + message(getPlayer(), Message.COMMAND_FURNACE_ERROR, "%item%", getMaterialName(material)); return CommandResultType.DEFAULT; } removeItems(inventory, new ItemStack(material), realAmount); this.plugin.give(this.player, new ItemStack(newMaterial, realAmount)); - message(this.player, Message.COMMAND_FURNACE_SUCCESS, "%amount%", realAmount, "%item%", name(material.name()), "%toAmount%", realAmount, "%toItem%", name(newMaterial.name())); + message(this.player, Message.COMMAND_FURNACE_SUCCESS, "%amount%", realAmount, "%item%", getMaterialName(material), "%toAmount%", realAmount, "%toItem%", getMaterialName(newMaterial)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandHat.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandHat.java index d0a97489..6502a8f6 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandHat.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandHat.java @@ -28,7 +28,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { this.player.getInventory().setHelmet(inHand); this.player.getInventory().setItemInMainHand(itemStack); - message(this.sender, Message.COMMAND_HAT_SUCCESS, "%item%", name(inHand.getType().name())); + message(this.sender, Message.COMMAND_HAT_SUCCESS, "%item%", getItemName(inHand)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandItemFrame.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandItemFrame.java index a98dcc02..dafc893b 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandItemFrame.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandItemFrame.java @@ -5,7 +5,6 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; -import org.bukkit.FluidCollisionMode; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.ItemFrame; diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandNear.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandNear.java index a5ac5606..1a571884 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandNear.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandNear.java @@ -11,7 +11,6 @@ import java.text.DecimalFormat; import java.util.Collection; -import java.util.List; public class CommandNear extends VCommand { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandSuicide.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandSuicide.java index 9be843cd..2dc8ea79 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandSuicide.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandSuicide.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.module.modules.RuleModule; import fr.maxlego08.essentials.zutils.utils.AttributeUtils; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; -import org.bukkit.attribute.Attribute; public class CommandSuicide extends VCommand { public CommandSuicide(EssentialsPlugin plugin) { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandVersion.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandVersion.java index 2e92ee87..37884981 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandVersion.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/CommandVersion.java @@ -15,11 +15,11 @@ public CommandVersion(EssentialsPlugin plugin) { protected CommandResultType perform(EssentialsPlugin plugin) { - message(this.sender, "§aVersion du plugin§7: §2" + plugin.getDescription().getVersion()); - message(this.sender, "§aAuteur§7: §2Maxlego08"); - message(this.sender, "§aDiscord§7: §2http://discord.groupez.dev/"); - message(this.sender, "§aBuy it for §d20€§7: §2https://www.spigotmc.org/resources/116293/"); - message(this.sender, "§aSponsor§7: §chttps://minecraft-inventory-builder.com/"); + message(this.sender, "Version du plugin: " + plugin.getPluginMeta().getVersion()); + message(this.sender, "Auteur: Maxlego08"); + message(this.sender, "Discord: http://discord.groupez.dev/"); + message(this.sender, "Buy it for 20€: https://www.spigotmc.org/resources/116293/"); + message(this.sender, "Sponsor: https://minecraft-inventory-builder.com/"); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandEnchant.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandEnchant.java index 12b306d0..cf67eca8 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandEnchant.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandEnchant.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; @@ -38,13 +39,13 @@ protected CommandResultType perform(EssentialsPlugin plugin) { return CommandResultType.DEFAULT; } - var optional = plugin.getEnchantments().getEnchantments(enchantAsString); + var optional = plugin.getEnchantments().getEnchantment(enchantAsString); if (optional.isEmpty()) { message(sender, Message.COMMAND_ENCHANT_ERROR_ENCHANT, "%enchant%", enchantAsString); return CommandResultType.DEFAULT; } - Enchantment enchantment = optional.get().enchantment(); + Enchantment enchantment = optional.get(); ItemStack itemStack = player.getInventory().getItemInMainHand(); if (itemStack.getType().isAir()) { message(sender, player, Message.COMMAND_ENCHANT_ERROR_ITEM_SELF, Message.COMMAND_ENCHANT_ERROR_ITEM_PLAYER); @@ -52,12 +53,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { } enchant(itemStack, enchantment, level); - String translatedEnchantments; - try { - translatedEnchantments = ""; - } catch (Exception e) { - translatedEnchantments = ""; - } + String translatedEnchantments = MiniMessage.miniMessage().serialize(enchantment.description()); if (level == 0) { message(sender, player, Message.COMMAND_ENCHANT_REMOVE_SELF, Message.COMMAND_ENCHANT_REMOVE_PLAYER, "%enchant%", translatedEnchantments); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandInvsee.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandInvsee.java index 6747c546..222f5e9e 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandInvsee.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandInvsee.java @@ -4,13 +4,10 @@ import fr.maxlego08.essentials.api.commands.CommandResultType; import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.api.nms.PlayerUtil; import fr.maxlego08.essentials.api.user.Option; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.OfflinePlayer; -import java.lang.reflect.Constructor; - public class CommandInvsee extends VCommand { public CommandInvsee(EssentialsPlugin plugin) { super(plugin); @@ -36,7 +33,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { } else { - message(sender, "&cOffline invsee is disabled for the moment."); + message(sender, "Offline invsee is disabled for the moment."); /*if (!hasPermission(sender, Permission.ESSENTIALS_INVSEE_OFFLINE)) return CommandResultType.SYNTAX_ERROR; String version = NmsVersionUtils.getNmsPackage(); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandPowerTools.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandPowerTools.java index 5eff963d..4424d36f 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandPowerTools.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandPowerTools.java @@ -39,13 +39,13 @@ protected CommandResultType perform(EssentialsPlugin plugin) { } this.user.deletePowerTools(material); - message(sender, Message.COMMAND_POWER_TOOL_RESET, "%item%", material); + message(sender, Message.COMMAND_POWER_TOOL_RESET, "%item%", getItemName(itemStack)); return CommandResultType.DEFAULT; } this.user.setPowerTools(material, command); - message(sender, Message.COMMAND_POWER_TOOL_INFO, "%item%", material, "%command%", command); + message(sender, Message.COMMAND_POWER_TOOL_INFO, "%item%", getItemName(itemStack), "%command%", command); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandSkull.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandSkull.java index b77a8a71..1d6e68cc 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandSkull.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/admins/CommandSkull.java @@ -5,12 +5,15 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; -import fr.maxlego08.menu.ZMenuItemStack; +import fr.maxlego08.menu.api.MenuItemStack; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; +import java.io.File; +import java.util.Map; + public class CommandSkull extends VCommand { public CommandSkull(EssentialsPlugin plugin) { super(plugin); @@ -30,8 +33,8 @@ protected CommandResultType perform(EssentialsPlugin plugin) { if (offlinePlayer == null) { - ZMenuItemStack menuItemStack = new ZMenuItemStack(plugin.getInventoryManager(), "", ""); - menuItemStack.setUrl(value); + MenuItemStack menuItemStack = plugin.getInventoryManager().loadItemStack( + new File(plugin.getDataFolder(), "config.yml"), Map.of("material", "PLAYER_HEAD", "url", value)); itemStack = menuItemStack.build(player, false); } else { diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandAnvil.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandAnvil.java index 13e46523..2f7745f4 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandAnvil.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandAnvil.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandAnvil extends VCommand { public CommandAnvil(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandAnvil(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openAnvil(this.player.getLocation(), true); + this.player.openInventory(MenuType.ANVIL.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandCartographyTable.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandCartographyTable.java index 797055d4..633ead98 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandCartographyTable.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandCartographyTable.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandCartographyTable extends VCommand { public CommandCartographyTable(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandCartographyTable(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openCartographyTable(this.player.getLocation(), true); + this.player.openInventory(MenuType.CARTOGRAPHY_TABLE.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandEnchanting.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandEnchanting.java index a6910c4b..1f551385 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandEnchanting.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandEnchanting.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandEnchanting extends VCommand { public CommandEnchanting(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandEnchanting(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openEnchanting(this.player.getLocation(), true); + this.player.openInventory(MenuType.ENCHANTMENT.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandGrindStone.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandGrindStone.java index bc7cc9f8..f203d7f5 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandGrindStone.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandGrindStone.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandGrindStone extends VCommand { public CommandGrindStone(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandGrindStone(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openGrindstone(this.player.getLocation(), true); + this.player.openInventory(MenuType.GRINDSTONE.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandLoom.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandLoom.java index b11bd12e..8ea41c83 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandLoom.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandLoom.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandLoom extends VCommand { public CommandLoom(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandLoom(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openLoom(this.player.getLocation(), true); + this.player.openInventory(MenuType.LOOM.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandSmithingTable.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandSmithingTable.java index e5d0d45c..ccf8c49d 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandSmithingTable.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandSmithingTable.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandSmithingTable extends VCommand { public CommandSmithingTable(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandSmithingTable(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openSmithingTable(this.player.getLocation(), true); + this.player.openInventory(MenuType.SMITHING.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandStoneCutter.java b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandStoneCutter.java index a392dfcb..13cac7b7 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandStoneCutter.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/utils/blocks/CommandStoneCutter.java @@ -5,6 +5,7 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.Message; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; +import org.bukkit.inventory.MenuType; public class CommandStoneCutter extends VCommand { public CommandStoneCutter(EssentialsPlugin plugin) { @@ -17,7 +18,7 @@ public CommandStoneCutter(EssentialsPlugin plugin) { @Override protected CommandResultType perform(EssentialsPlugin plugin) { - this.player.openStonecutter(this.player.getLocation(), true); + this.player.openInventory(MenuType.STONECUTTER.builder().location(this.player.getLocation()).checkReachable(false).build(this.player)); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGetSlot.java b/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGetSlot.java index c40978b0..36b66f82 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGetSlot.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGetSlot.java @@ -52,15 +52,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { VaultItemDTO vaultItemDTO = optional.get(); ItemStack itemStack = ItemStackUtils.deserializeItemStack(vaultItemDTO.item()); - String itemName; - - if (itemStack == null) { - itemName = "unknown"; - } else if (itemStack.hasItemMeta() && itemStack.getItemMeta() != null && itemStack.getItemMeta().hasDisplayName()) { - itemName = itemStack.getItemMeta().getDisplayName(); - } else { - itemName = itemStack.getType().name(); - } + String itemName = itemStack == null ? "unknown" : getItemName(itemStack); message(this.sender, Message.COMMAND_VAULT_GET_SLOT_SUCCESS, "%player%", playerName, "%vault%", vaultId, "%slot%", slot, "%amount%", String.valueOf(vaultItemDTO.quantity()), "%item%", itemName); diff --git a/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGive.java b/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGive.java index 799a1396..9ea26272 100644 --- a/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGive.java +++ b/src/main/java/fr/maxlego08/essentials/commands/commands/vault/CommandVaultGive.java @@ -8,6 +8,7 @@ import fr.maxlego08.essentials.module.modules.vault.VaultModule; import fr.maxlego08.essentials.zutils.utils.commands.VCommand; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.inventory.ItemStack; @@ -25,8 +26,11 @@ public CommandVaultGive(EssentialsPlugin plugin) { this.addSubCommand("give"); this.addRequirePlayerNameArg(); this.addRequireArg("item", (sender, args) -> { - List materials = new ArrayList<>(plugin.getMaterials().stream().map(Material::name).map(String::toLowerCase).toList()); - materials.addAll(plugin.getModuleManager().getModule(ItemModule.class).getItemsName()); + List materials = new ArrayList<>(plugin.getMaterials().stream() + .filter(material -> material.isItem() && !material.isAir()) + .map(Material::getKey).map(NamespacedKey::getKey).toList()); + var itemModule = plugin.getModuleManager().getModule(ItemModule.class); + if (itemModule != null) materials.addAll(itemModule.getItemsName()); return materials; }); this.addOptionalArg("amount", (sender, args) -> Arrays.asList("1", "64", "500", "1000", "10000", "100000")); @@ -47,7 +51,7 @@ protected CommandResultType perform(EssentialsPlugin plugin) { } plugin.getVaultManager().addItem(offlinePlayer.getUniqueId(), itemStack, amount); - message(sender, Message.COMMAND_GIVE_VAULT, "%item%", itemName, "%player%", offlinePlayer.getName(), "%amount%", amount); + message(sender, Message.COMMAND_GIVE_VAULT, "%item%", getItemName(itemStack), "%player%", offlinePlayer.getName(), "%amount%", amount); return CommandResultType.SUCCESS; } diff --git a/src/main/java/fr/maxlego08/essentials/convert/axvault/AxVaultsConvert.java b/src/main/java/fr/maxlego08/essentials/convert/axvault/AxVaultsConvert.java index 5ccc54ca..5a295e99 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/axvault/AxVaultsConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/axvault/AxVaultsConvert.java @@ -20,24 +20,24 @@ public void convert(CommandSender sender) { if (!Bukkit.getPluginManager().isPluginEnabled("AxVaults")) { - message(sender, "&cYou must have AxVaults on your server to do the conversion."); + message(sender, "You must have AxVaults on your server to do the conversion."); return; } - message(sender, "&fStart convert &7AxVaults"); + message(sender, "Start convert AxVaults"); if (this.plugin.getStorageManager().getStorage() instanceof SqlStorage) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } private void startConvertDatabase(CommandSender sender) { this.plugin.createInstance("AxVaultsHook"); - message(sender, "&aYou have just converted your AxVaults data to zEssentials !"); + message(sender, "You have just converted your AxVaults data to zEssentials !"); } } diff --git a/src/main/java/fr/maxlego08/essentials/convert/cmi/CMIConvert.java b/src/main/java/fr/maxlego08/essentials/convert/cmi/CMIConvert.java index f19254bb..a19482eb 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/cmi/CMIConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/cmi/CMIConvert.java @@ -32,10 +32,10 @@ public CMIConvert(EssentialsPlugin plugin) { @Override public void convert(CommandSender sender) { - message(sender, "&fStart convert &7CMI"); + message(sender, "Start convert CMI"); File file = new File(this.plugin.getDataFolder(), "cmi.sqlite.db"); if (!file.exists()) { - message(sender, "&cUnable to find &bcmi.sqlite.db &cfile in &fplugins/zEssentials&c."); + message(sender, "Unable to find cmi.sqlite.db file in plugins/zEssentials."); return; } @@ -44,7 +44,7 @@ public void convert(CommandSender sender) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender, sqlStorage)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -54,14 +54,14 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { databaseConnection.setFileName("cmi.sqlite.db"); if (!databaseConnection.isValid()) { - message(sender, "&cUnable to connect to database."); + message(sender, "Unable to connect to database."); } RequestHelper requestHelper = new RequestHelper(databaseConnection, logger); List cmiUsers = requestHelper.select("users", CMIUser.class, table -> { }); - message(sender, "&aFound &f" + cmiUsers.size() + " &ausers."); + message(sender, "Found " + cmiUsers.size() + " users."); var userRepository = sqlStorage.with(UserRepository.class); var userEconomyRepository = sqlStorage.with(UserEconomyRepository.class); @@ -84,7 +84,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { } }); - message(sender, "&aYou have just converted your CMI data to zEssentials !"); + message(sender, "You have just converted your CMI data to zEssentials !"); } private void storeHomes(UserHomeRepository userHomeRepository, CMIUser cmiUser) { diff --git a/src/main/java/fr/maxlego08/essentials/convert/coinsengine/CoinsEngineConvert.java b/src/main/java/fr/maxlego08/essentials/convert/coinsengine/CoinsEngineConvert.java index 3f7abd4a..d6956e80 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/coinsengine/CoinsEngineConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/coinsengine/CoinsEngineConvert.java @@ -33,10 +33,10 @@ public CoinsEngineConvert(EssentialsPlugin plugin) { @Override public void convert(CommandSender sender) { - message(sender, "&fStart convert &7CoinsEngine"); + message(sender, "Start convert CoinsEngine"); File folder = new File(Bukkit.getWorldContainer(), "plugins/CoinsEngine"); if (!folder.exists()) { - message(sender, "&cUnable to find &bplugins/CoinsEngine&c."); + message(sender, "Unable to find plugins/CoinsEngine."); return; } @@ -46,13 +46,13 @@ public void convert(CommandSender sender) { try { startConvertDatabase(sender, sqlStorage, folder); } catch (SQLException exception) { - message(sender, "&cImpossible to convert CoinsEngine: " + exception.getMessage()); + message(sender, "Impossible to convert CoinsEngine: " + exception.getMessage()); exception.printStackTrace(); } }); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -61,7 +61,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage, F databaseConnection.setFileName("data.db"); if (!databaseConnection.isValid()) { - message(sender, "&cUnable to connect to database."); + message(sender, "Unable to connect to database."); } List columns = getColumns(folder); @@ -69,7 +69,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage, F for (String column : columns) { if (economyManager.getEconomy(column).isEmpty()) { - message(sender, "&cUnable to find the economy §f" + column + "§c. You must create the savings in the §fmodules/economy/config.yml §cfile before converting the data."); + message(sender, "Unable to find the economy " + column + ". You must create the savings in the modules/economy/config.yml file before converting the data."); return; } } @@ -81,7 +81,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage, F Schema schema = SchemaBuilder.select("coinsengine_users"); var result = schema.executeSelect(databaseConnection, logger); - message(sender, "&aFound &f" + result.size() + " &ausers."); + message(sender, "Found " + result.size() + " users."); result.forEach(map -> { @@ -94,7 +94,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage, F }); }); - message(sender, "&aYou have just converted your CoinsEngine data to zEssentials !"); + message(sender, "You have just converted your CoinsEngine data to zEssentials !"); } private List getColumns(File folder) { diff --git a/src/main/java/fr/maxlego08/essentials/convert/essentialsx/EssentialsXConvert.java b/src/main/java/fr/maxlego08/essentials/convert/essentialsx/EssentialsXConvert.java index 766e89a9..11b4c37f 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/essentialsx/EssentialsXConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/essentialsx/EssentialsXConvert.java @@ -11,9 +11,7 @@ import fr.maxlego08.essentials.user.ZHome; import fr.maxlego08.essentials.zutils.utils.ZUtils; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.OfflinePlayer; -import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -36,10 +34,10 @@ public EssentialsXConvert(EssentialsPlugin plugin) { @Override public void convert(CommandSender sender) { - message(sender, "&fStart convert &7EssentialX"); + message(sender, "Start convert EssentialX"); File folder = new File("plugins/Essentials/userdata"); if (!folder.exists()) { - message(sender, "&cUnable to find the folder &bplugins/Essentials/userdata&c."); + message(sender, "Unable to find the folder plugins/Essentials/userdata."); return; } @@ -48,7 +46,7 @@ public void convert(CommandSender sender) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender, sqlStorage, folder)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -56,17 +54,17 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage, F var files = folder.listFiles(); if (files == null || files.length == 0) { - message(sender, "&cNo files found in the userdata folder!"); + message(sender, "No files found in the userdata folder!"); return; } - message(sender, "&aFound &f" + files.length + " &ausers."); + message(sender, "Found " + files.length + " users."); for (File file : files) { loadUser(sqlStorage, file, sender); } - message(sender, "&aYou have just converted your EssentialsX data to zEssentials !"); + message(sender, "You have just converted your EssentialsX data to zEssentials !"); } private void loadUser(SqlStorage sqlStorage, File file, CommandSender sender) { @@ -106,7 +104,7 @@ private void loadUser(SqlStorage sqlStorage, File file, CommandSender sender) { homes.forEach(home -> userHomeRepository.upsert(uniqueId, home)); if (sender instanceof Player player) { - this.plugin.getComponentMessage().sendActionBar(player, "&fConvert user &7" + uniqueId); + this.plugin.getComponentMessage().sendActionBar(player, "Convert user " + uniqueId); } }); @@ -116,7 +114,7 @@ private void loadUser(SqlStorage sqlStorage, File file, CommandSender sender) { this.plugin.getLogger().severe("Impossible to load the file " + file.getName()); } - message(sender, "&aYou have just converted your EssentialsX data to zEssentials !"); + message(sender, "You have just converted your EssentialsX data to zEssentials !"); } private List parseHomes(YamlConfiguration configuration) { diff --git a/src/main/java/fr/maxlego08/essentials/convert/huskhomes/HuskHomesConvert.java b/src/main/java/fr/maxlego08/essentials/convert/huskhomes/HuskHomesConvert.java index 84c4d694..70e32041 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/huskhomes/HuskHomesConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/huskhomes/HuskHomesConvert.java @@ -28,10 +28,10 @@ public HuskHomesConvert(EssentialsPlugin plugin) { public void convert(CommandSender sender) { - message(sender, "&fStart convert &7HuskHomes"); + message(sender, "Start convert HuskHomes"); /*File file = new File(this.plugin.getDataFolder(), "HuskHomesData.db"); if (!file.exists()) { - message(sender, "&cUnable to find &bHuskHomesData.db &cfile in &fplugins/zEssentials&c."); + message(sender, "Unable to find HuskHomesData.db file in plugins/zEssentials."); return; }*/ @@ -40,7 +40,7 @@ public void convert(CommandSender sender) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender, sqlStorage)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -54,7 +54,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { databaseConnection = sqliteConnection; if (!databaseConnection.isValid()) { - message(sender, "&cUnable to connect to database."); + message(sender, "Unable to connect to database."); return; } } @@ -68,7 +68,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { var userHomeRepository = sqlStorage.with(UserHomeRepository.class); var userRepository = sqlStorage.with(UserRepository.class); - message(sender, "&aFound &f" + homes.size() + " &ahomes and §f" + users.size() + " §ausers."); + message(sender, "Found " + homes.size() + " homes and " + users.size() + " users."); users.forEach(user -> userRepository.upsert(user.uuid(), user.username())); @@ -94,6 +94,6 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { userHomeRepository.upsert(home.owner_uuid(), new ZHome(location, savedPosition.name(), null)); }); - message(sender, "&aYou have just converted your HuskHomes data to zEssentials !"); + message(sender, "You have just converted your HuskHomes data to zEssentials !"); } } diff --git a/src/main/java/fr/maxlego08/essentials/convert/playervaultx/PlayerVaultXConvert.java b/src/main/java/fr/maxlego08/essentials/convert/playervaultx/PlayerVaultXConvert.java index 08220f73..43036ce0 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/playervaultx/PlayerVaultXConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/playervaultx/PlayerVaultXConvert.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import java.io.File; +import java.util.Base64; import java.util.UUID; public class PlayerVaultXConvert extends ZUtils implements Convert { @@ -26,24 +26,24 @@ public void convert(CommandSender sender) { if (!Bukkit.getPluginManager().isPluginEnabled("PlayerVaults")) { - message(sender, "&cYou must have PlayerVaultX on your server to do the conversion."); + message(sender, "You must have PlayerVaultX on your server to do the conversion."); return; } File file = new File(Bukkit.getWorldContainer(), "plugins/PlayerVaults/newvaults"); if (!file.exists()) { - message(sender, "&cUnable to find &bplugins/PlayerVaults/newvaults&c."); + message(sender, "Unable to find plugins/PlayerVaults/newvaults."); return; } - message(sender, "&fStart convert &7PlayerVaultX"); + message(sender, "Start convert PlayerVaultX"); if (this.plugin.getStorageManager().getStorage() instanceof SqlStorage) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender, file)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -55,7 +55,7 @@ private void startConvertDatabase(CommandSender sender, File folder) { var files = folder.listFiles(); if (files == null) { - message(sender, "§cUnable to find files from vaults."); + message(sender, "Unable to find files from vaults."); return; } @@ -85,14 +85,14 @@ private void startConvertDatabase(CommandSender sender, File folder) { } } - message(sender, "&aYou have just converted your PlayerVaultX data to zEssentials !"); - message(sender, "&f" + players + " §aplayers and &f" + vaults + " §avaults."); + message(sender, "You have just converted your PlayerVaultX data to zEssentials !"); + message(sender, "" + players + " players and " + vaults + " vaults."); } private ItemStack[] getItems(String base64) { try { - var bytes = Base64Coder.decodeLines(base64); + var bytes = Base64.getDecoder().decode(base64.replaceAll("\\s", "")); var cardBoxSerializationClass = Class.forName("com.drtshock.playervaults.vaultmanagement.CardboardBoxSerialization"); var method = cardBoxSerializationClass.getDeclaredMethod("readInventory", byte[].class); method.setAccessible(true); diff --git a/src/main/java/fr/maxlego08/essentials/convert/sunlight/SunlightConvert.java b/src/main/java/fr/maxlego08/essentials/convert/sunlight/SunlightConvert.java index 9fd806be..8158c3d7 100644 --- a/src/main/java/fr/maxlego08/essentials/convert/sunlight/SunlightConvert.java +++ b/src/main/java/fr/maxlego08/essentials/convert/sunlight/SunlightConvert.java @@ -28,10 +28,10 @@ public SunlightConvert(EssentialsPlugin plugin) { @Override public void convert(CommandSender sender) { - message(sender, "&fStart convert &7Sunlight"); + message(sender, "Start convert Sunlight"); File file = new File(this.plugin.getDataFolder(), "data.db"); if (!file.exists()) { - message(sender, "&cUnable to find &bdata.db &cfile in &fplugins/zEssentials&c."); + message(sender, "Unable to find data.db file in plugins/zEssentials."); return; } @@ -40,7 +40,7 @@ public void convert(CommandSender sender) { this.plugin.getScheduler().runAsync(wrappedTask -> startConvertDatabase(sender, sqlStorage)); } else { - message(sender, "&cYou must have the storage in a database to be able to convert. Never use the storage in JSON !"); + message(sender, "You must have the storage in a database to be able to convert. Never use the storage in JSON !"); } } @@ -49,7 +49,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { databaseConnection.setFileName("data.db"); if (!databaseConnection.isValid()) { - message(sender, "&cUnable to connect to database."); + message(sender, "Unable to connect to database."); } RequestHelper requestHelper = new RequestHelper(databaseConnection, message -> plugin.getLogger().info(message)); @@ -58,7 +58,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { List sunlightHomes = requestHelper.select("sunlight_homes", SunlightHome.class, table -> { }); - message(sender, "&aFound &f" + sunlightUsers.size() + " &ausers and &f" + sunlightHomes.size() + " &ahomes."); + message(sender, "Found " + sunlightUsers.size() + " users and " + sunlightHomes.size() + " homes."); var userRepository = sqlStorage.with(UserRepository.class); var userHomeRepository = sqlStorage.with(UserHomeRepository.class); @@ -72,7 +72,7 @@ private void startConvertDatabase(CommandSender sender, SqlStorage sqlStorage) { sunlightHomes.forEach(sunlightHome -> storeHomes(userHomeRepository, sunlightHome)); - message(sender, "&aYou have just converted your Sunlight data to zEssentials !"); + message(sender, "You have just converted your Sunlight data to zEssentials !"); } private void storeHomes(UserHomeRepository userHomeRepository, SunlightHome sunlightHome) { diff --git a/src/main/java/fr/maxlego08/essentials/enchantments/ZEnchantments.java b/src/main/java/fr/maxlego08/essentials/enchantments/ZEnchantments.java index 40281826..388179c0 100644 --- a/src/main/java/fr/maxlego08/essentials/enchantments/ZEnchantments.java +++ b/src/main/java/fr/maxlego08/essentials/enchantments/ZEnchantments.java @@ -2,93 +2,47 @@ import fr.maxlego08.essentials.api.enchantment.Enchantments; import fr.maxlego08.essentials.api.enchantment.EssentialsEnchantment; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.Locale; import java.util.Optional; public class ZEnchantments implements Enchantments { - private final List essentialsEnchantments = new ArrayList<>(); + @Override + public Optional getEnchantment(String enchantment) { + NamespacedKey key = NamespacedKey.fromString(enchantment.toLowerCase(Locale.ROOT)); + if (key == null) return Optional.empty(); + + return Optional.ofNullable(RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT).get(key)); + } @Override + @Deprecated public Optional getEnchantments(String enchantment) { - return essentialsEnchantments.stream().filter(essentialsEnchantment -> essentialsEnchantment.aliases().contains(enchantment.toLowerCase())).findFirst(); + return getEnchantment(enchantment).map(value -> { + NamespacedKey key = value.getKey(); + String name = key.getNamespace().equals(NamespacedKey.MINECRAFT) ? key.getKey() : key.toString(); + return new ZEssentialsEnchantment(value, List.of(name)); + }); } @Override + @Deprecated public void register() { - this.register(valueOf("DAMAGE_ALL", "SHARPNESS"), "alldamage", "alldmg", "sharpness", "sharp", "dal"); - this.register(valueOf("DAMAGE_ARTHROPODS", "BANE_OF_ARTHROPODS"), "ardmg", "baneofarthropods", "baneofarthropod", "arthropod", "dar"); - this.register(valueOf("DAMAGE_UNDEAD", "SMITE"), "undeaddamage", "smite", "du"); - this.register(valueOf("DIG_SPEED", "EFFICIENCY"), "digspeed", "efficiency", "minespeed", "cutspeed", "ds", "eff"); - this.register(valueOf("DURABILITY", "UNBREAKING"), "durability", "dura", "unbreaking", "d"); - this.register(Enchantment.THORNS, "thorns", "highcrit", "thorn", "highercrit", "t"); - this.register(Enchantment.FIRE_ASPECT, "fireaspect", "fire", "meleefire", "meleeflame", "fa"); - this.register(Enchantment.KNOCKBACK, "knockback", "kback", "kb", "k"); - this.register(valueOf("LOOT_BONUS_BLOCKS", "FORTUNE"), "blockslootbonus", "fortune", "fort", "lbb"); - this.register(valueOf("LOOT_BONUS_MOBS", "LOOTING"), "mobslootbonus", "mobloot", "looting", "lbm"); - this.register(valueOf("OXYGEN", "RESPIRATION"), "oxygen", "respiration", "breathing", "breath", "o"); - this.register(valueOf("PROTECTION_ENVIRONMENTAL", "PROTECTION"), "protection", "prot", "protect", "p"); - this.register(valueOf("PROTECTION_EXPLOSIONS", "BLAST_PROTECTION"), "explosionsprotection", "explosionprotection", "expprot", "blastprotection", "bprotection", "bprotect", "blastprotect", "pe"); - this.register(valueOf("PROTECTION_FALL", "FEATHER_FALLING"), "fallprotection", "fallprot", "featherfall", "featherfalling", "pfa"); - this.register(valueOf("PROTECTION_FIRE", "FIRE_PROTECTION"), "fireprotection", "flameprotection", "fireprotect", "flameprotect", "fireprot", "flameprot", "pf"); - this.register(valueOf("PROTECTION_PROJECTILE", "PROJECTILE_PROTECTION"), "projectileprotection", "projprot", "pp"); - this.register(Enchantment.SILK_TOUCH, "silktouch", "softtouch", "st"); - this.register(valueOf("WATER_WORKER", "AQUA_AFFINITY"), "waterworker", "aquaaffinity", "watermine", "ww"); - this.register(valueOf("ARROW_FIRE", "FLAME"), "firearrow", "flame", "flamearrow", "af"); - this.register(valueOf("ARROW_DAMAGE", "POWER"), "arrowdamage", "power", "arrowpower", "ad"); - this.register(valueOf("ARROW_KNOCKBACK", "PUNCH"), "arrowknockback", "arrowkb", "punch", "arrowpunch", "ak"); - this.register(valueOf("ARROW_INFINITE", "INFINITY"), "infinitearrows", "infarrows", "infinity", "infinite", "unlimited", "unlimitedarrows", "ai"); - this.register(valueOf("LUCK", "LUCK_OF_THE_SEA"), "luck", "luckofsea", "luckofseas", "rodluck"); - this.register(Enchantment.LURE, "lure", "rodlure"); - this.register(Enchantment.DEPTH_STRIDER, "depthstrider", "depth", "strider"); - this.register(Enchantment.FROST_WALKER, "frostwalker", "frost", "walker"); - this.register(Enchantment.MENDING, "mending"); - this.register(Enchantment.BINDING_CURSE, "bindingcurse", "bindcurse", "binding", "bind"); - this.register(Enchantment.VANISHING_CURSE, "vanishingcurse", "vanishcurse", "vanishing", "vanish"); - this.register(Enchantment.SWEEPING_EDGE, "sweepingedge", "sweepedge", "sweeping"); - this.register(Enchantment.LOYALTY, "loyalty", "loyal", "return"); - this.register(Enchantment.IMPALING, "impaling", "impale", "oceandamage", "oceandmg"); - this.register(Enchantment.RIPTIDE, "riptide", "rip", "tide", "launch"); - this.register(Enchantment.CHANNELING, "channelling", "chanelling", "channeling", "chaneling", "channel"); - this.register(Enchantment.MULTISHOT, "multishot", "tripleshot"); - this.register(Enchantment.QUICK_CHARGE, "quickcharge", "quickdraw", "fastcharge", "fastdraw"); - this.register(Enchantment.PIERCING, "piercing"); - this.register(Enchantment.SOUL_SPEED, "soulspeed", "soilspeed", "sandspeed"); - this.register(Enchantment.SWIFT_SNEAK, "swiftsneak"); - - // 1.21+ - this.register(valueOf("BREACH"), "breach"); - this.register(valueOf("DENSITY"), "density"); - this.register(valueOf("WIND_BURST"), "windburst", "wind", "burst"); - - // 1.21.11+ - this.register(valueOf("LUNGE"), "lunge"); - } - - private void register(Enchantment enchantment, String... strings) { - if (enchantment == null) return; - this.essentialsEnchantments.add(new ZEssentialsEnchantment(enchantment, Arrays.asList(strings))); + // Enchantments are provided by the server registry; no manual registration is needed. } @Override public List getEnchantments() { - return this.essentialsEnchantments.stream().map(EssentialsEnchantment::aliases).flatMap(List::stream).toList(); + var registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT); + return registry.stream().map(registry::getKeyOrThrow) + .map(key -> key.getNamespace().equals(NamespacedKey.MINECRAFT) ? key.getKey() : key.toString()) + .sorted().toList(); } - private Enchantment valueOf(String... names) { - for (final String name : names) { - try { - Enchantment value = (Enchantment) Enchantment.class.getDeclaredField(name).get(null); - if (value != null) { - return value; - } - } catch (NoSuchFieldException | IllegalAccessException ignored) { - } - } - return null; - } } diff --git a/src/main/java/fr/maxlego08/essentials/enchantments/ZEssentialsEnchantment.java b/src/main/java/fr/maxlego08/essentials/enchantments/ZEssentialsEnchantment.java index 93c21d5d..44482265 100644 --- a/src/main/java/fr/maxlego08/essentials/enchantments/ZEssentialsEnchantment.java +++ b/src/main/java/fr/maxlego08/essentials/enchantments/ZEssentialsEnchantment.java @@ -5,6 +5,10 @@ import java.util.List; +/** + * @deprecated Use {@link Enchantment} directly. + */ +@Deprecated public record ZEssentialsEnchantment(Enchantment enchantment, List aliases) implements EssentialsEnchantment { } diff --git a/src/main/java/fr/maxlego08/essentials/listener/spigot/ChatListener.java b/src/main/java/fr/maxlego08/essentials/listener/spigot/ChatListener.java deleted file mode 100644 index d89c88b3..00000000 --- a/src/main/java/fr/maxlego08/essentials/listener/spigot/ChatListener.java +++ /dev/null @@ -1,22 +0,0 @@ -package fr.maxlego08.essentials.listener.spigot; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.zutils.utils.ZUtils; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; - -public class ChatListener extends ZUtils implements Listener { - - private final EssentialsPlugin plugin; - - public ChatListener(EssentialsPlugin plugin) { - this.plugin = plugin; - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onTalk(AsyncPlayerChatEvent event) { - this.plugin.getSanctionManager().cancelChatEvent(event, event.getPlayer()); - } -} diff --git a/src/main/java/fr/maxlego08/essentials/loader/ButtonKitGetLoader.java b/src/main/java/fr/maxlego08/essentials/loader/ButtonKitGetLoader.java index fe7643b5..efd8fdbc 100644 --- a/src/main/java/fr/maxlego08/essentials/loader/ButtonKitGetLoader.java +++ b/src/main/java/fr/maxlego08/essentials/loader/ButtonKitGetLoader.java @@ -1,13 +1,11 @@ package fr.maxlego08.essentials.loader; import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.buttons.ButtonWarp; import fr.maxlego08.essentials.buttons.kit.ButtonKitGet; import fr.maxlego08.menu.api.button.Button; import fr.maxlego08.menu.api.button.DefaultButtonValue; import fr.maxlego08.menu.api.loader.ButtonLoader; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.Plugin; public class ButtonKitGetLoader extends ButtonLoader { diff --git a/src/main/java/fr/maxlego08/essentials/loader/ButtonVaultOpenLoader.java b/src/main/java/fr/maxlego08/essentials/loader/ButtonVaultOpenLoader.java index c17c490c..45256278 100644 --- a/src/main/java/fr/maxlego08/essentials/loader/ButtonVaultOpenLoader.java +++ b/src/main/java/fr/maxlego08/essentials/loader/ButtonVaultOpenLoader.java @@ -6,7 +6,6 @@ import fr.maxlego08.menu.api.button.DefaultButtonValue; import fr.maxlego08.menu.api.loader.ButtonLoader; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.Plugin; public class ButtonVaultOpenLoader extends ButtonLoader { diff --git a/src/main/java/fr/maxlego08/essentials/messages/MessageLoader.java b/src/main/java/fr/maxlego08/essentials/messages/MessageLoader.java index 8e1df9e7..28a1ec86 100644 --- a/src/main/java/fr/maxlego08/essentials/messages/MessageLoader.java +++ b/src/main/java/fr/maxlego08/essentials/messages/MessageLoader.java @@ -229,7 +229,7 @@ private void loadMessages(YamlConfiguration configuration) { } private String replaceMessagesColors(String message) { - return this.plugin.getConfiguration().getMessageColors().stream().reduce(message, (msg, color) -> msg.replace(color.key(), color.color()), (msg1, msg2) -> msg1); + return this.plugin.getConfiguration().getMessageColors().stream().reduce(message, (msg, color) -> msg.replace(color.key(), ""), (msg1, msg2) -> msg1); } private List getMessage(Map map) { diff --git a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserHomeTableAddSocialColumns.java b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserHomeTableAddSocialColumns.java index 65651934..b33439d9 100644 --- a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserHomeTableAddSocialColumns.java +++ b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserHomeTableAddSocialColumns.java @@ -1,24 +1,15 @@ package fr.maxlego08.essentials.migrations.update; -import fr.maxlego08.sarah.MigrationManager; import fr.maxlego08.sarah.SchemaBuilder; -import fr.maxlego08.sarah.database.DatabaseType; import fr.maxlego08.sarah.database.Migration; public class UpdateUserHomeTableAddSocialColumns extends Migration { @Override public void up() { - if (MigrationManager.getDatabaseConfiguration().getDatabaseType() == DatabaseType.SQLITE) { - // Forced to make the query one by one otherwise SQLITE will not appreciate - SchemaBuilder.alter(this, "%prefix%user_homes", schema -> schema.bool("is_public").nullable()); - SchemaBuilder.alter(this, "%prefix%user_homes", schema -> schema.string("category", 32).nullable()); - SchemaBuilder.alter(this, "%prefix%user_homes", schema -> schema.bool("is_favorite").nullable()); - } else { - SchemaBuilder.alter(this, "%prefix%user_homes", schema -> { - schema.bool("is_public").nullable(); - schema.string("category", 32).nullable(); - schema.bool("is_favorite").nullable(); - }); - } + SchemaBuilder.alter(this, "%prefix%user_homes", schema -> { + schema.bool("is_public").nullable(); + schema.string("category", 32).nullable(); + schema.bool("is_favorite").nullable(); + }); } } diff --git a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddPlayerTimeWeatherColumns.java b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddPlayerTimeWeatherColumns.java index 56943297..3bf38b96 100644 --- a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddPlayerTimeWeatherColumns.java +++ b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddPlayerTimeWeatherColumns.java @@ -1,22 +1,14 @@ package fr.maxlego08.essentials.migrations.update; -import fr.maxlego08.sarah.MigrationManager; import fr.maxlego08.sarah.SchemaBuilder; -import fr.maxlego08.sarah.database.DatabaseType; import fr.maxlego08.sarah.database.Migration; public class UpdateUserTableAddPlayerTimeWeatherColumns extends Migration { @Override public void up() { - if (MigrationManager.getDatabaseConfiguration().getDatabaseType() == DatabaseType.SQLITE) { - // Forced to make the query one by one otherwise SQLITE will not appreciate - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.bigInt("player_time").defaultValue(0)); - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.string("player_weather", 32).nullable()); - } else { - SchemaBuilder.alter(this, "%prefix%users", schema -> { - schema.bigInt("player_time").defaultValue(0); - schema.string("player_weather", 32).nullable(); - }); - } + SchemaBuilder.alter(this, "%prefix%users", schema -> { + schema.bigInt("player_time").defaultValue(0); + schema.string("player_weather", 32).nullable(); + }); } } diff --git a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddSanctionColumns.java b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddSanctionColumns.java index ec8a8e12..3287dc44 100644 --- a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddSanctionColumns.java +++ b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddSanctionColumns.java @@ -1,24 +1,16 @@ package fr.maxlego08.essentials.migrations.update; -import fr.maxlego08.sarah.MigrationManager; import fr.maxlego08.sarah.SchemaBuilder; -import fr.maxlego08.sarah.database.DatabaseType; import fr.maxlego08.sarah.database.Migration; public class UpdateUserTableAddSanctionColumns extends Migration { @Override public void up() { - if (MigrationManager.getDatabaseConfiguration().getDatabaseType() == DatabaseType.SQLITE) { - // Forced to make the query one by one otherwise SQLITE will not appreciate - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.bigInt("ban_sanction_id").nullable()); - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.bigInt("mute_sanction_id").nullable()); - } else { - SchemaBuilder.alter(this, "%prefix%users", schema -> { - // ToDo, need to fix for MARIADB ! Its work on MYSQL - schema.bigInt("ban_sanction_id").nullable();//.foreignKey("%prefix%sanctions", "id", false); - schema.bigInt("mute_sanction_id").nullable();//.foreignKey("%prefix%sanctions", "id", false); - }); - } + SchemaBuilder.alter(this, "%prefix%users", schema -> { + // ToDo, need to fix for MARIADB ! Its work on MYSQL + schema.bigInt("ban_sanction_id").nullable();//.foreignKey("%prefix%sanctions", "id", false); + schema.bigInt("mute_sanction_id").nullable();//.foreignKey("%prefix%sanctions", "id", false); + }); } } diff --git a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddVoteColumn.java b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddVoteColumn.java index b41cb490..d0307b77 100644 --- a/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddVoteColumn.java +++ b/src/main/java/fr/maxlego08/essentials/migrations/update/UpdateUserTableAddVoteColumn.java @@ -1,22 +1,14 @@ package fr.maxlego08.essentials.migrations.update; -import fr.maxlego08.sarah.MigrationManager; import fr.maxlego08.sarah.SchemaBuilder; -import fr.maxlego08.sarah.database.DatabaseType; import fr.maxlego08.sarah.database.Migration; public class UpdateUserTableAddVoteColumn extends Migration { @Override public void up() { - if (MigrationManager.getDatabaseConfiguration().getDatabaseType() == DatabaseType.SQLITE) { - // Forced to make the query one by one otherwise SQLITE will not appreciate - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.bigInt("vote").defaultValue(0)); - SchemaBuilder.alter(this, "%prefix%users", schema -> schema.integer("vote_offline").defaultValue(0)); - } else { - SchemaBuilder.alter(this, "%prefix%users", schema -> { - schema.bigInt("vote").defaultValue(0); - schema.integer("vote_offline").defaultValue(0); - }); - } + SchemaBuilder.alter(this, "%prefix%users", schema -> { + schema.bigInt("vote").defaultValue(0); + schema.integer("vote_offline").defaultValue(0); + }); } } diff --git a/src/main/java/fr/maxlego08/essentials/module/ZModule.java b/src/main/java/fr/maxlego08/essentials/module/ZModule.java index 3ad66bac..8273b737 100644 --- a/src/main/java/fr/maxlego08/essentials/module/ZModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/ZModule.java @@ -137,13 +137,13 @@ protected User getUser(UUID uuid) { return this.plugin.getStorageManager().getStorage().getUser(uuid); } + /** + * @return always {@code true}; zEssentials requires Paper + * @deprecated Paper is the only supported platform. + */ + @Deprecated protected boolean isPaperVersion() { - try { - Class.forName("net.kyori.adventure.text.Component"); - return true; - } catch (ClassNotFoundException e) { - return false; - } + return true; } public boolean isCopyAndUpdate() { diff --git a/src/main/java/fr/maxlego08/essentials/module/ZModuleManager.java b/src/main/java/fr/maxlego08/essentials/module/ZModuleManager.java index 537ad2fc..2ddc8073 100644 --- a/src/main/java/fr/maxlego08/essentials/module/ZModuleManager.java +++ b/src/main/java/fr/maxlego08/essentials/module/ZModuleManager.java @@ -3,7 +3,6 @@ import fr.maxlego08.essentials.ZEssentialsPlugin; import fr.maxlego08.essentials.api.modules.Module; import fr.maxlego08.essentials.api.modules.ModuleManager; -import fr.maxlego08.essentials.module.modules.DeathMessageModule; import fr.maxlego08.essentials.module.modules.afk.AFKModule; import fr.maxlego08.essentials.module.modules.discord.DiscordModule; import fr.maxlego08.essentials.module.modules.economy.EconomyModule; @@ -63,12 +62,10 @@ public void loadModules() { this.modules.put(EconomyModule.class, this.plugin.getEconomyManager()); this.modules.put(HomeModule.class, new HomeModule(this.plugin)); this.modules.put(SanctionModule.class, new SanctionModule(this.plugin)); - if (plugin.isPaperVersion()) { - this.modules.put(JoinQuitModule.class, new JoinQuitModule(this.plugin)); - this.modules.put(ChatModule.class, new ChatModule(this.plugin)); - this.modules.put(DiscordModule.class, new DiscordModule(this.plugin)); - this.modules.put(DeathMessageModule.class, new DeathMessageModule(this.plugin)); - } + this.modules.put(JoinQuitModule.class, new JoinQuitModule(this.plugin)); + this.modules.put(ChatModule.class, new ChatModule(this.plugin)); + this.modules.put(DiscordModule.class, new DiscordModule(this.plugin)); + this.modules.put(DeathMessageModule.class, new DeathMessageModule(this.plugin)); this.modules.put(MessageModule.class, new MessageModule(this.plugin)); this.modules.put(KitModule.class, new KitModule(this.plugin)); this.modules.put(ItemModule.class, new ItemModule(this.plugin)); @@ -83,9 +80,6 @@ public void loadModules() { this.modules.put(AFKModule.class, new AFKModule(this.plugin)); this.modules.put(AutoMessageModule.class, new AutoMessageModule(this.plugin)); this.modules.put(CustomCommandModule.class, new CustomCommandModule(this.plugin)); - if (plugin.isPaperVersion()) { - this.modules.put(DeathMessageModule.class, new DeathMessageModule(this.plugin)); - } this.loadConfigurations(); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/HomeModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/HomeModule.java index 6a410b99..2cf415ce 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/HomeModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/HomeModule.java @@ -30,7 +30,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.UUID; public class HomeModule extends ZModule implements HomeManager { diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/ItemModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/ItemModule.java index 97e05908..77c71a7b 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/ItemModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/ItemModule.java @@ -6,6 +6,7 @@ import fr.maxlego08.menu.api.MenuItemStack; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; @@ -16,6 +17,7 @@ import java.io.File; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -31,6 +33,7 @@ public ItemModule(ZEssentialsPlugin plugin) { public void loadConfiguration() { super.loadConfiguration(); + this.items.clear(); YamlConfiguration configuration = getConfiguration(); ConfigurationSection configurationSection = configuration.getConfigurationSection("custom-items"); if (configurationSection == null) return; @@ -51,14 +54,7 @@ public Set getItemsName() { public boolean isItem(String itemName) { - if (this.items.containsKey(itemName)) return true; - - try { - Material.valueOf(itemName.toUpperCase()); - return true; - } catch (Exception exception) { - return false; - } + return this.items.containsKey(itemName) || this.getMaterial(itemName) != null; } public @Nullable ItemStack getItemStack(String itemName, OfflinePlayer playerPlayer) { @@ -67,14 +63,18 @@ public boolean isItem(String itemName) { return this.items.get(itemName).build(playerPlayer.isOnline() ? playerPlayer.getPlayer() : null, false); } - try { + Material material = this.getMaterial(itemName); + return material == null ? null : new ItemStack(material); + } + + private @Nullable Material getMaterial(String itemName) { + if (itemName == null) return null; - Material material = Material.valueOf(itemName.toUpperCase()); - return new ItemStack(material); + NamespacedKey key = NamespacedKey.fromString(itemName.toLowerCase(Locale.ROOT)); + if (key == null || !key.getNamespace().equals(NamespacedKey.MINECRAFT)) return null; - } catch (Exception exception) { - return null; - } + Material material = Material.getMaterial(key.getKey().toUpperCase(Locale.ROOT)); + return material != null && !material.isLegacy() && material.isItem() && !material.isAir() ? material : null; } public void give(CommandSender sender, Player player, String itemName, int amount) { @@ -85,10 +85,11 @@ public void give(CommandSender sender, Player player, String itemName, int amoun return; } + String displayName = getItemName(itemStack); itemStack.setAmount(Math.max(1, amount)); this.plugin.give(player, itemStack); - message(sender, Message.COMMAND_GIVE, "%item%", itemName, "%player%", player.getName(), "%amount%", amount); + message(sender, Message.COMMAND_GIVE, "%item%", displayName, "%player%", player.getName(), "%amount%", amount); } public void giveFullInventory(CommandSender sender, Player player, String itemName) { @@ -109,7 +110,7 @@ public void giveFullInventory(CommandSender sender, Player player, String itemNa } } - message(sender, Message.COMMAND_GIVE, "%item%", itemName, "%player%", player.getName(), "%amount%", amount); + message(sender, Message.COMMAND_GIVE, "%item%", getItemName(itemStack), "%player%", player.getName(), "%amount%", amount); } public void giveAll(CommandSender sender, String itemName, int amount) { @@ -120,14 +121,16 @@ public void giveAll(CommandSender sender, String itemName, int amount) { } // ToDo, rework for all server give all - Bukkit.getOnlinePlayers().forEach(player -> { + String displayName = null; + for (Player player : Bukkit.getOnlinePlayers()) { ItemStack itemStack = this.getItemStack(itemName, player); - if (itemStack == null) return; + if (itemStack == null) continue; + if (displayName == null) displayName = getItemName(itemStack); itemStack.setAmount(Math.max(1, amount)); this.plugin.give(player, itemStack); - }); + } - message(sender, Message.COMMAND_GIVE_ALL, "%item%", itemName, "%amount%", amount); + message(sender, Message.COMMAND_GIVE_ALL, "%item%", displayName == null ? itemName : displayName, "%amount%", amount); } } diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/MailBoxModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/MailBoxModule.java index 881ce98a..6da5f191 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/MailBoxModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/MailBoxModule.java @@ -336,7 +336,7 @@ public void giveItem(CommandSender sender, UUID uuid, String username, String it message(sender, Message.MAILBOX_GIVE_ERROR, "%item%", itemName); return; } - var itemStack = itemModule.getItemStack(itemName, Bukkit.getPlayer(uuid)); + var itemStack = itemModule.getItemStack(itemName, Bukkit.getOfflinePlayer(uuid)); if (itemStack == null) { message(sender, Message.MAILBOX_GIVE_ERROR, "%item%", itemName); @@ -366,7 +366,7 @@ public void giveItem(CommandSender sender, UUID uuid, String username, String it addItem(uuid, itemStack); } - message(sender, Message.MAILBOX_GIVE, "%item%", itemName, "%player%", username, "%amount%", realAmount); + message(sender, Message.MAILBOX_GIVE, "%item%", getItemName(itemStack), "%player%", username, "%amount%", realAmount); } public void giveAllItem(CommandSender sender, String itemName, int amount) { @@ -377,9 +377,11 @@ public void giveAllItem(CommandSender sender, String itemName, int amount) { return; } + String displayName = null; for (Player player : Bukkit.getOnlinePlayers()) { var itemStack = itemModule.getItemStack(itemName, player); if (itemStack == null) break; + if (displayName == null) displayName = getItemName(itemStack); if (amount > itemStack.getMaxStackSize()) { @@ -402,7 +404,7 @@ public void giveAllItem(CommandSender sender, String itemName, int amount) { } } - message(sender, Message.MAILBOX_GIVE_ALL, "%item%", itemName, "%amount%", amount); + message(sender, Message.MAILBOX_GIVE_ALL, "%item%", displayName == null ? itemName : displayName, "%amount%", amount); } public void giveItemFromHand(CommandSender sender, UUID uuid, String username, ItemStack itemStack) { @@ -440,16 +442,6 @@ public void giveAllItemFromHand(CommandSender sender, ItemStack itemStack) { "%amount%", amount); } - private String getItemName(ItemStack itemStack) { - if (itemStack.hasItemMeta()) { - var itemMeta = itemStack.getItemMeta(); - if (itemMeta != null && itemMeta.hasDisplayName()) { - return itemMeta.getDisplayName(); - } - } - return name(itemStack.getType().name()); - } - public void clear(CommandSender sender, UUID uuid, String username) { getStorage().clearMailBox(uuid); var user = getUser(uuid); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/SanctionModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/SanctionModule.java index aae4f40f..1d81c8b2 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/SanctionModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/SanctionModule.java @@ -66,7 +66,7 @@ public class SanctionModule extends ZModule implements SanctionManager { public SanctionModule(ZEssentialsPlugin plugin) { super(plugin, "sanction"); - Bukkit.getPluginManager().registerEvents(isPaperVersion() ? new ChatListener(plugin) : new fr.maxlego08.essentials.listener.spigot.ChatListener(plugin), plugin); + Bukkit.getPluginManager().registerEvents(new ChatListener(plugin), plugin); } @Override @@ -141,7 +141,7 @@ public void kick(CommandSender sender, UUID uuid, String playerName, String reas server.kickPlayer(uuid, Message.MESSAGE_KICK, "%reason%", reason); // Broadcast a notification message to players with the kick notify permission - server.broadcastMessage(Permission.ESSENTIALS_KICK_NOTIFY, Message.COMMAND_KICK_NOTIFY, "%player%", sender.getName(), "%target%", playerName, "%reason%", reason, "%sender%", getSanctionBy(sender), "%created_at%", this.simpleDateFormat.format(new Date())); + server.broadcastMessage(Permission.ESSENTIALS_KICK_NOTIFY, Message.COMMAND_KICK_NOTIFY, "%player%", sender.getName(), "%target%", playerName, "%reason%", reason, "%sender%", getSanctionBy(sender), "%created_at%", this.simpleDateFormat.format(new Date()), "%duration%", "0"); } @Override diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/TeleportationModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/TeleportationModule.java index b5bd654a..5392e80c 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/TeleportationModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/TeleportationModule.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.Queue; @@ -274,7 +275,7 @@ private boolean isValidLocation(Location location) { Location checkLoc = location.clone(); // Check if biome is blacklisted - if (this.blacklistBiomes.stream().anyMatch(b -> b.equalsIgnoreCase(checkLoc.getBlock().getBiome().name()))) { + if (this.blacklistBiomes.stream().anyMatch(b -> b.equalsIgnoreCase(checkLoc.getBlock().getBiome().getKey().getKey().toUpperCase(Locale.ROOT)))) { return false; } diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/afk/AFKModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/afk/AFKModule.java index f0f1e4ec..f55a1b6a 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/afk/AFKModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/afk/AFKModule.java @@ -15,7 +15,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; +import io.papermc.paper.event.player.AsyncChatEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.permissions.Permissible; @@ -137,7 +137,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { } @EventHandler(priority = EventPriority.MONITOR) - public void onTalk(AsyncPlayerChatEvent event) { + public void onTalk(AsyncChatEvent event) { var user = getUser(event.getPlayer()); if (user == null) return; @@ -178,11 +178,11 @@ private void endAfk(User user) { @Override public String getPlaceholderAfk() { - return this.placeholderAfk == null ? "&aV" : this.placeholderAfk; + return this.placeholderAfk == null ? "V" : this.placeholderAfk; } @Override public String getPlaceholderNotAfk() { - return this.placeholderNotAfk == null ? "&cX" : this.placeholderNotAfk; + return this.placeholderNotAfk == null ? "X" : this.placeholderNotAfk; } } diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/chat/ChatModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/chat/ChatModule.java index d61b41ec..5891cad2 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/chat/ChatModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/chat/ChatModule.java @@ -107,7 +107,7 @@ public void loadConfiguration() { this.alphanumericPattern = Pattern.compile(or(this.alphanumericRegex, "^[a-zA-Z0-9_.?!^¨%ù*&é\"#'{(\\[-|èêë`\\\\çà)\\]=}ûî+<>:²€$/\\-,-â@;ô ]+$")); this.linkPattern = Pattern.compile(or(this.linkRegex, "[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)")); this.floodRegex = Pattern.compile(or(this.antiFloodRegex, "(.)\\1{3,}")); - this.pubPattern = Pattern.compile(or(this.pubRegex, ".*(§[0-9a-fk-or]|#[0-9a-fA-F]{6}|%[^%]+%|<[^>]+>).*")); + this.pubPattern = Pattern.compile(or(this.pubRegex, ".*(#[0-9a-fA-F]{6}|%[^%]+%|<[^>]+>).*")); this.chatCooldownArray = this.chatCooldowns.stream().flatMapToLong(cooldown -> LongStream.of(cooldown.cooldown(), cooldown.messages())).toArray(); this.simpleDateFormat = new SimpleDateFormat(or(this.dateFormat, "yyyy-MM-dd HH:mm:ss")); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/chat/ItemDisplay.java b/src/main/java/fr/maxlego08/essentials/module/modules/chat/ItemDisplay.java index c02a9d1b..0fac396f 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/chat/ItemDisplay.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/chat/ItemDisplay.java @@ -65,7 +65,7 @@ public String display(AdventureComponent adventureComponent, TagResolver.Builder component = component.hoverEvent(itemStack.asHoverEvent()); String code = plugin.getModuleManager().getModule(ChatModule.class).createHoverItemStack(sender, itemStack); - component = component.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/showitem " + code)); + component = component.clickEvent(ClickEvent.runCommand("/showitem " + code)); builder.resolver(Placeholder.component(name, component)); matcher.appendTail(formattedMessage); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/chat/interactive/InteractiveChatSpigotListener.java b/src/main/java/fr/maxlego08/essentials/module/modules/chat/interactive/InteractiveChatSpigotListener.java deleted file mode 100644 index 2d0b0c86..00000000 --- a/src/main/java/fr/maxlego08/essentials/module/modules/chat/interactive/InteractiveChatSpigotListener.java +++ /dev/null @@ -1,22 +0,0 @@ -package fr.maxlego08.essentials.module.modules.chat.interactive; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public class InteractiveChatSpigotListener extends InteractiveChatHelper { - - @EventHandler(priority = EventPriority.LOWEST) - public void onChat(AsyncPlayerChatEvent event) { - if (this.onTalk(event.getPlayer(), event.getMessage())) { - event.setCancelled(true); - } - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) { - this.onQuit(event.getPlayer()); - } - -} diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/economy/ZEconomy.java b/src/main/java/fr/maxlego08/essentials/module/modules/economy/ZEconomy.java index 7b8f6fee..7640f4b2 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/economy/ZEconomy.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/economy/ZEconomy.java @@ -3,10 +3,8 @@ import fr.maxlego08.essentials.api.economy.Economy; import fr.maxlego08.essentials.api.economy.PriceFormat; import fr.maxlego08.menu.api.utils.TypedMapAccessor; -import org.bukkit.configuration.ConfigurationSection; import java.math.BigDecimal; -import java.util.Map; public class ZEconomy implements Economy { diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/hologram/HologramModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/hologram/HologramModule.java index 8d4d8fb7..27bf992f 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/hologram/HologramModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/hologram/HologramModule.java @@ -158,7 +158,7 @@ public Hologram create(Player player, HologramType hologramType, String name) { Hologram hologram = this.createHologram(hologramType, hologramConfiguration, name, name, new SafeLocation(player.getLocation())); if (hologramType == HologramType.TEXT) { - hologram.addLine(new HologramLine(1, "&fUse #ff9966/holo setline " + name + " 1 &f!", false)); + hologram.addLine(new HologramLine(1, "Use /holo setline " + name + " 1 !", false)); } hologram.create(); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitInventoryHolder.java b/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitInventoryHolder.java index 82c638b9..674f5484 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitInventoryHolder.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitInventoryHolder.java @@ -2,6 +2,7 @@ import fr.maxlego08.essentials.api.kit.Kit; import fr.maxlego08.menu.api.MenuItemStack; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; @@ -17,7 +18,7 @@ public class KitInventoryHolder implements InventoryHolder { public KitInventoryHolder(Player player, Kit kit) { this.player = player; this.kit = kit; - this.inventory = Bukkit.createInventory(this, 54, "Kit Editor: " + kit.getName()); + this.inventory = Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("Kit Editor: " + kit.getName())); for (int index = 0; index != Math.min(54, kit.getMenuItemStacks().size()); index++) { MenuItemStack menuItemStack = kit.getMenuItemStacks().get(index); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitModule.java index 6384e3fc..346ab2ce 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/kit/KitModule.java @@ -11,10 +11,7 @@ import fr.maxlego08.menu.api.InventoryManager; import fr.maxlego08.menu.api.MenuItemStack; import fr.maxlego08.menu.api.requirement.Action; -import fr.maxlego08.menu.api.utils.Loader; import fr.maxlego08.menu.api.utils.TypedMapAccessor; -import fr.maxlego08.menu.loader.MenuItemStackLoader; -import fr.maxlego08.menu.common.utils.itemstack.MenuItemStackFromItemStack; import org.apache.logging.log4j.util.Strings; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; @@ -302,7 +299,10 @@ public void onClose(InventoryCloseEvent event) { List menuItemStacks = new ArrayList<>(); for (ItemStack itemStack : event.getInventory().getContents()) { if (itemStack != null) { - menuItemStacks.add(MenuItemStackFromItemStack.fromItemStack(this.plugin.getInventoryManager(), itemStack)); + MenuItemStack menuItemStack = this.plugin.getInventoryManager().toMenuItemStack(itemStack).menuItemStack(); + // The Base64 fallback defaults to one item; preserve the edited stack size. + menuItemStack.setAmount(String.valueOf(itemStack.getAmount())); + menuItemStacks.add(menuItemStack); } } kit.setItems(menuItemStacks); @@ -373,20 +373,16 @@ private void saveKit(Kit kit) { var file = kit.getFile(); YamlConfiguration configuration = YamlConfiguration.loadConfiguration(file); - // Clear items - ConfigurationSection configurationSection = configuration.getConfigurationSection("items."); - if (configurationSection != null) { - configurationSection.getKeys(true).forEach(key -> configurationSection.set(key, null)); - } + // Clear items before writing the current kit contents. + configuration.set("items", null); configuration.set("name", kit.getName()); configuration.set("display-name", kit.getDisplayName()); configuration.set("permission", kit.getPermission()); configuration.set("cooldown", kit.getCooldown()); - Loader loader = new MenuItemStackLoader(this.plugin.getInventoryManager()); AtomicInteger atomicInteger = new AtomicInteger(1); - kit.getMenuItemStacks().forEach(menuItemStack -> loader.save(menuItemStack, configuration, "items.item-" + atomicInteger.getAndIncrement() + ".", file)); + kit.getMenuItemStacks().forEach(menuItemStack -> menuItemStack.serialize(configuration.createSection("items.item-" + atomicInteger.getAndIncrement()))); try { configuration.save(file); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/ScoreboardModule.java b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/ScoreboardModule.java index 0cfae7d6..4ec117fd 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/ScoreboardModule.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/ScoreboardModule.java @@ -12,7 +12,6 @@ import fr.maxlego08.essentials.api.user.Option; import fr.maxlego08.essentials.api.user.User; import fr.maxlego08.essentials.module.ZModule; -import fr.maxlego08.essentials.module.modules.scoreboard.board.ClassicBoard; import fr.maxlego08.essentials.module.modules.scoreboard.board.ComponentBoard; import fr.maxlego08.menu.api.ButtonManager; import fr.maxlego08.menu.api.requirement.Permissible; @@ -190,7 +189,7 @@ public void onQuit(PlayerQuitEvent event) { @Override public PlayerBoard createScoreboard(Player player, EssentialsScoreboard essentialsScoreboard) { - PlayerBoard playerBoard = this.plugin.isPaperVersion() ? new ComponentBoard(player, essentialsScoreboard) : new ClassicBoard(player, essentialsScoreboard); + PlayerBoard playerBoard = new ComponentBoard(player, essentialsScoreboard); this.boards.put(player.getUniqueId(), playerBoard); essentialsScoreboard.create(playerBoard); diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/animation/ColorWaveAnimation.java b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/animation/ColorWaveAnimation.java index 7da6cd0c..9ccd7cc0 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/animation/ColorWaveAnimation.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/animation/ColorWaveAnimation.java @@ -20,7 +20,7 @@ public ColorWaveAnimation(PlayerBoard playerBoard, String text, int line, ColorW @Override public void start() { - playerBoard.updateLine(playerBoard.getLineModifier(this.line), this.configuration.fromColor() + this.text); + playerBoard.updateLine(playerBoard.getLineModifier(this.line), "" + this.text); EXECUTOR_SERVICE.schedule(this::animation, this.configuration.delayBetween(), TimeUnit.MILLISECONDS); } @@ -40,7 +40,7 @@ private void animation() { playerBoard.updateLine(playerBoard.getLineModifier(this.line), getAnimatedText(this.text, this.configuration.toColor(), this.configuration.fromColor(), step)); if (step > this.text.length() + this.configuration.length()) { - playerBoard.updateLine(playerBoard.getLineModifier(this.line), this.configuration.fromColor() + this.text); + playerBoard.updateLine(playerBoard.getLineModifier(this.line), "" + this.text); EXECUTOR_SERVICE.schedule(this::animation, this.configuration.delayBetween(), TimeUnit.MILLISECONDS); future.cancel(false); } @@ -54,11 +54,7 @@ private String getAnimatedText(String text, String baseColorHex, String highligh String colorHex = blendColors(baseColorHex, highlightColorHex, i, highlightIndex, this.configuration.length()); - if (colorHex.length() > 7) { - colorHex = this.configuration.fromColor(); - } - - animatedText.append(colorHex).append(text.charAt(i)); + animatedText.append("").append(text.charAt(i)); } return animatedText.toString(); } diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ClassicBoard.java b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ClassicBoard.java deleted file mode 100644 index fe96a84d..00000000 --- a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ClassicBoard.java +++ /dev/null @@ -1,47 +0,0 @@ -package fr.maxlego08.essentials.module.modules.scoreboard.board; - -import fr.maxlego08.essentials.api.scoreboard.EssentialsScoreboard; -import fr.maxlego08.essentials.api.scoreboard.PlayerBoard; -import fr.mrmicky.fastboard.FastBoard; -import org.bukkit.entity.Player; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ClassicBoard extends FastBoard implements PlayerBoard { - - - private final EssentialsScoreboard essentialsScoreboard; - private final Map linesModifier = new HashMap<>(); - - public ClassicBoard(Player player, EssentialsScoreboard essentialsScoreboard) { - super(player); - this.essentialsScoreboard = essentialsScoreboard; - } - - @Override - public void updateLines(List lines) { - super.updateLines(lines); - } - - @Override - public boolean customScoresSupported() { - return VersionType.V1_20_3.isCurrentAtLeast(); - } - - @Override - public EssentialsScoreboard getScoreboard() { - return this.essentialsScoreboard; - } - - @Override - public Map getLinesModifier() { - return this.linesModifier; - } - - @Override - public int getLineModifier(int line) { - return this.linesModifier.getOrDefault(line, line); - } -} diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ComponentBoard.java b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ComponentBoard.java index 2000468d..a84a8f45 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ComponentBoard.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/scoreboard/board/ComponentBoard.java @@ -49,7 +49,7 @@ private Component color(String text) { @Override public boolean customScoresSupported() { - return VersionType.V1_20_3.isCurrentAtLeast(); + return true; } @Override diff --git a/src/main/java/fr/maxlego08/essentials/module/modules/worldedit/taks/CutTask.java b/src/main/java/fr/maxlego08/essentials/module/modules/worldedit/taks/CutTask.java index da4391a2..4d0baaff 100644 --- a/src/main/java/fr/maxlego08/essentials/module/modules/worldedit/taks/CutTask.java +++ b/src/main/java/fr/maxlego08/essentials/module/modules/worldedit/taks/CutTask.java @@ -9,7 +9,6 @@ import fr.maxlego08.essentials.api.worldedit.WorldeditManager; import org.bukkit.Material; -import java.util.Arrays; import java.util.List; public class CutTask extends WorldEditTask { diff --git a/src/main/java/fr/maxlego08/essentials/placeholders/DistantPlaceholder.java b/src/main/java/fr/maxlego08/essentials/placeholders/DistantPlaceholder.java index e8aa39ea..84659b90 100644 --- a/src/main/java/fr/maxlego08/essentials/placeholders/DistantPlaceholder.java +++ b/src/main/java/fr/maxlego08/essentials/placeholders/DistantPlaceholder.java @@ -17,7 +17,7 @@ public DistantPlaceholder(EssentialsPlugin plugin, Placeholder placeholder) { @Override public String getAuthor() { - return this.plugin.getDescription().getAuthors().get(0); + return this.plugin.getPluginMeta().getAuthors().get(0); } @Override @@ -27,7 +27,7 @@ public String getIdentifier() { @Override public String getVersion() { - return this.plugin.getDescription().getVersion(); + return this.plugin.getPluginMeta().getVersion(); } @Override diff --git a/src/main/java/fr/maxlego08/essentials/server/SpigotServer.java b/src/main/java/fr/maxlego08/essentials/server/SpigotServer.java deleted file mode 100644 index c7ab1141..00000000 --- a/src/main/java/fr/maxlego08/essentials/server/SpigotServer.java +++ /dev/null @@ -1,119 +0,0 @@ -package fr.maxlego08.essentials.server; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.commands.Permission; -import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.api.server.EssentialsServer; -import fr.maxlego08.essentials.api.storage.IStorage; -import fr.maxlego08.essentials.api.user.Option; -import fr.maxlego08.essentials.api.user.PrivateMessage; -import fr.maxlego08.essentials.api.user.User; -import fr.maxlego08.essentials.storage.ConfigStorage; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -public class SpigotServer implements EssentialsServer { - - private final EssentialsPlugin plugin; - - public SpigotServer(EssentialsPlugin plugin) { - this.plugin = plugin; - } - - @Override - public void onEnable() { - - } - - @Override - public void onDisable() { - - } - - @Override - public List getPlayersNames() { - return Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(); - } - - @Override - public List getVisiblePlayerNames(@NotNull CommandSender sender) { - return getPlayersNames(); - } - - @Override - public List getOfflinePlayersNames() { - return this.plugin.getConfiguration().enableOfflinePlayersName() ? Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName).toList() : getPlayersNames(); - } - - @Override - public void sendMessage(UUID uuid, Message message, Object... objects) { - - } - - @Override - public void broadcastMessage(Permission permission, Message message, Object... objects) { - - } - - @Override - public void broadcastMessage(Option option, Message message, Object... objects) { - - } - - @Override - public void kickPlayer(UUID uuid, Message message, Object... objects) { - - } - - @Override - public boolean isOnline(String userName) { - return Bukkit.getPlayer(userName) != null; - } - - @Override - public void clearChat(CommandSender sender) { - } - - @Override - public void toggleChat(boolean value) { - ConfigStorage.chatEnable = value; - ConfigStorage.getInstance().save(this.plugin.getPersist()); - } - - @Override - public void broadcast(String message) { - - } - - @Override - public void pub(Player player, String message) { - - } - - @Override - public void sendPrivateMessage(User user, PrivateMessage privateMessage, String message) { - IStorage iStorage = this.plugin.getStorageManager().getStorage(); - User targetUser = iStorage.getUser(privateMessage.uuid()); - if (targetUser == null) return; - - PrivateMessage privateMessageReply = targetUser.setPrivateMessage(user.getUniqueId(), user.getName()); - this.plugin.getUtils().sendPrivateMessage(targetUser, privateMessageReply, Message.COMMAND_MESSAGE_OTHER, message); - } - - @Override - public void deleteCooldown(UUID uniqueId, String cooldownName) { - this.plugin.getUtils().deleteCooldown(uniqueId, cooldownName); - } - - @Override - public void updateCooldown(UUID uniqueId, String cooldownName, long expiredAt) { - this.plugin.getUtils().deleteCooldown(uniqueId, cooldownName); - } -} diff --git a/src/main/java/fr/maxlego08/essentials/storage/ConfigStorage.java b/src/main/java/fr/maxlego08/essentials/storage/ConfigStorage.java index a2a0aa36..affe56f2 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/ConfigStorage.java +++ b/src/main/java/fr/maxlego08/essentials/storage/ConfigStorage.java @@ -4,7 +4,6 @@ import fr.maxlego08.essentials.api.storage.Persist; import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.api.utils.Warp; -import org.bukkit.Location; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/fr/maxlego08/essentials/storage/GlobalDatabaseConfiguration.java b/src/main/java/fr/maxlego08/essentials/storage/GlobalDatabaseConfiguration.java index f4c2d93f..f0b177bf 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/GlobalDatabaseConfiguration.java +++ b/src/main/java/fr/maxlego08/essentials/storage/GlobalDatabaseConfiguration.java @@ -4,6 +4,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; +import java.util.concurrent.TimeUnit; public class GlobalDatabaseConfiguration { @@ -102,4 +103,18 @@ public String getTablePrefix() { public boolean isDebug() { return this.globalConfiguration == null ? this.pluginConfiguration.getBoolean("database-configuration.debug") : this.globalConfiguration.getBoolean("database-configuration.debug", this.pluginConfiguration.getBoolean("database-configuration.debug", false)); } + + /** + * Maximum pooled-connection lifetime, in milliseconds, for MySQL and MariaDB. + * A missing or negative value keeps Sarah's default of 30 minutes. {@code 0} disables retirement. + * + * @return the lifetime in milliseconds, or {@code null} to keep the library default + */ + public Long getMaxLifetimeMillis() { + long seconds = this.globalConfiguration == null ? this.pluginConfiguration.getLong("database-configuration.max-lifetime", -1L) : this.globalConfiguration.getLong("database-configuration.max-lifetime", this.pluginConfiguration.getLong("database-configuration.max-lifetime", -1L)); + if (seconds < 0) { + return null; + } + return TimeUnit.SECONDS.toMillis(seconds); + } } diff --git a/src/main/java/fr/maxlego08/essentials/storage/adapter/UserTypeAdapter.java b/src/main/java/fr/maxlego08/essentials/storage/adapter/UserTypeAdapter.java index 22487a80..e82ae04c 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/adapter/UserTypeAdapter.java +++ b/src/main/java/fr/maxlego08/essentials/storage/adapter/UserTypeAdapter.java @@ -17,7 +17,6 @@ import fr.maxlego08.essentials.api.utils.SafeLocation; import fr.maxlego08.essentials.user.ZUser; import fr.maxlego08.essentials.zutils.utils.LocationUtils; -import org.bukkit.Location; import org.bukkit.Material; import java.io.IOException; diff --git a/src/main/java/fr/maxlego08/essentials/storage/database/repositeries/EconomyTransactionsRepository.java b/src/main/java/fr/maxlego08/essentials/storage/database/repositeries/EconomyTransactionsRepository.java index 9b30e0fb..1ee5ce98 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/database/repositeries/EconomyTransactionsRepository.java +++ b/src/main/java/fr/maxlego08/essentials/storage/database/repositeries/EconomyTransactionsRepository.java @@ -6,7 +6,6 @@ import fr.maxlego08.essentials.storage.database.Repository; import fr.maxlego08.sarah.DatabaseConnection; -import java.math.BigDecimal; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; diff --git a/src/main/java/fr/maxlego08/essentials/storage/storages/JsonStorage.java b/src/main/java/fr/maxlego08/essentials/storage/storages/JsonStorage.java index 69cb09be..02419348 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/storages/JsonStorage.java +++ b/src/main/java/fr/maxlego08/essentials/storage/storages/JsonStorage.java @@ -8,7 +8,6 @@ import fr.maxlego08.essentials.api.dto.DiscordCodeDTO; import fr.maxlego08.essentials.api.dto.EconomyDTO; import fr.maxlego08.essentials.api.dto.EconomyTransactionDTO; -import fr.maxlego08.essentials.api.dto.HomeDTO; import fr.maxlego08.essentials.api.dto.MailBoxDTO; import fr.maxlego08.essentials.api.dto.MailMessageDTO; import fr.maxlego08.essentials.api.dto.PlayerSlotDTO; diff --git a/src/main/java/fr/maxlego08/essentials/storage/storages/SqlStorage.java b/src/main/java/fr/maxlego08/essentials/storage/storages/SqlStorage.java index 8719c76d..30c08a8b 100644 --- a/src/main/java/fr/maxlego08/essentials/storage/storages/SqlStorage.java +++ b/src/main/java/fr/maxlego08/essentials/storage/storages/SqlStorage.java @@ -38,6 +38,8 @@ import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -68,6 +70,7 @@ public SqlStorage(EssentialsPlugin plugin, StorageType storageType) { plugin.getLogger().info("The database connection is valid ! (SQLITE)"); } else { plugin.getLogger().info("The database connection is valid ! (" + connection.getDatabaseConfiguration().getHost() + ")"); + checkDatabaseVersion(); } } @@ -178,6 +181,23 @@ public void processBatchs() { this.cache.clearAll(); } + private void checkDatabaseVersion() { + try (Connection connection = this.connection.getConnection()) { + DatabaseMetaData metadata = connection.getMetaData(); + String version = metadata.getDatabaseProductVersion(); + if (!"MySQL".equalsIgnoreCase(metadata.getDatabaseProductName()) || version.toLowerCase(Locale.ROOT).contains("mariadb")) { + return; + } + int major = metadata.getDatabaseMajorVersion(); + int minor = metadata.getDatabaseMinorVersion(); + if (major < 8 || (major == 8 && minor < 4)) { + this.plugin.getLogger().warning("Detected MySQL " + version + ". MySQL 8.4 or newer is recommended. Please upgrade your database server."); + } + } catch (Exception exception) { + this.plugin.getLogger().warning("Unable to check the database server version: " + exception.getMessage()); + } + } + private @NotNull DatabaseConfiguration getDatabaseConfiguration(EssentialsPlugin plugin, StorageType storageType) { GlobalDatabaseConfiguration globalDatabaseConfiguration = new GlobalDatabaseConfiguration(plugin.getConfig()); @@ -190,7 +210,12 @@ public void processBatchs() { String database = globalDatabaseConfiguration.getDatabase(); boolean debug = globalDatabaseConfiguration.isDebug(); - return new DatabaseConfiguration(tablePrefix, user, password, port, host, database, debug, storageType == StorageType.SQLITE ? DatabaseType.SQLITE : storageType == StorageType.MARIADB ? DatabaseType.MARIADB : DatabaseType.MYSQL); + DatabaseConfiguration databaseConfiguration = new DatabaseConfiguration(tablePrefix, user, password, port, host, database, debug, storageType == StorageType.SQLITE ? DatabaseType.SQLITE : storageType == StorageType.MARIADB ? DatabaseType.MARIADB : DatabaseType.MYSQL); + Long maxLifetimeMillis = globalDatabaseConfiguration.getMaxLifetimeMillis(); + if (maxLifetimeMillis != null) { + databaseConfiguration = databaseConfiguration.withMaxLifetime(maxLifetimeMillis); + } + return databaseConfiguration; } @Override @@ -290,7 +315,7 @@ private String fetchNameFromMojang(UUID uuid) { String uuidString = uuid.toString().replace("-", ""); String url = "https://sessionserver.mojang.com/session/minecraft/profile/" + uuidString; try { - java.net.HttpURLConnection connection = (java.net.HttpURLConnection) new java.net.URL(url).openConnection(); + java.net.HttpURLConnection connection = (java.net.HttpURLConnection) java.net.URI.create(url).toURL().openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); diff --git a/src/main/java/fr/maxlego08/essentials/user/ZUser.java b/src/main/java/fr/maxlego08/essentials/user/ZUser.java index c7de1888..4a03e75c 100644 --- a/src/main/java/fr/maxlego08/essentials/user/ZUser.java +++ b/src/main/java/fr/maxlego08/essentials/user/ZUser.java @@ -38,7 +38,6 @@ import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; public class ZUser extends ZUtils implements User { diff --git a/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerListPlaceholders.java b/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerListPlaceholders.java index fe917820..d3329dc7 100644 --- a/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerListPlaceholders.java +++ b/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerListPlaceholders.java @@ -61,11 +61,11 @@ private String getProperty(Player target, String property, String empty) { case "colored_ping" -> { int ping = target.getPing(); String color; - if (ping < 50) color = "&a"; - else if (ping < 100) color = "&2"; - else if (ping < 200) color = "&e"; - else if (ping < 300) color = "&c"; - else color = "&4"; + if (ping < 50) color = ""; + else if (ping < 100) color = ""; + else if (ping < 200) color = ""; + else if (ping < 300) color = ""; + else color = ""; yield color + ping; } case "level" -> String.valueOf(target.getLevel()); diff --git a/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerPlaceholders.java b/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerPlaceholders.java index 0095c7eb..2b6ea615 100644 --- a/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerPlaceholders.java +++ b/src/main/java/fr/maxlego08/essentials/user/placeholders/PlayerPlaceholders.java @@ -8,7 +8,6 @@ import org.bukkit.attribute.AttributeInstance; import java.text.DecimalFormat; -import java.text.SimpleDateFormat; import java.util.Date; public class PlayerPlaceholders extends ZUtils implements PlaceholderRegister { @@ -91,11 +90,11 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { placeholder.register("player_colored_ping", player -> { int ping = player.getPing(); String color; - if (ping < 50) color = "&a"; - else if (ping < 100) color = "&2"; - else if (ping < 200) color = "&e"; - else if (ping < 300) color = "&c"; - else color = "&4"; + if (ping < 50) color = ""; + else if (ping < 100) color = ""; + else if (ping < 200) color = ""; + else if (ping < 300) color = ""; + else color = ""; return color + ping; }, "Returns the player's ping with color based on quality"); diff --git a/src/main/java/fr/maxlego08/essentials/user/placeholders/ServerPlaceholders.java b/src/main/java/fr/maxlego08/essentials/user/placeholders/ServerPlaceholders.java index 27cec10d..1ae9452c 100644 --- a/src/main/java/fr/maxlego08/essentials/user/placeholders/ServerPlaceholders.java +++ b/src/main/java/fr/maxlego08/essentials/user/placeholders/ServerPlaceholders.java @@ -1,7 +1,6 @@ package fr.maxlego08.essentials.user.placeholders; import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.economy.Economy; import fr.maxlego08.essentials.api.economy.PriceFormat; import fr.maxlego08.essentials.api.placeholders.Placeholder; import fr.maxlego08.essentials.api.placeholders.PlaceholderRegister; @@ -107,9 +106,9 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { double[] tps = Bukkit.getTPS(); double value = tps.length > 0 ? Math.min(tps[0], 20.0) : 20.0; String color; - if (value >= 18) color = "&a"; - else if (value >= 15) color = "&e"; - else color = "&c"; + if (value >= 18) color = ""; + else if (value >= 15) color = ""; + else color = ""; return color + tpsFormat.format(value); }, "Returns the server TPS with color indicator"); diff --git a/src/main/java/fr/maxlego08/essentials/user/placeholders/UserItemsPlaceholders.java b/src/main/java/fr/maxlego08/essentials/user/placeholders/UserItemsPlaceholders.java index 91b2416e..15719a87 100644 --- a/src/main/java/fr/maxlego08/essentials/user/placeholders/UserItemsPlaceholders.java +++ b/src/main/java/fr/maxlego08/essentials/user/placeholders/UserItemsPlaceholders.java @@ -4,6 +4,7 @@ import fr.maxlego08.essentials.api.placeholders.Placeholder; import fr.maxlego08.essentials.api.placeholders.PlaceholderRegister; import fr.maxlego08.essentials.zutils.utils.ZUtils; +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -66,7 +67,9 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { if (itemStack.hasItemMeta() && itemStack.getItemMeta().hasEnchants()) { List enchantments = new ArrayList<>(); for (Map.Entry entry : itemStack.getItemMeta().getEnchants().entrySet()) { - enchantments.add(entry.getKey().getKey().getKey() + ":" + entry.getValue()); + NamespacedKey key = entry.getKey().getKey(); + String name = key.getNamespace().equals(NamespacedKey.MINECRAFT) ? key.getKey() : key.toString(); + enchantments.add(name + ":" + entry.getValue()); } return String.join(", ", enchantments); } @@ -76,10 +79,9 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { placeholder.register("iteminhand_hasenchantment_", (player, enchantmentName) -> { ItemStack itemStack = player.getInventory().getItemInMainHand(); if (itemStack.hasItemMeta() && itemStack.getItemMeta().hasEnchants()) { - var optional = plugin.getEnchantments().getEnchantments(enchantmentName); + var optional = plugin.getEnchantments().getEnchantment(enchantmentName); if (optional.isPresent()) { - var essentialsEnchantment = optional.get(); - return itemStack.containsEnchantment(essentialsEnchantment.enchantment()) ? "true" : "false"; + return itemStack.containsEnchantment(optional.get()) ? "true" : "false"; } } return "false"; @@ -88,10 +90,9 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { placeholder.register("iteminhand_enchantmentlevel_", (player, enchantmentName) -> { ItemStack itemStack = player.getInventory().getItemInMainHand(); if (itemStack.hasItemMeta() && itemStack.getItemMeta().hasEnchants()) { - var optional = plugin.getEnchantments().getEnchantments(enchantmentName); + var optional = plugin.getEnchantments().getEnchantment(enchantmentName); if (optional.isPresent()) { - var essentialsEnchantment = optional.get(); - return String.valueOf(itemStack.getEnchantmentLevel(essentialsEnchantment.enchantment())); + return String.valueOf(itemStack.getEnchantmentLevel(optional.get())); } } return "0"; diff --git a/src/main/java/fr/maxlego08/essentials/user/placeholders/UserPlaceholders.java b/src/main/java/fr/maxlego08/essentials/user/placeholders/UserPlaceholders.java index 2fe4fb63..b1418c86 100644 --- a/src/main/java/fr/maxlego08/essentials/user/placeholders/UserPlaceholders.java +++ b/src/main/java/fr/maxlego08/essentials/user/placeholders/UserPlaceholders.java @@ -15,6 +15,7 @@ import fr.maxlego08.essentials.zutils.utils.ZUtils; import java.math.BigDecimal; +import java.util.Locale; import java.util.Optional; import java.util.stream.Collectors; @@ -167,7 +168,7 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { User user = iStorage.getUser(player.getUniqueId()); boolean isAfk = user != null && user.isAfk(); if (afkManager == null) { - return isAfk ? "&aV" : "&cX"; + return isAfk ? "V" : "X"; } return isAfk ? afkManager.getPlaceholderAfk() : afkManager.getPlaceholderNotAfk(); }, "Returns the configured placeholder for the player's AFK status"); @@ -189,7 +190,7 @@ public void register(Placeholder placeholder, EssentialsPlugin plugin) { placeholder.register("user_block_x", (player) -> String.valueOf(player.getLocation().getBlockX()), "Returns the block x coordinate of the player"); placeholder.register("user_block_y", (player) -> String.valueOf(player.getLocation().getBlockY()), "Returns the block y coordinate of the player"); placeholder.register("user_block_z", (player) -> String.valueOf(player.getLocation().getBlockZ()), "Returns the block z coordinate of the player"); - placeholder.register("user_biome", (player) -> player.getWorld().getBiome(player.getLocation()).name(), "Returns the biome of the player"); + placeholder.register("user_biome", (player) -> player.getWorld().getBiome(player.getLocation()).getKey().getKey().toUpperCase(Locale.ROOT), "Returns the biome of the player"); placeholder.register("user_has_discord_linked", (player) -> { User user = iStorage.getUser(player.getUniqueId()); diff --git a/src/main/java/fr/maxlego08/essentials/zutils/Metrics.java b/src/main/java/fr/maxlego08/essentials/zutils/Metrics.java index 408aa614..b1b90b34 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/Metrics.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/Metrics.java @@ -7,7 +7,6 @@ import fr.maxlego08.essentials.api.EssentialsPlugin; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; @@ -21,10 +20,9 @@ import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.net.URL; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.UUID; @@ -175,7 +173,7 @@ private static void sendData(Plugin plugin, JsonObject data) throws Exception { if (logSentData) { plugin.getLogger().info("Sending data to bStats: " + data); } - HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection(); + HttpsURLConnection connection = (HttpsURLConnection) URI.create(URL).toURL().openConnection(); // Compress the data to save bandwidth byte[] compressedData = compress(data.toString()); @@ -281,7 +279,7 @@ public JsonObject getPluginData() { JsonObject data = new JsonObject(); // String pluginName = plugin.getDescription().getName(); - String pluginVersion = plugin.getDescription().getVersion(); + String pluginVersion = plugin.getPluginMeta().getVersion(); data.addProperty("pluginName", "zEssential"); // Append the name of the plugin data.addProperty("id", pluginId); // Append the id of the plugin @@ -307,17 +305,7 @@ public JsonObject getPluginData() { */ private JsonObject getServerData() { // Minecraft specific data - int playerAmount; - try { - // Around MC 1.8 the return type was changed to a collection from an array, - // This fixes java.lang.NoSuchMethodError: org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection; - Method onlinePlayersMethod = Class.forName("org.bukkit.Server").getMethod("getOnlinePlayers"); - playerAmount = onlinePlayersMethod.getReturnType().equals(Collection.class) - ? ((Collection) onlinePlayersMethod.invoke(Bukkit.getServer())).size() - : ((Player[]) onlinePlayersMethod.invoke(Bukkit.getServer())).length; - } catch (Exception e) { - playerAmount = Bukkit.getOnlinePlayers().size(); // Just use the new method if the Reflection failed - } + int playerAmount = Bukkit.getOnlinePlayers().size(); int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; String bukkitVersion = Bukkit.getVersion(); String bukkitName = Bukkit.getName(); @@ -371,7 +359,7 @@ private void submitData() { Method jsonStringGetter = jsonObjectJsonSimple.getDeclaredMethod("toJSONString"); jsonStringGetter.setAccessible(true); String jsonString = (String) jsonStringGetter.invoke(plugin); - JsonObject object = new JsonParser().parse(jsonString).getAsJsonObject(); + JsonObject object = JsonParser.parseString(jsonString).getAsJsonObject(); pluginData.add(object); } } catch (ClassNotFoundException e) { diff --git a/src/main/java/fr/maxlego08/essentials/zutils/ZPlugin.java b/src/main/java/fr/maxlego08/essentials/zutils/ZPlugin.java index ddeffdbc..5d3372a9 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/ZPlugin.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/ZPlugin.java @@ -54,8 +54,12 @@ protected void registerListener(Listener listener) { public boolean resourceExist(String resourcePath) { if (resourcePath != null && !resourcePath.equals("")) { resourcePath = resourcePath.replace('\\', '/'); - InputStream in = this.getResource(resourcePath); - return in != null; + try (InputStream in = this.getResource(resourcePath)) { + return in != null; + } catch (IOException exception) { + getLogger().log(Level.SEVERE, "Could not check resource " + resourcePath, exception); + return false; + } } return false; } @@ -74,20 +78,13 @@ public void saveResource(String resourcePath, String toPath, boolean replace) { outDir.mkdirs(); } - try { + try (in) { if (outFile.exists() && !replace) { getLogger().log(Level.WARNING, "Could not save " + outFile.getName() + " to " + outFile + " because " + outFile.getName() + " already exists."); } else { - OutputStream out = Files.newOutputStream(outFile.toPath()); - byte[] buf = new byte[1024]; - - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); + try (OutputStream out = Files.newOutputStream(outFile.toPath())) { + in.transferTo(out); } - - out.close(); - in.close(); } } catch (IOException exception) { getLogger().log(Level.SEVERE, "Could not save " + outFile.getName() + " to " + outFile, exception); @@ -113,13 +110,13 @@ protected T requireProvider(Class service, String owner) { return provider; } + /** + * @return always {@code true}; zEssentials requires Paper + * @deprecated Paper is the only supported platform. + */ + @Deprecated public boolean isPaperVersion() { - try { - Class.forName("net.kyori.adventure.text.Component"); - return true; - } catch (ClassNotFoundException e) { - return false; - } + return true; } } diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/ComponentMessageHelper.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/ComponentMessageHelper.java index a5f8aa0c..a77539cf 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/ComponentMessageHelper.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/ComponentMessageHelper.java @@ -2,19 +2,9 @@ import fr.maxlego08.essentials.api.utils.component.ComponentMessage; import fr.maxlego08.essentials.zutils.utils.paper.PaperComponent; -import fr.maxlego08.essentials.zutils.utils.spigot.SpigotComponent; public class ComponentMessageHelper { - public static ComponentMessage componentMessage; - - static { - try { - Class.forName("net.kyori.adventure.text.minimessage.MiniMessage"); - componentMessage = new PaperComponent(); - } catch (Exception ignored) { - componentMessage = new SpigotComponent(); - } - } + public static ComponentMessage componentMessage = new PaperComponent(); } diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/MessageUtils.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/MessageUtils.java index 89c6f437..c4117b7d 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/MessageUtils.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/MessageUtils.java @@ -4,23 +4,20 @@ import fr.maxlego08.essentials.api.commands.Permission; import fr.maxlego08.essentials.api.messages.DefaultFontInfo; import fr.maxlego08.essentials.api.messages.Message; +import fr.maxlego08.essentials.api.messages.MessageHelper; import fr.maxlego08.essentials.api.messages.MessageType; import fr.maxlego08.essentials.api.messages.messages.BossBarMessage; import fr.maxlego08.essentials.api.messages.messages.ClassicMessage; import fr.maxlego08.essentials.api.messages.messages.TitleMessage; import fr.maxlego08.essentials.api.user.User; import fr.maxlego08.essentials.api.utils.component.ComponentMessage; -import fr.maxlego08.menu.common.utils.nms.NMSUtils; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public abstract class MessageUtils extends PlaceholderUtils { @@ -156,24 +153,7 @@ protected String getCenteredMessage(String message) { int CENTER_PX = 154; - message = ChatColor.translateAlternateColorCodes('&', message); - - int messagePxSize = 0; - boolean previousCode = false; - boolean isBold = false; - - for (char c : message.toCharArray()) { - if (c == '§') { - previousCode = true; - } else if (previousCode) { - previousCode = false; - isBold = c == 'l' || c == 'L'; - } else { - DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); - messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); - messagePxSize++; - } - } + int messagePxSize = MessageHelper.getStringLength(message); int halvedMessageSize = messagePxSize / 2; int toCompensate = CENTER_PX - halvedMessageSize; @@ -187,18 +167,5 @@ protected String getCenteredMessage(String message) { return sb + message; } - protected String color(String message) { - if (message == null) return null; - if (NMSUtils.isHexColor()) { - Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}"); - Matcher matcher = pattern.matcher(message); - while (matcher.find()) { - String color = message.substring(matcher.start(), matcher.end()); - message = message.replace(color, String.valueOf(net.md_5.bungee.api.ChatColor.of(color))); - matcher = pattern.matcher(message); - } - } - return net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', message); - } } diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/StorageHelper.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/StorageHelper.java index ad390bbb..b2bf6669 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/StorageHelper.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/StorageHelper.java @@ -9,7 +9,6 @@ import fr.maxlego08.essentials.api.user.User; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/TypeSafeCache.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/TypeSafeCache.java index 84768318..753e0318 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/TypeSafeCache.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/TypeSafeCache.java @@ -3,7 +3,6 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/VersionChecker.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/VersionChecker.java index 3e15a806..a3dcf889 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/VersionChecker.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/VersionChecker.java @@ -9,10 +9,9 @@ import org.bukkit.event.player.PlayerJoinEvent; import java.io.IOException; -import java.net.URL; +import java.net.URI; import java.net.URLConnection; import java.util.Scanner; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; /** @@ -24,7 +23,7 @@ public class VersionChecker extends ZUtils implements Listener { private final String URL_RESOURCE = "https://groupez.dev/resources/%s"; private final EssentialsPlugin plugin; private final int pluginID; - private boolean useLastVersion = false; + private volatile boolean useLastVersion = true; public VersionChecker(EssentialsPlugin plugin, int pluginID) { super(); @@ -37,14 +36,11 @@ public void useLastVersion() { Bukkit.getPluginManager().registerEvents(this, this.plugin); - String pluginVersion = this.plugin.getDescription().getVersion(); - AtomicBoolean atomicBoolean = new AtomicBoolean(); + String pluginVersion = this.plugin.getPluginMeta().getVersion(); this.getVersion(version -> { - long ver = Long.parseLong(version.replace(".", "")); - long plVersion = Long.parseLong(pluginVersion.replace(".", "")); - atomicBoolean.set(this.useLastVersion = plVersion >= ver); - if (atomicBoolean.get()) { + this.useLastVersion = compareVersions(pluginVersion, version) >= 0; + if (this.useLastVersion) { this.plugin.getLogger().info("No update available."); } else { this.plugin.getLogger().severe(""); @@ -56,14 +52,27 @@ public void useLastVersion() { } + static int compareVersions(String first, String second) { + String[] firstParts = first.split("[+-]", 2)[0].split("\\.", -1); + String[] secondParts = second.split("[+-]", 2)[0].split("\\.", -1); + int result = 0; + for (int i = 0; i < Math.max(firstParts.length, secondParts.length); i++) { + int firstPart = i < firstParts.length ? Integer.parseInt(firstParts[i]) : 0; + int secondPart = i < secondParts.length ? Integer.parseInt(secondParts[i]) : 0; + if (firstPart < 0 || secondPart < 0) throw new IllegalArgumentException("Negative version component"); + if (result == 0) result = Integer.compare(firstPart, secondPart); + } + return result; + } + @EventHandler public void onConnect(PlayerJoinEvent event) { final Player player = event.getPlayer(); if (!useLastVersion && event.getPlayer().hasPermission("zplugin.notifs")) { plugin.getScheduler().runLater(() -> { String prefix = Message.PREFIX.getMessageAsString(); - message(player, prefix + "§cYou do not use the latest version of the plugin! Thank you for taking the latest version to avoid any risk of problem!"); - message(player, prefix + "§fDownload plugin here: §a" + String.format(URL_RESOURCE, pluginID)); + message(player, prefix + "You do not use the latest version of the plugin! Thank you for taking the latest version to avoid any risk of problem!"); + message(player, prefix + "Download plugin here: " + String.format(URL_RESOURCE, pluginID)); }, 20 * 2); } } @@ -77,13 +86,14 @@ public void getVersion(Consumer consumer) { this.plugin.getScheduler().runAsync(wrappedTask -> { final String apiURL = String.format(URL_API, this.pluginID); try { - URL url = new URL(apiURL); - URLConnection hc = url.openConnection(); + URLConnection hc = URI.create(apiURL).toURL().openConnection(); + hc.setConnectTimeout(5000); + hc.setReadTimeout(5000); hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); - Scanner scanner = new Scanner(hc.getInputStream()); - if (scanner.hasNext()) consumer.accept(scanner.next()); - scanner.close(); - } catch (IOException exception) { + try (Scanner scanner = new Scanner(hc.getInputStream())) { + if (scanner.hasNext()) consumer.accept(scanner.next()); + } + } catch (IOException | IllegalArgumentException exception) { this.plugin.getLogger().info("Cannot look for updates: " + exception.getMessage()); } }); diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/ZUtils.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/ZUtils.java index 0d0a61c1..8f325370 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/ZUtils.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/ZUtils.java @@ -3,6 +3,8 @@ import com.google.common.base.Strings; import fr.maxlego08.essentials.api.EssentialsPlugin; import fr.maxlego08.essentials.api.commands.Permission; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -139,6 +141,14 @@ protected boolean hasPermission(Permissible permissible, Permission permission) return permissible.hasPermission(permission.asPermission()); } + protected String getItemName(ItemStack itemStack) { + return MiniMessage.miniMessage().serialize(itemStack.effectiveName()); + } + + protected String getMaterialName(Material material) { + return MiniMessage.miniMessage().serialize(Component.translatable(material.translationKey())); + } + protected String name(String string) { String name = string.replace("_", " ").toLowerCase(); return name.substring(0, 1).toUpperCase() + name.substring(1); @@ -444,20 +454,6 @@ protected String getProgressBar(long current, long max, int totalBars, char symb return Strings.repeat(completedColor + symbol, progressBars) + Strings.repeat(notCompletedColor + symbol, totalBars - progressBars); } - protected String colorReverse(String message) { - Pattern pattern = Pattern.compile(net.md_5.bungee.api.ChatColor.COLOR_CHAR + "x[a-fA-F0-9-" + net.md_5.bungee.api.ChatColor.COLOR_CHAR + "]{12}"); - Matcher matcher = pattern.matcher(message); - while (matcher.find()) { - String color = message.substring(matcher.start(), matcher.end()); - String colorReplace = color.replace("§x", "#"); - colorReplace = colorReplace.replace("§", ""); - message = message.replace(color, colorReplace); - matcher = pattern.matcher(message); - } - - return message.replace("§", "&"); - } - protected int countRepairItems(Inventory inventory) { int amount = 0; for (ItemStack itemStack : inventory) { diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/component/adapters/ClickAdapter.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/component/adapters/ClickAdapter.java index bd38a63c..66a2931d 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/component/adapters/ClickAdapter.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/component/adapters/ClickAdapter.java @@ -36,7 +36,7 @@ public void write(JsonWriter out, ClickEvent clickEvent) throws IOException { */ @Override public ClickEvent read(JsonReader in) throws IOException { - String action = net.kyori.adventure.text.event.ClickEvent.Action.RUN_COMMAND.name(); + String action = "RUN_COMMAND"; String value = "/say Hummm, its doesnt work !"; in.beginObject(); diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/component/components/ClickEvent.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/component/components/ClickEvent.java index fc4cfcf5..306f347b 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/component/components/ClickEvent.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/component/components/ClickEvent.java @@ -27,7 +27,25 @@ public ClickEvent(String action, String value) { */ public ClickEvent(net.kyori.adventure.text.event.ClickEvent event) { this.action = event.action().toString(); - this.value = event.value(); + this.value = getValue(event); + } + + private static String getValue(net.kyori.adventure.text.event.ClickEvent event) { + try { + try { + // Adventure 4.x exposes the value directly; Paper 1.21.4 still uses this API. + return (String) net.kyori.adventure.text.event.ClickEvent.class.getMethod("value").invoke(event); + } catch (NoSuchMethodException ignored) { + // Adventure 5 uses typed payloads. Resolve their public interfaces so that the + // common code does not link to classes absent from older Paper versions. + Object payload = net.kyori.adventure.text.event.ClickEvent.class.getMethod("payload").invoke(event); + boolean changePage = event.action().toString().equals("change_page"); + Class payloadType = Class.forName(net.kyori.adventure.text.event.ClickEvent.class.getName() + "$Payload$" + (changePage ? "Int" : "Text")); + return String.valueOf(payloadType.getMethod(changePage ? "integer" : "value").invoke(payload)); + } + } catch (ReflectiveOperationException exception) { + throw new IllegalStateException("Unable to read the click event value", exception); + } } /** @@ -54,7 +72,7 @@ public String getValue() { * @return The ClickEvent as a MiniMessage formatted string. */ public String toMiniMessage() { - return String.format("", this.action, this.value); + return String.format("", this.action, this.value.replace("\\", "\\\\").replace("\"", "\\\"")); } } diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/paper/PaperComponent.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/paper/PaperComponent.java index 775e0b8f..44b12f50 100644 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/paper/PaperComponent.java +++ b/src/main/java/fr/maxlego08/essentials/zutils/utils/paper/PaperComponent.java @@ -32,13 +32,9 @@ import java.time.Duration; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; public class PaperComponent extends PlaceholderUtils implements AdventureComponent { @@ -68,43 +64,15 @@ public class PaperComponent extends PlaceholderUtils implements AdventureCompone new TagPermission(Permission.ESSENTIALS_SIGN_DECORATION, StandardTags.decorations()) // ); - private final MiniMessage MINI_MESSAGE = MiniMessage.builder().tags(TagResolver.builder().resolver(StandardTags.defaults()).build()).build(); - private final Map COLORS_MAPPINGS = new HashMap<>(); + private static final MiniMessage MINI_MESSAGE = MiniMessage.builder().tags(TagResolver.builder().resolver(StandardTags.defaults()).build()).build(); private final SimpleCache cache = new SimpleCache<>(); - public PaperComponent() { - this.COLORS_MAPPINGS.put("0", "black"); - this.COLORS_MAPPINGS.put("1", "dark_blue"); - this.COLORS_MAPPINGS.put("2", "dark_green"); - this.COLORS_MAPPINGS.put("3", "dark_aqua"); - this.COLORS_MAPPINGS.put("4", "dark_red"); - this.COLORS_MAPPINGS.put("5", "dark_purple"); - this.COLORS_MAPPINGS.put("6", "gold"); - this.COLORS_MAPPINGS.put("7", "gray"); - this.COLORS_MAPPINGS.put("8", "dark_gray"); - this.COLORS_MAPPINGS.put("9", "blue"); - this.COLORS_MAPPINGS.put("a", "green"); - this.COLORS_MAPPINGS.put("b", "aqua"); - this.COLORS_MAPPINGS.put("c", "red"); - this.COLORS_MAPPINGS.put("d", "light_purple"); - this.COLORS_MAPPINGS.put("e", "yellow"); - this.COLORS_MAPPINGS.put("f", "white"); - this.COLORS_MAPPINGS.put("k", "obfuscated"); - this.COLORS_MAPPINGS.put("l", "bold"); - this.COLORS_MAPPINGS.put("m", "strikethrough"); - this.COLORS_MAPPINGS.put("n", "underlined"); - this.COLORS_MAPPINGS.put("o", "italic"); - this.COLORS_MAPPINGS.put("r", "reset"); - } - - private TextDecoration.State getState(String text) { - return text.contains("&o") || text.contains("") || text.contains("") || text.contains("") ? TextDecoration.State.TRUE : TextDecoration.State.FALSE; + public static String serializeMiniMessage(Component component) { + return MINI_MESSAGE.serialize(component); } private void updateDisplayName(ItemMeta itemMeta, String text) { - Component component = this.cache.get(text, () -> { - return this.MINI_MESSAGE.deserialize(colorMiniMessage(text)).decoration(TextDecoration.ITALIC, getState(text)); // We will force the italics in false, otherwise it will activate for no reason - }); + Component component = getComponent(text).decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); itemMeta.displayName(component); } @@ -119,52 +87,25 @@ public void updateLore(ItemMeta itemMeta, List lore, Player offlinePlaye public void update(ItemMeta itemMeta, List lore, Player offlinePlayer) { List components = lore.stream().map(text -> { String result = papi(text, offlinePlayer); - return this.cache.get(result, () -> { - return this.MINI_MESSAGE.deserialize(colorMiniMessage(result)).decoration(TextDecoration.ITALIC, getState(result)); // We will force the italics in false, otherwise it will activate for no reason - }); + return getComponent(result).decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); }).collect(Collectors.toList()); itemMeta.lore(components); } @Override public Inventory createInventory(String inventoryName, int size, InventoryHolder inventoryHolder) { - Component component = this.cache.get(inventoryName, () -> this.MINI_MESSAGE.deserialize(colorMiniMessage(inventoryName))); + Component component = this.cache.get(inventoryName, () -> this.MINI_MESSAGE.deserialize(inventoryName)); return Bukkit.createInventory(inventoryHolder, size, component); } - private String colorMiniMessage(String message) { - StringBuilder stringBuilder = new StringBuilder(); - - Pattern pattern = Pattern.compile("(?"); - } - matcher.appendTail(stringBuilder); - - String newMessage = stringBuilder.toString(); - - for (Map.Entry entry : this.COLORS_MAPPINGS.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - newMessage = newMessage.replace("&" + key, "<" + value + ">"); - newMessage = newMessage.replace("§" + key, "<" + value + ">"); - newMessage = newMessage.replace("&" + key.toUpperCase(), "<" + value + ">"); - newMessage = newMessage.replace("§" + key.toUpperCase(), "<" + value + ">"); - } - - return newMessage; - } - @Override public Component getComponent(String message) { - return this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(colorMiniMessage(message))); + return this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(message)); } @Override public Component getComponent(String message, TagResolver tagResolver) { - return this.MINI_MESSAGE.deserialize(colorMiniMessage(message), tagResolver); + return this.MINI_MESSAGE.deserialize(message, tagResolver); } @Override @@ -190,21 +131,21 @@ private TagResolver getTagResolver(Player player, TagResolver... tagResolvers) { public Component translateText(Player player, String message, TagResolver... tagResolvers) { var tagResolver = getTagResolver(player, tagResolvers); - return MiniMessage.builder().tags(tagResolver).build().deserialize(colorMiniMessage(message)); + return MiniMessage.builder().tags(tagResolver).build().deserialize(message); } @Override public void sendActionBar(Player sender, String message) { - Component component = this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(colorMiniMessage(message))); + Component component = this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(message)); sender.sendActionBar(component); } @Override public void sendMessage(CommandSender sender, String message) { if (sender instanceof Player player) { - sender.sendMessage(this.MINI_MESSAGE.deserialize(papi(colorMiniMessage(message), player))); + sender.sendMessage(this.MINI_MESSAGE.deserialize(papi(message, player))); } else { - Component component = this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(colorMiniMessage(message))); + Component component = this.cache.get(message, () -> this.MINI_MESSAGE.deserialize(message)); sender.sendMessage(component); } } @@ -264,7 +205,7 @@ public void kick(Player player, String message) { @Override public String getItemStackName(ItemStack itemStack) { - if (itemStack.hasItemMeta()) return ""; + if (!itemStack.hasItemMeta()) return ""; var meta = itemStack.getItemMeta(); if (!meta.hasDisplayName()) return ""; return PlainTextComponentSerializer.plainText().serialize(Objects.requireNonNull(meta.displayName())); @@ -282,7 +223,7 @@ public void changeSignColor(SignChangeEvent event) { if (line == null) continue; var plainText = plainTextSerializer.serialize(line); - event.line(i, miniMessage.deserialize(colorMiniMessage(plainText))); + event.line(i, miniMessage.deserialize(plainText)); } } } diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotComponent.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotComponent.java deleted file mode 100644 index 42def2c7..00000000 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotComponent.java +++ /dev/null @@ -1,80 +0,0 @@ -package fr.maxlego08.essentials.zutils.utils.spigot; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.messages.messages.BossBarMessage; -import fr.maxlego08.essentials.api.messages.messages.TitleMessage; -import fr.maxlego08.essentials.api.utils.component.ComponentMessage; -import fr.maxlego08.essentials.zutils.utils.MessageUtils; -import fr.maxlego08.menu.api.utils.Placeholders; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.block.SignChangeEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.List; - -public class SpigotComponent implements ComponentMessage { - - @Override - public void sendMessage(CommandSender sender, String message) { - sender.sendMessage(message); - } - - @Override - public void sendActionBar(Player player, String message) { - player.sendActionBar(message); - } - - @Override - public Inventory createInventory(String message, int size, InventoryHolder inventoryHolder) { - return Bukkit.createInventory(inventoryHolder, size, message); - } - - @Override - public void addToLore(ItemStack itemStack, List lore, Placeholders placeholders) { - ItemMeta itemMeta = itemStack.getItemMeta(); - List currentLore = itemMeta.hasLore() ? itemMeta.getLore() : new ArrayList<>(); - currentLore.addAll(lore.stream().map(placeholders::parse).toList()); - itemMeta.setLore(currentLore); - itemStack.setItemMeta(itemMeta); - } - - @Override - public void sendBossBar(EssentialsPlugin plugin, Player player, BossBarMessage bossBarMessage, Object... args) { - - } - - @Override - public void sendTitle(Player player, TitleMessage titleMessage, Object... objects) { - String title = MessageUtils.getString(titleMessage.title(), objects); - String subtitle = MessageUtils.getString(titleMessage.subtitle(), objects); - player.sendTitle(title, subtitle, (int) titleMessage.start(), (int) titleMessage.time(), (int) titleMessage.end()); - } - - @Override - public void kick(Player player, String message) { - player.kickPlayer(message); - } - - @Override - public String getItemStackName(ItemStack itemStack) { - if (itemStack.hasItemMeta()) return ""; - var meta = itemStack.getItemMeta(); - if (!meta.hasDisplayName()) return ""; - return meta.getDisplayName().replaceAll("§.", ""); - } - - @Override - public void changeSignColor(SignChangeEvent event) { - var lines = event.getLines(); - for (int i = 0; i < lines.length; i++) { - event.setLine(i, ChatColor.translateAlternateColorCodes('&', lines[i])); - } - } -} diff --git a/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotUtils.java b/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotUtils.java deleted file mode 100644 index 646695f1..00000000 --- a/src/main/java/fr/maxlego08/essentials/zutils/utils/spigot/SpigotUtils.java +++ /dev/null @@ -1,34 +0,0 @@ -package fr.maxlego08.essentials.zutils.utils.spigot; - -import fr.maxlego08.essentials.api.EssentialsPlugin; -import fr.maxlego08.essentials.api.messages.Message; -import fr.maxlego08.essentials.api.user.PrivateMessage; -import fr.maxlego08.essentials.api.user.User; -import fr.maxlego08.essentials.zutils.utils.BaseServer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.player.AsyncPlayerPreLoginEvent; -import org.bukkit.event.player.PlayerLoginEvent; - -public class SpigotUtils extends BaseServer { - - - public SpigotUtils(EssentialsPlugin plugin) { - super(plugin); - } - - @Override - public void kick(Player player, Message message, Object... objects) { - Bukkit.getScheduler().runTask(this.plugin, () -> player.kickPlayer(getMessage(message, objects))); - } - - @Override - public void disallow(PlayerLoginEvent event, PlayerLoginEvent.Result result, Message message, Object... objects) { - event.disallow(result, getMessage(message, objects)); - } - - @Override - public void sendPrivateMessage(User user, PrivateMessage privateMessage, Message message, String content) { - message(user, message, "%target%", privateMessage.username(), "%message%", content); - } -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 135908bf..88d8570d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -48,6 +48,10 @@ database-configuration: database: zessentials # Enable of not the SQL debug mode debug: false + # Maximum lifetime of a pooled MySQL or MariaDB connection, in seconds. + # A connection older than this is retired and replaced. 0 keeps connections until the pool closes. + # Hikari requires at least 30 seconds. 1800 is 30 minutes, the same default used when this option is omitted. + max-lifetime: 1800 # Sends requests available in batch to the database (history of messages, commands, etc.) batch-auto-save: 10000 @@ -124,7 +128,7 @@ compact-materials: - from: NETHERITE_INGOT to: NETHERITE_BLOCK -# Transforms keys by color, used in messages +# Replaces these message tags with MiniMessage custom colors. Set each color as a hex value. message-colors: - key: "" color: "#24d65d" @@ -211,23 +215,23 @@ replace-placeholders: # For this example, the placeholder to use will be: %zessentials_replace_player_ping% # In this example, the player’s ping color will change depending on his ping - placeholder: 'player_ping' # Placeholder to be replaced, do not add % - default: '&c%result%' # Default if no condition found + default: "%result%" # Default if no condition found replaces: # List of conditions to replace placeholder - type: STRING # The type of the condition, here STRING allows to check if the result of the placeholder is equal to the given value equalsTo: 0 # The value to be verified - value: '&aWHOA YOU DONT HAVE PING WTF YOU ARE IN A DATACENTER ?' # The value that will be used, you can add %result% to return the value of the placeholder + value: "WHOA YOU DONT HAVE PING WTF YOU ARE IN A DATACENTER ?" # The value that will be used, you can add %result% to return the value of the placeholder - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number max: 50 # The maximum possible number - value: '&a%result%' # The value that will be used, you can add %result% to return the value of the placeholder + value: "%result%" # The value that will be used, you can add %result% to return the value of the placeholder - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number max: 99 # The maximum possible number - value: '&2%result%' # The value that will be used, you can add %result% to return the value of the placeholder + value: "%result%" # The value that will be used, you can add %result% to return the value of the placeholder - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number max: 199 # The maximum possible number - value: '&e%result%' # The value that will be used, you can add %result% to return the value of the placeholder + value: "%result%" # The value that will be used, you can add %result% to return the value of the placeholder - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number max: 299 # The maximum possible number - value: '&c%result%' # The value that will be used, you can add %result% to return the value of the placeholder + value: "%result%" # The value that will be used, you can add %result% to return the value of the placeholder # Allows activating or not the task to check it of players with a temporary fly @@ -302,4 +306,4 @@ default-options: value: true # Teleports players on their first join to the configured first-spawn, spawn, or random teleport location -enable-first-join-teleport: false \ No newline at end of file +enable-first-join-teleport: false diff --git a/src/main/resources/messages/message_zh.yml b/src/main/resources/messages/message_zh.yml index e2e99542..42982595 100644 --- a/src/main/resources/messages/message_zh.yml +++ b/src/main/resources/messages/message_zh.yml @@ -19,260 +19,254 @@ prefix: 'zEssentials • ' you: 你 -trash: '&8垃圾桶' +trash: "垃圾桶" console: 控制台 expired: 已过期 -player-not-found: '&f%player% 未找到。' -module-disable: &f%name% 模块已禁用。您不能使用此命令。 -code-not-found: 找不到代码。 +player-not-found: "%player% 未找到。" +module-disable: "%name% 模块已禁用。您不能使用此命令。" +code-not-found: "找不到代码。" rules: -- '#ffd353ℹ 服务器规则#3f3f3f:' -- '#3f3f3f• &7尊重所有玩家和工作人员。' -- '#3f3f3f• &7禁止破坏或偷窃。' -- '#3f3f3f• &7禁止作弊或黑客行为。' -- '#3f3f3f• &7保持聊天清洁和尊重。' -- '#3f3f3f• &7禁止刷屏或广告。' +- "ℹ 服务器规则:" +- "• 尊重所有玩家和工作人员。" +- "• 禁止破坏或偷窃。" +- "• 禁止作弊或黑客行为。" +- "• 保持聊天清洁和尊重。" +- "• 禁止刷屏或广告。" # 命令 -command-syntax-error: '您必须这样执行命令#656665: &f%syntax%' +command-syntax-error: "您必须这样执行命令: %syntax%" command-no-permission: 您没有权限运行此命令。 command-no-console: 只有玩家可以执行此命令。 command-no-arg: 无法找到带有参数的命令。 command-restricted: "你不能在这里使用此命令。" -command-syntaxe-help: '&f%syntax% #656665» &7%description%' +command-syntaxe-help: "%syntax% » %description%" command-reload: 您刚刚重新加载了配置文件。 -command-reload-module: 您刚刚重新加载了&f%module%模块的配置文件。 -command-reload-error: '&f%module% 未找到!' -command-essentials: '&ezEssentials&8, &e版本 &f%version%' +command-reload-module: "您刚刚重新加载了%module%模块的配置文件。" +command-reload-error: "%module% 未找到!" +command-essentials: "zEssentials, 版本 %version%" # 游戏模式命令 -command-gamemode: '&f设置游戏模式&e %gamemode%&f 给 &b%player%&f。' +command-gamemode: "设置游戏模式 %gamemode% 给 %player%。" command-gamemode-invalid: 您需要指定一个有效的玩家。 # 天气命令 command-time-error: "你需要指定一个世界" -command-time-already-changing: "&f%world% 的时间已经在改变中。" -command-day: '&f您刚刚带来了 &edaylight&f 到世界 %world%&f。' -command-night: '&f您刚刚带来了 &enightfall&f 到世界 %world%&f。' -command-sun: '&f您刚刚带来了 &esun&f 到世界 %world%&f。' +command-time-already-changing: "%world% 的时间已经在改变中。" +command-day: "您刚刚带来了 daylight 到世界 %world%。" +command-night: "您刚刚带来了 nightfall 到世界 %world%。" +command-sun: "您刚刚带来了 sun 到世界 %world%。" # 管理员命令 -command-top: '&7您已经被传送到 &etop&7。' +command-top: "您已经被传送到 top。" command-top-error: 无法找到安全传送您的位置。 command-speed-invalid: 您需要指定一个有效的玩家。 -command-speed-fly: '&7您刚刚设置了 &n飞行速度&r&7 为 &f%speed%&7 给 &f%player%&7。 &8(&f2 &7默认&8)' -command-speed-walk: '&7您刚刚设置了 &n行走速度&r&7 为 &f%speed%&7 给 &f%player%&7。 &8(&f2 &7默认&8)' -command-speed-error: 您必须输入介于 &60 和 &610 之间的数字。 &8(&f2 &7默认&8) -command-god-enable: '&7上帝模式 启用 &7给 &f%player%。' -command-god-disable: '&7上帝模式 禁用 &7给 &f%player%。' -command-vanish-enable: '&7隐身模式 启用 &7给 &f%player%。' -command-vanish-disable: '&7隐身模式 禁用 &7给 &f%player%。' -command-night-vision-enable: '&7夜视 启用 &7给 &f%player%。' -command-night-vision-disable: '&7夜视 禁用 &7给 &f%player%。' -command-ext-sender: "&7你已为玩家 &f%player%&7 扑灭了火焰。" +command-speed-fly: "您刚刚设置了 飞行速度 为 %speed% 给 %player%。 (2 默认)" +command-speed-walk: "您刚刚设置了 行走速度 为 %speed% 给 %player%。 (2 默认)" +command-speed-error: "您必须输入介于 0 和 10 之间的数字。 (2 默认)" +command-god-enable: "上帝模式 启用 给 %player%。" +command-god-disable: "上帝模式 禁用 给 %player%。" +command-vanish-enable: "隐身模式 启用 给 %player%。" +command-vanish-disable: "隐身模式 禁用 给 %player%。" +command-night-vision-enable: "夜视 启用 给 %player%。" +command-night-vision-disable: "夜视 禁用 给 %player%。" +command-ext-sender: "你已为玩家 %player% 扑灭了火焰。" command-ext-receiver: "你已不再着火。" command-ext-error: "你无法为已死亡的玩家灭火!" -command-heal-all: "&7你已治疗服务器中的所有玩家。" -command-heal-sender: '&7您刚刚治愈了玩家 &f%player%&7。' +command-heal-all: "你已治疗服务器中的所有玩家。" +command-heal-sender: "您刚刚治愈了玩家 %player%。" command-heal-receiver: 您已被治愈。 command-heal-error: 您不能治愈一个已经死亡的人! -command-lighting-all: "&7你刚刚用闪电击中了所有玩家。" -command-lighting: "&7你刚在目标位置召唤了闪电。" -command-lighting-sender: "&7你刚在玩家 &f%player%&7 的位置召唤了闪电。" -command-lighting-receiver: "&c你被闪电击中了!" +command-lighting-all: "你刚刚用闪电击中了所有玩家。" +command-lighting: "你刚在目标位置召唤了闪电。" +command-lighting-sender: "你刚在玩家 %player% 的位置召唤了闪电。" +command-lighting-receiver: "你被闪电击中了!" command-lighting-error: "你不能用闪电击中已死亡的玩家!" command-more-error: 您不能对手中的物品执行此操作。 -command-more-success: '&7您刚刚把手中的物品数量设为了 &f64&7。' -command-feed-all: "&7你已为服务器中的所有玩家补充了饱食度。" -command-feed-sender: '&7您刚刚喂饱了玩家 &f%player%&7。' +command-more-success: "您刚刚把手中的物品数量设为了 64。" +command-feed-all: "你已为服务器中的所有玩家补充了饱食度。" +command-feed-sender: "您刚刚喂饱了玩家 %player%。" command-feed-receiver: 您已被喂饱。 command-feed-error: 您不能喂饱一个已经死亡的人! -command-afk-enable: '&7你现在被标记为 挂机&7。' +command-afk-enable: "你现在被标记为 挂机。" command-afk-disable: 你不再被标记为挂机。 -command-message-target-afk: '&f%player% &7当前 处于挂机状态&7。' -command-compact-type: 无法压缩材料 &f%material%。 -command-compact-error: 您的背包中没有 &f%item%。 -command-compact-success: '&7您刚刚将 #0EEA93x%amount% #99E0FF%item% &7转换成了 #0EEA93x%toAmount% - #99E0FF%toItem%&7。' -command-compact-success-all: '&7您刚刚转换了所有物品。' -command-hat-success: '&7您刚刚戴上了 #0ef0ce%item% &7在头上。' +command-message-target-afk: "%player% 当前 处于挂机状态。" +command-compact-type: "无法压缩材料 %material%。" +command-compact-error: "您的背包中没有 %item%。" +command-compact-success: "您刚刚将 x%amount% %item% 转换成了 x%toAmount% %toItem%。" +command-compact-success-all: "您刚刚转换了所有物品。" +command-hat-success: "您刚刚戴上了 %item% 在头上。" command-hat-error: 您不能戴上空气。 -command-player-weather-reset: '&7您刚刚更改天气为服务器的天气。' -command-player-weather-downfall: '&7您刚刚为自己开启了下雨。' -command-player-time-reset: '&7您刚刚更改时间为服务器的时间。' -command-player-time-change: '&7您正在改变自己的时间。' -command-lag-world-line: '&a%world%&7: &a%peaceful% 和平实体&7, &c%monsters% 怪物&7, &e%items% 掉落物' -command-lag-world-header: '&a世界 &2%world%&a 的实体:' -command-lag-world-entry: '&7- &a%type%&7: &f%amount%' -command-lag-clear-success: '&7在 &a%world%&7 中移除 &a%amount% &7个实体。' -command-lag-clear-countdown: '&c实体将在 &e%time% &c秒后被移除!' -command-fly-enable: '&7飞行模式 启用 &7给 &f%player%。' -command-fly-disable: '&7飞行模式 禁用 &7给 &f%player%。' +command-player-weather-reset: "您刚刚更改天气为服务器的天气。" +command-player-weather-downfall: "您刚刚为自己开启了下雨。" +command-player-time-reset: "您刚刚更改时间为服务器的时间。" +command-player-time-change: "您正在改变自己的时间。" +command-lag-world-line: "%world%: %peaceful% 和平实体, %monsters% 怪物, %items% 掉落物" +command-lag-world-header: "世界 %world% 的实体:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "在 %world% 中移除 %amount% 个实体。" +command-lag-clear-countdown: "实体将在 %time% 秒后被移除!" +command-fly-enable: "飞行模式 启用 给 %player%。" +command-fly-disable: "飞行模式 禁用 给 %player%。" command-fly-error-world: 您不能在这个世界飞行。 -command-fly-enable-seconds: '&7飞行模式 启用 &7给 &f%player%。 &8(&7剩余时间 - %time%&8)' +command-fly-enable-seconds: "飞行模式 启用 给 %player%。 (剩余时间 %time%)" command-fly-error: 您不再有飞行时间可用。 command-fly-end: 您已经用尽了所有的飞行时间,您不能再飞行。 command-fly-error-other: %player% 没有更多的飞行时间可用。 -command-fly-add: 您刚刚添加了 %time% 的飞行时间给 &f%player%。 -command-fly-get: '%player%&8: &f%player%。' +command-fly-add: "您刚刚添加了 %time% 的飞行时间给 %player%。" +command-fly-get: "%player%: %player%。" command-fly-info-empty: 您没有可用的飞行时间。 -command-fly-info: 您有 &f%time%。 -command-fly-remove: 您刚刚移除了 %time% 的飞行时间从 &f%player%。 -command-fly-set: 您刚刚设置了 %time% 的飞行时间给 &f%player%。 -command-furnace-type: 无法熔炼材料 &f%material%。 -command-furnace-error: 您的背包中没有 &f%item%。 -command-furnace-success: '&7您刚刚将 #0EEA93x%amount% #34cfe0%item% &7转换成了 #0EEA93x%toAmount% - #34cfe0%toItem%&7。' -command-skull: 您刚刚得到了玩家的头颅 &f%name%。 +command-fly-info: "您有 %time%。" +command-fly-remove: "您刚刚移除了 %time% 的飞行时间从 %player%。" +command-fly-set: "您刚刚设置了 %time% 的飞行时间给 %player%。" +command-furnace-type: "无法熔炼材料 %material%。" +command-furnace-error: "您的背包中没有 %item%。" +command-furnace-success: "您刚刚将 x%amount% %item% 转换成了 x%toAmount% %toItem%。" +command-skull: "您刚刚得到了玩家的头颅 %name%。" command-repair-error: 您手上的物品无法修复。 command-repair-success: 您刚刚修复了手上的物品。 command-repair-all-error: 您没有可修复的物品。 command-repair-all-success: 您刚刚修复了背包中的所有物品。 command-near-empty: 附近没有其他玩家。 -command-near-player: '&f附近的玩家&7:%players%' -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "附近的玩家:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: -- '&7您玩了&8: %playtime%' -- '&7当前会话&8: %playtime_session%' -command-bottom: '&7您已经被传送到 &ebottom&7。' +- "您玩了: %playtime%" +- "当前会话: %playtime_session%" +command-bottom: "您已经被传送到 bottom。" command-bottom-error: 无法找到安全传送您的位置。 -command-remove: '&7移除了 %amount% &7实体。' +command-remove: "移除了 %amount% 实体。" command-seen-offline: type: WITHOUT_PREFIX - message: '#99E0FF玩家 &f%player% #99E0FF自 &7%date%#99E0FF以来处于 离线状态#99E0FF。' + message: "玩家 %player% 自 %date%以来处于 离线状态。" command-seen-online: type: WITHOUT_PREFIX - message: '#99E0FF玩家 &f%player% #99E0FF自 %date%#99E0FF以来处于 在线状态#99E0FF。' + message: "玩家 %player% 自 %date%以来处于 在线状态。" command-seen-playtime: type: WITHOUT_PREFIX - message: '#99E0FF游戏时间&8: &f%playtime%' + message: "游戏时间: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: '#99E0FFUUID&8: &f%uuid%' + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: '#99E0FFIP地址&8:&f%ips%' -command-seen-address: ' %ip%' -command-seen-ip-empty: 无法找到具有 IP &f%ip% 的玩家。 -command-seen-ip-line: '#99E0FF拥有 IP &f%ip%&8 的玩家&8:%players%' -command-seen-ip-info: ' %name%' + message: "IP地址:%ips%" +command-seen-address: " 显示拥有相同地址的玩家'>%ip%" +command-seen-ip-empty: "无法找到具有 IP %ip% 的玩家。" +command-seen-ip-line: "拥有 IP %ip% 的玩家:%players%" +command-seen-ip-info: " 显示玩家信息'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: '#99E0FF最后位置&8: &f%world%, %x%, %y%, %z%' + message: "最后位置: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: '#99E0FF首次加入&8: &f%created_at%' + message: "首次加入: %created_at%" # 经济 -command-economy-not-found: 找不到名为 &f%name% 的经济系统。 -command-economy-reset-all-confirm: 你即将重置 &f%economy% 的所有余额。请在 &f%seconds% 秒内再次执行该命令以确认。 -command-economy-reset-all-success: '#99E0FF你已重置 &f%economy%#99E0FF 的所有余额。' -command-economy-give-all-sender: '#99E0FF您刚刚给了 &f%economyFormat% #99E0FF给在线玩家。' -command-economy-give-sender: '#99E0FF您刚刚给了 &f%economyFormat% #99E0FF给玩家 &7%player%#99E0FF。' -command-economy-give-receiver: '#99E0FF您刚刚收到了 &f%economyFormat%。' -command-economy-set-sender: '#99E0FF您刚刚设置了 &f%economyFormat% #99E0FF给玩家 &7%player%#99E0FF。' -command-economy-set-receiver: '#99E0FF您的余额被修改为 &f%economyFormat%。' -command-economy-take-sender: '#99E0FF您刚刚从玩家 &7%player%#99E0FF那里取走了 &f%economyFormat%。' -command-economy-take-receiver: '#99E0FF您刚刚失去了 &f%economyFormat%。' -command-economy-show-empty: '&f%player% 没有钱。' -command-economy-show-info: '&7- #99E0FF%economy% &f%amount%。' +command-economy-not-found: " 找不到名为 %name% 的经济系统。" +command-economy-reset-all-confirm: "你即将重置 %economy% 的所有余额。请在 %seconds% 秒内再次执行该命令以确认。" +command-economy-reset-all-success: "你已重置 %economy% 的所有余额。" +command-economy-give-all-sender: "您刚刚给了 %economyFormat% 给在线玩家。" +command-economy-give-sender: "您刚刚给了 %economyFormat% 给玩家 %player%。" +command-economy-give-receiver: "您刚刚收到了 %economyFormat%。" +command-economy-set-sender: "您刚刚设置了 %economyFormat% 给玩家 %player%。" +command-economy-set-receiver: "您的余额被修改为 %economyFormat%。" +command-economy-take-sender: "您刚刚从玩家 %player%那里取走了 %economyFormat%。" +command-economy-take-receiver: "您刚刚失去了 %economyFormat%。" +command-economy-show-empty: "%player% 没有钱。" +command-economy-show-info: "- %economy% %amount%。" command-money: -- '#99E0FF您有&8:' -- ' &7- #99E0FF%economy-name-money% &f%economy-money%。' -- ' &7- #99E0FF%economy-name-coins% &f%economy-coins%。' +- "您有:" +- " - %economy-name-money% %economy-money%。" +- " - %economy-name-coins% %economy-coins%。" command-money-other: -- '#99E0FF%player% 有&8:' -- ' &7- #99E0FF%economy-name-money% &f%economy-money%。' -- ' &7- #99E0FF%economy-name-coins% &f%economy-coins%。' +- "%player% 有:" +- " - %economy-name-money% %economy-money%。" +- " - %economy-name-coins% %economy-coins%。" command-pay-negative: 支付金额必须为正数。 -command-pay-min: 您可以支付的最小金额是 &f%amount%。 -command-pay-max: 您可以支付的最大金额是 &f%amount%。 -command-pay-sender: '#99E0FF您刚刚发送了 #F8F327%amount%#99E0FF 给玩家 &f%player%#99E0FF。' -command-pay-receiver: '&f%player% #99E0FF刚刚给您发送了 #F8F327%amount%#99E0FF。' +command-pay-min: "您可以支付的最小金额是 %amount%。" +command-pay-max: "您可以支付的最大金额是 %amount%。" +command-pay-sender: "您刚刚发送了 %amount% 给玩家 %player%。" +command-pay-receiver: "%player% 刚刚给您发送了 %amount%。" command-pay-disable: 您不能发送 %name%。 command-pay-self: 您不能给自己发送金钱。 command-pay-not-enough: 您的钱不够。 # 传送命令 -command-tpa-error: '您已经向 #99E0FF%player% 发送了一个请求。' +command-tpa-error: "您已经向 %player% 发送了一个请求。" command-tpa-error-same: 您不能传送到自己。 -command-tpa-here-error: 您已经向#99E0FF%player%发送了请求。 +command-tpa-here-error: "您已经向%player%发送了请求。" command-tpa-here-error-same: 您不能传送到自己。 command-tpa-error-offline: 无法找到玩家,可能已离线。 command-tpa-error-to-late-empty: 您没有传送请求。 command-tpa-error-to-late-expire: 传送请求已过期。 command-tpa-sender: -- '#00FF00✔ #99E0FF已向 &f%displayName% #99E0FF发送了一个传送请求。' -- ' ✘ 取消传送''>#99E0FF键入 - #00FF00/tpacancel %player%#99E0FF 来取消您的请求。' +- "✔ 已向 %displayName% 发送了一个传送请求。" +- " ✘ 取消传送'>键入 /tpacancel %player% 来取消您的请求。" command-tpa-receiver: - '' -- '#F8F327⚠ &f%displayName% #99E0FF请求传送到您这里!' +- "⚠ %displayName% 请求传送到您这里!" command-tpa-here-sender: -- '#00FF00✔ #99E0FF已向&f%displayName% #99E0FF发送传送请求。' -- ' ✘ 取消传送''>#99E0FF输入 - #00FF00/tpacancel %player%#99E0FF 来取消您的请求。' +- "✔ 已向%displayName% 发送传送请求。" +- " ✘ 取消传送'>输入 /tpacancel %player% 来取消您的请求。" command-tpa-here-receiver: - '' -- '#F8F327⚠ &f%displayName% #99E0FF请求将您传送到他那里!' -- ' #99E0FF输入 #00FF00/tpaccept #99E0FF以 #00FF00接受#99E0FF。' -- ' ✘ 拒绝传送''>#99E0FF输入 /tpdeny#99E0FF以 拒绝#99E0FF。' +- "⚠ %displayName% 请求将您传送到他那里!" +- " ✔ 接受传送'>输入 /tpaccept 以 接受。" +- " ✘ 拒绝传送'>输入 /tpdeny以 拒绝。" - '' -- '&7&o您有60秒的时间来接受传送请求。' -command-tpa-accept-receiver: "#99E0FF您刚刚#00FF00接受了#99E0FF来自#99E0FF%player%的传送请求。" -command-tpa-accept-sender: '#99E0FF%player% 刚刚接受了您的传送请求。' -command-tpa-here-accept-receiver: "#99E0FF您刚刚#00FF00接受了#99E0FF来自 #99E0FF%player%的传送请求。" -command-tpa-here-accept-sender: "##99E0FF%player%刚刚接受了您的传送请求。" -command-teleport-ignore-player: '您不能向 #99E0FF%player% 发送传送请求,他们正在忽略您。' +- "您有60秒的时间来接受传送请求。" +command-tpa-accept-receiver: "您刚刚接受了来自%player%的传送请求。" +command-tpa-accept-sender: "%player% 刚刚接受了您的传送请求。" +command-tpa-here-accept-receiver: "您刚刚接受了来自 %player%的传送请求。" +command-tpa-here-accept-sender: "#%player%刚刚接受了您的传送请求。" +command-teleport-ignore-player: "您不能向 %player% 发送传送请求,他们正在忽略您。" command-teleport-world: 您需要在同一世界才能传送。 command-tpa-error-to-late: 您没有传送请求。 command-tpa-error-to-late-2: 请求已过期。 -command-tp-deny-sender: '#00FF00✔ 拒绝了 &f%player% #00FF00的传送请求。' -command-tp-deny-receiver: ✘ &f%player% 拒绝了您的传送请求。 -command-tp-cancel-error: 您没有向 &f%player% 发送传送请求。 -command-tp-cancel-sender: '取消了 #99E0FF您对 %player% 的传送请求。' -command-tp-cancel-receiver: '&f%player% 取消了他们的传送请求到您。' -command-world-teleport-self: 您刚刚被传送到了世界 &f%world%。 -command-world-teleport-other: 您刚刚将玩家 &f%player% 传送到了世界 &f%world%。 -command-random-tp-other: 你刚刚随机传送了玩家 &f%player% 到世界 &f%world%。 -command-tp: '&f您刚刚传送到玩家 #34cfe0%player%&f。' -command-tp-location: '&f您刚刚传送到 #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f。' -command-tp-location-other: '&f您刚刚将 #34cfe0%player% &f传送到了 #34cfe0%x%&f, #34cfe0%y%&f, - #34cfe0%z%&f。' -command-tp-all: '&f您刚刚将所有玩家传送到了您的位置。' -command-tp-self: '&f您刚刚将 #34cfe0%player%&f 传送到了您的位置。' -command-back: '&7返回上一个位置。' +command-tp-deny-sender: "✔ 拒绝了 %player% 的传送请求。" +command-tp-deny-receiver: "✘ %player% 拒绝了您的传送请求。" +command-tp-cancel-error: "您没有向 %player% 发送传送请求。" +command-tp-cancel-sender: "取消了 您对 %player% 的传送请求。" +command-tp-cancel-receiver: "%player% 取消了他们的传送请求到您。" +command-world-teleport-self: "您刚刚被传送到了世界 %world%。" +command-world-teleport-other: "您刚刚将玩家 %player% 传送到了世界 %world%。" +command-random-tp-other: "你刚刚随机传送了玩家 %player% 到世界 %world%。" +command-tp: "您刚刚传送到玩家 %player%。" +command-tp-location: "您刚刚传送到 %x%, %y%, %z%。" +command-tp-location-other: "您刚刚将 %player% 传送到了 %x%, %y%, %z%。" +command-tp-all: "您刚刚将所有玩家传送到了您的位置。" +command-tp-self: "您刚刚将 %player% 传送到了您的位置。" +command-back: "返回上一个位置。" command-back-error: 您没有上一个位置。无法返回。 command-random-tp-error: 多次尝试后仍未找到安全位置,请重试。 # 首次加入 -join-message: '#99E0FF%player% &7加入了游戏' -quit-message: '#99E0FF%player% &7离开了游戏' -first-join-message: '&7欢迎 #99E0FF%player% &7来到<您的服务器名称>! &8(&f%totalUserFormat% &7注册玩家&8)' +join-message: "%player% 加入了游戏" +quit-message: "%player% 离开了游戏" +first-join-message: "欢迎 %player% 来到<您的服务器名称>! (%totalUserFormat% 注册玩家)" first-join-motd: - '' -- '#00FF00✔ #99E0FF欢迎 %player%#99E0FF !' +- "✔ 欢迎 %player% !" - '' -- '#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/' -- '&7网站&8: #99E0FFhttps://minecraft-inventory-builder.com/' +- "Discord: 加入服务器 Discord !'>https://discord.groupez.dev/" +- "网站: 打开网站 !'>https://minecraft-inventory-builder.com/" - '' join-motd: - '' -- '#99E0FF欢迎回来 %player%#99E0FF!' +- "欢迎回来 %player%!" - '' -- '#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/' -- '&7网站&8: #99E0FFhttps://minecraft-inventory-builder.com/' +- "Discord: 加入服务器 Discord !'>https://discord.groupez.dev/" +- "网站: 打开网站 !'>https://minecraft-inventory-builder.com/" - '' # 出生点 -command-set-spawn: '&f您刚刚设置了出生点位置。' +command-set-spawn: "您刚刚设置了出生点位置。" command-spawn-not-define: 出生点不存在。请联系管理员。 command-spawn-location-invalid: 出生点无效,请联系管理员 @@ -495,8 +489,8 @@ format-hour: 小时 format-hours: 小时 format-day: 天 format-days: 天 -cooldown: ✘ 您必须等待 &f%cooldown% 才能执行此操作。 -cooldown-commands: ✘ 您必须等待 &f%cooldown% 才能执行这些命令。 +cooldown: "✘ 您必须等待 %cooldown% 才能执行此操作。" +cooldown-commands: "✘ 您必须等待 %cooldown% 才能执行这些命令。" # 传送 @@ -506,91 +500,86 @@ teleport-error-location: 无法安全地传送您。 teleport-message: type: ACTION - message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' + message: "将在%seconds%秒后传送,请勿移动。" teleport-success: type: ACTION - message: '#99E0FF你已成功传送!' + message: "你已成功传送!" teleport-message-spawn: -- message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' +- message: "将在%seconds%秒后传送,请勿移动。" - type: ACTION - message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' -teleport-message-spawn-console: 你刚将玩家%player% 传送到出生点。 + message: "将在%seconds%秒后传送,请勿移动。" +teleport-message-spawn-console: "你刚将玩家%player% 传送到出生点。" teleport-success-spawn: -- message: '&7你刚刚传送到#0EEA93出生点&7!' +- message: "你刚刚传送到出生点!" - type: ACTION - message: '&7你刚刚传送到#0EEA93出生点&7!' + message: "你刚刚传送到出生点!" teleport-message-warp: -- message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' +- message: "将在%seconds%秒后传送,请勿移动。" - type: ACTION - message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' + message: "将在%seconds%秒后传送,请勿移动。" teleport-success-warp: -- message: '&7你刚刚传送到传送点#0EEA93%name%&7!' +- message: "你刚刚传送到传送点%name%!" - type: ACTION - message: '&7你刚刚传送到传送点#0EEA93%name%&7!' + message: "你刚刚传送到传送点%name%!" teleport-message-random: type: ACTION - message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' + message: "将在%seconds%秒后传送,请勿移动。" teleport-success-random: type: ACTION - message: '#99E0FF你已成功传送!' + message: "你已成功传送!" teleport-message-home: -- message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' +- message: "将在%seconds%秒后传送,请勿移动。" - type: ACTION - message: '&7将在#0EEA93%seconds%&7秒后传送,请勿移动。' + message: "将在%seconds%秒后传送,请勿移动。" teleport-success-home: -- message: '&7你刚刚传送到家#0EEA93%name%&7!' +- message: "你刚刚传送到家%name%!" - type: ACTION - message: '&7你刚刚传送到家#0EEA93%name%&7!' + message: "你刚刚传送到家%name%!" # 传送点 -command-warp-already-exist: 传送点 &f%name% 已经存在。&7使用 &n/setwarp %name% true&r 命令来修改传送点 -command-warp-doesnt-exist: 传送点 &f%name% 不存在。 -command-warp-no-permission: 你没有权限使用传送点 &f%name%。 +command-warp-already-exist: "传送点 %name% 已经存在。使用 使用此命令'>/setwarp %name% true 命令来修改传送点" +command-warp-doesnt-exist: "传送点 %name% 不存在。" +command-warp-no-permission: "你没有权限使用传送点 %name%。" command-warp-create: -- '#00ff00你刚刚创建了传送点 &f%name% #00ff00到你的位置。' -- '&7传送点权限是: permission set essentials.warp.%name%''>&f&nessentials.warp.%name%' +- "你刚刚创建了传送点 %name% 到你的位置。" +- "传送点权限是: 复制命令以向玩家添加权限'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: -- '用法&8: &f/warp <目的地>' -- '&7传送点&8:&f%destinations%' -command-warp-destination: ' &f%name%&7' -command-warp-list: '&7传送点&8:&f%destinations%' -command-warp-list-info: ' &f%name%&7' -command-warp-delete: '#00ff00你刚刚删除了传送点 &f%name%#00ff00。' -command-warp-invalid: 传送点 &f%name% 位置无效。 +- "用法: /warp <目的地>" +- "传送点:%destinations%" +command-warp-destination: " 点击传送至传送点 %name%'>%name%" +command-warp-list: "传送点:%destinations%" +command-warp-list-info: " 点击传送至传送点 %name%'>%name%" +command-warp-delete: "你刚刚删除了传送点 %name%。" +command-warp-invalid: "传送点 %name% 位置无效。" # 家 -command-set-home-invalide-name: '&f%name% 不是一个有效的名称,请选择另一个。' -command-set-home-too-long: '&f%name% 太长,请选择另一个。' -command-set-home-too-short: '&f%name% 名字太短,请选择另一个。' -command-set-home-max: 你不能拥有超过 &f%max% 个家。 +command-set-home-invalide-name: "%name% 不是一个有效的名称,请选择另一个。" +command-set-home-too-long: "%name% 太长,请选择另一个。" +command-set-home-too-short: "%name% 名字太短,请选择另一个。" +command-set-home-max: "你不能拥有超过 %max% 个家。" command-set-home-world: 你不能在这里创建家。 command-set-home-create: - '' -- '#99E0FF你刚刚创建了家 &f%name%#99E0FF。 &8(&7%current%&8/&7%max%&8)' -- '&f使用 &n/home - %name%&r 命令传送至此' +- "你刚刚创建了家 %name%。 (%current%/%max%)" +- "使用 点击传送至家'>/home %name% 命令传送至此" - '' command-set-home-create-confirm: - '' -- '#99E0FF家 &f%name%#99E0FF 已经存在。你想覆盖它吗?' -- 確認 +- "家 %name% 已经存在。你想覆盖它吗?" +- "点击覆盖家 %name%'>確認" - '' -command-home-doesnt-exist: 家 &f%name% 不存在。 +command-home-doesnt-exist: "家 %name% 不存在。" # 可用占位符: # %count% - 家的数量 # %max% - 玩家的最大家数 command-home-information-multi-line-header: - '' -- '#8cc0cc你的家 ♦ &7(%count%) &8- &7(最大: %max%)' +- "你的家 ♦ (%count%) - (最大: %max%)" # 可用占位符: # %count% - 家的数量 @@ -603,8 +592,7 @@ command-home-information-multi-line-header: # %z% - 家的位置 z command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: ' #8cc0cc♢ &f%name% &7在 %world% (%environment%) [点击]' + message: " ♢ %name% 在 %world% (%environment%) 点击传送至家 %name%'>[点击]" # 可用占位符: # %count% - 家的数量 @@ -624,114 +612,101 @@ command-home-information-multi-line-footer: # %z% - 家的位置 z command-home-information-in-line: type: WITHOUT_PREFIX - message: '#8cc0cc你的家 ♦ &7(%count%/%max%) &8:&f%homes%' -command-home-information-in-line-info: ' &f%name%&7' + message: "你的家 ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " 点击传送至家 %name%'>%name%" command-home-icon-error: 你必须手持物品才能更改家的图标。 -command-home-icon-success: '#00ff00你刚刚更改了家的图标 &f%name%#00ff00。' -command-home-icon-reset: '#00ff00你刚刚重置了家的图标 &f%name%#00ff00。' -command-home-delete: '#99E0FF你刚刚删除了家 &f%name%#99E0FF。' +command-home-icon-success: "你刚刚更改了家的图标 %name%。" +command-home-icon-reset: "你刚刚重置了家的图标 %name%。" +command-home-delete: "你刚刚删除了家 %name%。" command-home-delete-confirm: - '' -- '#99E0FF你真的想删除家 &f%name%#99E0FF。' -- 確認 +- "你真的想删除家 %name%。" +- "点击确认删除家 %name%'>確認" - '' -command-home-admin-delete: '#00ff00你刚刚删除了 &b%player% 的家 &f%name%#00ff00。' -command-home-admin-set: '#00ff00你刚刚为 &b%player% 创建了家 &f%name%#00ff00。' -command-home-admin-list: '#8cc0cc%player% 的家&8:&f%homes%' -command-home-admin-list-info: ' &f%name%&7' +command-home-admin-delete: "你刚刚删除了 %player% 的家 %name%。" +command-home-admin-set: "你刚刚为 %player% 创建了家 %name%。" +command-home-admin-list: "%player% 的家:%homes%" +command-home-admin-list-info: " 点击传送至家 %name%'>%name%" # 处罚 command-kick-notify: type: WITHOUT_PREFIX - message: '由: %sender%持续时间: %duration%原因: - %reason%日期: %created_at%''>&8(#f59e07处罚&8) #8aebeb%player% #e33414刚刚踢出了玩家 #e0d12d%target%#e33414。' + message: "由: %sender%持续时间: %duration%原因: %reason%日期: %created_at%'>(处罚) %player% 刚刚踢出了玩家 %target%。" command-ban-notify: type: WITHOUT_PREFIX - message: '由: %sender%持续时间: %duration%原因: - %reason%日期: %created_at%过期: %expired_at%''>&8(#f59e07处罚&8) #8aebeb%player% #e33414刚刚封禁了玩家 #e0d12d%target%#e33414。' + message: "由: %sender%持续时间: %duration%原因: %reason%日期: %created_at%过期: %expired_at%'>(处罚) %player% 刚刚封禁了玩家 %target%。" command-mute-notify: type: WITHOUT_PREFIX - message: '由: %sender%持续时间: %duration%原因: - %reason%日期: %created_at%过期: %expired_at%''>&8(#f59e07处罚&8) #8aebeb%player% #e33414刚刚禁言了玩家 #e0d12d%target%#e33414。' + message: "由: %sender%持续时间: %duration%原因: %reason%日期: %created_at%过期: %expired_at%'>(处罚) %player% 刚刚禁言了玩家 %target%。" command-unmute-notify: type: WITHOUT_PREFIX - message: '由: %sender%持续时间: %duration%原因: - %reason%日期: %created_at%''>&8(#f59e07处罚&8) #8aebeb%player% #e33414刚刚解除了对玩家 #e0d12d%target%#e33414的禁言。' + message: "由: %sender%持续时间: %duration%原因: %reason%日期: %created_at%'>(处罚) %player% 刚刚解除了对玩家 %target%的禁言。" command-unban-notify: type: WITHOUT_PREFIX - message: '由: %sender%持续时间: %duration%原因: - %reason%日期: %created_at%''>&8(#f59e07处罚&8) #8aebeb%player% #e33414刚刚解除了对玩家 #e0d12d%target%#e33414的封禁。' + message: "由: %sender%持续时间: %duration%原因: %reason%日期: %created_at%'>(处罚) %player% 刚刚解除了对玩家 %target%的封禁。" command-ban-error-duration: 封禁的时间必须至少为1秒。 command-mute-error-duration: 禁言的时间必须至少为1秒。 -command-un-mute-error: '&f%player% 并未被禁言。' -command-un-ban-error: '&f%player% 并未被封禁。' +command-un-mute-error: "%player% 并未被禁言。" +command-un-ban-error: "%player% 并未被封禁。" command-sanction-error: 你无法处罚该玩家。他受保护。 message-kick: - '' - 你因为以下原因被踢出服务器: - '%reason%' - '' -- '&fMinecraft-Inventory-Builder.com' +- "Minecraft-Inventory-Builder.com" - '' message-mute: - '' -- '&f你刚刚失去了发言权。' -- '&f持续时间&8: %duration%' -- '&f原因&8: #82d1ff%reason%' +- "你刚刚失去了发言权。" +- "持续时间: %duration%" +- "原因: %reason%" - '' message-unmute: - '' -- '&f你刚刚恢复了发言权,恭喜!' -- '&f原因&8: #82d1ff%reason%' +- "你刚刚恢复了发言权,恭喜!" +- "原因: %reason%" - '' message-mute-talk: - '' -- '&f你没有发言的权利。' +- "你没有发言的权利。" - '' -- '&f持续时间&8: %duration%' -- '&f原因&8: #82d1ff%reason%' +- "持续时间: %duration%" +- "原因: %reason%" - '' message-ban: - '' - 你因为以下原因被封禁: -- '&f%reason%' -- '&f持续时间&8: &7%duration%' +- "%reason%" +- "持续时间: %duration%" - '' -- '&fMinecraft-Inventory-Builder.com' +- "Minecraft-Inventory-Builder.com" - '' message-ban-join: - '' - 你在服务器上被封禁: -- '&f%reason%' -- '&f剩余时间&8: &7%remaining%' +- "%reason%" +- "剩余时间: %remaining%" - '' -- '&fMinecraft-Inventory-Builder.com' +- "Minecraft-Inventory-Builder.com" - '' message-freeze: - '' -- '&f你刚刚被冻结。' +- "你刚刚被冻结。" - '' message-un-freeze: - '' -- '&f你刚刚被解冻。' +- "你刚刚被解冻。" - '' -command-freeze-success: '&7你刚刚冻结了玩家 &f%player%&7。' -command-un-freeze_success: '&7你刚刚解冻了玩家 &f%player%&7。' +command-freeze-success: "你刚刚冻结了玩家 %player%。" +command-un-freeze_success: "你刚刚解冻了玩家 %player%。" # 聊天 chat-error: 无法让你发言,你的数据未加载。 chat-alphanumeric-regex: 你使用了一个禁止的字符。 -chat-cooldown: 请稍后再发送下一条消息。 &8(&7%cooldown%&8) +chat-cooldown: "请稍后再发送下一条消息。 (%cooldown%)" chat-same: 你不能重复相同的内容。 chat-link: 你不能在聊天中发送链接。 chat-item-forbidden-characters: 无法显示该物品,因为其名称包含禁止的字符。 @@ -739,11 +714,11 @@ chat-disable: 聊天目前不可用。 chat-caps: 你不需要大喊大叫来交谈! chat-flood: 你不能这样说话。 -chat-default-format: <白色>%displayName% <#656665>• <灰色>%message% -chat-messages-empty: '&f%player% 没有写任何消息。' +chat-default-format: "<白色>%displayName% • <灰色>%message%" +chat-messages-empty: "%player% 没有写任何消息。" chat-messages-line: type: WITHOUT_PREFIX - message: '&f%date% &7%message%' + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX message: <白色>⬅ @@ -760,55 +735,45 @@ command-chat-broadcast: # 消息 command-message-self: 你不能和自己说话。 -command-message-disable: '&f%player% 已关闭私信。' +command-message-disable: "%player% 已关闭私信。" command-message-mute: 你不允许发言。 -command-message-me: '&8(#f533f5我 - &7-> #34cfe0%target%&8) #e6e1e6' -command-message-other: '&8(#34cfe0%target% - &7-> #f533f5我&8) #e6e1e6' +command-message-me: "点击回复'>(我 -> %target%) " +command-message-other: "点击回复'>(%target% -> 我) " command-message-social-spy: type: WITHOUT_PREFIX - message: '&8(&7社交间谍&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) - #e6e1e6%message%' + message: "(社交间谍) (打开对 %sender% 的处罚'>%sender% -> 打开对 %receiver% 的处罚'>%receiver%) %message%" command-message-error: 你没有人可以回复。 -command-message-toggle-enable: '&7私信 启用 &7对于 &f%player%。' -command-message-toggle-disable: '&7私信 禁用 &7对于 &f%player%。' -command-social-spy-enable: '&7社交间谍 启用 &7对于 &f%player%。' -command-social-spy-disable: '&7社交间谍 禁用 &7对于 &f%player%。' -command-warp-empty: 没有定义传送点,使用命令 &f/setwarp <名称> -command-pay-toggle-enable: '&7支付 启用 &7对于 &f%player%。' -command-pay-toggle-disable: '&7支付 禁用 &7对于 &f%player%。' -command-power-tools-toggle-enable: 所有强力工具都已启用 &7对于 &f%player%。 -command-power-tools-toggle-disable: 所有强力工具都已禁用 &7对于 &f%player%。 +command-message-toggle-enable: "私信 启用 对于 %player%。" +command-message-toggle-disable: "私信 禁用 对于 %player%。" +command-social-spy-enable: "社交间谍 启用 对于 %player%。" +command-social-spy-disable: "社交间谍 禁用 对于 %player%。" +command-warp-empty: "没有定义传送点,使用命令 /setwarp <名称>" +command-pay-toggle-enable: "支付 启用 对于 %player%。" +command-pay-toggle-disable: "支付 禁用 对于 %player%。" +command-power-tools-toggle-enable: "所有强力工具都已启用 对于 %player%。" +command-power-tools-toggle-disable: "所有强力工具都已禁用 对于 %player%。" # 礼包 -command-kit-no-permission: 你没有权限使用礼包 &f%kit%。 -command-kit-not-found: 找不到礼包 &f%kit%。 -command-kit-already-exists: 礼包 &f%kit% 已经存在。 -command-kit-information-in-line-empty: '#8cc0cc你的礼包 ♦ &7(%count%/%max%)&8: - 没有可用的礼包' -command-kit-information-in-line: '#8cc0cc你的礼包&8:&f%kits%' -command-kit-information-in-line-info-available: ' <#1fde65>%name%&7' -command-kit-information-in-line-info-unavailable: ' %time% - 才能获取礼包 &f&n%name%''><#de1f1f>%name%&7' +command-kit-no-permission: "你没有权限使用礼包 %kit%。" +command-kit-not-found: "找不到礼包 %kit%。" +command-kit-already-exists: "礼包 %kit% 已经存在。" +command-kit-information-in-line-empty: "你的礼包 ♦ (%count%/%max%): 没有可用的礼包" +command-kit-information-in-line: "你的礼包:%kits%" +command-kit-information-in-line-info-available: " 点击获取礼包 %name%'>%name%" +command-kit-information-in-line-info-unavailable: " 你需要等待 %time% 才能获取礼包 %name%'>%name%" command-kit-information-multi-line-header: '' -command-kit-information-multi-line-content-available: <#8cc0cc>♢ <#1fde65>%name% -command-kit-information-multi-line-content-unavailable: <#8cc0cc>♢ %time% 才能获取礼包 &f&n%name%'><#de1f1f>%name% &8(&7%time%&8) +command-kit-information-multi-line-content-available: "♢ 点击获取礼包 %name%'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ 你需要等待 %time% 才能获取礼包 %name%'>%name% (%time%)" command-kit-information-multi-line-footer: '' -command-kit-editor-save: 你刚刚修改了礼包 &f%kit%。 -command-kit-create: 你刚刚创建了礼包 &f%kit%。 -command-kit-delete: 你刚刚删除了礼包 &f%kit%。 +command-kit-editor-save: "你刚刚修改了礼包 %kit%。" +command-kit-create: "你刚刚创建了礼包 %kit%。" +command-kit-delete: "你刚刚删除了礼包 %kit%。" # 冷却 -command-cooldown-header: '&f玩家冷却 %player% &8(&7%amount%&8)' -command-cooldown-empty: '&f%player% 没有冷却。' +command-cooldown-header: "玩家冷却 %player% (%amount%)" +command-cooldown-empty: "%player% 没有冷却。" # 可用占位符: # %key% - 冷却的关键 # %value% - 冷却到期时间戳 @@ -817,166 +782,152 @@ command-cooldown-empty: '&f%player% 没有冷却。' # %player% - 玩家昵称 command-cooldown-line: type: WITHOUT_PREFIX - message: '&f%key% - &7%createdAt% - %timeLeft% - - &8[刪除&8]' -command-cooldown-not-found: '&f%cooldown% 未找到。' -command-cooldown-delete: 你刚刚移除了冷却 &f%cooldown% 从 &n%player%&r。 + message: "%key% - %createdAt% - %timeLeft% - 点击移除冷却'>[刪除]" +command-cooldown-not-found: "%cooldown% 未找到。" +command-cooldown-delete: "你刚刚移除了冷却 %cooldown% 从 %player%。" # 可用占位符: # %key% - 冷却的关键 # %player% - 玩家昵称 # %duration% - 冷却持续时间 -command-cooldown-create: 你刚刚为 &n%player%&r 创建了冷却 &f%key% 。 +command-cooldown-create: "你刚刚为 %player% 创建了冷却 %key% 。" command-item-empty: 你手中没有物品。 command-item-clear: 你清除了这个物品的名称 -command-item-set: 你将持有的物品重命名为 &f%name%。 -command-item-lore-add: 你刚刚添加了行 &f%text%。 -command-item-lore-set: 你刚刚将第 %line% 行设置为 &f%text%。 +command-item-set: "你将持有的物品重命名为 %name%。" +command-item-lore-add: "你刚刚添加了行 %text%。" +command-item-lore-set: "你刚刚将第 %line% 行设置为 %text%。" command-item-lore-clear: 你刚刚清除了物品描述。 -command-item-lore-set-error: 找不到行 &f%line%。 -command-give-error: 找不到物品 &f%item%。 -command-give: 你刚刚给了 &n&fx%amount% %item%&r 给玩家 &f%player%。 -command-give-all: 你刚刚给了 &n&fx%amount% %item%&r 给所有在线玩家。 -command-give-vault: 你刚刚给了 &n&fx%amount% %item%&r 给 &f%player%的保险箱。 +command-item-lore-set-error: "找不到行 %line%。" +command-give-error: "找不到物品 %item%。" +command-give: "你刚刚给了 x%amount% %item% 给玩家 %player%。" +command-give-all: "你刚刚给了 x%amount% %item% 给所有在线玩家。" +command-give-vault: "你刚刚给了 x%amount% %item% 给 %player%的保险箱。" command-power-tool-error-item: 你手中没有物品。 command-power-tool-error-reset: 此物品没有记录的命令。 -command-power-tool-info: 你刚刚将命令 &f/%command% 放到了物品 &f%item - 上。 -command-power-tool-reset: 你刚刚删除了物品 &f%item 上的命令。 +command-power-tool-info: "你刚刚将命令 /%command% 放到了物品 %item 上。" +command-power-tool-reset: "你刚刚删除了物品 %item 上的命令。" mailbox-remove-full: 你必须在库存中有空间才能取回物品。 mailbox-remove-expire: 你不能再取回此物品,它已过期。 mailbox-add: type: ACTION - message: 一个物品刚刚被添加到你的邮箱 &8(&f/mail&8) -mailbox-give-error: 找不到物品 &f%item%。 -mailbox-give: 你刚刚给了 &n&fx%amount% %item%&r 给玩家 &f%player%的邮箱。 -mailbox-give-all: 你刚刚给了 &n&fx%amount% %item%&r 给在线玩家的邮箱。 -mailbox-give-hand: 你已将手中的物品发送到 &f%player% 的邮箱 (&fx%amount% %item%)。 -mailbox-give-all-hand: 你已将手中的物品 (&fx%amount% %item%) 发送到所有在线玩家的邮箱。 -hologram-create-error: 全息图 &f%name% 已经存在。 + message: "一个物品刚刚被添加到你的邮箱 (/mail)" +mailbox-give-error: "找不到物品 %item%。" +mailbox-give: "你刚刚给了 x%amount% %item% 给玩家 %player%的邮箱。" +mailbox-give-all: "你刚刚给了 x%amount% %item% 给在线玩家的邮箱。" +mailbox-give-hand: "你已将手中的物品发送到 %player% 的邮箱 (x%amount% %item%)。" +mailbox-give-all-hand: "你已将手中的物品 (x%amount% %item%) 发送到所有在线玩家的邮箱。" +hologram-create-error: "全息图 %name% 已经存在。" hologram-create: type: WITHOUT_PREFIX messages: - - 你刚刚创建了全息图 &f%name%。 - - '&7使用 &n/hologram %command% - %name%&r&7 命令编辑全息图' -hologram-delete: 全息图 &f%name% 已被删除。 -hologram-doesnt-exist: 全息图 &f%name% 不存在。 -hologram-is-not-a-text: 全息图 &f%name% 不是文本全息图。 -hologram-is-not-a-block: 全息图 &f%name% 不是方块全息图。 -hologram-is-not-a-item: 全息图 &f%name% 不是物品全息图。 -hologram-add-line: 你刚刚为全息图 &f%name% 添加了一行。 -hologram-set-line: 你刚刚设置了全息图 &f%name% 的第 &f%line% 行。 -hologram-insert-before-line: 你刚刚在全息图 &f%name% 的第 &f%line% 行之前添加了一行。 -hologram-insert-after-line: 你刚刚在全息图 &f%name% 的第 &f%line% 行之后添加了一行。 -hologram-line-doesnt-exist: 全息图 &f%name% 的第 &f%line% 行不存在。 -hologram-remove-line: 你刚刚移除了全息图 &f%name% 的第 &f%line% 行。 -hologram-scale: 你刚刚将全息图 &f%name% 的缩放设置为 &7%x%&8, &7%y%&8, &7%z%。 -hologram-translation: 你刚刚将全息图 &f%name% 的平移设置为 &7%x%&8, &7%y%&8, &7%z%。 -hologram-move-here: 你刚刚将全息图 &f%name% 移动到你的位置。 -hologram-move-to: 你刚刚将全息图 &f%name% 移动到 &7%x%&8, &7%y%&8, &7%z%。 -hologram-billboard: 你刚刚将全息图 &f%name% 的广告牌设置为 &f%billboard%。 -hologram-text-alignment: 你刚刚将全息图 &f%name% 的文本对齐方式设置为 &f%textAlignment%。 -hologram-yaw: 你刚刚将全息图 &f%name% 的偏航角设置为 &f%yaw%。 -hologram-pitch: 你刚刚将全息图 &f%name% 的俯仰角设置为 &f%pitch%。 -hologram-text-background: 你刚刚将全息图 &f%name% 的背景颜色设置为 &f%color%。 + - "你刚刚创建了全息图 %name%。" + - "使用 /hologram %command% %name% 命令编辑全息图" +hologram-delete: "全息图 %name% 已被删除。" +hologram-doesnt-exist: "全息图 %name% 不存在。" +hologram-is-not-a-text: "全息图 %name% 不是文本全息图。" +hologram-is-not-a-block: "全息图 %name% 不是方块全息图。" +hologram-is-not-a-item: "全息图 %name% 不是物品全息图。" +hologram-add-line: "你刚刚为全息图 %name% 添加了一行。" +hologram-set-line: "你刚刚设置了全息图 %name% 的第 %line% 行。" +hologram-insert-before-line: "你刚刚在全息图 %name% 的第 %line% 行之前添加了一行。" +hologram-insert-after-line: "你刚刚在全息图 %name% 的第 %line% 行之后添加了一行。" +hologram-line-doesnt-exist: "全息图 %name% 的第 %line% 行不存在。" +hologram-remove-line: "你刚刚移除了全息图 %name% 的第 %line% 行。" +hologram-scale: "你刚刚将全息图 %name% 的缩放设置为 %x%, %y%, %z%。" +hologram-translation: "你刚刚将全息图 %name% 的平移设置为 %x%, %y%, %z%。" +hologram-move-here: "你刚刚将全息图 %name% 移动到你的位置。" +hologram-move-to: "你刚刚将全息图 %name% 移动到 %x%, %y%, %z%。" +hologram-billboard: "你刚刚将全息图 %name% 的广告牌设置为 %billboard%。" +hologram-text-alignment: "你刚刚将全息图 %name% 的文本对齐方式设置为 %textAlignment%。" +hologram-yaw: "你刚刚将全息图 %name% 的偏航角设置为 %yaw%。" +hologram-pitch: "你刚刚将全息图 %name% 的俯仰角设置为 %pitch%。" +hologram-text-background: "你刚刚将全息图 %name% 的背景颜色设置为 %color%。" hologram-text-background-error: 无法解析背景颜色。 -hologram-text-shadow: 你将文本阴影设置为 &f%textshadow% 对于全息图 &f%name%。 -hologram-see-through: 你将透视设置为 &f%seethrough% 对于全息图 &f%name%。 -hologram-shadow-strength: 你将阴影强度设置为 &f%shadow% 对于全息图 &f%name%。 -hologram-shadow-radius: 你将阴影半径设置为 &f%shadow% 对于全息图 &f%name%。 -hologram-view-distance: 你将视距设置为 &f%distance% 对于全息图 &f%name%。 -hologram-list-empty: 没有全息图,要创建一个请使用命令 &f/holo create <名称> +hologram-text-shadow: "你将文本阴影设置为 %textshadow% 对于全息图 %name%。" +hologram-see-through: "你将透视设置为 %seethrough% 对于全息图 %name%。" +hologram-shadow-strength: "你将阴影强度设置为 %shadow% 对于全息图 %name%。" +hologram-shadow-radius: "你将阴影半径设置为 %shadow% 对于全息图 %name%。" +hologram-view-distance: "你将视距设置为 %distance% 对于全息图 %name%。" +hologram-list-empty: "没有全息图,要创建一个请使用命令 /holo create <名称>" hologram-list: type: WITHOUT_PREFIX - message: '&f%name% &8- &7%world%: %x%, %y%, %z% &8- 传送到 点击删除此全息图''>删除' + message: "%name% - %world%: %x%, %y%, %z% - 点击传送至该全息图'>传送到 点击删除此全息图'>删除" hologram-item-error: 不能为此全息图使用空气。 -hologram-item: 你刚刚修改了全息图 &f%name% 的物品。 -hologram-block: 你刚刚将全息图 &f%name% 的方块修改为 &f%material%。 +hologram-item: "你刚刚修改了全息图 %name% 的物品。" +hologram-block: "你刚刚将全息图 %name% 的方块修改为 %material%。" scoreboard-disable: 你刚刚禁用了记分板。 scoreboard-enable: 你刚刚启用了记分板。 -command-baltop-error: 找不到经济系统 &f%name%。 +command-baltop-error: "找不到经济系统 %name%。" command-baltop-header: type: WITHOUT_PREFIX - message: '#00f986最多金钱 &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶' + message: "最多金钱 (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: '#00f986#%position% &f%name%&8: %amount%' -command-voteparty-set: 你刚刚将投票派对设置为 &f%amount% 票。 -command-voteparty-add: 你刚刚向投票派对添加了 &f%amount% 票。 -command-voteparty-remove: 你刚刚从投票派对中移除了 &f%amount% 票。 -command-voteparty-informations: '投票派对: %amount%/%objective%' -command-vote-add: 你刚刚为 &f%player% 添加了一票。 -command-vote-add-error: 站点 &f%site% 不存在! + message: "#%position% %name%: %amount%" +command-voteparty-set: "你刚刚将投票派对设置为 %amount% 票。" +command-voteparty-add: "你刚刚向投票派对添加了 %amount% 票。" +command-voteparty-remove: "你刚刚从投票派对中移除了 %amount% 票。" +command-voteparty-informations: "投票派对: %amount%/%objective%" +command-vote-add: "你刚刚为 %player% 添加了一票。" +command-vote-add-error: "站点 %site% 不存在!" command-vote: type: ACTION message: 你刚刚投票并收到了投票钥匙。 vote-offline: - '' -- 你在离线时投票了 %amount% 次 ,使用命令 /mailbox - 来获取奖励! +- "你在离线时投票了 %amount% 次 ,使用命令 /mailbox 来获取奖励!" - '' vault-lore: - '' -- '&f信息' -- ' #f8b175• &7数量&8: &e%quantity%' +- "信息" +- " • 数量: %quantity%" - '' -- '&f➥ #fc99f8左键点击 &7以取出 1 个' -- '&f➥ #fc99f8右键点击 &7以取出 64 个' -- '&f➥ #fc99f8潜行+右键点击 &7以全部取出' -command-vault-not-found: 找不到金库 &f%vaultId%。 +- "➥ 左键点击 以取出 1 个" +- "➥ 右键点击 以取出 64 个" +- "➥ 潜行+右键点击 以全部取出" +command-vault-not-found: "找不到金库 %vaultId%。" command-vault-no-permission: 你没有权限查看金库。 -command-vault-set-slot: 你刚刚将 &f%player% 的槽位数设置为 &7%slots% - 个槽位。 -command-vault-add-slot: 你刚刚为 &f%player% 增加了 &7%amount% 个槽位。 +command-vault-set-slot: "你刚刚将 %player% 的槽位数设置为 %slots% 个槽位。" +command-vault-add-slot: "你刚刚为 %player% 增加了 %amount% 个槽位。" command-vault-change-icon-error: 你手中持有物品。 command-vault-change-icon-success: 你刚刚更改了金库图标。 command-vault-reset-icon: 你刚刚重置了金库图标。 command-vault-rename-start: 请在聊天中输入新的金库名称。 -command-vault-rename-success: 你刚刚将金库名称设置为 &f%name%。 +command-vault-rename-success: "你刚刚将金库名称设置为 %name%。" command-vault-rename-error: 你不能使用这个名字作为金库名称。 command-vault-rename-reset: 你刚刚重置了金库名称。 command-enchant-invalid: 你需要指定一个有效的玩家。 -command-enchant-error-enchant: 无法找到附魔 &f%name%。 +command-enchant-error-enchant: "无法找到附魔 %enchant%。" command-enchant-error-item-self: 你必须手持一个物品。 command-enchant-error-item-player: %player% 手中没有物品。 -command-enchant-remove-self: 附魔 &f%enchant% 已经从你手中的物品上移除。 -command-enchant-remove-player: 附魔 &f%enchant% 已经从 &f%player%’s - 手中的物品上移除。 -command-enchant-success-self: 附魔 &f%enchant% 已经被应用到你手中的物品上。 -command-enchant-success-player: 附魔 &f%enchant% 已经被应用到 &f%player%’s - 手中的物品上。 +command-enchant-remove-self: "附魔 %enchant% 已经从你手中的物品上移除。" +command-enchant-remove-player: "附魔 %enchant% 已经从 %player%’s 手中的物品上移除。" +command-enchant-success-self: "附魔 %enchant% 已经被应用到你手中的物品上。" +command-enchant-success-player: "附魔 %enchant% 已经被应用到 %player%’s 手中的物品上。" command-sudo-error: 你不能强制玩家执行命令。 -command-sudo-command: 你刚刚强迫玩家 %player% 执行命令 /%command%。 -command-sudo-message: 你刚刚强迫玩家 %player% 发送消息 %message%。 +command-sudo-command: "你刚刚强迫玩家 %player% 执行命令 /%command%。" +command-sudo-message: "你刚刚强迫玩家 %player% 发送消息 %message%。" # WorldEdit -command-worldedit-give-error: 无法找到物品 &f%name% -command-worldedit-give-sender: 你刚刚给了 &f%item% 给玩家 &f%player%。 -command-worldedit-give-receiver: 你刚刚收到了 &f%item%。 -command-worldedit-material-not-found: 无法找到材料 &f%material%。 +command-worldedit-give-error: "无法找到物品 %name%" +command-worldedit-give-sender: "你刚刚给了 %item% 给玩家 %player%。" +command-worldedit-give-receiver: "你刚刚收到了 %item%。" +command-worldedit-material-not-found: "无法找到材料 %material%。" command-worldedit-confirm-price: - '' -- '价格: %price%' -- 方块:%materials% -- '持续时间: %duration% (%blocks% 方块以 %speed% - 方块/秒)' +- "价格: %price%" +- "方块:%materials%" +- "持续时间: %duration% (%blocks% 方块以 %speed% 方块/秒)" - '' -- <#45ff55>点击这里确认 +- "点击确认操作'>点击这里确认" command-worldedit-confirm-price-cut: - '' -- '价格: %price%' -- '持续时间: %duration% (%blocks% 方块以 %speed% - 方块/秒)' +- "价格: %price%" +- "持续时间: %duration% (%blocks% 方块以 %speed% 方块/秒)" - '' -- <#45ff55>点击这里确认 -command-worldedit-confirm-material: ' 数量: - %amount%总价: %price%单价: - %price-per-block%''>' +- "点击确认操作'>点击这里确认" +command-worldedit-confirm-material: " 数量: %amount%总价: %price%单价: %price-per-block%'>" command-worldedit-confirm-error: 你现在不能这么做。 command-worldedit-stop-empty: 你没有活跃的会话。 command-worldedit-stop-error: 你现在不能停止编辑。 @@ -992,33 +943,31 @@ worldedit-not-enough-money: 你没有足够的钱来进行这次会话。 worldedit-not-enough-items: 你的库存中没有足够的物品,你不能这么做。 worldedit-selection-pos1: 你刚刚定义了第一个位置。 worldedit-selection-pos2: 你刚刚定义了第二个位置。 -worldedit-selection-volume: 你一次不能改变超过 &f%blocks% 个方块。 -worldedit-selection-distance: 你选择的两点之间的距离太大。 (最大 %distance% - 个方块) -worldedit-start-calculate-price: '&7正在计算价格,请稍候...' -worldedit-start-check-inventory: '&7正在检查你的库存是否足够,请稍候...' -worldedit-start-running: '&7当前会话启动中,请稍候...' +worldedit-selection-volume: "你一次不能改变超过 %blocks% 个方块。" +worldedit-selection-distance: "你选择的两点之间的距离太大。 (最大 %distance% 个方块)" +worldedit-start-calculate-price: "正在计算价格,请稍候..." +worldedit-start-check-inventory: "正在检查你的库存是否足够,请稍候..." +worldedit-start-running: "当前会话启动中,请稍候..." worldedit-finish: 会话完成! worldedit-refund: - 你已经得到了退款 - '' -- '价格: %price%' -- 方块:%materials% -worldedit-refund-material: ' 数量: %amount%总价: - %price%单价: %price-per-block%''>' +- "价格: %price%" +- "方块:%materials%" +worldedit-refund-material: " 数量: %amount%总价: %price%单价: %price-per-block%'>" worldedit-refund-empty: ' 没有可以退款的方块' -worldedit-bossbar: '#45ff45剩余时间: %time%' +worldedit-bossbar: "剩余时间: %time%" worldedit-speed-error: 你没有权限设置每秒方块数。 -experience-granted: 你刚刚给了 %amount% %type% 给 %player%。 -experience-setted: 你刚刚设置了 %amount% %type% 给 %player%。 -experience-queried: %player% 拥有 %amount% %type%。 +experience-granted: "你刚刚给了 %amount% %type% 给 %player%。" +experience-setted: "你刚刚设置了 %amount% %type% 给 %player%。" +experience-queried: "%player% 拥有 %amount% %type%。" command-clearinventory-success: 您已经清空了自己的物品栏。 -command-clearinventory-success-other: 您已经清空了&f%player%的物品栏。 +command-clearinventory-success-other: "您已经清空了%player%的物品栏。" # Discord command-link-account-already-linked: 您的账号已经绑定。 command-link-account-invalid-code: 无效的验证码。 -command-link-account-success: 您刚刚绑定了您的账号%discord%。 +command-link-account-success: "您刚刚绑定了您的账号%discord%。" command-link-account-disabled: 您当前无法绑定账号。 command-link-account-not-linked: 您的账号未绑定。 command-link-account-reset: 您刚刚重置了您的账号绑定。 @@ -1026,26 +975,26 @@ random-word-clear: 随机词汇已被清除。 # 补充翻译 -command-fly-remaining: "你还有 &f%time% 的飞行时间。" +command-fly-remaining: "你还有 %time% 的飞行时间。" command-home-admin-list-empty: "该玩家没有设置家。" command-home-error-teleport: "无法找到传送位置,请删除你的家。" -command-kit-delete-error: "无法删除套装 &f%kit%。" -command-kit-give: "你刚刚将套装 &f%kit%给予 %player%。" +command-kit-delete-error: "无法删除套装 %kit%。" +command-kit-give: "你刚刚将套装 %kit%给予 %player%。" command-pay-disabled: "你不能向该玩家汇款。" -command-phantoms-disable: "&7幻翼生成 已为 &f%player%关闭。" -command-phantoms-enable: "&7幻翼生成 已为 &f%player%开启。" +command-phantoms-disable: "幻翼生成 已为 %player%关闭。" +command-phantoms-enable: "幻翼生成 已为 %player%开启。" command-pub: - message: "&8[&fPUB&8] %player%: %message%" + message: "[PUB] %player%: %message%" type: WITHOUT_PREFIX command-pub-pattern-error: "你的消息包含禁止的字符。" -command-random-tp-configuration-not-found: "找不到世界 &f%world% 的随机传送配置。" +command-random-tp-configuration-not-found: "找不到世界 %world% 的随机传送配置。" command-spawn-first-not-define: "首次出生点不存在,请联系管理员。" command-tp-location-error: "坐标超出世界范围。" -command-vault-delete-slot-empty: "在保管箱 &f%vault% 的槽位 &f%slot% 中找不到玩家 &f%player%。" -command-vault-get-slot-empty: "在保管箱 &f%vault% 的槽位 &f%slot% 中找不到玩家 &f%player% 的物品。" -command-vault-get-slot-success: "&f%player% 的保险库槽位:保险库 &7%vault%,槽位 &7%slot%,数量 &7%amount%,物品 &f%item%。" -command-vault-delete-slot-success: "你已为 &f%player% 从保险库 &7%vault% 中删除了槽位 &7%slot%。" -command-vault-info: "玩家 &f%player% 的保管箱信息: 最大 &7%max%,权限槽位 &7%permissionSlots%,插件槽位 &7%pluginSlots%,已用 &7%used%,可用 &7%available%。" +command-vault-delete-slot-empty: "在保管箱 %vault% 的槽位 %slot% 中找不到玩家 %player%。" +command-vault-get-slot-empty: "在保管箱 %vault% 的槽位 %slot% 中找不到玩家 %player% 的物品。" +command-vault-get-slot-success: "%player% 的保险库槽位:保险库 %vault%,槽位 %slot%,数量 %amount%,物品 %item%。" +command-vault-delete-slot-success: "你已为 %player% 从保险库 %vault% 中删除了槽位 %slot%。" +command-vault-info: "玩家 %player% 的保管箱信息: 最大 %max%,权限槽位 %permissionSlots%,插件槽位 %pluginSlots%,已用 %used%,可用 %available%。" command-worldedit-cancel: "你刚刚取消了当前的选择。" description-cooldown-show: 显示玩家的冷却时间 description-experience-take: 扣除玩家的经验 @@ -1064,58 +1013,58 @@ description-vault-get-slot: 获取保管箱槽位内容 description-vault-info: 显示玩家保管箱的信息 description-vault-show: 显示玩家的保管箱 description-worldedit-cancel: 取消当前选择 -experience-taken: "你刚刚从 %player% 处扣除了 %amount% %type%。" -mailbox-clear: "你刚刚清空了 &f%player% 的信箱。" +experience-taken: "你刚刚从 %player% 处扣除了 %amount% %type%。" +mailbox-clear: "你刚刚清空了 %player% 的信箱。" -mailbox-message-send: "你的邮件已发送给 &f%player%。" -mailbox-message-receive: "&f%player% 给你发送了一封邮件 &8(&f/mail read&8)" -mailbox-message-send-all: "你的邮件已发送给 &f%amount% 名玩家。" -mailbox-message-notify: "你有 &f%amount% 封未读邮件,请使用 &f/mail read。" +mailbox-message-send: "你的邮件已发送给 %player%。" +mailbox-message-receive: "%player% 给你发送了一封邮件 (/mail read)" +mailbox-message-send-all: "你的邮件已发送给 %amount% 名玩家。" +mailbox-message-notify: "你有 %amount% 封未读邮件,请使用 点击阅读你的邮件'>/mail read。" mailbox-message-empty: "你没有任何邮件。" mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "你的邮件 (&f%amount%)" + - "你的邮件 (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "使用 &f/mail clearmessages 来删除它们。" + - "使用 点击删除你的邮件'>/mail clearmessages 来删除它们。" - "" -mailbox-message-clear: "你刚刚删除了 &f%player% 的邮件。" +mailbox-message-clear: "你刚刚删除了 %player% 的邮件。" mailbox-message-self: "你不能给自己发送邮件。" mailbox-message-mute: "你被禁言时无法发送邮件。" -mailbox-message-ignore: "&f%player% 不想收到你的邮件。" -mailbox-message-full: "&f%player% 的邮箱已满。" -mailbox-message-too-long: "你的邮件不能超过 &f%max% 个字符。" -step-already-exist: "步骤 &f%step% 已经开始。" -step-doesnt-exist: "步骤 &f%step% 不存在。" -step-doesnt-started: "步骤 &f%step% 尚未开始。" -teleport-random-start: "&7正在寻找目的地……请不要移动。" +mailbox-message-ignore: "%player% 不想收到你的邮件。" +mailbox-message-full: "%player% 的邮箱已满。" +mailbox-message-too-long: "你的邮件不能超过 %max% 个字符。" +step-already-exist: "步骤 %step% 已经开始。" +step-doesnt-exist: "步骤 %step% 不存在。" +step-doesnt-started: "步骤 %step% 尚未开始。" +teleport-random-start: "正在寻找目的地……请不要移动。" worldedit-permission-error: "你不能在这里使用 WorldEdit。" # 忽略、提示音与传送到其他玩家 -command-tp-other: "&7您刚刚将 #34cfe0%player% &7传送到了 #34cfe0%target%&7。" +command-tp-other: "您刚刚将 %player% 传送到了 %target%。" description-ping-sound: "切换聊天提及提示音" -command-ping-sound-enable: "&7聊天提及提示音 启用 &7给 &f%player%。" -command-ping-sound-disable: "&7聊天提及提示音 禁用 &7给 &f%player%。" +command-ping-sound-enable: "聊天提及提示音 启用 给 %player%。" +command-ping-sound-disable: "聊天提及提示音 禁用 给 %player%。" description-ignore: "忽略一名玩家,屏蔽他们的私信和传送请求" description-unignore: "停止忽略一名玩家" description-ignore-list: "显示您正在忽略的玩家列表" -command-ignore-add: "您现在正在忽略 &f%player%。您将不再收到他们的私信或传送请求。" -command-ignore-remove: "您不再忽略 &f%player%。" -command-ignore-already: "您已经在忽略 &f%player%。" -command-ignore-not: "您没有在忽略 &f%player%。" +command-ignore-add: "您现在正在忽略 %player%。您将不再收到他们的私信或传送请求。" +command-ignore-remove: "您不再忽略 %player%。" +command-ignore-already: "您已经在忽略 %player%。" +command-ignore-not: "您没有在忽略 %player%。" command-ignore-self: "您不能忽略自己。" command-ignore-list-empty: "您没有在忽略任何人。" -command-ignore-list-header: "您正在忽略 &f%count% 名玩家:" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "您不能向 #34cfe0%player% 发送私信,他们正在忽略您。" +command-ignore-list-header: "您正在忽略 %count% 名玩家:" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "您不能向 %player% 发送私信,他们正在忽略您。" description-del-home-other: "删除另一名玩家的一个家" # 家系统(公开、分享、类别、收藏、预览、导入) @@ -1128,29 +1077,29 @@ description-home-category: "设置一个家的类别" description-home-favorite: "将一个家切换为收藏" description-home-import: "从另一个插件导入家" command-home-feature-disabled: "此家功能在本服务器上已禁用。" -command-home-public-enable: "您的家 &f%name% 现在是公开的。" -command-home-public-disable: "您的家 &f%name% 不再是公开的。" -command-home-public-limit: "您已达到公开家的最大数量 (&f%max%)。" -command-home-not-accessible: "玩家 &f%player% 的家 &f%name% 您无法访问。" -command-public-homes-header: "公开的家 (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[传送]" +command-home-public-enable: "您的家 %name% 现在是公开的。" +command-home-public-disable: "您的家 %name% 不再是公开的。" +command-home-public-limit: "您已达到公开家的最大数量 (%max%)。" +command-home-not-accessible: "玩家 %player% 的家 %name% 您无法访问。" +command-public-homes-header: "公开的家 (%count%):" +command-public-homes-line: "- %player%:%name% 传送到此家'>[传送]" command-public-homes-empty: "没有公开的家。" -command-home-share-add: "您已将您的家 &f%name% 分享给 &f%player%。" -command-home-share-remove: "您已停止将您的家 &f%name% 分享给 &f%player%。" -command-home-share-already: "您的家 &f%name% 已经分享给 &f%player% 了。" -command-home-share-not: "您的家 &f%name% 没有分享给 &f%player%。" +command-home-share-add: "您已将您的家 %name% 分享给 %player%。" +command-home-share-remove: "您已停止将您的家 %name% 分享给 %player%。" +command-home-share-already: "您的家 %name% 已经分享给 %player% 了。" +command-home-share-not: "您的家 %name% 没有分享给 %player%。" command-home-share-self: "您不能将家分享给自己。" -command-home-share-limit: "您已达到此家的最大分享数量 (&f%max%)。" -command-home-share-list-header: "家 &f%name% 已分享给 &f%count% 名玩家:" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "家 &f%name% 没有分享给任何人。" -command-home-category-set: "您的家 &f%name% 的类别现在是 &f%category%。" -command-home-category-reset: "您的家 &f%name% 的类别已被移除。" +command-home-share-limit: "您已达到此家的最大分享数量 (%max%)。" +command-home-share-list-header: "家 %name% 已分享给 %count% 名玩家:" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "家 %name% 没有分享给任何人。" +command-home-category-set: "您的家 %name% 的类别现在是 %category%。" +command-home-category-reset: "您的家 %name% 的类别已被移除。" command-home-category-invalid: "无效的类别名称。" -command-home-favorite-add: "您的家 &f%name% 现在已被收藏。" -command-home-favorite-remove: "您的家 &f%name% 已不再被收藏。" -command-home-preview: "&7家 &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[传送]" -command-home-import-start: "正在从 &f%source% 导入家……" -command-home-import-done: "导入完成:&f%imported% 个已导入,&f%skipped% 个已跳过,&f%errors% 个错误。" -command-home-import-unknown: "未知的导入来源 &f%source%。可用:essentialsx。" +command-home-favorite-add: "您的家 %name% 现在已被收藏。" +command-home-favorite-remove: "您的家 %name% 已不再被收藏。" +command-home-preview: "家 %name% - %world% (%x%, %y%, %z%) [传送]" +command-home-import-start: "正在从 %source% 导入家……" +command-home-import-done: "导入完成:%imported% 个已导入,%skipped% 个已跳过,%errors% 个错误。" +command-home-import-unknown: "未知的导入来源 %source%。可用:essentialsx。" command-home-import-error: "导入过程中发生错误,请检查控制台。" diff --git a/src/main/resources/messages/messages.yml b/src/main/resources/messages/messages.yml index dff0c33c..880d6add 100644 --- a/src/main/resources/messages/messages.yml +++ b/src/main/resources/messages/messages.yml @@ -19,181 +19,181 @@ prefix: "zEssentials • " you: "you" -trash: "&8Trash" +trash: "Trash" console: "Console" expired: "Expired" -player-not-found: "&f%player% was not found." -module-disable: "The &f%name% module is disabled. You cannot use this command." -code-not-found: "Cannot find the code." +player-not-found: "%player% was not found." +module-disable: "The %name% module is disabled. You cannot use this command." +code-not-found: "Cannot find the code." rules: - - "#ffd353ℹ sᴇʀᴠᴇʀ ʀᴜʟᴇs#3f3f3f:" - - "#3f3f3f• &7Respect all players and staff." - - "#3f3f3f• &7No griefing or stealing." - - "#3f3f3f• &7No cheating or hacking." - - "#3f3f3f• &7Keep chat clean and respectful." - - "#3f3f3f• &7No spamming or advertising." + - "ℹ sᴇʀᴠᴇʀ ʀᴜʟᴇs:" + - "• Respect all players and staff." + - "• No griefing or stealing." + - "• No cheating or hacking." + - "• Keep chat clean and respectful." + - "• No spamming or advertising." # Commands -command-syntax-error: "You must execute the command like this#656665: &f%syntax%" +command-syntax-error: "You must execute the command like this: %syntax%" command-no-permission: "You do not have permission to run this command." command-no-console: "Only one player can execute this command." command-no-arg: "Impossible to find the command with its arguments." command-restricted: "You cannot use this command here." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "You have just reloaded the configuration files." -command-reload-module: "You have just reloaded the configuration files of the module &f%module%." -command-reload-error: "&f%module% was not found!" -command-essentials: "&ezEssentials&8, &eVersion &f%version%" +command-reload-module: "You have just reloaded the configuration files of the module %module%." +command-reload-error: "%module% was not found!" +command-essentials: "zEssentials, Version %version%" # GameMode commands -command-gamemode: "&fSet game mode&e %gamemode%&f for &b%player%&f." +command-gamemode: "Set game mode %gamemode% for %player%." command-gamemode-invalid: "You need to specify a valid player." # Weather commands command-time-error: "You need to specify a world." -command-time-already-changing: "Time is already changing in &f%world%." -command-day: "&fYou have just brought &edaylight&f into the world %world%&f." -command-night: "&fYou have just brought &enightfall&f into the world %world%&f." -command-sun: "&fYou have just brought the &esun&f into the world %world%&f." +command-time-already-changing: "Time is already changing in %world%." +command-day: "You have just brought daylight into the world %world%." +command-night: "You have just brought nightfall into the world %world%." +command-sun: "You have just brought the sun into the world %world%." # Admins commands -command-top: "&7You've just been teleported to &etop&7." +command-top: "You've just been teleported to top." command-top-error: "Unable to find a position to transport you safely." command-speed-invalid: "You need to specify a valid player." -command-speed-fly: "&7You have just set your &nfly&r&7 speed to &f%speed%&7 for &f%player%&7. &8(&f2 &7by default&8)" -command-speed-walk: "&7You have just set your &nwalk&r&7 speed to &f%speed%&7 for &f%player%&7. &8(&f2 &7by default&8)" -command-speed-error: "You must enter a number between &60 and &610. &8(&f2 &7by default&8)" -command-god-enable: "&7God mode enable &7for &f%player%." -command-god-disable: "&7God mode disable &7for &f%player%." -command-vanish-enable: "&7Vanish enable &7for &f%player%." -command-vanish-disable: "&7Vanish disable &7for &f%player%." -command-night-vision-enable: "&7Night vision enable &7for &f%player%." -command-night-vision-disable: "&7Night vision disable &7for &f%player%." -command-phantoms-enable: "&7Phantom spawning enable &7for &f%player%." -command-phantoms-disable: "&7Phantom spawning disable &7for &f%player%." -command-ext-sender: "&7You just extinguished the player &f%player%&7." +command-speed-fly: "You have just set your fly speed to %speed% for %player%. (2 by default)" +command-speed-walk: "You have just set your walk speed to %speed% for %player%. (2 by default)" +command-speed-error: "You must enter a number between 0 and 10. (2 by default)" +command-god-enable: "God mode enable for %player%." +command-god-disable: "God mode disable for %player%." +command-vanish-enable: "Vanish enable for %player%." +command-vanish-disable: "Vanish disable for %player%." +command-night-vision-enable: "Night vision enable for %player%." +command-night-vision-disable: "Night vision disable for %player%." +command-phantoms-enable: "Phantom spawning enable for %player%." +command-phantoms-disable: "Phantom spawning disable for %player%." +command-ext-sender: "You just extinguished the player %player%." command-ext-receiver: "You are no longer burning." command-ext-error: "You cannot extinguish someone who is dead!" -command-heal-all: "&7You just healed all players on the server." -command-heal-sender: "&7You just healed the player &f%player%&7." +command-heal-all: "You just healed all players on the server." +command-heal-sender: "You just healed the player %player%." command-heal-receiver: "You have been healed." command-heal-error: "You cannot heal someone who is dead!" -command-lighting-all: "&7You just struck all players with lightning." -command-lighting: "&7You just summoned lightning at the targeted location." -command-lighting-sender: "&7You just summoned lightning at the location of &f%player%&7." -command-lighting-receiver: "&cYou have been struck by lightning." +command-lighting-all: "You just struck all players with lightning." +command-lighting: "You just summoned lightning at the targeted location." +command-lighting-sender: "You just summoned lightning at the location of %player%." +command-lighting-receiver: "You have been struck by lightning." command-lighting-error: "You cannot strike a dead player with lightning!" command-more-error: "You cannot make this order in item in hand." -command-more-success: "&7You just put your item to &f64&7." -command-feed-all: "&7You just feed all players on the server." -command-feed-sender: "&7You just feed the player &f%player%&7." +command-more-success: "You just put your item to 64." +command-feed-all: "You just feed all players on the server." +command-feed-sender: "You just feed the player %player%." command-feed-receiver: "You have been feed." command-feed-error: "You cannot feed someone who is dead !" -command-afk-enable: "&7You are now marked as AFK&7." +command-afk-enable: "You are now marked as AFK." command-afk-disable: "You are no longer marked as AFK." -command-message-target-afk: "&f%player% &7is currently AFK&7." -command-compact-type: "Impossible to compact the material &f%material%." -command-compact-error: "You have no &f%item% in your inventory." -command-compact-success: "&7You have just transformed #0EEA93x%amount% #99E0FF%item% &7into #0EEA93x%toAmount% #99E0FF%toItem%&7." -command-compact-success-all: "&7You just converted all your items." -command-hat-success: "&7You just put #0ef0ce%item% &7on your head." +command-message-target-afk: "%player% is currently AFK." +command-compact-type: "Impossible to compact the material %material%." +command-compact-error: "You have no %item% in your inventory." +command-compact-success: "You have just transformed x%amount% %item% into x%toAmount% %toItem%." +command-compact-success-all: "You just converted all your items." +command-hat-success: "You just put %item% on your head." command-hat-error: "You cannot put air on your head." -command-player-weather-reset: "&7You just changed the weather to that of the server." -command-player-weather-downfall: "&7You just put the rain on for yourself." -command-player-time-reset: "&7You just changed the time to that of the server." -command-player-time-change: "&7You’re here to change your time." -command-lag-world-line: "&a%world%&7: &a%peaceful% peaceful&7, &c%monsters% monsters&7, &e%items% items" -command-lag-world-header: "&aEntities for world &2%world%&a:" -command-lag-world-entry: "&7- &a%type%&7: &f%amount%" -command-lag-clear-success: "&7Removed &a%amount% &7entities in &a%world%&7." -command-lag-clear-countdown: "&cEntity removal in &e%time% &cseconds!" -command-fly-enable: "&7Flight mode enable &7for &f%player%." -command-fly-disable: "&7Flight mode disable &7for &f%player%." +command-player-weather-reset: "You just changed the weather to that of the server." +command-player-weather-downfall: "You just put the rain on for yourself." +command-player-time-reset: "You just changed the time to that of the server." +command-player-time-change: "You’re here to change your time." +command-lag-world-line: "%world%: %peaceful% peaceful, %monsters% monsters, %items% items" +command-lag-world-header: "Entities for world %world%:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "Removed %amount% entities in %world%." +command-lag-clear-countdown: "Entity removal in %time% seconds!" +command-fly-enable: "Flight mode enable for %player%." +command-fly-disable: "Flight mode disable for %player%." command-fly-error-world: "You can’t fly in this world." -command-fly-enable-seconds: "&7Flight mode enable &7for &f%player%. &8(&7time remaining %time%&8)" +command-fly-enable-seconds: "Flight mode enable for %player%. (time remaining %time%)" command-fly-error: "You have no more fly time available." command-fly-end: "You have used up your entire flight time, you can no longer fly." command-fly-error-other: "%player% has no more flight time available." -command-fly-add: "You just added %time% of fly time to &f%player%." -command-fly-get: "%player%&8: &f%player%." +command-fly-add: "You just added %time% of fly time to %player%." +command-fly-get: "%player%: %player%." command-fly-info-empty: "You do not have time to fly available." -command-fly-info: "You have &f%time%." -command-fly-remove: "You just removed %time% of fly time to &f%player%." -command-fly-set: "You just set %time% of fly time to &f%player%." -command-fly-remaining: "You have &f%time% remaining flight time." -command-furnace-type: "Impossible to smelt the material &f%material%." -command-furnace-error: "You have no &f%item% in your inventory." -command-furnace-success: "&7You have just transformed #0EEA93x%amount% #34cfe0%item% &7into #0EEA93x%toAmount% #34cfe0%toItem%&7." -command-skull: "You just got the player’s head &f%name%." +command-fly-info: "You have %time%." +command-fly-remove: "You just removed %time% of fly time to %player%." +command-fly-set: "You just set %time% of fly time to %player%." +command-fly-remaining: "You have %time% remaining flight time." +command-furnace-type: "Impossible to smelt the material %material%." +command-furnace-error: "You have no %item% in your inventory." +command-furnace-success: "You have just transformed x%amount% %item% into x%toAmount% %toItem%." +command-skull: "You just got the player’s head %name%." command-repair-error: "The item in your hand cannot be repaired." command-repair-success: "You just fixed the item in your hand." command-repair-all-error: "You have no items to repair." command-repair-all-success: "You have just repaired all the items in your inventory." command-near-empty: "No player near to you." -command-near-player: "&fPlayers near to you&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Players near to you:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7You played&8: %playtime%" - - "&7Current session&8: %playtime_session%" -command-bottom: "&7You've just been teleported to &ebottom&7." + - "You played: %playtime%" + - "Current session: %playtime_session%" +command-bottom: "You've just been teleported to bottom." command-bottom-error: "Unable to find a position to transport you safely." -command-remove: "&7Removed %amount% &7entities." +command-remove: "Removed %amount% entities." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FFPlayer &f%player% #99E0FFhas been offline #99E0FFsince &7%date%#99E0FF." + message: "Player %player% has been offline since %date%." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FFPlayer &f%player% #99E0FFhas been online #99E0FFsince %date%#99E0FF." + message: "Player %player% has been online since %date%." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFPlayTime&8: &f%playtime%" + message: "PlayTime: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFIP Address&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "Unable to find players with ip &f%ip%." -command-seen-ip-line: "#99E0FFPlayers with the ip &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "IP Address:%ips%" +command-seen-address: " Show players who have the same address'>%ip%" +command-seen-ip-empty: "Unable to find players with ip %ip%." +command-seen-ip-line: "Players with the ip %ip%:%players%" +command-seen-ip-info: " Show player's information'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFLast Location&8: &f%world%, %x%, %y%, %z%" + message: "Last Location: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFFirst Join&8: &f%created_at%" + message: "First Join: %created_at%" # Economy -command-economy-not-found: " Can’t find a economy with the name &f%name%." -command-economy-reset-all-confirm: "You are about to reset every balance for &f%economy%. Run the command again within &f%seconds% seconds to confirm." -command-economy-reset-all-success: "#99E0FFYou reset all balances for &f%economy%#99E0FF." -command-economy-give-all-sender: "#99E0FFYou just gave &f%economyFormat% #99E0FFto the online players." -command-economy-give-sender: "#99E0FFYou just gave &f%economyFormat% #99E0FFto the player &7%player%#99E0FF." -command-economy-give-receiver: "#99E0FFYou have just received &f%economyFormat%." -command-economy-set-sender: "#99E0FFYou just set &f%economyFormat% #99E0FFto the player &7%player%#99E0FF." -command-economy-set-receiver: "#99E0FFYou have just been modified &f%economyFormat%." -command-economy-take-sender: "#99E0FFYou just take &f%economyFormat% #99E0FFto the player &7%player%#99E0FF." -command-economy-take-receiver: "#99E0FFYou have just lost &f%economyFormat%." -command-economy-show-empty: "&f%player% has no money." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." +command-economy-not-found: " Can’t find a economy with the name %name%." +command-economy-reset-all-confirm: "You are about to reset every balance for %economy%. Run the command again within %seconds% seconds to confirm." +command-economy-reset-all-success: "You reset all balances for %economy%." +command-economy-give-all-sender: "You just gave %economyFormat% to the online players." +command-economy-give-sender: "You just gave %economyFormat% to the player %player%." +command-economy-give-receiver: "You have just received %economyFormat%." +command-economy-set-sender: "You just set %economyFormat% to the player %player%." +command-economy-set-receiver: "You have just been modified %economyFormat%." +command-economy-take-sender: "You just take %economyFormat% to the player %player%." +command-economy-take-receiver: "You have just lost %economyFormat%." +command-economy-show-empty: "%player% has no money." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFYou have&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "You have:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-money-other: - - "#99E0FF%player% have&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "%player% have:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "Amount to pay must be positive." -command-pay-min: "The minimum amount you can pay is &f%amount%." -command-pay-max: "The maximum amount you can pay is &f%amount%." -command-pay-sender: "#99E0FFYou just sent #F8F327%amount%#99E0FF to the player &f%player%#99E0FF." -command-pay-receiver: "&f%player% #99E0FFjust sent you #F8F327%amount%#99E0FF." +command-pay-min: "The minimum amount you can pay is %amount%." +command-pay-max: "The maximum amount you can pay is %amount%." +command-pay-sender: "You just sent %amount% to the player %player%." +command-pay-receiver: "%player% just sent you %amount%." command-pay-disable: "You can’t send %name%." command-pay-self: "You cannot send money to yourself." command-pay-not-enough: "You don't have enough money." @@ -201,86 +201,86 @@ command-pay-disabled: "You cannot send money to this player." # Teleport commands -command-tpa-error: "You have already sent a request to #99E0FF%player%." +command-tpa-error: "You have already sent a request to %player%." command-tpa-error-same: "You cannot teleport to yourself." -command-tpa-here-error: "You have already sent a request to #99E0FF%player%." +command-tpa-here-error: "You have already sent a request to %player%." command-tpa-here-error-same: "You cannot teleport to yourself." command-tpa-error-offline: "Unable to find player, must be offline." command-tpa-error-to-late-empty: "You do not have a teleport request." command-tpa-error-to-late-expire: "The teleport request has expired." command-tpa-sender: - - "#00FF00✔ #99E0FFSent &f%displayName% #99E0FFa teleport request." - - " ✘ Cancel teleportation'>#99E0FFType #00FF00/tpacancel %player%#99E0FF to cancel your request." + - "✔ Sent %displayName% a teleport request." + - " ✘ Cancel teleportation'>Type /tpacancel %player% to cancel your request." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFhas requested to teleport to you!" - - " #99E0FFType #00FF00/tpaccept #99E0FFto #00FF00accept#99E0FF." - - " ✘ Deny teleportation'>#99E0FFType /tpdeny #99E0FFto deny#99E0FF." + - "⚠ %displayName% has requested to teleport to you!" + - " ✔ Accept teleportation'>Type /tpaccept to accept." + - " ✘ Deny teleportation'>Type /tpdeny to deny." - "" - - "&7&oYou have 60 seconds to accept the teleport request." + - "You have 60 seconds to accept the teleport request." command-tpa-here-sender: - - "#00FF00✔ #99E0FFSent &f%displayName% #99E0FFa teleport request." - - " ✘ Cancel teleportation'>#99E0FFType #00FF00/tpacancel %player%#99E0FF to cancel your request." + - "✔ Sent %displayName% a teleport request." + - " ✘ Cancel teleportation'>Type /tpacancel %player% to cancel your request." command-tpa-here-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFrequest to teleport you to him!" - - " #99E0FFType #00FF00/tpaccept #99E0FFto #00FF00accept#99E0FF." - - " ✘ Deny teleportation'>#99E0FFType /tpdeny #99E0FFto deny#99E0FF." + - "⚠ %displayName% request to teleport you to him!" + - " ✔ Accept teleportation'>Type /tpaccept to accept." + - " ✘ Deny teleportation'>Type /tpdeny to deny." - "" - - "&7&oYou have 60 seconds to accept the teleport request." -command-tpa-accept-receiver: "#99E0FFYou have just #00FF00accepted #99E0FFthe teleport request from #99E0FF%player%." -command-tpa-accept-sender: "#99E0FF%player% has just accepted your teleport request." -command-tpa-here-accept-receiver: "#99E0FFYou have just #00FF00accepted #99E0FFthe teleport request from #99E0FF%player%." -command-tpa-here-accept-sender: "#99E0FF%player% has just accepted your teleport request." -command-teleport-ignore-player: "You cannot send a teleport request to #99E0FF%player% they are ignoring you." + - "You have 60 seconds to accept the teleport request." +command-tpa-accept-receiver: "You have just accepted the teleport request from %player%." +command-tpa-accept-sender: "%player% has just accepted your teleport request." +command-tpa-here-accept-receiver: "You have just accepted the teleport request from %player%." +command-tpa-here-accept-sender: "%player% has just accepted your teleport request." +command-teleport-ignore-player: "You cannot send a teleport request to %player% they are ignoring you." command-teleport-world: "You need to be in the same world to teleport." command-tpa-error-to-late: "You do not have a teleport request." command-tpa-error-to-late-2: "The request has expired." -command-tp-deny-sender: "#00FF00✔ Denied &f%player% #00FF00teleport request." -command-tp-deny-receiver: "✘ &f%player% has denied your teleport request." -command-tp-cancel-error: "You did not send a teleport request at &f%player%." -command-tp-cancel-sender: "Cancelled #99E0FFyour teleport request to %player%." -command-tp-cancel-receiver: "&f%player% cancelled their teleport request to you." -command-world-teleport-self: "You have just been teleported into the world &f%world%." -command-world-teleport-other: "You just teleported the player &f%player% in the world &f%world%." -command-random-tp-other: "You just randomly teleported the player &f%player% in the world &f%world%." -command-tp: "&fYou just teleport to the player #34cfe0%player%&f." -command-tp-location: "&fYou just teleport to #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." +command-tp-deny-sender: "✔ Denied %player% teleport request." +command-tp-deny-receiver: "✘ %player% has denied your teleport request." +command-tp-cancel-error: "You did not send a teleport request at %player%." +command-tp-cancel-sender: "Cancelled your teleport request to %player%." +command-tp-cancel-receiver: "%player% cancelled their teleport request to you." +command-world-teleport-self: "You have just been teleported into the world %world%." +command-world-teleport-other: "You just teleported the player %player% in the world %world%." +command-random-tp-other: "You just randomly teleported the player %player% in the world %world%." +command-tp: "You just teleport to the player %player%." +command-tp-location: "You just teleport to %x%, %y%, %z%." command-tp-location-error: "The coordinates are outside of the world." -command-tp-location-other: "&fYou just teleport #34cfe0%player% &fto #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tp-all: "&fYou just teleported all the players onto you." -command-tp-self: "&fYou just teleported #34cfe0%player%&f to your position." -command-back: "&7Returning to previous location." +command-tp-location-other: "You just teleport %player% to %x%, %y%, %z%." +command-tp-all: "You just teleported all the players onto you." +command-tp-self: "You just teleported %player% to your position." +command-back: "Returning to previous location." command-back-error: "You have no last location. Impossible to go back." command-random-tp-error: "No safe location found after multiple attempts, please try again." -command-random-tp-configuration-not-found: "Impossible to find the random tp configuration for the world &f%world%." -command-teleport-request-disabled: "The player &f%player% has disabled teleport requests." -command-tp-toggle-enable: "&7Teleport requests enabled &7for &f%player%." -command-tp-toggle-disable: "&7Teleport requests disabled &7for &f%player%." +command-random-tp-configuration-not-found: "Impossible to find the random tp configuration for the world %world%." +command-teleport-request-disabled: "The player %player% has disabled teleport requests." +command-tp-toggle-enable: "Teleport requests enabled for %player%." +command-tp-toggle-disable: "Teleport requests disabled for %player%." # First join -join-message: "#99E0FF%player% &7joined the game" -quit-message: "#99E0FF%player% &7left the game" -first-join-message: "&7Welcome #99E0FF%player% &7on ! &8(&f%totalUserFormat% &7registered players&8)" +join-message: "%player% joined the game" +quit-message: "%player% left the game" +first-join-message: "Welcome %player% on ! (%totalUserFormat% registered players)" first-join-motd: - "" - - "#00FF00✔ #99E0FFWelcome %player%#99E0FF !" + - "✔ Welcome %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Join the server Discord !'>https://discord.groupez.dev/" + - "Website: Open the Website !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FFWelcome back %player%#99E0FF !" + - "Welcome back %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Join the server Discord !'>https://discord.groupez.dev/" + - "Website: Open the Website !'>https://minecraft-inventory-builder.com/" - "" # Spawn -command-set-spawn: "&fYou just set the spawn location." +command-set-spawn: "You just set the spawn location." command-spawn-not-define: "The spawn does not exist. Please contact an administrator." command-spawn-location-invalid: "The spawn is invalid, please contact an administrator" command-spawn-first-not-define: "The first spawn does not exist. Please contact an administrator." @@ -522,8 +522,8 @@ format-hour: " hour" format-hours: " hours" format-day: " d" format-days: " days" -cooldown: "✘ You must wait for &f%cooldown% before performing this action." -cooldown-commands: "✘ You must wait for &f%cooldown% before performing this commands." +cooldown: "✘ You must wait for %cooldown% before performing this action." +cooldown-commands: "✘ You must wait for %cooldown% before performing this commands." # Teleportation @@ -533,90 +533,90 @@ teleport-error-location: "Unable to teleport you safely." # RTP Queue System Messages teleport-already-in-queue: "You are already in the teleportation queue!" -teleport-added-to-queue: "You have been added to the teleportation queue. Position: #0EEA93%position%" +teleport-added-to-queue: "You have been added to the teleportation queue. Position: %position%" teleport-message: type: ACTION - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + message: "Teleporting in %seconds% seconds, you must not move." teleport-success: type: ACTION - message: "#99E0FFYou have just teleported successfully!" + message: "You have just teleported successfully!" teleport-message-spawn: - - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + - message: "Teleporting in %seconds% seconds, you must not move." - type: ACTION - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." -teleport-message-spawn-console: "You just teleported the player %player% to spawn." + message: "Teleporting in %seconds% seconds, you must not move." +teleport-message-spawn-console: "You just teleported the player %player% to spawn." teleport-success-spawn: - - message: "&7You just teleported to #0EEA93spawn &7!" + - message: "You just teleported to spawn !" - type: ACTION - message: "&7You just teleported to #0EEA93spawn &7!" + message: "You just teleported to spawn !" teleport-message-warp: - - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + - message: "Teleporting in %seconds% seconds, you must not move." - type: ACTION - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + message: "Teleporting in %seconds% seconds, you must not move." teleport-success-warp: - - message: "&7You just teleported to warp #0EEA93%name% &7!" + - message: "You just teleported to warp %name% !" - type: ACTION - message: "&7You just teleported to warp #0EEA93%name% &7!" -teleport-random-start: "&7Searching for a destination... you must not move." + message: "You just teleported to warp %name% !" +teleport-random-start: "Searching for a destination... you must not move." teleport-message-random: type: ACTION - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + message: "Teleporting in %seconds% seconds, you must not move." teleport-success-random: type: ACTION - message: "#99E0FFYou have just teleported successfully!" + message: "You have just teleported successfully!" teleport-message-home: - - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + - message: "Teleporting in %seconds% seconds, you must not move." - type: ACTION - message: "&7Teleporting in #0EEA93%seconds% &7seconds, you must not move." + message: "Teleporting in %seconds% seconds, you must not move." teleport-success-home: - - message: "&7You just teleported to home #0EEA93%name% &7!" + - message: "You just teleported to home %name% !" - type: ACTION - message: "&7You just teleported to home #0EEA93%name% &7!" + message: "You just teleported to home %name% !" # Warps -command-warp-already-exist: "Warp &f%name% already exists. &7Use &n/setwarp %name% true&r command to modify the warp" -command-warp-doesnt-exist: "Warp &f%name% does not exist." -command-warp-no-permission: "You do not have permission to use the warp &f%name%." +command-warp-already-exist: "Warp %name% already exists. Use Use this command'>/setwarp %name% true command to modify the warp" +command-warp-doesnt-exist: "Warp %name% does not exist." +command-warp-no-permission: "You do not have permission to use the warp %name%." command-warp-create: - - "#00ff00You just created the warp &f%name% #00ff00to your position." - - "&7Warp Permission is: permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + - "You just created the warp %name% to your position." + - "Warp Permission is: Copy command to add permission to a player'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: - - "Usage&8: &f/warp " - - "&7Warps&8:&f%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Warps&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "#00ff00You just removed the warp &f%name%#00ff00." -command-warp-invalid: "Warp &f%name% has an invalid location." + - "Usage: /warp " + - "Warps:%destinations%" +command-warp-destination: " Click to teleport to warp %name%'>%name%" +command-warp-list: "Warps:%destinations%" +command-warp-list-info: " Click to teleport to warp %name%'>%name%" +command-warp-delete: "You just removed the warp %name%." +command-warp-invalid: "Warp %name% has an invalid location." # Homes -command-set-home-invalide-name: "&f%name% is not a valid name, please choose another one." -command-set-home-too-long: "&f%name% is too long, please choose another one." -command-set-home-too-short: "&f%name% is too short name, please choose another one." -command-set-home-max: "You cannot have more than &f%max% homes." +command-set-home-invalide-name: "%name% is not a valid name, please choose another one." +command-set-home-too-long: "%name% is too long, please choose another one." +command-set-home-too-short: "%name% is too short name, please choose another one." +command-set-home-max: "You cannot have more than %max% homes." command-set-home-world: "You cannot create a home here" command-set-home-create: - "" - - "#99E0FFYou just created the home &f%name%#99E0FF. &8(&7%current%&8/&7%max%&8)" - - "&fUse &n/home %name%&r command to teleport to it" + - "You just created the home %name%. (%current%/%max%)" + - "Use Click to teleport to home'>/home %name% command to teleport to it" - "" command-set-home-create-confirm: - "" - - "#99E0FFThe home &f%name%#99E0FF already exists. Do you want to overwrite it?" - - "ᴄᴏɴғɪʀᴍ" + - "The home %name% already exists. Do you want to overwrite it?" + - "Click to overwrite the home %name%'>ᴄᴏɴғɪʀᴍ" - "" -command-home-doesnt-exist: "The home &f%name% does not exist." +command-home-doesnt-exist: "The home %name% does not exist." # Available placeholders: # %count% - Home count # %max% - Max player's home command-home-information-multi-line-header: - "" - - "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%) &8- &7(Max: %max%)" + - "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%) - (Max: %max%)" # Available placeholders: # %count% - Home count @@ -629,7 +629,7 @@ command-home-information-multi-line-header: # %z% - Home location z command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7in %world% (%environment%) [CLICK]" + message: " ♢ %name% in %world% (%environment%) Click to teleport to home %name%'>[CLICK]" # Available placeholders: # %count% - Home count @@ -649,22 +649,22 @@ command-home-information-multi-line-footer: # %z% - Home location z command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" + message: "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Click to teleport to home %name%'>%name%" command-home-icon-error: "You must have an item in your hand to change the icon of your home." -command-home-icon-success: "#00ff00You just changed the home icon &f%name%#00ff00." -command-home-icon-reset: "#00ff00You just reset the home icon &f%name%#00ff00." -command-home-delete: "#99E0FFYou just deleted the home &f%name%#99E0FF." +command-home-icon-success: "You just changed the home icon %name%." +command-home-icon-reset: "You just reset the home icon %name%." +command-home-delete: "You just deleted the home %name%." command-home-delete-confirm: - "" - - "#99E0FFYou really want to delete the home &f%name%#99E0FF." - - "ᴄᴏɴғɪʀᴍ" + - "You really want to delete the home %name%." + - "Click to overwrite the home %name%'>ᴄᴏɴғɪʀᴍ" - "" -command-home-admin-delete: "#00ff00You just deleted home &f%name%#00ff00 of &b%player%#00ff00." -command-home-admin-set: "#00ff00You just created home &f%name%#00ff00 of &b%player%#00ff00." -command-home-admin-list: "#8cc0cc%player% ʜᴏᴍᴇs&8:&f%homes%" -command-home-admin-list-info: " &f%name%&7" +command-home-admin-delete: "You just deleted home %name% of %player%." +command-home-admin-set: "You just created home %name% of %player%." +command-home-admin-list: "%player% ʜᴏᴍᴇs:%homes%" +command-home-admin-list-info: " Click to teleport to home %name%'>%name%" command-home-admin-list-empty: "The player has no home" command-home-error-teleport: "Unable to find the position for teleportation, please delete your home." @@ -672,81 +672,81 @@ command-home-error-teleport: "Unable to find the position for teleportati # Sanction command-kick-notify: type: WITHOUT_PREFIX - message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just kicked the player #e0d12d%target%#e33414." + message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just kicked the player %target%." command-ban-notify: type: WITHOUT_PREFIX - message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just banned the player #e0d12d%target%#e33414." + message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>(Sanction) %player% just banned the player %target%." command-mute-notify: type: WITHOUT_PREFIX - message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just muted the player #e0d12d%target%#e33414." + message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%Expires: %expired_at%'>(Sanction) %player% just muted the player %target%." command-unmute-notify: type: WITHOUT_PREFIX - message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just unmuted the player #e0d12d%target%#e33414." + message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just unmuted the player %target%." command-unban-notify: type: WITHOUT_PREFIX - message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414just unbanned the player #e0d12d%target%#e33414." + message: "By: %sender%Duration: %duration%Reason: %reason%Date: %created_at%'>(Sanction) %player% just unbanned the player %target%." command-ban-error-duration: "The duration of a banishment must be at least 1 second." command-mute-error-duration: "The duration of a mute must be at least 1 second." -command-un-mute-error: "&f%player% is not mute." -command-un-ban-error: "&f%player% is not ban." +command-un-mute-error: "%player% is not mute." +command-un-ban-error: "%player% is not ban." command-sanction-error: "You can’t sanction that player. He’s protected." message-kick: - "" - "You have just been kicked from the server for the reason:" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&fYou have just lost your voice." - - "&fDuration&8: %duration%" - - "&fReason&8: #82d1ff%reason%" + - "You have just lost your voice." + - "Duration: %duration%" + - "Reason: %reason%" - "" message-unmute: - "" - - "&fYou have just regained your voice, congratulations !" - - "&fReason&8: #82d1ff%reason%" + - "You have just regained your voice, congratulations !" + - "Reason: %reason%" - "" message-mute-talk: - "" - - "&fYou do not have the right to speak." + - "You do not have the right to speak." - "" - - "&fDuration&8: %duration%" - - "&fReason&8: #82d1ff%reason%" + - "Duration: %duration%" + - "Reason: %reason%" - "" message-ban: - "" - "You have just been ban from the server for the reason:" - - "&f%reason%" - - "&fDuration&8: &7%duration%" + - "%reason%" + - "Duration: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "You are banned on server:" - - "&f%reason%" - - "&fRemaining time&8: &7%remaining%" + - "%reason%" + - "Remaining time: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-freeze: - "" - - "&fYou have just been frozen." + - "You have just been frozen." - "" message-un-freeze: - "" - - "&fYou have just been unfrozen." + - "You have just been unfrozen." - "" -command-freeze-success: "&7You just freeze the player &f%player%&7." -command-un-freeze_success: "&7You just unfreeze the player &f%player%&7." +command-freeze-success: "You just freeze the player %player%." +command-un-freeze_success: "You just unfreeze the player %player%." # Chat chat-error: "Impossible to let you speak, your data is not loaded." chat-alphanumeric-regex: "You use a forbidden character." -chat-cooldown: "Please wait before sending your next message. &8(&7%cooldown%&8)" +chat-cooldown: "Please wait before sending your next message. (%cooldown%)" chat-same: "You can’t put the same sentence." chat-link: "You cannot send a link in the chat." chat-item-forbidden-characters: "You cannot display this item because its name contains forbidden characters." @@ -754,14 +754,14 @@ chat-disable: "The chat is currently unavailable." chat-caps: "You don’t have to scream to talk !" chat-flood: "You can’t talk like that." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% did not write a message." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% did not write a message." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "The chat just got clear." command-chat-disable-error: "Chat is already disable." command-chat-disable-success: "You just deactivated the chat." @@ -769,54 +769,54 @@ command-chat-enable-error: "Chat is already enable." command-chat-enable-success: "You just activated the chat." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" + message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" # Messages command-message-self: "You can’t talk to yourself." -command-message-disable: "&f%player% has disabled private messages." +command-message-disable: "%player% has disabled private messages." command-message-mute: "You’re not allowed to speak." -command-message-me: "&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6" +command-message-me: "Click to reply'>(me -> %target%) " +command-message-other: "Click to reply'>(%target% -> me) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Open sanction for %sender%'>%sender% -> Open sanction for %receiver%'>%receiver%) %message%" command-message-error: "You have no one to answer." -command-message-toggle-enable: "&7Private message enable &7for &f%player%." -command-message-toggle-disable: "&7Private message disable &7for &f%player%." -command-social-spy-enable: "&7Social spy enable &7for &f%player%." -command-social-spy-disable: "&7Social spy disable &7for &f%player%." -command-warp-empty: "No warp defined, use command &f/setwarp " -command-pay-toggle-enable: "&7Pay enable &7for &f%player%." -command-pay-toggle-disable: "&7Pay disable &7for &f%player%." -command-pay-notification-toggle-enable: "&7Pay notifications enabled &7for &f%player%." -command-pay-notification-toggle-disable: "&7Pay notifications disabled &7for &f%player%." -command-power-tools-toggle-enable: "All of your power tools have been enabled &7for &f%player%." -command-power-tools-toggle-disable: "All of your power tools have been disabled &7for &f%player%." +command-message-toggle-enable: "Private message enable for %player%." +command-message-toggle-disable: "Private message disable for %player%." +command-social-spy-enable: "Social spy enable for %player%." +command-social-spy-disable: "Social spy disable for %player%." +command-warp-empty: "No warp defined, use command /setwarp " +command-pay-toggle-enable: "Pay enable for %player%." +command-pay-toggle-disable: "Pay disable for %player%." +command-pay-notification-toggle-enable: "Pay notifications enabled for %player%." +command-pay-notification-toggle-disable: "Pay notifications disabled for %player%." +command-power-tools-toggle-enable: "All of your power tools have been enabled for %player%." +command-power-tools-toggle-disable: "All of your power tools have been disabled for %player%." # Kit -command-kit-no-permission: "You do not have permission to use the kit &f%kit%." -command-kit-not-found: "Unable to find the kit &f%kit%." -command-kit-already-exists: "The &f%kit% kit already exists." -command-kit-information-in-line-empty: "#8cc0ccʏᴏᴜʀ ᴋɪᴛs ♦ &7(%count%/%max%)&8: ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ" -command-kit-information-in-line: "#8cc0ccʏᴏᴜʀ ᴋɪᴛs&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% before getting the kit &f&n%name%'><#de1f1f>%name%&7" +command-kit-no-permission: "You do not have permission to use the kit %kit%." +command-kit-not-found: "Unable to find the kit %kit%." +command-kit-already-exists: "The %kit% kit already exists." +command-kit-information-in-line-empty: "ʏᴏᴜʀ ᴋɪᴛs ♦ (%count%/%max%): ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ" +command-kit-information-in-line: "ʏᴏᴜʀ ᴋɪᴛs:%kits%" +command-kit-information-in-line-info-available: " Click to get the kit %name%'>%name%" +command-kit-information-in-line-info-unavailable: " You must wait %time% before getting the kit %name%'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% before getting the kit &f&n%name%'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Click to get the kit %name%'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ You must wait %time% before getting the kit %name%'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "You have just modified the kit &f%kit%." -command-kit-create: "You just created the kit &f%kit%." -command-kit-delete: "You just deleted the kit &f%kit%." -command-kit-delete-error: "Impossible to delete the kit &f%kit%." -command-kit-give: "You just gave the kit &f%kit% to %player%." +command-kit-editor-save: "You have just modified the kit %kit%." +command-kit-create: "You just created the kit %kit%." +command-kit-delete: "You just deleted the kit %kit%." +command-kit-delete-error: "Impossible to delete the kit %kit%." +command-kit-give: "You just gave the kit %kit% to %player%." # Cooldown -command-cooldown-header: "&fPlayer cooldown %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% has no cooldown." +command-cooldown-header: "Player cooldown %player% (%amount%)" +command-cooldown-empty: "%player% has no cooldown." # Available placeholders: # %key% - The key to the cooldown # %value% - The cooldown expiration timestamp @@ -825,63 +825,63 @@ command-cooldown-empty: "&f%player% has no cooldown." # %player% - the Player's nickname command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴅᴇʟᴇᴛᴇ&8]" -command-cooldown-not-found: "&f%cooldown% was not found." -command-cooldown-delete: "You just removed the cooldown &f%cooldown% from &n%player%&r." + message: "%key% - %createdAt% - %timeLeft% - Click to remove the cooldown'>[ᴅᴇʟᴇᴛᴇ]" +command-cooldown-not-found: "%cooldown% was not found." +command-cooldown-delete: "You just removed the cooldown %cooldown% from %player%." # Available placeholders: # %key% - The key to the cooldown # %player% - the Player's nickname # %duration% - the duration of the cooldown -command-cooldown-create: "You just created the cooldown &f%key% for &n%player%&r." +command-cooldown-create: "You just created the cooldown %key% for %player%." command-item-empty: "You have no item in your hand." command-item-clear: "You have cleared this item's name" -command-item-set: "You have renamed your held item to &f%name%." -command-item-lore-add: "You just added the line &f%text%." -command-item-lore-set: "You just set line %line% to &f%text%." +command-item-set: "You have renamed your held item to %name%." +command-item-lore-add: "You just added the line %text%." +command-item-lore-set: "You just set line %line% to %text%." command-item-lore-clear: "You just clear the item lore." -command-item-lore-set-error: "Can’t find the line &f%line%." -command-give-error: "Can’t find the item &f%item%." -command-give: "You just gave &n&fx%amount% %item%&r to player &f%player%." -command-give-all: "You just gave &n&fx%amount% %item%&r to all online players." -command-give-vault: "You just gave &n&fx%amount% %item%&r to &f%player%'s vault." +command-item-lore-set-error: "Can’t find the line %line%." +command-give-error: "Can’t find the item %item%." +command-give: "You just gave x%amount% %item% to player %player%." +command-give-all: "You just gave x%amount% %item% to all online players." +command-give-vault: "You just gave x%amount% %item% to %player%'s vault." command-power-tool-error-item: "You have no item in your hand." command-power-tool-error-reset: "This item has no recorded command." -command-power-tool-info: "You just put the command &f/%command% on the item &f%item%." -command-power-tool-reset: "You have just deleted the command on the item &f%item%." +command-power-tool-info: "You just put the command /%command% on the item %item%." +command-power-tool-reset: "You have just deleted the command on the item %item%." mailbox-remove-full: "You must have space in your inventory to retrieve an item." mailbox-remove-expire: "You can no longer retrieve this item, it has expired." mailbox-add: type: ACTION - message: "An item has just been added to your mailbox &8(&f/mail&8)" -mailbox-give-error: "Can’t find the item &f%item%." -mailbox-give: "You just gave &n&fx%amount% %item%&r to player &f%player%'s mailbox." -mailbox-give-all: "You just gave &n&fx%amount% %item%&r to online players' mailboxes." -mailbox-give-hand: "You just sent the item in your hand to &f%player%'s mailbox (&fx%amount% %item%)." -mailbox-give-all-hand: "You just sent the item in your hand (&fx%amount% %item%) to every online player's mailbox." -mailbox-clear: "You have just cleared the mailbox of &f%player%." + message: "An item has just been added to your mailbox (/mail)" +mailbox-give-error: "Can’t find the item %item%." +mailbox-give: "You just gave x%amount% %item% to player %player%'s mailbox." +mailbox-give-all: "You just gave x%amount% %item% to online players' mailboxes." +mailbox-give-hand: "You just sent the item in your hand to %player%'s mailbox (x%amount% %item%)." +mailbox-give-all-hand: "You just sent the item in your hand (x%amount% %item%) to every online player's mailbox." +mailbox-clear: "You have just cleared the mailbox of %player%." # Available placeholders: # %player% - Receiver name # %message% - The mail content -mailbox-message-send: "Your mail was sent to &f%player%." +mailbox-message-send: "Your mail was sent to %player%." # Available placeholders: # %player% - Sender name # %message% - The mail content -mailbox-message-receive: "&f%player% sent you a mail &8(&f/mail read&8)" +mailbox-message-receive: "%player% sent you a mail (/mail read)" # Available placeholders: # %amount% - Amount of players who received the mail # %message% - The mail content -mailbox-message-send-all: "Your mail was sent to &f%amount% player(s)." +mailbox-message-send-all: "Your mail was sent to %amount% player(s)." # Available placeholders: # %amount% - Amount of unread mails -mailbox-message-notify: "You have &f%amount% unread mail(s), use &f/mail read." +mailbox-message-notify: "You have %amount% unread mail(s), use Click to read your mails'>/mail read." mailbox-message-empty: "You don't have any mail." @@ -891,7 +891,7 @@ mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "Your mails (&f%amount%)" + - "Your mails (%amount%)" - "" # Available placeholders: @@ -900,160 +900,160 @@ mailbox-message-header: # %message% - The mail content mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Use &f/mail clearmessages to delete them." + - "Use Click to delete your mails'>/mail clearmessages to delete them." - "" # Available placeholders: # %player% - Player name -mailbox-message-clear: "You have just deleted the mails of &f%player%." +mailbox-message-clear: "You have just deleted the mails of %player%." mailbox-message-self: "You cannot send a mail to yourself." mailbox-message-mute: "You cannot send a mail while you are muted." # Available placeholders: # %player% - Player name -mailbox-message-ignore: "&f%player% does not want to receive your mails." +mailbox-message-ignore: "%player% does not want to receive your mails." # Available placeholders: # %player% - Player name -mailbox-message-full: "The mailbox of &f%player% is full." +mailbox-message-full: "The mailbox of %player% is full." # Available placeholders: # %max% - Maximum amount of characters -mailbox-message-too-long: "Your mail cannot be longer than &f%max% characters." +mailbox-message-too-long: "Your mail cannot be longer than %max% characters." -hologram-create-error: "Hologram &f%name% already exists." +hologram-create-error: "Hologram %name% already exists." hologram-create: type: WITHOUT_PREFIX messages: - - "You just created the hologram &f%name%." - - "&7Use &n/hologram %command% %name%&r&7 command to edit the hologram" -hologram-delete: "Hologram &f%name% has been deleted." -hologram-doesnt-exist: "Hologram &f%name% doesn't exist." -hologram-is-not-a-text: "Hologram &f%name% is not a text hologram." -hologram-is-not-a-block: "Hologram &f%name% is not a block hologram." -hologram-is-not-a-item: "Hologram &f%name% is not an item hologram." -hologram-add-line: "You just added a line to the hologram &f%name%." -hologram-set-line: "You just set the line &f%line% for the hologram &f%name%." -hologram-insert-before-line: "You just added a new line before the line &f%line% for the hologram &f%name%." -hologram-insert-after-line: "You just added a new line after the line &f%line% for the hologram &f%name%." -hologram-line-doesnt-exist: "The line &f%line% does not exist for the hologram &f%name%." -hologram-remove-line: "You just removed the line &f%line% from the hologram &f%name%." -hologram-scale: "You just changed the scale of the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%." -hologram-translation: "You just changed the translation of the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%." -hologram-move-here: "You just teleported the hologram &f%name% to your position." -hologram-move-to: "You just teleported the hologram &f%name% to &7%x%&8, &7%y%&8, &7%z%." -hologram-billboard: "You just changed the billboard of the hologram &f%name% to &f%billboard%." -hologram-text-alignment: "You just changed the text alignment of the hologram &f%name% to &f%textAlignment%." -hologram-yaw: "You just changed the yaw of the hologram &f%name% to &f%yaw%." -hologram-pitch: "You just changed the pitch of the hologram &f%name% to &f%pitch%." -hologram-text-background: "You just changed the background color of the hologram &f%name% to &f%color%." + - "You just created the hologram %name%." + - "Use /hologram %command% %name% command to edit the hologram" +hologram-delete: "Hologram %name% has been deleted." +hologram-doesnt-exist: "Hologram %name% doesn't exist." +hologram-is-not-a-text: "Hologram %name% is not a text hologram." +hologram-is-not-a-block: "Hologram %name% is not a block hologram." +hologram-is-not-a-item: "Hologram %name% is not an item hologram." +hologram-add-line: "You just added a line to the hologram %name%." +hologram-set-line: "You just set the line %line% for the hologram %name%." +hologram-insert-before-line: "You just added a new line before the line %line% for the hologram %name%." +hologram-insert-after-line: "You just added a new line after the line %line% for the hologram %name%." +hologram-line-doesnt-exist: "The line %line% does not exist for the hologram %name%." +hologram-remove-line: "You just removed the line %line% from the hologram %name%." +hologram-scale: "You just changed the scale of the hologram %name% to %x%, %y%, %z%." +hologram-translation: "You just changed the translation of the hologram %name% to %x%, %y%, %z%." +hologram-move-here: "You just teleported the hologram %name% to your position." +hologram-move-to: "You just teleported the hologram %name% to %x%, %y%, %z%." +hologram-billboard: "You just changed the billboard of the hologram %name% to %billboard%." +hologram-text-alignment: "You just changed the text alignment of the hologram %name% to %textAlignment%." +hologram-yaw: "You just changed the yaw of the hologram %name% to %yaw%." +hologram-pitch: "You just changed the pitch of the hologram %name% to %pitch%." +hologram-text-background: "You just changed the background color of the hologram %name% to %color%." hologram-text-background-error: "Could not parse background color." -hologram-text-shadow: "You set the text shadow to &f%textshadow% for the hologram &f%name%." -hologram-see-through: "You set the see-through to &f%seethrough% for the hologram &f%name%." -hologram-shadow-strength: "You set the shadow strength to &f%shadow% for the hologram &f%name%." -hologram-shadow-radius: "You set the shadow radius to &f%shadow% for the hologram &f%name%." -hologram-view-distance: "You set the view distance to &f%distance% for the hologram &f%name%." -hologram-list-empty: "There is no hologram, to create one please use the command &f/holo create " +hologram-text-shadow: "You set the text shadow to %textshadow% for the hologram %name%." +hologram-see-through: "You set the see-through to %seethrough% for the hologram %name%." +hologram-shadow-strength: "You set the shadow strength to %shadow% for the hologram %name%." +hologram-shadow-radius: "You set the shadow radius to %shadow% for the hologram %name%." +hologram-view-distance: "You set the view distance to %distance% for the hologram %name%." +hologram-list-empty: "There is no hologram, to create one please use the command /holo create " hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛ Click to delete this hologram'>ᴅᴇʟᴇᴛᴇ" + message: "%name% - %world%: %x%, %y%, %z% - Click to be teleported to this hologram'>ᴛᴇʟᴇᴘᴏʀᴛ Click to delete this hologram'>ᴅᴇʟᴇᴛᴇ" hologram-item-error: "You can't use air for this hologram." -hologram-item: "You just modified the item of the hologram &f%name%." -hologram-block: "You just modified the block of the hologram &f%name% to &f%material%." +hologram-item: "You just modified the item of the hologram %name%." +hologram-block: "You just modified the block of the hologram %name% to %material%." scoreboard-disable: "You just disabled the scoreboard." scoreboard-enable: "You just enabled the scoreboard." -command-baltop-error: "Can’t find the economy &f%name%." +command-baltop-error: "Can’t find the economy %name%." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴍᴏsᴛ ᴍᴏɴᴇʏ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴍᴏsᴛ ᴍᴏɴᴇʏ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "You just set the voteparty to &f%amount% votes." -command-voteparty-add: "You just added &f%amount% vote to the voteparty." -command-voteparty-remove: "You have just removed &f%amount% vote from the voteparty." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "You just set the voteparty to %amount% votes." +command-voteparty-add: "You just added %amount% vote to the voteparty." +command-voteparty-remove: "You have just removed %amount% vote from the voteparty." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "You just added a vote to &f%player%." -command-vote-add-error: "The site &f%site% doesn't exist!" +command-vote-add: "You just added a vote to %player%." +command-vote-add-error: "The site %site% doesn't exist!" command-vote: type: ACTION message: "You just voted and received a vote key." vote-offline: - "" - - "You have voted %amount% times while offline, use the command /mailbox to get your rewards!" + - "You have voted %amount% times while offline, use the command /mailbox to get your rewards!" - "" vault-lore: - "" - - "&fɪɴғᴏʀᴍᴀᴛɪᴏɴ" - - " #f8b175• &7Quantity&8: &e%quantity%" + - "ɪɴғᴏʀᴍᴀᴛɪᴏɴ" + - " • Quantity: %quantity%" - "" - - "&f➥ #fc99f8Left Click &7to take 1" - - "&f➥ #fc99f8Right Click &7to take 64" - - "&f➥ #fc99f8Sneak + Right Click &7to take all" -command-vault-not-found: "Cannot find the vault &f%vaultId%." + - "➥ Left Click to take 1" + - "➥ Right Click to take 64" + - "➥ Sneak + Right Click to take all" +command-vault-not-found: "Cannot find the vault %vaultId%." command-vault-no-permission: "You do not have permission to view the vault." -command-vault-set-slot: "You just set the amount of slots for &f%player% to &7%slots% slots." -command-vault-add-slot: "You've just added &7%amount% slot to &f%player%." -command-vault-info: "Vault info for &f%player%: max &7%max%, permission &7%permissionSlots%, plugin &7%pluginSlots%, used &7%used%, free &7%available%." -command-vault-get-slot-empty: "No item was found in vault &f%vault% slot &f%slot% for &f%player%." -command-vault-get-slot-success: "Vault slot for &f%player%: vault &7%vault%, slot &7%slot%, amount &7%amount%, item &f%item%." -command-vault-delete-slot-success: "You just deleted slot &7%slot% from vault &7%vault% for &f%player%." -command-vault-delete-slot-empty: "Cannot find slot &f%slot% in vault &f%vault% for &f%player%." +command-vault-set-slot: "You just set the amount of slots for %player% to %slots% slots." +command-vault-add-slot: "You've just added %amount% slot to %player%." +command-vault-info: "Vault info for %player%: max %max%, permission %permissionSlots%, plugin %pluginSlots%, used %used%, free %available%." +command-vault-get-slot-empty: "No item was found in vault %vault% slot %slot% for %player%." +command-vault-get-slot-success: "Vault slot for %player%: vault %vault%, slot %slot%, amount %amount%, item %item%." +command-vault-delete-slot-success: "You just deleted slot %slot% from vault %vault% for %player%." +command-vault-delete-slot-empty: "Cannot find slot %slot% in vault %vault% for %player%." command-vault-change-icon-error: "You have an item in your hand." command-vault-change-icon-success: "You just changed the icon of your vault." command-vault-reset-icon: "You just reset the icon of your vault." command-vault-rename-start: "Please write in the chat the new name of the vault." -command-vault-rename-success: "You just set the vault name to &f%name%." +command-vault-rename-success: "You just set the vault name to %name%." command-vault-rename-error: "You cannot use this name for your vault." command-vault-rename-reset: "You just reset the name of your vault." command-enchant-invalid: "You need to specify a valid player." -command-enchant-error-enchant: "Impossible to find the enchantment &f%name%." +command-enchant-error-enchant: "Impossible to find the enchantment %enchant%." command-enchant-error-item-self: "You must have an item in your hand." command-enchant-error-item-player: "%player% has no item in his hand." -command-enchant-remove-self: "The enchantment &f%enchant% has been removed from your item in hand." -command-enchant-remove-player: "The enchantment &f%enchant% has been removed from the item from &f%player%’s hand." -command-enchant-success-self: "The enchantment &f%enchant% has been applied to your item in hand." -command-enchant-success-player: "The enchantment &f%enchant% has been applied to the item from &f%player%’s hand." +command-enchant-remove-self: "The enchantment %enchant% has been removed from your item in hand." +command-enchant-remove-player: "The enchantment %enchant% has been removed from the item from %player%’s hand." +command-enchant-success-self: "The enchantment %enchant% has been applied to your item in hand." +command-enchant-success-player: "The enchantment %enchant% has been applied to the item from %player%’s hand." command-sudo-error: "You cannot force the player to execute commands." -command-sudo-command: "You just forced the player %player% to execute the command /%command%." -command-sudo-message: "You just forced the player %player% to send the message %message%." +command-sudo-command: "You just forced the player %player% to execute the command /%command%." +command-sudo-message: "You just forced the player %player% to send the message %message%." # WorldEdit -command-worldedit-give-error: "Unable to find item &f%name%" -command-worldedit-give-sender: "You just gave &f%item% to the player &f%player%." -command-worldedit-give-receiver: "You just received &f%item%." -command-worldedit-material-not-found: "Unable to find the material &f%material%." +command-worldedit-give-error: "Unable to find item %name%" +command-worldedit-give-sender: "You just gave %item% to the player %player%." +command-worldedit-give-receiver: "You just received %item%." +command-worldedit-material-not-found: "Unable to find the material %material%." command-worldedit-confirm-price: - "" - - "Price: %price%" - - "Blocks:%materials%" - - "Duration: %duration% (%blocks% blocks at %speed% block%s%/s)" + - "Price: %price%" + - "Blocks:%materials%" + - "Duration: %duration% (%blocks% blocks at %speed% block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" + - "Click to confirm action'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" command-worldedit-confirm-price-cut: - "" - - "Price: %price%" - - "Duration: %duration% (%blocks% blocks at %speed% block%s%/s)" + - "Price: %price%" + - "Duration: %duration% (%blocks% blocks at %speed% block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" -command-worldedit-confirm-material: " Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>" + - "Click to confirm action'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" +command-worldedit-confirm-material: " Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>" command-worldedit-confirm-error: "You can’t do that now." command-worldedit-stop-empty: "You have no active session." command-worldedit-stop-error: "You cannot stop editing currently." @@ -1071,34 +1071,34 @@ worldedit-not-enough-money: "You don’t have enough money to make this s worldedit-not-enough-items: "You don’t have the items in your inventory, you can’t do that." worldedit-selection-pos1: "You have just defined the first position." worldedit-selection-pos2: "You have just defined the second position." -worldedit-selection-volume: "You cannot change more than &f%blocks% blocks at the same time." -worldedit-selection-distance: "The distance between your two points in your selection is too large. (Maximum %distance% blocks)" +worldedit-selection-volume: "You cannot change more than %blocks% blocks at the same time." +worldedit-selection-distance: "The distance between your two points in your selection is too large. (Maximum %distance% blocks)" -worldedit-start-calculate-price: "&7Price calculation in progress, please wait..." -worldedit-start-check-inventory: "&7Checking that you have enough items in your inventory, please wait..." -worldedit-start-running: "&7Launch of current session, please wait..." +worldedit-start-calculate-price: "Price calculation in progress, please wait..." +worldedit-start-check-inventory: "Checking that you have enough items in your inventory, please wait..." +worldedit-start-running: "Launch of current session, please wait..." worldedit-finish: "Session completed !" worldedit-refund: - "ʏᴏᴜ'ᴠᴇ ʙᴇᴇɴ ʀᴇғᴜɴᴅᴇᴅ" - "" - - "Price: %price%" - - "Blocks:%materials%" -worldedit-refund-material: " Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>" + - "Price: %price%" + - "Blocks:%materials%" +worldedit-refund-material: " Amount: %amount%Total Price: %price%Price per block: %price-per-block%'>" worldedit-refund-empty: " No block to refund" -worldedit-bossbar: "#45ff45Time remaining: %time%" +worldedit-bossbar: "Time remaining: %time%" worldedit-speed-error: "You have no permission to set blocks per second." worldedit-permission-error: "You cannot use the worldedit here." -experience-granted: "You have just given %amount% %type% to %player%." -experience-taken: "You have just take %amount% %type% to %player%." -experience-setted: "You have just set %amount% %type% to %player%." -experience-queried: "%player% have %amount% %type%." +experience-granted: "You have just given %amount% %type% to %player%." +experience-taken: "You have just take %amount% %type% to %player%." +experience-setted: "You have just set %amount% %type% to %player%." +experience-queried: "%player% have %amount% %type%." command-clearinventory-success: "You have cleared your inventory." -command-clearinventory-success-other: "You have cleared the inventory of &f%player%." +command-clearinventory-success-other: "You have cleared the inventory of %player%." # Discord command-link-account-already-linked: "You are already linked to an account." command-link-account-invalid-code: "Invalid code." -command-link-account-success: "You have just linked your account %discord%." +command-link-account-success: "You have just linked your account %discord%." command-link-account-disabled: "You cannot link your account at this time." command-link-account-not-linked: "You are not linked to an account." command-link-account-reset: "You have just reset your account link." @@ -1107,92 +1107,92 @@ random-word-clear: "The random word has been cleared." command-pub-pattern-error: "Your message contains forbidden characters." command-pub: type: WITHOUT_PREFIX - message: "&8[&fPUB&8] %player%: %message%" -step-doesnt-exist: "Step &f%step% does not exist." -step-already-exist: "Step &f%step% already started." -step-doesnt-started: "Step &f%step% is not started." + message: "[PUB] %player%: %message%" +step-doesnt-exist: "Step %step% does not exist." +step-already-exist: "Step %step% already started." +step-doesnt-started: "Step %step% is not started." # Enderchest -command-endersee-error: "Unable to load the ender chest of &f%player%." +command-endersee-error: "Unable to load the ender chest of %player%." # TPA -command-tpa-error-no-request-from-player: "You do not have a teleport request from &f%player%." -command-tpa-accept-all-success: "You have accepted &f%count% teleport request(s)." -command-tpa-deny-all-success: "You have denied &f%count% teleport request(s)." +command-tpa-error-no-request-from-player: "You do not have a teleport request from %player%." +command-tpa-accept-all-success: "You have accepted %count% teleport request(s)." +command-tpa-deny-all-success: "You have denied %count% teleport request(s)." description-tpa-here-toggle: "Toggle receiving tpahere requests" -command-teleport-here-request-disabled: "The player &f%player% has disabled tpahere requests." -command-tpa-here-toggle-enable: "&7Tpahere requests enabled &7for &f%player%." -command-tpa-here-toggle-disable: "&7Tpahere requests disabled &7for &f%player%." +command-teleport-here-request-disabled: "The player %player% has disabled tpahere requests." +command-tpa-here-toggle-enable: "Tpahere requests enabled for %player%." +command-tpa-here-toggle-disable: "Tpahere requests disabled for %player%." # Cross-server teleportation teleport-cross-server-not-supported: "Cross-server teleportation is not supported on this server." -teleport-cross-server-connecting: "Connecting to server &f%server%..." -teleport-cross-server-player-not-found: "Player &f%player% was not found on any server." +teleport-cross-server-connecting: "Connecting to server %server%..." +teleport-cross-server-player-not-found: "Player %player% was not found on any server." # ItemFrame description-itemframe: "Toggle item frame visibility" -command-itemframe-invisible: "Item frame is now invisible." -command-itemframe-visible: "Item frame is now visible." +command-itemframe-invisible: "Item frame is now invisible." +command-itemframe-visible: "Item frame is now visible." command-itemframe-not-found: "No item frame found. Look at an item frame and try again." # Death Message Module description-death-message: "Custom death messages" description-death-message-toggle: "Toggle death messages visibility" -command-death-message-toggle-disable: "#C084FC☠ #B794F4Death messages are now #E9D5FFhidden #B794F4for %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4Death messages are now #E9D5FFvisible #B794F4for %player%#B794F4." +command-death-message-toggle-disable: "☠ Death messages are now hidden for %player%." +command-death-message-toggle-enable: "☠ Death messages are now visible for %player%." # Death messages (detailed) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4died." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4was slain by #E9D5FF%killer%#B794F4." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4was killed by #E9D5FF%killer%#B794F4." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4was shot by #E9D5FF%killer%#B794F4." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4was blown up by #E9D5FF%killer%#B794F4." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4fell from a high place." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4burned to death." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4tried to swim in lava." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4drowned." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4was blown up." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4was struck by lightning." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4suffocated in a wall." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4starved to death." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4was poisoned." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4was killed by magic." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4withered away." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4was squashed by a falling block." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4experienced kinetic energy." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4fell out of the world." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4was pricked to death." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4was squished too much." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4froze to death." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4was obliterated by a sonic boom." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4discovered that the floor was lava." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4was killed trying to hurt someone." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4walked into a campfire." -death-hover-details: "#D8B4FE☠ Death Location#B794F4:\n#E9D5FF▸ World: #D8B4FE%world%\n#E9D5FF▸ Position: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oClick to teleport" +death-generic: "☠ %player% died." +death-by-player: "⚔ %player% was slain by %killer%." +death-by-mob: "☠ %player% was killed by %killer%." +death-by-projectile: "🏹 %player% was shot by %killer%." +death-by-mob-explosion: "💥 %player% was blown up by %killer%." +death-by-fall: "⬇ %player% fell from a high place." +death-by-fire: "🔥 %player% burned to death." +death-by-lava: "🌋 %player% tried to swim in lava." +death-by-drowning: "💧 %player% drowned." +death-by-explosion: "💥 %player% was blown up." +death-by-lightning: "⚡ %player% was struck by lightning." +death-by-suffocation: "▓ %player% suffocated in a wall." +death-by-starvation: "🍖 %player% starved to death." +death-by-poison: "☣ %player% was poisoned." +death-by-magic: "✦ %player% was killed by magic." +death-by-wither: "💀 %player% withered away." +death-by-falling-block: "▼ %player% was squashed by a falling block." +death-by-fly-into-wall: "💨 %player% experienced kinetic energy." +death-by-void: "✧ %player% fell out of the world." +death-by-cactus: "🌵 %player% was pricked to death." +death-by-cramming: "⊞ %player% was squished too much." +death-by-freeze: "❄ %player% froze to death." +death-by-sonic-boom: "◈ %player% was obliterated by a sonic boom." +death-by-magma: "♨ %player% discovered that the floor was lava." +death-by-thorns: "✵ %player% was killed trying to hurt someone." +death-by-campfire: "🔥 %player% walked into a campfire." +death-hover-details: "☠ Death Location:\n▸ World: %world%\n▸ Position: %x%, %y%, %z%\n\nClick to teleport" # Death Messages (fallback when no custom config is set) -death-message-generic: "#99E0FF%player% &7died." -death-message-player: "#99E0FF%player% &7was slain by #34cfe0%killer% &7using %weapon%&7." -death-message-mob: "#99E0FF%player% &7was killed by &c%mob%&7." -death-message-mythic-mob: "#99E0FF%player% &7was slain by %mob%&7!" +death-message-generic: "%player% died." +death-message-player: "%player% was slain by %killer% using %weapon%." +death-message-mob: "%player% was killed by %mob%." +death-message-mythic-mob: "%player% was slain by %mob%!" # Ignore, chat ping sound & teleport to another player -command-tp-other: "&7You just teleported #34cfe0%player% &7to #34cfe0%target%&7." +command-tp-other: "You just teleported %player% to %target%." description-ping-sound: "Toggle the chat ping sound" -command-ping-sound-enable: "&7Chat ping sound enabled &7for &f%player%." -command-ping-sound-disable: "&7Chat ping sound disabled &7for &f%player%." +command-ping-sound-enable: "Chat ping sound enabled for %player%." +command-ping-sound-disable: "Chat ping sound disabled for %player%." description-ignore: "Ignore a player, blocking their private messages and teleport requests" description-unignore: "Stop ignoring a player" description-ignore-list: "List the players you are ignoring" -command-ignore-add: "You are now ignoring &f%player%. You will no longer receive their private messages or teleport requests." -command-ignore-remove: "You are no longer ignoring &f%player%." -command-ignore-already: "You are already ignoring &f%player%." -command-ignore-not: "You are not ignoring &f%player%." +command-ignore-add: "You are now ignoring %player%. You will no longer receive their private messages or teleport requests." +command-ignore-remove: "You are no longer ignoring %player%." +command-ignore-already: "You are already ignoring %player%." +command-ignore-not: "You are not ignoring %player%." command-ignore-self: "You cannot ignore yourself." command-ignore-list-empty: "You are not ignoring anyone." -command-ignore-list-header: "You are ignoring &f%count% player(s):" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "You cannot send a message to #34cfe0%player% they are ignoring you." +command-ignore-list-header: "You are ignoring %count% player(s):" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "You cannot send a message to %player% they are ignoring you." description-del-home-other: "Delete a home of another player" # Homes system (public, shared, categories, favorites, preview, import) @@ -1205,30 +1205,30 @@ description-home-category: "Set the category of a home" description-home-favorite: "Toggle a home as favorite" description-home-import: "Import homes from another plugin" command-home-feature-disabled: "This home feature is disabled on this server." -command-home-public-enable: "Your home &f%name% is now public." -command-home-public-disable: "Your home &f%name% is no longer public." -command-home-public-limit: "You have reached the maximum number of public homes (&f%max%)." -command-home-not-accessible: "The home &f%name% of &f%player% is not accessible to you." -command-public-homes-header: "Public homes (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Teleport]" +command-home-public-enable: "Your home %name% is now public." +command-home-public-disable: "Your home %name% is no longer public." +command-home-public-limit: "You have reached the maximum number of public homes (%max%)." +command-home-not-accessible: "The home %name% of %player% is not accessible to you." +command-public-homes-header: "Public homes (%count%):" +command-public-homes-line: "- %player%:%name% Teleport to this home'>[Teleport]" command-public-homes-empty: "There is no public home." -command-home-share-add: "You shared your home &f%name% with &f%player%." -command-home-share-remove: "You stopped sharing your home &f%name% with &f%player%." -command-home-share-already: "Your home &f%name% is already shared with &f%player%." -command-home-share-not: "Your home &f%name% is not shared with &f%player%." +command-home-share-add: "You shared your home %name% with %player%." +command-home-share-remove: "You stopped sharing your home %name% with %player%." +command-home-share-already: "Your home %name% is already shared with %player%." +command-home-share-not: "Your home %name% is not shared with %player%." command-home-share-self: "You cannot share a home with yourself." -command-home-share-limit: "You have reached the maximum number of shares for this home (&f%max%)." -command-home-share-list-header: "Home &f%name% is shared with &f%count% player(s):" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "Home &f%name% is not shared with anyone." -command-home-category-set: "The category of your home &f%name% is now &f%category%." -command-home-category-reset: "The category of your home &f%name% has been removed." +command-home-share-limit: "You have reached the maximum number of shares for this home (%max%)." +command-home-share-list-header: "Home %name% is shared with %count% player(s):" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "Home %name% is not shared with anyone." +command-home-category-set: "The category of your home %name% is now %category%." +command-home-category-reset: "The category of your home %name% has been removed." command-home-category-invalid: "Invalid category name." -command-home-favorite-add: "Your home &f%name% is now a favorite." -command-home-favorite-remove: "Your home &f%name% is no longer a favorite." -command-home-preview: "&7Home &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teleport]" -command-home-import-start: "Importing homes from &f%source%..." -command-home-import-done: "Import finished: &f%imported% imported, &f%skipped% skipped, &f%errors% errors." -command-home-import-unknown: "Unknown import source &f%source%. Available: essentialsx." +command-home-favorite-add: "Your home %name% is now a favorite." +command-home-favorite-remove: "Your home %name% is no longer a favorite." +command-home-preview: "Home %name% - %world% (%x%, %y%, %z%) [Teleport]" +command-home-import-start: "Importing homes from %source%..." +command-home-import-done: "Import finished: %imported% imported, %skipped% skipped, %errors% errors." +command-home-import-unknown: "Unknown import source %source%. Available: essentialsx." command-home-import-error: "An error occurred during the import, check the console." -death-message-fists: "&7fists" \ No newline at end of file +death-message-fists: "fists" \ No newline at end of file diff --git a/src/main/resources/messages/messages_de.yml b/src/main/resources/messages/messages_de.yml index 1577d1c7..09ae86c2 100644 --- a/src/main/resources/messages/messages_de.yml +++ b/src/main/resources/messages/messages_de.yml @@ -20,176 +20,176 @@ prefix: "zEssentials • " you: "du" -trash: "&8Müll" +trash: "Müll" console: "Konsole" expired: "Abgelaufen" -player-not-found: "&f%player% wurde nicht gefunden." -module-disable: "Das &f%name% Modul ist deaktiviert. Du kannst diesen Befehl nicht verwenden." -code-not-found: "Konnte den Code nicht finden." +player-not-found: "%player% wurde nicht gefunden." +module-disable: "Das %name% Modul ist deaktiviert. Du kannst diesen Befehl nicht verwenden." +code-not-found: "Konnte den Code nicht finden." rules: - - "#ffd353ℹ sᴇʀᴠᴇʀʀᴇɢᴇʟɴ#3f3f3f:" - - "#3f3f3f• &7Respektiere alle Spieler und das Personal." - - "#3f3f3f• &7Kein Griefing oder Stehlen." - - "#3f3f3f• &7Kein Cheating oder Hacking." - - "#3f3f3f• &7Halte den Chat sauber und respektvoll." - - "#3f3f3f• &7Kein Spamming oder Werbung." + - "ℹ sᴇʀᴠᴇʀʀᴇɢᴇʟɴ:" + - "• Respektiere alle Spieler und das Personal." + - "• Kein Griefing oder Stehlen." + - "• Kein Cheating oder Hacking." + - "• Halte den Chat sauber und respektvoll." + - "• Kein Spamming oder Werbung." # Befehle -command-syntax-error: "Du musst den Befehl so ausführen#656665: &f%syntax%" +command-syntax-error: "Du musst den Befehl so ausführen: %syntax%" command-no-permission: "Du hast keine Berechtigung, diesen Befehl auszuführen." command-no-console: "Nur ein Spieler kann diesen Befehl ausführen." command-no-arg: "Es ist unmöglich, den Befehl mit seinen Argumenten zu finden." command-restricted: "Du kannst diesen Befehl hier nicht verwenden." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "Du hast gerade die Konfigurationsdateien neu geladen." -command-reload-module: "Du hast gerade die Konfigurationsdateien des Moduls &f%module% neu geladen." -command-reload-error: "&f%module% wurde nicht gefunden!" -command-essentials: "&ezEssentials&8, &eVersion &f%version%" +command-reload-module: "Du hast gerade die Konfigurationsdateien des Moduls %module% neu geladen." +command-reload-error: "%module% wurde nicht gefunden!" +command-essentials: "zEssentials, Version %version%" # GameMode Befehle -command-gamemode: "&fSetze den Spielmodus&e %gamemode%&f für &b%player%&f." +command-gamemode: "Setze den Spielmodus %gamemode% für %player%." command-gamemode-invalid: "Du musst einen gültigen Spieler angeben." # Wetterbefehle command-time-error: "Du musst eine Welt angeben." -command-time-already-changing: "Die Zeit ändert sich bereits in &f%world%." -command-day: "&fDu hast gerade &eTageslicht&f in die Welt %world%&f gebracht." -command-night: "&fDu hast gerade &eNacht&f in die Welt %world%&f gebracht." -command-sun: "&fDu hast gerade die &eSonne&f in die Welt %world%&f gebracht." +command-time-already-changing: "Die Zeit ändert sich bereits in %world%." +command-day: "Du hast gerade Tageslicht in die Welt %world% gebracht." +command-night: "Du hast gerade Nacht in die Welt %world% gebracht." +command-sun: "Du hast gerade die Sonne in die Welt %world% gebracht." # Admin-Befehle -command-top: "&7Du wurdest gerade nach &etop&7 teleportiert." +command-top: "Du wurdest gerade nach top teleportiert." command-top-error: "Es konnte keine sichere Position gefunden werden, um dich zu transportieren." command-speed-invalid: "Du musst einen gültigen Spieler angeben." -command-speed-fly: "&7Du hast gerade die &nFlug&r&7-Geschwindigkeit auf &f%speed%&7 für &f%player%&7 gesetzt. &8(&f2 &7standardmäßig&8)" -command-speed-walk: "&7Du hast gerade die &nLauf&r&7-Geschwindigkeit auf &f%speed%&7 für &f%player%&7 gesetzt. &8(&f2 &7standardmäßig&8)" -command-speed-error: "Du musst eine Zahl zwischen &60 und &610 eingeben. &8(&f2 &7standardmäßig&8)" -command-god-enable: "&7Gott-Modus aktiviert &7für &f%player%." -command-god-disable: "&7Gott-Modus deaktiviert &7für &f%player%." -command-vanish-enable: "&7Vanish aktiviert &7für &f%player%." -command-vanish-disable: "&7Vanish deaktiviert &7für &f%player%." -command-night-vision-enable: "&7Nachtsicht aktiviert &7für &f%player%." -command-night-vision-disable: "&7Nachtsicht deaktiviert &7für &f%player%." -command-phantoms-enable: "&7Phantom-Spawn aktiviert &7für &f%player%." -command-phantoms-disable: "&7Phantom-Spawn deaktiviert &7für &f%player%." -command-ext-sender: "&7Du hast den Spieler &f%player%&7 gelöscht." +command-speed-fly: "Du hast gerade die Flug-Geschwindigkeit auf %speed% für %player% gesetzt. (2 standardmäßig)" +command-speed-walk: "Du hast gerade die Lauf-Geschwindigkeit auf %speed% für %player% gesetzt. (2 standardmäßig)" +command-speed-error: "Du musst eine Zahl zwischen 0 und 10 eingeben. (2 standardmäßig)" +command-god-enable: "Gott-Modus aktiviert für %player%." +command-god-disable: "Gott-Modus deaktiviert für %player%." +command-vanish-enable: "Vanish aktiviert für %player%." +command-vanish-disable: "Vanish deaktiviert für %player%." +command-night-vision-enable: "Nachtsicht aktiviert für %player%." +command-night-vision-disable: "Nachtsicht deaktiviert für %player%." +command-phantoms-enable: "Phantom-Spawn aktiviert für %player%." +command-phantoms-disable: "Phantom-Spawn deaktiviert für %player%." +command-ext-sender: "Du hast den Spieler %player% gelöscht." command-ext-receiver: "Du brennst jetzt nicht mehr." command-ext-error: "Du kannst keinen toten Spieler löschen!" -command-heal-all: "&7Du hast alle Spieler auf dem Server geheilt." -command-heal-sender: "&7Du hast gerade den Spieler &f%player%&7 geheilt." +command-heal-all: "Du hast alle Spieler auf dem Server geheilt." +command-heal-sender: "Du hast gerade den Spieler %player% geheilt." command-heal-receiver: "Du wurdest geheilt." command-heal-error: "Du kannst niemanden heilen, der tot ist!" -command-lighting-all: "&7Du hast gerade alle Spieler mit einem Blitz getroffen." -command-lighting: "&7Du hast gerade einen Blitz an der Zielposition beschworen." -command-lighting-sender: "&7Du hast gerade einen Blitz an der Position von &f%player%&7 beschworen." -command-lighting-receiver: "&cDu wurdest vom Blitz getroffen." +command-lighting-all: "Du hast gerade alle Spieler mit einem Blitz getroffen." +command-lighting: "Du hast gerade einen Blitz an der Zielposition beschworen." +command-lighting-sender: "Du hast gerade einen Blitz an der Position von %player% beschworen." +command-lighting-receiver: "Du wurdest vom Blitz getroffen." command-lighting-error: "Du kannst keinen toten Spieler mit einem Blitz treffen!" command-more-error: "Du kannst diesen Befehl nicht auf das aktuelle Item in der Hand anwenden." -command-more-success: "&7Du hast dein Item auf &f64&7 gesetzt." -command-feed-all: "&7Du hast alle Spieler auf dem Server gesättigt." -command-feed-sender: "&7Du hast gerade den Spieler &f%player%&7 gesättigt." +command-more-success: "Du hast dein Item auf 64 gesetzt." +command-feed-all: "Du hast alle Spieler auf dem Server gesättigt." +command-feed-sender: "Du hast gerade den Spieler %player% gesättigt." command-feed-receiver: "Du wurdest gesättigt." command-feed-error: "Du kannst niemanden sättigen, der tot ist!" -command-afk-enable: "&7Du bist nun als AFK&7 markiert." +command-afk-enable: "Du bist nun als AFK markiert." command-afk-disable: "Du bist nicht länger als AFK markiert." -command-message-target-afk: "&f%player% &7ist derzeit AFK&7." -command-compact-type: "Es ist unmöglich, das Material &f%material% zu komprimieren." -command-compact-error: "Du hast kein &f%item% in deinem Inventar." -command-compact-success: "&7Du hast gerade #0EEA93x%amount% #99E0FF%item% &7in #0EEA93x%toAmount% #99E0FF%toItem%&7 verwandelt." -command-compact-success-all: "&7Du hast gerade alle deine Items konvertiert." -command-hat-success: "&7Du hast gerade #0ef0ce%item% &7auf deinen Kopf gesetzt." +command-message-target-afk: "%player% ist derzeit AFK." +command-compact-type: "Es ist unmöglich, das Material %material% zu komprimieren." +command-compact-error: "Du hast kein %item% in deinem Inventar." +command-compact-success: "Du hast gerade x%amount% %item% in x%toAmount% %toItem% verwandelt." +command-compact-success-all: "Du hast gerade alle deine Items konvertiert." +command-hat-success: "Du hast gerade %item% auf deinen Kopf gesetzt." command-hat-error: "Du kannst keine Luft auf deinen Kopf setzen." -command-player-weather-reset: "&7Du hast gerade das Wetter auf das des Servers geändert." -command-player-weather-downfall: "&7Du hast gerade den Regen für dich eingeschaltet." -command-player-time-reset: "&7Du hast gerade die Zeit auf die des Servers geändert." -command-player-time-change: "&7Du hast gerade deine Zeit geändert." -command-lag-world-line: "&a%world%&7: &a%peaceful% friedliche&7, &c%monsters% Monster&7, &e%items% Items" -command-lag-world-header: "&aEntitäten in Welt &2%world%&a:" -command-lag-world-entry: "&7- &a%type%&7: &f%amount%" -command-lag-clear-success: "&7Entfernte &a%amount% &7Entitäten in &a%world%&7." -command-lag-clear-countdown: "&cEntitäten werden in &e%time% &cSekunden entfernt!" -command-fly-enable: "&7Flugmodus aktiviert &7für &f%player%." -command-fly-disable: "&7Flugmodus deaktiviert &7für &f%player%." -command-furnace-type: "Es ist unmöglich, das Material &f%material% zu schmelzen." -command-furnace-error: "Du hast kein &f%item% in deinem Inventar." -command-furnace-success: "&7Du hast gerade #0EEA93x%amount% #34cfe0%item% &7in #0EEA93x%toAmount% #34cfe0%toItem%&7 geschmolzen." -command-skull: "Du hast gerade den Kopf des Spielers &f%name% erhalten." +command-player-weather-reset: "Du hast gerade das Wetter auf das des Servers geändert." +command-player-weather-downfall: "Du hast gerade den Regen für dich eingeschaltet." +command-player-time-reset: "Du hast gerade die Zeit auf die des Servers geändert." +command-player-time-change: "Du hast gerade deine Zeit geändert." +command-lag-world-line: "%world%: %peaceful% friedliche, %monsters% Monster, %items% Items" +command-lag-world-header: "Entitäten in Welt %world%:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "Entfernte %amount% Entitäten in %world%." +command-lag-clear-countdown: "Entitäten werden in %time% Sekunden entfernt!" +command-fly-enable: "Flugmodus aktiviert für %player%." +command-fly-disable: "Flugmodus deaktiviert für %player%." +command-furnace-type: "Es ist unmöglich, das Material %material% zu schmelzen." +command-furnace-error: "Du hast kein %item% in deinem Inventar." +command-furnace-success: "Du hast gerade x%amount% %item% in x%toAmount% %toItem% geschmolzen." +command-skull: "Du hast gerade den Kopf des Spielers %name% erhalten." command-repair-error: "Das Item in deiner Hand kann nicht repariert werden." command-repair-success: "Du hast gerade das Item in deiner Hand repariert." command-repair-all-error: "Du hast keine Items zum Reparieren." command-repair-all-success: "Du hast gerade alle Items in deinem Inventar repariert." command-near-empty: "Keine Spieler in deiner Nähe." -command-near-player: "&fSpieler in deiner Nähe&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Spieler in deiner Nähe:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7Du hast gespielt&8: %playtime%" - - "&7Aktuelle Sitzung&8: %playtime_session%" -command-bottom: "&7Du wurdest gerade nach &ebottom&7 teleportiert." + - "Du hast gespielt: %playtime%" + - "Aktuelle Sitzung: %playtime_session%" +command-bottom: "Du wurdest gerade nach bottom teleportiert." command-bottom-error: "Es konnte keine sichere Position gefunden werden, um dich zu transportieren." -command-remove: "&7Es wurden %amount% &7Entitäten entfernt." +command-remove: "Es wurden %amount% Entitäten entfernt." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FFSpieler &f%player% #99E0FFist seit &7%date% #99E0FFoffline#99E0FF." + message: "Spieler %player% ist seit %date% offline." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FFSpieler &f%player% #99E0FFist seit &7%date% #99E0FFonline#99E0FF." + message: "Spieler %player% ist seit %date% online." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFSpielzeit&8: &f%playtime%" + message: "Spielzeit: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFIP-Adresse&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "Es konnten keine Spieler mit der IP &f%ip% gefunden werden." -command-seen-ip-line: "#99E0FFSpieler mit der IP &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "IP-Adresse:%ips%" +command-seen-address: " Zeige Spieler mit derselben Adresse'>%ip%" +command-seen-ip-empty: "Es konnten keine Spieler mit der IP %ip% gefunden werden." +command-seen-ip-line: "Spieler mit der IP %ip%:%players%" +command-seen-ip-info: " Zeige Spielerinformationen'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFLetzte Position&8: &f%world%, %x%, %y%, %z%" + message: "Letzte Position: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFErster Beitritt&8:&f%created_at%" + message: "Erster Beitritt:%created_at%" # Wirtschaftsbefehle -command-economy-not-found: " Es konnte keine Wirtschaft mit dem Namen &f%name% gefunden werden." -command-economy-reset-all-confirm: "Du bist dabei, alle Guthaben für &f%economy% zurückzusetzen. Führe den Befehl innerhalb von &f%seconds% Sekunden erneut aus, um zu bestätigen." -command-economy-reset-all-success: "#99E0FFDu hast alle Guthaben für &f%economy%#99E0FF zurückgesetzt." -command-economy-give-all-sender: "#99E0FFDu hast gerade &f%economyFormat% #99E0FFan die online Spieler verteilt." -command-economy-give-sender: "#99E0FFDu hast gerade &f%economyFormat% #99E0FFan den Spieler &7%player%#99E0FF gegeben." -command-economy-give-receiver: "#99E0FFDu hast gerade &f%economyFormat% erhalten." -command-economy-set-sender: "#99E0FFDu hast gerade &f%economyFormat% #99E0FFfür den Spieler &7%player%#99E0FF festgelegt." -command-economy-set-receiver: "#99E0FFDein &f%economyFormat% wurde gerade geändert." -command-economy-take-sender: "#99E0FFDu hast gerade &f%economyFormat% #99E0FFvom Spieler &7%player%#99E0FF abgezogen." -command-economy-take-receiver: "#99E0FFDu hast gerade &f%economyFormat% verloren." -command-economy-show-empty: "&f%player% hat kein Geld." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." +command-economy-not-found: " Es konnte keine Wirtschaft mit dem Namen %name% gefunden werden." +command-economy-reset-all-confirm: "Du bist dabei, alle Guthaben für %economy% zurückzusetzen. Führe den Befehl innerhalb von %seconds% Sekunden erneut aus, um zu bestätigen." +command-economy-reset-all-success: "Du hast alle Guthaben für %economy% zurückgesetzt." +command-economy-give-all-sender: "Du hast gerade %economyFormat% an die online Spieler verteilt." +command-economy-give-sender: "Du hast gerade %economyFormat% an den Spieler %player% gegeben." +command-economy-give-receiver: "Du hast gerade %economyFormat% erhalten." +command-economy-set-sender: "Du hast gerade %economyFormat% für den Spieler %player% festgelegt." +command-economy-set-receiver: "Dein %economyFormat% wurde gerade geändert." +command-economy-take-sender: "Du hast gerade %economyFormat% vom Spieler %player% abgezogen." +command-economy-take-receiver: "Du hast gerade %economyFormat% verloren." +command-economy-show-empty: "%player% hat kein Geld." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFDu hast&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "Du hast:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-money-other: - - "#99E0FF%player% hat&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "%player% hat:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "Der zu zahlende Betrag muss positiv sein." -command-pay-min: "Der Mindestbetrag, den du zahlen kannst, beträgt &f%amount%." -command-pay-max: "Der Höchstbetrag, den du zahlen kannst, beträgt &f%amount%." -command-pay-sender: "#99E0FFDu hast gerade #F8F327%amount%#99E0FF an den Spieler &f%player%#99E0FF gesendet." -command-pay-receiver: "&f%player% #99E0FFhat dir gerade #F8F327%amount%#99E0FF gesendet." +command-pay-min: "Der Mindestbetrag, den du zahlen kannst, beträgt %amount%." +command-pay-max: "Der Höchstbetrag, den du zahlen kannst, beträgt %amount%." +command-pay-sender: "Du hast gerade %amount% an den Spieler %player% gesendet." +command-pay-receiver: "%player% hat dir gerade %amount% gesendet." command-pay-disable: "Du kannst kein %name% senden." command-pay-self: "Du kannst dir selbst kein Geld senden." command-pay-not-enough: "Du hast nicht genug Geld." @@ -197,68 +197,68 @@ command-pay-not-enough: "Du hast nicht genug Geld." # Teleport-Befehle -command-tpa-error: "Du hast bereits eine Anfrage an #99E0FF%player% gesendet." +command-tpa-error: "Du hast bereits eine Anfrage an %player% gesendet." command-tpa-error-same: "Du kannst dich nicht zu dir selbst teleportieren." command-tpa-error-offline: "Spieler konnte nicht gefunden werden, er ist möglicherweise offline." command-tpa-error-to-late-empty: "Du hast keine Teleport-Anfrage." command-tpa-error-to-late-expire: "Die Teleport-Anfrage ist abgelaufen." command-tpa-sender: - - "#00FF00✔ #99E0FFTeleport-Anfrage an &f%displayName% #99E0FFgesendet." - - " ✘ Teleportation abbrechen'>#99E0FFGebe #00FF00/tpacancel %player%#99E0FF ein, um deine Anfrage abzubrechen." + - "✔ Teleport-Anfrage an %displayName% gesendet." + - " ✘ Teleportation abbrechen'>Gebe /tpacancel %player% ein, um deine Anfrage abzubrechen." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFhat angefragt, sich zu dir zu teleportieren!" - - " #99E0FFGebe #00FF00/tpaccept #99E0FFein, um die Anfrage #00FF00anzunehmen#99E0FF." - - " ✘ Teleportation ablehnen'>#99E0FFGebe /tpdeny #99E0FFein, um die Anfrage abzulehnen#99E0FF." + - "⚠ %displayName% hat angefragt, sich zu dir zu teleportieren!" + - " ✔ Teleportation annehmen'>Gebe /tpaccept ein, um die Anfrage anzunehmen." + - " ✘ Teleportation ablehnen'>Gebe /tpdeny ein, um die Anfrage abzulehnen." - "" - - "&7&oDu hast 60 Sekunden Zeit, die Teleport-Anfrage anzunehmen." -command-tpa-accept-receiver: "#99E0FFDu hast gerade die Teleport-Anfrage von #99E0FF%player% #00FF00angenommen." -command-tpa-accept-sender: "#99E0FF%player% hat gerade deine Teleport-Anfrage akzeptiert." -command-teleport-ignore-player: "Du kannst keine Teleport-Anfrage an #99E0FF%player% senden, da er dich ignoriert." + - "Du hast 60 Sekunden Zeit, die Teleport-Anfrage anzunehmen." +command-tpa-accept-receiver: "Du hast gerade die Teleport-Anfrage von %player% angenommen." +command-tpa-accept-sender: "%player% hat gerade deine Teleport-Anfrage akzeptiert." +command-teleport-ignore-player: "Du kannst keine Teleport-Anfrage an %player% senden, da er dich ignoriert." command-teleport-world: "Ihr müsst euch im selben Welt befinden, um zu teleportieren." command-tpa-error-to-late: "Du hast keine Teleport-Anfrage." command-tpa-error-to-late-2: "Die Anfrage ist abgelaufen." -command-tp-deny-sender: "#00FF00✔ Du hast die Teleport-Anfrage von &f%player% #00FF00abgelehnt." -command-tp-deny-receiver: "✘ &f%player% hat deine Teleport-Anfrage abgelehnt." -command-tp-cancel-error: "Du hast keine Teleport-Anfrage an &f%player% gesendet." -command-tp-cancel-sender: "Teleport-Anfrage an #99E0FF%player% abgebrochen." -command-tp-cancel-receiver: "&f%player% hat seine Teleport-Anfrage an dich abgebrochen." -command-world-teleport-self: "Du wurdest gerade in die Welt &f%world% teleportiert." -command-world-teleport-other: "Du hast den Spieler &f%player% in die Welt &f%world% teleportiert." -command-random-tp-other: "Du hast den Spieler &f%player% zufällig in die Welt &f%world% teleportiert." -command-tp: "&fDu hast dich gerade zu dem Spieler #34cfe0%player%&f teleportiert." -command-tp-location: "&fDu hast dich gerade zu #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f teleportiert." -command-tp-location-other: "&fDu hast gerade #34cfe0%player% &fan #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f teleportiert." -command-tp-all: "&fDu hast gerade alle Spieler zu dir teleportiert." -command-tp-self: "&fDu hast gerade #34cfe0%player%&f zu deiner Position teleportiert." -command-back: "&7Zurück zum vorherigen Standort." +command-tp-deny-sender: "✔ Du hast die Teleport-Anfrage von %player% abgelehnt." +command-tp-deny-receiver: "✘ %player% hat deine Teleport-Anfrage abgelehnt." +command-tp-cancel-error: "Du hast keine Teleport-Anfrage an %player% gesendet." +command-tp-cancel-sender: "Teleport-Anfrage an %player% abgebrochen." +command-tp-cancel-receiver: "%player% hat seine Teleport-Anfrage an dich abgebrochen." +command-world-teleport-self: "Du wurdest gerade in die Welt %world% teleportiert." +command-world-teleport-other: "Du hast den Spieler %player% in die Welt %world% teleportiert." +command-random-tp-other: "Du hast den Spieler %player% zufällig in die Welt %world% teleportiert." +command-tp: "Du hast dich gerade zu dem Spieler %player% teleportiert." +command-tp-location: "Du hast dich gerade zu %x%, %y%, %z% teleportiert." +command-tp-location-other: "Du hast gerade %player% an %x%, %y%, %z% teleportiert." +command-tp-all: "Du hast gerade alle Spieler zu dir teleportiert." +command-tp-self: "Du hast gerade %player% zu deiner Position teleportiert." +command-back: "Zurück zum vorherigen Standort." command-back-error: "Kein letzter Standort vorhanden. Zurückgehen unmöglich." command-random-tp-error: "Nach mehreren Versuchen wurde kein sicherer Ort gefunden, bitte versuche es erneut." # Erster Beitritt -join-message: "#99E0FF%player% &7hat das Spiel betreten" -quit-message: "#99E0FF%player% &7hat das Spiel verlassen" -first-join-message: "&7Willkommen #99E0FF%player% &7auf ! &8(&f%totalUserFormat% &7registrierte Spieler&8)" +join-message: "%player% hat das Spiel betreten" +quit-message: "%player% hat das Spiel verlassen" +first-join-message: "Willkommen %player% auf ! (%totalUserFormat% registrierte Spieler)" first-join-motd: - "" - - "#00FF00✔ #99E0FFWillkommen %player%#99E0FF !" + - "✔ Willkommen %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Tritt dem Server-Discord bei Discord !'>https://discord.groupez.dev/" + - "Website: Öffne die Website !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FFWillkommen zurück %player%#99E0FF !" + - "Willkommen zurück %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Tritt dem Server-Discord bei Discord !'>https://discord.groupez.dev/" + - "Website: Öffne die Website !'>https://minecraft-inventory-builder.com/" - "" # Spawn -command-set-spawn: "&fDu hast gerade den Spawn-Punkt gesetzt." +command-set-spawn: "Du hast gerade den Spawn-Punkt gesetzt." command-spawn-not-define: "Der Spawn-Punkt existiert nicht. Bitte kontaktiere einen Administrator." @@ -465,8 +465,8 @@ format-hour: "Stunde" format-hours: "Stunden" format-day: "Tag" format-days: "Tage" -cooldown: "✘ Du musst &f%cooldown% warten, bevor du diese Aktion durchführen kannst." -cooldown-commands: "✘ Du musst &f%cooldown% warten, bevor du diese Befehle ausführen kannst." +cooldown: "✘ Du musst %cooldown% warten, bevor du diese Aktion durchführen kannst." +cooldown-commands: "✘ Du musst %cooldown% warten, bevor du diese Befehle ausführen kannst." # Teleportation @@ -476,87 +476,87 @@ teleport-error-location: "Du kannst nicht sicher teleportiert werden." # RTP-Warteschlangensystem teleport-already-in-queue: "Du bist bereits in der Teleportations-Warteschlange!" -teleport-added-to-queue: "Du wurdest zur Teleportations-Warteschlange hinzugefügt. Position: #0EEA93%position%" +teleport-added-to-queue: "Du wurdest zur Teleportations-Warteschlange hinzugefügt. Position: %position%" teleport-message: type: ACTION - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." teleport-success: type: ACTION - message: "#99E0FFDu wurdest erfolgreich teleportiert!" + message: "Du wurdest erfolgreich teleportiert!" teleport-message-spawn: - - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + - message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." - type: ACTION - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." teleport-success-spawn: - - message: "&7Du wurdest zu #0EEA93spawn &7teleportiert!" + - message: "Du wurdest zu spawn teleportiert!" - type: ACTION - message: "&7Du wurdest zu #0EEA93spawn &7teleportiert!" + message: "Du wurdest zu spawn teleportiert!" teleport-message-warp: - - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + - message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." - type: ACTION - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." teleport-success-warp: - - message: "&7Du wurdest zum Warp #0EEA93%name% &7teleportiert!" + - message: "Du wurdest zum Warp %name% teleportiert!" - type: ACTION - message: "&7Du wurdest zum Warp #0EEA93%name% &7teleportiert!" + message: "Du wurdest zum Warp %name% teleportiert!" teleport-message-random: type: ACTION - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." teleport-success-random: type: ACTION - message: "#99E0FFDu wurdest erfolgreich teleportiert!" + message: "Du wurdest erfolgreich teleportiert!" teleport-message-home: - - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + - message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." - type: ACTION - message: "&7Teleportation in #0EEA93%seconds% &7Sekunden, du darfst dich nicht bewegen." + message: "Teleportation in %seconds% Sekunden, du darfst dich nicht bewegen." teleport-success-home: - - message: "&7Du wurdest nach Hause #0EEA93%name% &7teleportiert!" + - message: "Du wurdest nach Hause %name% teleportiert!" - type: ACTION - message: "&7Du wurdest nach Hause #0EEA93%name% &7teleportiert!" + message: "Du wurdest nach Hause %name% teleportiert!" # Warps -command-warp-already-exist: "Warp &f%name% existiert bereits. &7Verwende den Befehl &n/setwarp %name% true&r, um den Warp zu ändern." -command-warp-doesnt-exist: "Warp &f%name% existiert nicht." -command-warp-no-permission: "Du hast keine Berechtigung, den Warp &f%name% zu nutzen." +command-warp-already-exist: "Warp %name% existiert bereits. Verwende den Befehl Verwende diesen Befehl'>/setwarp %name% true, um den Warp zu ändern." +command-warp-doesnt-exist: "Warp %name% existiert nicht." +command-warp-no-permission: "Du hast keine Berechtigung, den Warp %name% zu nutzen." command-warp-create: - - "#00ff00Du hast den Warp &f%name% #00ff00an deiner Position erstellt." - - "&7Warp-Berechtigung ist: permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + - "Du hast den Warp %name% an deiner Position erstellt." + - "Warp-Berechtigung ist: Befehl kopieren, um Berechtigung für einen Spieler hinzuzufügen'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: - - "Verwendung&8: &f/warp " - - "&7Warps&8:&f%destinations%" + - "Verwendung: /warp " + - "Warps:%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Warps&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "#00ff00Du hast den Warp &f%name% #00ff00entfernt." +command-warp-destination: " Klicke, um zu Warp %name% zu teleportieren'>%name%" +command-warp-list: "Warps:%destinations%" +command-warp-list-info: " Klicke, um zu Warp %name% zu teleportieren'>%name%" +command-warp-delete: "Du hast den Warp %name% entfernt." # Homes -command-set-home-invalide-name: "&f%name% ist kein gültiger Name, bitte wähle einen anderen." -command-set-home-too-long: "&f%name% ist zu lang, bitte wähle einen kürzeren Namen." -command-set-home-too-short: "&f%name% ist zu kurz, bitte wähle einen längeren Namen." -command-set-home-max: "Du kannst nicht mehr als &f%max% Homes haben." +command-set-home-invalide-name: "%name% ist kein gültiger Name, bitte wähle einen anderen." +command-set-home-too-long: "%name% ist zu lang, bitte wähle einen kürzeren Namen." +command-set-home-too-short: "%name% ist zu kurz, bitte wähle einen längeren Namen." +command-set-home-max: "Du kannst nicht mehr als %max% Homes haben." command-set-home-world: "Du kannst hier kein Home erstellen." command-set-home-create: - "" - - "#99E0FFDu hast das Home &f%name% #99E0FFerstellt. &8(&7%current%&8/&7%max%&8)" - - "&fVerwende den Befehl &n/home %name%&r, um dorthin zu teleportieren." + - "Du hast das Home %name% erstellt. (%current%/%max%)" + - "Verwende den Befehl Klicke, um zum Home zu teleportieren'>/home %name%, um dorthin zu teleportieren." - "" -command-home-doesnt-exist: "Das Home &f%name% existiert nicht." +command-home-doesnt-exist: "Das Home %name% existiert nicht." # Verfügbare Platzhalter: @@ -564,7 +564,7 @@ command-home-doesnt-exist: "Das Home &f%name% existiert nicht.♦ &7(%count%) &8- &7(Max: %max%)" + - "ᴅᴇɪɴᴇ ʜᴏᴍᴇѕ ♦ (%count%) - (Max: %max%)" # Verfügbare Platzhalter: # %count% - Anzahl der Homes @@ -577,7 +577,7 @@ command-home-information-multi-line-header: # %z% - Z-Koordinate des Homes command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7in %world% (%environment%) [KLICK]" + message: " ♢ %name% in %world% (%environment%) Klicke, um zu Home %name% zu teleportieren'>[KLICK]" # Verfügbare Platzhalter: @@ -598,87 +598,87 @@ command-home-information-multi-line-footer: # %z% - Z-Koordinate des Homes command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccᴅᴇɪɴᴇ ʜᴏᴍᴇѕ ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" + message: "ᴅᴇɪɴᴇ ʜᴏᴍᴇѕ ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Klicke hier, um zum Heim %name% zu teleportieren'>%name%" command-home-icon-error: "Du musst einen Gegenstand in der Hand halten, um das Symbol deines Heims zu ändern." -command-home-icon-success: "#00ff00Du hast gerade das Heim-Symbol &f%name%#00ff00 geändert." -command-home-icon-reset: "#00ff00Du hast gerade das Heim-Symbol &f%name%#00ff00 zurückgesetzt." -command-home-delete: "#99E0FFDu hast gerade das Heim &f%name%#99E0FF gelöscht." -command-home-admin-delete: "#00ff00Du hast gerade das Heim &f%name%#00ff00 von &b%player%#00ff00 gelöscht." -command-home-admin-set: "#00ff00Du hast gerade das Heim &f%name%#00ff00 von &b%player%#00ff00 erstellt." -command-home-admin-list: "#8cc0cc%player% ʜᴏᴍᴇs&8:&f%homes%" -command-home-admin-list-info: " &f%name%&7" +command-home-icon-success: "Du hast gerade das Heim-Symbol %name% geändert." +command-home-icon-reset: "Du hast gerade das Heim-Symbol %name% zurückgesetzt." +command-home-delete: "Du hast gerade das Heim %name% gelöscht." +command-home-admin-delete: "Du hast gerade das Heim %name% von %player% gelöscht." +command-home-admin-set: "Du hast gerade das Heim %name% von %player% erstellt." +command-home-admin-list: "%player% ʜᴏᴍᴇs:%homes%" +command-home-admin-list-info: " Klicke hier, um zum Heim %name% zu teleportieren'>%name%" # Sanktionen command-kick-notify: type: WITHOUT_PREFIX - message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>&8(#f59e07Sanktion&8) #8aebeb%player% #e33414hat den Spieler #e0d12d%target%#e33414 gekickt." + message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>(Sanktion) %player% hat den Spieler %target% gekickt." command-ban-notify: type: WITHOUT_PREFIX - message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%Ablauf: %expired_at%'>&8(#f59e07Sanktion&8) #8aebeb%player% #e33414hat den Spieler #e0d12d%target%#e33414 gebannt." + message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%Ablauf: %expired_at%'>(Sanktion) %player% hat den Spieler %target% gebannt." command-mute-notify: type: WITHOUT_PREFIX - message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%Ablauf: %expired_at%'>&8(#f59e07Sanktion&8) #8aebeb%player% #e33414hat den Spieler #e0d12d%target%#e33414 gemutet." + message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%Ablauf: %expired_at%'>(Sanktion) %player% hat den Spieler %target% gemutet." command-unmute-notify: type: WITHOUT_PREFIX - message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>&8(#f59e07Sanktion&8) #8aebeb%player% #e33414hat den Spieler #e0d12d%target%#e33414 entmutet." + message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>(Sanktion) %player% hat den Spieler %target% entmutet." command-unban-notify: type: WITHOUT_PREFIX - message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>&8(#f59e07Sanktion&8) #8aebeb%player% #e33414hat den Spieler #e0d12d%target%#e33414 entbannt." + message: "Von: %sender%Dauer: %duration%Grund: %reason%Datum: %created_at%'>(Sanktion) %player% hat den Spieler %target% entbannt." command-ban-error-duration: "Die Dauer einer Bannung muss mindestens 1 Sekunde betragen." command-mute-error-duration: "Die Dauer einer Mutung muss mindestens 1 Sekunde betragen." -command-un-mute-error: "&f%player% ist nicht gemutet." -command-un-ban-error: "&f%player% ist nicht gebannt." +command-un-mute-error: "%player% ist nicht gemutet." +command-un-ban-error: "%player% ist nicht gebannt." command-sanction-error: "Du kannst diesen Spieler nicht sanktionieren. Er ist geschützt." message-kick: - "" - "Du wurdest gerade vom Server gekickt aus folgendem Grund:" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&fDu hast gerade deine Stimme verloren." - - "&fDauer&8: %duration%" - - "&fGrund&8: #82d1ff%reason%" + - "Du hast gerade deine Stimme verloren." + - "Dauer: %duration%" + - "Grund: %reason%" - "" message-unmute: - "" - - "&fDu hast gerade deine Stimme zurückerhalten, Glückwunsch!" - - "&fGrund&8: #82d1ff%reason%" + - "Du hast gerade deine Stimme zurückerhalten, Glückwunsch!" + - "Grund: %reason%" - "" message-mute-talk: - "" - - "&fDu hast nicht das Recht zu sprechen." + - "Du hast nicht das Recht zu sprechen." - "" - - "&fDauer&8: %duration%" - - "&fGrund&8: #82d1ff%reason%" + - "Dauer: %duration%" + - "Grund: %reason%" - "" message-ban: - "" - "Du wurdest gerade vom Server gebannt aus folgendem Grund:" - - "&f%reason%" - - "&fDauer&8: &7%duration%" + - "%reason%" + - "Dauer: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "Du bist auf dem Server gebannt:" - - "&f%reason%" - - "&fVerbleibende Zeit&8: &7%remaining%" + - "%reason%" + - "Verbleibende Zeit: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" # Chat chat-error: "Es ist unmöglich, dich sprechen zu lassen, deine Daten sind nicht geladen." chat-alphanumeric-regex: "Du verwendest ein verbotenes Zeichen." -chat-cooldown: "Bitte warte, bevor du deine nächste Nachricht sendest. &8(&7%cooldown%&8)" +chat-cooldown: "Bitte warte, bevor du deine nächste Nachricht sendest. (%cooldown%)" chat-same: "Du kannst nicht denselben Satz wiederholen." chat-link: "Du kannst keinen Link im Chat senden." chat-item-forbidden-characters: "Du kannst dieses Item nicht anzeigen, da sein Name verbotene Zeichen enthält." @@ -686,14 +686,14 @@ chat-disable: "Der Chat ist momentan nicht verfügbar." chat-caps: "Du musst nicht schreien, um zu sprechen!" chat-flood: "Du kannst nicht auf diese Weise sprechen." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% hat keine Nachricht geschrieben." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% hat keine Nachricht geschrieben." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "Der Chat wurde gerade gelöscht." command-chat-disable-error: "Der Chat ist bereits deaktiviert." command-chat-disable-success: "Du hast gerade den Chat deaktiviert." @@ -701,55 +701,55 @@ command-chat-enable-error: "Der Chat ist bereits aktiviert." command-chat-enable-success: "Du hast gerade den Chat aktiviert." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" + message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" # Nachrichten command-message-self: "Du kannst nicht mit dir selbst sprechen." -command-message-disable: "&f%player% hat private Nachrichten deaktiviert." +command-message-disable: "%player% hat private Nachrichten deaktiviert." command-message-mute: "Du darfst nicht sprechen." -command-message-me: "&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6" +command-message-me: "Klicke, um zu antworten'>(me -> %target%) " +command-message-other: "Klicke, um zu antworten'>(%target% -> me) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Sanction für %sender% öffnen'>%sender% -> Sanction für %receiver% öffnen'>%receiver%) %message%" command-message-error: "Du hast niemanden, dem du antworten kannst." -command-message-toggle-enable: "&7Private Nachrichten aktiviert &7für &f%player%." -command-message-toggle-disable: "&7Private Nachrichten deaktiviert &7für &f%player%." -command-social-spy-enable: "&7Social Spy aktiviert &7für &f%player%." -command-social-spy-disable: "&7Social Spy deaktiviert &7für &f%player%." -command-warp-empty: "Kein Warp definiert, benutze den Befehl &f/setwarp " -command-pay-toggle-enable: "&7Zahlungen aktiviert &7für &f%player%." -command-pay-toggle-disable: "&7Zahlungen deaktiviert &7für &f%player%." -command-pay-notification-toggle-enable: "&7Zahlungsbenachrichtigungen aktiviert &7für &f%player%." -command-pay-notification-toggle-disable: "&7Zahlungsbenachrichtigungen deaktiviert &7für &f%player%." -command-power-tools-toggle-enable: "Alle deine Power-Tools wurden &7für &f%player% aktiviert." -command-power-tools-toggle-disable: "Alle deine Power-Tools wurden &7für &f%player% deaktiviert." +command-message-toggle-enable: "Private Nachrichten aktiviert für %player%." +command-message-toggle-disable: "Private Nachrichten deaktiviert für %player%." +command-social-spy-enable: "Social Spy aktiviert für %player%." +command-social-spy-disable: "Social Spy deaktiviert für %player%." +command-warp-empty: "Kein Warp definiert, benutze den Befehl /setwarp " +command-pay-toggle-enable: "Zahlungen aktiviert für %player%." +command-pay-toggle-disable: "Zahlungen deaktiviert für %player%." +command-pay-notification-toggle-enable: "Zahlungsbenachrichtigungen aktiviert für %player%." +command-pay-notification-toggle-disable: "Zahlungsbenachrichtigungen deaktiviert für %player%." +command-power-tools-toggle-enable: "Alle deine Power-Tools wurden für %player% aktiviert." +command-power-tools-toggle-disable: "Alle deine Power-Tools wurden für %player% deaktiviert." # Kit -command-kit-no-permission: "Du hast keine Berechtigung, das Kit &f%kit% zu verwenden." -command-kit-not-found: "Das Kit &f%kit% konnte nicht gefunden werden." -command-kit-already-exists: "Das Kit &f%kit% existiert bereits." -command-kit-information-in-line-empty: "#8cc0ccʏᴏᴜʀ ᴋɪᴛs ♦ &7(%count%/%max%)&8: KEIN KIT VERFÜGBAR" -command-kit-information-in-line: "#8cc0ccʏᴏᴜʀ ᴋɪᴛs&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% warten, bevor du das Kit &f&n%name% erhalten kannst'><#de1f1f>%name%&7" +command-kit-no-permission: "Du hast keine Berechtigung, das Kit %kit% zu verwenden." +command-kit-not-found: "Das Kit %kit% konnte nicht gefunden werden." +command-kit-already-exists: "Das Kit %kit% existiert bereits." +command-kit-information-in-line-empty: "ʏᴏᴜʀ ᴋɪᴛs ♦ (%count%/%max%): KEIN KIT VERFÜGBAR" +command-kit-information-in-line: "ʏᴏᴜʀ ᴋɪᴛs:%kits%" +command-kit-information-in-line-info-available: " Klicke, um das Kit %name% zu erhalten'>%name%" +command-kit-information-in-line-info-unavailable: " Du musst %time% warten, bevor du das Kit %name% erhalten kannst'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% warten, bevor du das Kit &f&n%name% erhalten kannst'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Klicke, um das Kit %name% zu erhalten'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ Du musst %time% warten, bevor du das Kit %name% erhalten kannst'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "Du hast gerade das Kit &f%kit% geändert." -command-kit-create: "Du hast gerade das Kit &f%kit% erstellt." -command-kit-delete: "Du hast gerade das Kit &f%kit% gelöscht." +command-kit-editor-save: "Du hast gerade das Kit %kit% geändert." +command-kit-create: "Du hast gerade das Kit %kit% erstellt." +command-kit-delete: "Du hast gerade das Kit %kit% gelöscht." # Cooldown -command-cooldown-header: "&fSpieler Cooldown %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% hat keinen Cooldown." +command-cooldown-header: "Spieler Cooldown %player% (%amount%)" +command-cooldown-empty: "%player% hat keinen Cooldown." # Verfügbare Platzhalter: # %key% - Der Schlüssel zum Cooldown # %value% - Der Zeitstempel des Cooldown-Ablaufs @@ -758,174 +758,174 @@ command-cooldown-empty: "&f%player% hat keinen Cooldown." # %player% - Der Spitzname des Spielers command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴅᴇʟᴇᴛᴇ&8]" -command-cooldown-not-found: "&f%cooldown% wurde nicht gefunden." -command-cooldown-delete: "Du hast gerade den Cooldown &f%cooldown% von &n%player%&r entfernt." + message: "%key% - %createdAt% - %timeLeft% - Klicke, um den Cooldown zu entfernen'>[ᴅᴇʟᴇᴛᴇ]" +command-cooldown-not-found: "%cooldown% wurde nicht gefunden." +command-cooldown-delete: "Du hast gerade den Cooldown %cooldown% von %player% entfernt." # Verfügbare Platzhalter: # %key% - Der Schlüssel zum Cooldown # %player% - Der Spitzname des Spielers # %duration% - Die Dauer des Cooldowns -command-cooldown-create: "Du hast gerade den Cooldown &f%key% für &n%player%&r erstellt." +command-cooldown-create: "Du hast gerade den Cooldown %key% für %player% erstellt." command-item-empty: "Du hast keinen Gegenstand in der Hand." command-item-clear: "Du hast den Namen dieses Gegenstands gelöscht." -command-item-set: "Du hast deinen gehaltenen Gegenstand in &f%name% umbenannt." -command-item-lore-add: "Du hast gerade die Zeile &f%text% hinzugefügt." -command-item-lore-set: "Du hast gerade die Zeile %line% auf &f%text% gesetzt." +command-item-set: "Du hast deinen gehaltenen Gegenstand in %name% umbenannt." +command-item-lore-add: "Du hast gerade die Zeile %text% hinzugefügt." +command-item-lore-set: "Du hast gerade die Zeile %line% auf %text% gesetzt." command-item-lore-clear: "Du hast die Beschreibung des Gegenstands gelöscht." -command-item-lore-set-error: "Die Zeile &f%line% konnte nicht gefunden werden." -command-give-error: "Der Gegenstand &f%item% konnte nicht gefunden werden." -command-give: "Du hast gerade &n&fx%amount% %item%&r an den Spieler &f%player% gegeben." -command-give-all: "Du hast gerade &n&fx%amount% %item%&r an alle Online-Spieler gegeben." -command-give-vault: "Du hast gerade &n&fx%amount% %item%&r an das Lager von &f%player% gegeben." +command-item-lore-set-error: "Die Zeile %line% konnte nicht gefunden werden." +command-give-error: "Der Gegenstand %item% konnte nicht gefunden werden." +command-give: "Du hast gerade x%amount% %item% an den Spieler %player% gegeben." +command-give-all: "Du hast gerade x%amount% %item% an alle Online-Spieler gegeben." +command-give-vault: "Du hast gerade x%amount% %item% an das Lager von %player% gegeben." command-power-tool-error-item: "Du hast keinen Gegenstand in der Hand." command-power-tool-error-reset: "Dieser Gegenstand hat keinen aufgezeichneten Befehl." -command-power-tool-info: "Du hast gerade den Befehl &f/%command% auf den Gegenstand &f%item% gesetzt." -command-power-tool-reset: "Du hast gerade den Befehl auf dem Gegenstand &f%item% gelöscht." +command-power-tool-info: "Du hast gerade den Befehl /%command% auf den Gegenstand %item% gesetzt." +command-power-tool-reset: "Du hast gerade den Befehl auf dem Gegenstand %item% gelöscht." mailbox-remove-full: "Du musst Platz in deinem Inventar haben, um einen Gegenstand abzuholen." mailbox-remove-expire: "Du kannst diesen Gegenstand nicht mehr abholen, da er abgelaufen ist." mailbox-add: type: ACTION - message: "Ein Gegenstand wurde gerade deinem Postfach hinzugefügt &8(&f/mail&8)" -mailbox-give-error: "Der Gegenstand &f%item% konnte nicht gefunden werden." -mailbox-give: "Du hast gerade &n&fx%amount% %item%&r an das Postfach von &f%player% gegeben." -mailbox-give-all: "Du hast gerade &n&fx%amount% %item%&r an die Postfächer aller Online-Spieler gegeben." -mailbox-give-hand: "Du hast den Gegenstand in deiner Hand an das Postfach von &f%player% gesendet (&fx%amount% %item%)." -mailbox-give-all-hand: "Du hast den Gegenstand in deiner Hand (&fx%amount% %item%) an die Postfächer aller Online-Spieler gesendet." + message: "Ein Gegenstand wurde gerade deinem Postfach hinzugefügt (/mail)" +mailbox-give-error: "Der Gegenstand %item% konnte nicht gefunden werden." +mailbox-give: "Du hast gerade x%amount% %item% an das Postfach von %player% gegeben." +mailbox-give-all: "Du hast gerade x%amount% %item% an die Postfächer aller Online-Spieler gegeben." +mailbox-give-hand: "Du hast den Gegenstand in deiner Hand an das Postfach von %player% gesendet (x%amount% %item%)." +mailbox-give-all-hand: "Du hast den Gegenstand in deiner Hand (x%amount% %item%) an die Postfächer aller Online-Spieler gesendet." -hologram-create-error: "Hologramm &f%name% existiert bereits." +hologram-create-error: "Hologramm %name% existiert bereits." hologram-create: type: WITHOUT_PREFIX messages: - - "Du hast das Hologramm &f%name% erstellt." - - "&7Verwende den Befehl &n/hologram %command% %name%&r&7, um das Hologramm zu bearbeiten." -hologram-delete: "Hologramm &f%name% wurde gelöscht." -hologram-doesnt-exist: "Hologramm &f%name% existiert nicht." -hologram-is-not-a-text: "Hologramm &f%name% ist kein Text-Hologramm." -hologram-is-not-a-block: "Hologramm &f%name% ist kein Block-Hologramm." -hologram-is-not-a-item: "Hologramm &f%name% ist kein Item-Hologramm." -hologram-add-line: "Du hast eine Zeile zum Hologramm &f%name% hinzugefügt." -hologram-set-line: "Du hast die Zeile &f%line% zum Hologramm &f%name% hinzugefügt." -hologram-insert-before-line: "Du hast eine neue Zeile vor der Zeile &f%line% im Hologramm &f%name% hinzugefügt." -hologram-insert-after-line: "Du hast eine neue Zeile nach der Zeile &f%line% im Hologramm &f%name% hinzugefügt." -hologram-line-doesnt-exist: "Die Zeile &f%line% existiert nicht im Hologramm &f%name%." -hologram-remove-line: "Du hast die Zeile &f%line% aus dem Hologramm &f%name% entfernt." -hologram-scale: "Du hast die Skalierung des Hologramms &f%name% auf &7%x%&8, &7%y%&8, &7%z% geändert." -hologram-translation: "Du hast die Übersetzung des Hologramms &f%name% auf &7%x%&8, &7%y%&8, &7%z% geändert." -hologram-move-here: "Du hast das Hologramm &f%name% an deine Position teleportiert." -hologram-move-to: "Du hast das Hologramm &f%name% nach &7%x%&8, &7%y%&8, &7%z% teleportiert." -hologram-billboard: "Du hast das Billboard des Hologramms &f%name% auf &f%billboard% geändert." -hologram-text-alignment: "Du hast die Textausrichtung des Hologramms &f%name% auf &f%textAlignment% geändert." -hologram-yaw: "Du hast den Yaw-Winkel des Hologramms &f%name% auf &f%yaw% geändert." -hologram-pitch: "Du hast den Pitch-Winkel des Hologramms &f%name% auf &f%pitch% geändert." -hologram-text-background: "Du hast die Hintergrundfarbe des Hologramms &f%name% auf &f%color% geändert." + - "Du hast das Hologramm %name% erstellt." + - "Verwende den Befehl /hologram %command% %name%, um das Hologramm zu bearbeiten." +hologram-delete: "Hologramm %name% wurde gelöscht." +hologram-doesnt-exist: "Hologramm %name% existiert nicht." +hologram-is-not-a-text: "Hologramm %name% ist kein Text-Hologramm." +hologram-is-not-a-block: "Hologramm %name% ist kein Block-Hologramm." +hologram-is-not-a-item: "Hologramm %name% ist kein Item-Hologramm." +hologram-add-line: "Du hast eine Zeile zum Hologramm %name% hinzugefügt." +hologram-set-line: "Du hast die Zeile %line% zum Hologramm %name% hinzugefügt." +hologram-insert-before-line: "Du hast eine neue Zeile vor der Zeile %line% im Hologramm %name% hinzugefügt." +hologram-insert-after-line: "Du hast eine neue Zeile nach der Zeile %line% im Hologramm %name% hinzugefügt." +hologram-line-doesnt-exist: "Die Zeile %line% existiert nicht im Hologramm %name%." +hologram-remove-line: "Du hast die Zeile %line% aus dem Hologramm %name% entfernt." +hologram-scale: "Du hast die Skalierung des Hologramms %name% auf %x%, %y%, %z% geändert." +hologram-translation: "Du hast die Übersetzung des Hologramms %name% auf %x%, %y%, %z% geändert." +hologram-move-here: "Du hast das Hologramm %name% an deine Position teleportiert." +hologram-move-to: "Du hast das Hologramm %name% nach %x%, %y%, %z% teleportiert." +hologram-billboard: "Du hast das Billboard des Hologramms %name% auf %billboard% geändert." +hologram-text-alignment: "Du hast die Textausrichtung des Hologramms %name% auf %textAlignment% geändert." +hologram-yaw: "Du hast den Yaw-Winkel des Hologramms %name% auf %yaw% geändert." +hologram-pitch: "Du hast den Pitch-Winkel des Hologramms %name% auf %pitch% geändert." +hologram-text-background: "Du hast die Hintergrundfarbe des Hologramms %name% auf %color% geändert." hologram-text-background-error: "Hintergrundfarbe konnte nicht verarbeitet werden." -hologram-text-shadow: "Du hast den Textschatten des Hologramms &f%name% auf &f%textshadow% gesetzt." -hologram-see-through: "Du hast die Durchsichtigkeit des Hologramms &f%name% auf &f%seethrough% gesetzt." -hologram-shadow-strength: "Du hast die Schattenstärke des Hologramms &f%name% auf &f%shadow% gesetzt." -hologram-shadow-radius: "Du hast den Schattenradius des Hologramms &f%name% auf &f%shadow% gesetzt." -hologram-view-distance: "Du hast die Sichtdistanz des Hologramms &f%name% auf &f%distance% gesetzt." -hologram-list-empty: "Es gibt kein Hologramm. Um ein Hologramm zu erstellen, benutze den Befehl &f/holo create " +hologram-text-shadow: "Du hast den Textschatten des Hologramms %name% auf %textshadow% gesetzt." +hologram-see-through: "Du hast die Durchsichtigkeit des Hologramms %name% auf %seethrough% gesetzt." +hologram-shadow-strength: "Du hast die Schattenstärke des Hologramms %name% auf %shadow% gesetzt." +hologram-shadow-radius: "Du hast den Schattenradius des Hologramms %name% auf %shadow% gesetzt." +hologram-view-distance: "Du hast die Sichtdistanz des Hologramms %name% auf %distance% gesetzt." +hologram-list-empty: "Es gibt kein Hologramm. Um ein Hologramm zu erstellen, benutze den Befehl /holo create " hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛ Klicke, um dieses Hologramm zu löschen'>ᴅᴇʟᴇᴛᴇ" + message: "%name% - %world%: %x%, %y%, %z% - Klicke, um zu diesem Hologramm teleportiert zu werden'>ᴛᴇʟᴇᴘᴏʀᴛ Klicke, um dieses Hologramm zu löschen'>ᴅᴇʟᴇᴛᴇ" hologram-item-error: "Du kannst Luft nicht für dieses Hologramm verwenden." -hologram-item: "Du hast das Item des Hologramms &f%name% geändert." -hologram-block: "Du hast den Block des Hologramms &f%name% auf &f%material% geändert." +hologram-item: "Du hast das Item des Hologramms %name% geändert." +hologram-block: "Du hast den Block des Hologramms %name% auf %material% geändert." scoreboard-disable: "Du hast das Scoreboard deaktiviert." scoreboard-enable: "Du hast das Scoreboard aktiviert." -command-baltop-error: "Die Wirtschaft &f%name% konnte nicht gefunden werden." +command-baltop-error: "Die Wirtschaft %name% konnte nicht gefunden werden." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴍᴏsᴛ ᴍᴏɴᴇʏ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴍᴏsᴛ ᴍᴏɴᴇʏ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "Du hast die Voteparty auf &f%amount% Stimmen gesetzt." -command-voteparty-add: "Du hast &f%amount% Stimmen zur Voteparty hinzugefügt." -command-voteparty-remove: "Du hast &f%amount% Stimmen von der Voteparty entfernt." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "Du hast die Voteparty auf %amount% Stimmen gesetzt." +command-voteparty-add: "Du hast %amount% Stimmen zur Voteparty hinzugefügt." +command-voteparty-remove: "Du hast %amount% Stimmen von der Voteparty entfernt." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "Du hast eine Stimme für &f%player% hinzugefügt." -command-vote-add-error: "Die Seite &f%site% existiert nicht!" +command-vote-add: "Du hast eine Stimme für %player% hinzugefügt." +command-vote-add-error: "Die Seite %site% existiert nicht!" command-vote: type: ACTION message: "Du hast abgestimmt und einen Abstimmungsschlüssel erhalten." vote-offline: - "" - - "Du hast %amount% Mal abgestimmt, während du offline warst. Verwende den Befehl /mailbox , um deine Items zu erhalten!" + - "Du hast %amount% Mal abgestimmt, während du offline warst. Verwende den Befehl /mailbox , um deine Items zu erhalten!" - "" vault-lore: - "" - - "&fɪɴғᴏʀᴍᴀᴛɪᴏɴs" - - " #f8b175• &7Menge&8: &e%quantity%" + - "ɪɴғᴏʀᴍᴀᴛɪᴏɴs" + - " • Menge: %quantity%" - "" - - "&f➥ #fc99f8Linksklick &7für 1 nehmen" - - "&f➥ #fc99f8Rechtsklick &7für 64 nehmen" - - "&f➥ #fc99f8Sneak + Rechtsklick &7für alles nehmen" -command-vault-not-found: "Das Vault &f%vaultId% konnte nicht gefunden werden." + - "➥ Linksklick für 1 nehmen" + - "➥ Rechtsklick für 64 nehmen" + - "➥ Sneak + Rechtsklick für alles nehmen" +command-vault-not-found: "Das Vault %vaultId% konnte nicht gefunden werden." command-vault-no-permission: "Du hast keine Berechtigung, das Vault anzuzeigen." -command-vault-set-slot: "Du hast den Slot für &f%player% auf &7%slots% festgelegt." -command-vault-add-slot: "Du hast &7%amount% Slots zu &f%player% hinzugefügt." -command-vault-get-slot-empty: "Kein Gegenstand im Tresor &f%vault% Slot &f%slot% für &f%player% gefunden." -command-vault-get-slot-success: "Vault-Slot für &f%player%: Vault &7%vault%, Slot &7%slot%, Menge &7%amount%, Item &f%item%." -command-vault-delete-slot-success: "Du hast Slot &7%slot% aus Vault &7%vault% für &f%player% gelöscht." -command-vault-delete-slot-empty: "Slot &f%slot% im Vault &f%vault% für &f%player% konnte nicht gefunden werden." +command-vault-set-slot: "Du hast den Slot für %player% auf %slots% festgelegt." +command-vault-add-slot: "Du hast %amount% Slots zu %player% hinzugefügt." +command-vault-get-slot-empty: "Kein Gegenstand im Tresor %vault% Slot %slot% für %player% gefunden." +command-vault-get-slot-success: "Vault-Slot für %player%: Vault %vault%, Slot %slot%, Menge %amount%, Item %item%." +command-vault-delete-slot-success: "Du hast Slot %slot% aus Vault %vault% für %player% gelöscht." +command-vault-delete-slot-empty: "Slot %slot% im Vault %vault% für %player% konnte nicht gefunden werden." command-vault-change-icon-error: "Du hast ein Item in der Hand." command-vault-change-icon-success: "Du hast das Icon deines Vaults geändert." command-vault-reset-icon: "Du hast das Icon deines Vaults zurückgesetzt." command-vault-rename-start: "Bitte schreibe den neuen Namen des Vaults in den Chat." -command-vault-rename-success: "Du hast den Namen des Vaults auf &f%name% festgelegt." +command-vault-rename-success: "Du hast den Namen des Vaults auf %name% festgelegt." command-vault-rename-error: "Du kannst diesen Namen nicht für dein Vault verwenden." command-vault-rename-reset: "Du hast den Namen deines Vaults zurückgesetzt." command-enchant-invalid: "Du musst einen gültigen Spieler angeben." -command-enchant-error-enchant: "Verzauberung &f%name% konnte nicht gefunden werden." +command-enchant-error-enchant: "Verzauberung %enchant% konnte nicht gefunden werden." command-enchant-error-item-self: "Du musst einen Gegenstand in der Hand haben." command-enchant-error-item-player: "%player% hat keinen Gegenstand in der Hand." -command-enchant-remove-self: "Die Verzauberung &f%enchant% wurde von deinem gehaltenen Gegenstand entfernt." -command-enchant-remove-player: "Die Verzauberung &f%enchant% wurde vom Gegenstand in der Hand von &f%player% entfernt." -command-enchant-success-self: "Die Verzauberung &f%enchant% wurde auf deinen gehaltenen Gegenstand angewendet." -command-enchant-success-player: "Die Verzauberung &f%enchant% wurde auf den Gegenstand in der Hand von &f%player% angewendet." +command-enchant-remove-self: "Die Verzauberung %enchant% wurde von deinem gehaltenen Gegenstand entfernt." +command-enchant-remove-player: "Die Verzauberung %enchant% wurde vom Gegenstand in der Hand von %player% entfernt." +command-enchant-success-self: "Die Verzauberung %enchant% wurde auf deinen gehaltenen Gegenstand angewendet." +command-enchant-success-player: "Die Verzauberung %enchant% wurde auf den Gegenstand in der Hand von %player% angewendet." command-sudo-error: "Du kannst den Spieler nicht zwingen, Befehle auszuführen." -command-sudo-command: "Du hast den Spieler %player% gezielt, um den Befehl /%command% auszuführen." -command-sudo-message: "Du hast den Spieler %player% gezielt, um die Nachricht %message% zu senden." +command-sudo-command: "Du hast den Spieler %player% gezielt, um den Befehl /%command% auszuführen." +command-sudo-message: "Du hast den Spieler %player% gezielt, um die Nachricht %message% zu senden." # WorldEdit -command-worldedit-give-error: "Artikel &f%name% konnte nicht gefunden werden." -command-worldedit-give-sender: "Du hast gerade &f%item% dem Spieler &f%player% gegeben." -command-worldedit-give-receiver: "Du hast gerade &f%item% erhalten." -command-worldedit-material-not-found: "Material &f%material% konnte nicht gefunden werden." +command-worldedit-give-error: "Artikel %name% konnte nicht gefunden werden." +command-worldedit-give-sender: "Du hast gerade %item% dem Spieler %player% gegeben." +command-worldedit-give-receiver: "Du hast gerade %item% erhalten." +command-worldedit-material-not-found: "Material %material% konnte nicht gefunden werden." command-worldedit-confirm-price: - "" - - "Preis: %price%" - - "Blöcke:%materials%" - - "Dauer: %duration% (%blocks% Blöcke bei %speed% Block%s%/s)" + - "Preis: %price%" + - "Blöcke:%materials%" + - "Dauer: %duration% (%blocks% Blöcke bei %speed% Block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" + - "Klicke, um die Aktion zu bestätigen'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" command-worldedit-confirm-price-cut: - "" - - "Preis: %price%" - - "Dauer: %duration% (%blocks% Blöcke bei %speed% Block%s%/s)" + - "Preis: %price%" + - "Dauer: %duration% (%blocks% Blöcke bei %speed% Block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" -command-worldedit-confirm-material: " Menge: %amount%Gesamtpreis: %price%Preis pro Block: %price-per-block%'>" + - "Klicke, um die Aktion zu bestätigen'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" +command-worldedit-confirm-material: " Menge: %amount%Gesamtpreis: %price%Preis pro Block: %price-per-block%'>" command-worldedit-confirm-error: "Du kannst das jetzt nicht tun." command-worldedit-stop-empty: "Du hast keine laufende Bearbeitung." command-worldedit-stop-error: "Du kannst das Bearbeiten momentan nicht stoppen." @@ -942,66 +942,66 @@ worldedit-not-enough-money: "Du hast nicht genug Geld, um diese Bearbeitu worldedit-not-enough-items: "Du hast nicht genügend Items in deinem Inventar, du kannst das nicht tun." worldedit-selection-pos1: "Du hast gerade die erste Position definiert." worldedit-selection-pos2: "Du hast gerade die zweite Position definiert." -worldedit-selection-volume: "Du kannst nicht mehr als &f%blocks% gleichzeitig ändern." -worldedit-selection-distance: "Der Abstand zwischen deinen beiden Punkten in der Auswahl ist zu groß. (Maximum %distance% Blöcke)" +worldedit-selection-volume: "Du kannst nicht mehr als %blocks% gleichzeitig ändern." +worldedit-selection-distance: "Der Abstand zwischen deinen beiden Punkten in der Auswahl ist zu groß. (Maximum %distance% Blöcke)" -worldedit-start-calculate-price: "&7Preisberechnung läuft, bitte warte..." -worldedit-start-check-inventory: "&7Überprüfe, ob du genügend Items in deinem Inventar hast, bitte warte..." -worldedit-start-running: "&7Starte die aktuelle Bearbeitung, bitte warte..." +worldedit-start-calculate-price: "Preisberechnung läuft, bitte warte..." +worldedit-start-check-inventory: "Überprüfe, ob du genügend Items in deinem Inventar hast, bitte warte..." +worldedit-start-running: "Starte die aktuelle Bearbeitung, bitte warte..." worldedit-finish: "Bearbeitung abgeschlossen!" worldedit-refund: - "ʏᴏᴜ'ᴠᴇ ᴊᴜsᴛ ʙᴇᴇɴ ʀᴇғᴜɴᴅ" - "" - - "Preis: %price%" - - "Blöcke:%materials%" -worldedit-refund-material: " Menge: %amount%Gesamtpreis: %price%Preis pro Block: %price-per-block%'>" + - "Preis: %price%" + - "Blöcke:%materials%" +worldedit-refund-material: " Menge: %amount%Gesamtpreis: %price%Preis pro Block: %price-per-block%'>" worldedit-refund-empty: " Keine Blöcke zur Erstattung" -worldedit-bossbar: "#45ff45Verbleibende Zeit: %time%" +worldedit-bossbar: "Verbleibende Zeit: %time%" worldedit-speed-error: "Du hast keine Berechtigung, die Geschwindigkeit pro Sekunde einzustellen." # Ergänzte Übersetzungen command-clearinventory-success: "Du hast dein Inventar geleert." -command-clearinventory-success-other: "Du hast das Inventar von &f%player% geleert." -command-fly-add: "Du hast &f%player% gerade %time% Flugzeit hinzugefügt." -command-fly-enable-seconds: "&7Flugmodus aktiviert &7für &f%player%. &8(&7verbleibende Zeit %time%&8)" +command-clearinventory-success-other: "Du hast das Inventar von %player% geleert." +command-fly-add: "Du hast %player% gerade %time% Flugzeit hinzugefügt." +command-fly-enable-seconds: "Flugmodus aktiviert für %player%. (verbleibende Zeit %time%)" command-fly-end: "Du hast deine gesamte Flugzeit aufgebraucht, du kannst nicht mehr fliegen." command-fly-error: "Du hast keine Flugzeit mehr zur Verfügung." command-fly-error-other: "%player% hat keine Flugzeit mehr zur Verfügung." command-fly-error-world: "Du kannst in dieser Welt nicht fliegen." -command-fly-get: "%player%&8: &f%player%." -command-fly-info: "Du hast &f%time%." +command-fly-get: "%player%: %player%." +command-fly-info: "Du hast %time%." command-fly-info-empty: "Du hast keine Flugzeit verfügbar." -command-fly-remaining: "Du hast noch &f%time% Flugzeit übrig." -command-fly-remove: "Du hast &f%player% gerade %time% Flugzeit entfernt." -command-fly-set: "Du hast &f%player% gerade %time% Flugzeit gesetzt." -command-freeze-success: "&7Du hast den Spieler &f%player%&7 eingefroren." +command-fly-remaining: "Du hast noch %time% Flugzeit übrig." +command-fly-remove: "Du hast %player% gerade %time% Flugzeit entfernt." +command-fly-set: "Du hast %player% gerade %time% Flugzeit gesetzt." +command-freeze-success: "Du hast den Spieler %player% eingefroren." command-home-admin-list-empty: "Der Spieler hat kein Zuhause." command-home-error-teleport: "Position zum Teleportieren nicht gefunden, bitte lösche dein Zuhause." -command-kit-delete-error: "Der Kit &f%kit% konnte nicht gelöscht werden." -command-kit-give: "Du hast den Kit &f%kit% an %player% vergeben." +command-kit-delete-error: "Der Kit %kit% konnte nicht gelöscht werden." +command-kit-give: "Du hast den Kit %kit% an %player% vergeben." command-link-account-already-linked: "Du bist bereits mit einem Account verknüpft." command-link-account-disabled: "Du kannst deinen Account derzeit nicht verknüpfen." command-link-account-invalid-code: "Ungültiger Code." command-link-account-not-linked: "Du bist mit keinem Account verknüpft." command-link-account-reset: "Du hast deine Accountverknüpfung zurückgesetzt." -command-link-account-success: "Du hast deinen Account %discord% verknüpft." +command-link-account-success: "Du hast deinen Account %discord% verknüpft." command-pay-disabled: "Du kannst diesem Spieler kein Geld senden." command-pub: - message: "&8[&fPUB&8] %player%: %message%" + message: "[PUB] %player%: %message%" type: WITHOUT_PREFIX command-pub-pattern-error: "Deine Nachricht enthält verbotene Zeichen." -command-random-tp-configuration-not-found: "Die Konfiguration für die zufällige Teleportation in der Welt &f%world% wurde nicht gefunden." +command-random-tp-configuration-not-found: "Die Konfiguration für die zufällige Teleportation in der Welt %world% wurde nicht gefunden." command-spawn-first-not-define: "Der erste Spawn existiert nicht. Bitte kontaktiere einen Administrator." command-spawn-location-invalid: "Der Spawn ist ungültig, bitte kontaktiere einen Administrator." command-tp-location-error: "Die Koordinaten liegen außerhalb der Welt." -command-tpa-here-accept-receiver: "#99E0FFDu hast soeben #00FF00die Teleportationsanfrage von #99E0FF%player% akzeptiert." -command-tpa-here-accept-sender: "#99E0FF%player% hat deine Teleportationsanfrage gerade akzeptiert." -command-tpa-here-error: "Du hast bereits eine Anfrage an #99E0FF%player% gesendet." +command-tpa-here-accept-receiver: "Du hast soeben die Teleportationsanfrage von %player% akzeptiert." +command-tpa-here-accept-sender: "%player% hat deine Teleportationsanfrage gerade akzeptiert." +command-tpa-here-error: "Du hast bereits eine Anfrage an %player% gesendet." command-tpa-here-error-same: "Du kannst dich nicht zu dir selbst teleportieren." -command-un-freeze_success: "&7Du hast den Spieler &f%player%&7 enteist." -command-vault-info: "Vault-Infos für &f%player%: max &7%max%, Berechtigung &7%permissionSlots%, Plugin &7%pluginSlots%, benutzt &7%used%, frei &7%available%." -command-warp-invalid: "Warp &f%name% hat eine ungültige Position." +command-un-freeze_success: "Du hast den Spieler %player% enteist." +command-vault-info: "Vault-Infos für %player%: max %max%, Berechtigung %permissionSlots%, Plugin %pluginSlots%, benutzt %used%, frei %available%." +command-warp-invalid: "Warp %name% hat eine ungültige Position." command-worldedit-cancel: "Du hast deine aktuelle Auswahl abgebrochen." description-clear-random-word: "Lösche Zufallswörter" description-clearinventory: "Leere das Inventar eines Spielers" @@ -1037,132 +1037,132 @@ description-tpa-here: "Teleportiere einen Spieler zu dir" description-vault-info: "Zeige Informationen über das Vault eines Spielers" description-vault-show: "Zeige das Vault eines Spielers" description-worldedit-cancel: "Breche die aktuelle Auswahl ab" -experience-granted: "Du hast %amount% %type% an %player% vergeben." -experience-queried: "%player% hat %amount% %type%." -experience-setted: "Du hast %amount% %type% für %player% gesetzt." -experience-taken: "Du hast %amount% %type% von %player% entfernt." -mailbox-clear: "Du hast das Postfach von &f%player% geleert." - -mailbox-message-send: "Deine Nachricht wurde an &f%player% gesendet." -mailbox-message-receive: "&f%player% hat dir eine Nachricht gesendet &8(&f/mail read&8)" -mailbox-message-send-all: "Deine Nachricht wurde an &f%amount% Spieler gesendet." -mailbox-message-notify: "Du hast &f%amount% ungelesene Nachricht(en), benutze &f/mail read." +experience-granted: "Du hast %amount% %type% an %player% vergeben." +experience-queried: "%player% hat %amount% %type%." +experience-setted: "Du hast %amount% %type% für %player% gesetzt." +experience-taken: "Du hast %amount% %type% von %player% entfernt." +mailbox-clear: "Du hast das Postfach von %player% geleert." + +mailbox-message-send: "Deine Nachricht wurde an %player% gesendet." +mailbox-message-receive: "%player% hat dir eine Nachricht gesendet (/mail read)" +mailbox-message-send-all: "Deine Nachricht wurde an %amount% Spieler gesendet." +mailbox-message-notify: "Du hast %amount% ungelesene Nachricht(en), benutze Klicke, um deine Nachrichten zu lesen'>/mail read." mailbox-message-empty: "Du hast keine Nachricht." mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "Deine Nachrichten (&f%amount%)" + - "Deine Nachrichten (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Benutze &f/mail clearmessages, um sie zu löschen." + - "Benutze Klicke, um deine Nachrichten zu löschen'>/mail clearmessages, um sie zu löschen." - "" -mailbox-message-clear: "Du hast die Nachrichten von &f%player% gelöscht." +mailbox-message-clear: "Du hast die Nachrichten von %player% gelöscht." mailbox-message-self: "Du kannst dir selbst keine Nachricht senden." mailbox-message-mute: "Du kannst keine Nachricht senden, solange du stummgeschaltet bist." -mailbox-message-ignore: "&f%player% möchte deine Nachrichten nicht erhalten." -mailbox-message-full: "Das Postfach von &f%player% ist voll." -mailbox-message-too-long: "Deine Nachricht darf nicht länger als &f%max% Zeichen sein." +mailbox-message-ignore: "%player% möchte deine Nachrichten nicht erhalten." +mailbox-message-full: "Das Postfach von %player% ist voll." +mailbox-message-too-long: "Deine Nachricht darf nicht länger als %max% Zeichen sein." random-word-clear: "Das Zufallswort wurde gelöscht." -step-already-exist: "Schritt &f%step% hat bereits begonnen." -step-doesnt-exist: "Schritt &f%step% existiert nicht." -step-doesnt-started: "Schritt &f%step% wurde nicht gestartet." +step-already-exist: "Schritt %step% hat bereits begonnen." +step-doesnt-exist: "Schritt %step% existiert nicht." +step-doesnt-started: "Schritt %step% wurde nicht gestartet." # Enderchest -command-endersee-error: "Die Endertruhe von &f%player% konnte nicht geladen werden." +command-endersee-error: "Die Endertruhe von %player% konnte nicht geladen werden." # TPA -command-tpa-error-no-request-from-player: "Du hast keine Teleportanfrage von &f%player%." -command-tpa-accept-all-success: "Du hast &f%count% Teleportanfrage(n) akzeptiert." -command-tpa-deny-all-success: "Du hast &f%count% Teleportanfrage(n) abgelehnt." +command-tpa-error-no-request-from-player: "Du hast keine Teleportanfrage von %player%." +command-tpa-accept-all-success: "Du hast %count% Teleportanfrage(n) akzeptiert." +command-tpa-deny-all-success: "Du hast %count% Teleportanfrage(n) abgelehnt." description-tp-toggle: "Teleportanfragen ein-/ausschalten" -command-teleport-request-disabled: "Der Spieler &f%player% hat Teleportanfragen deaktiviert." -command-tp-toggle-enable: "&7Teleportanfragen aktiviert &7für &f%player%." -command-tp-toggle-disable: "&7Teleportanfragen deaktiviert &7für &f%player%." +command-teleport-request-disabled: "Der Spieler %player% hat Teleportanfragen deaktiviert." +command-tp-toggle-enable: "Teleportanfragen aktiviert für %player%." +command-tp-toggle-disable: "Teleportanfragen deaktiviert für %player%." description-tpa-here-toggle: "Tpahere-Anfragen ein-/ausschalten" -command-teleport-here-request-disabled: "Der Spieler &f%player% hat Tpahere-Anfragen deaktiviert." -command-tpa-here-toggle-enable: "&7Tpahere-Anfragen aktiviert &7für &f%player%." -command-tpa-here-toggle-disable: "&7Tpahere-Anfragen deaktiviert &7für &f%player%." +command-teleport-here-request-disabled: "Der Spieler %player% hat Tpahere-Anfragen deaktiviert." +command-tpa-here-toggle-enable: "Tpahere-Anfragen aktiviert für %player%." +command-tpa-here-toggle-disable: "Tpahere-Anfragen deaktiviert für %player%." # Cross-Server Teleportation teleport-cross-server-not-supported: "Cross-Server Teleportation wird auf diesem Server nicht unterstützt." -teleport-cross-server-connecting: "Verbinde mit Server &f%server%..." -teleport-cross-server-player-not-found: "Spieler &f%player% wurde auf keinem Server gefunden." +teleport-cross-server-connecting: "Verbinde mit Server %server%..." +teleport-cross-server-player-not-found: "Spieler %player% wurde auf keinem Server gefunden." # ItemFrame description-itemframe: "Rahmen Sichtbarkeit umschalten" -command-itemframe-invisible: "Der Rahmen ist jetzt unsichtbar." -command-itemframe-visible: "Der Rahmen ist jetzt sichtbar." +command-itemframe-invisible: "Der Rahmen ist jetzt unsichtbar." +command-itemframe-visible: "Der Rahmen ist jetzt sichtbar." command-itemframe-not-found: "Kein Rahmen gefunden. Schaue auf einen Rahmen und versuche es erneut." # Todesnachrichten Modul description-death-message: "Benutzerdefinierte Todesnachrichten" description-death-message-toggle: "Todesnachrichten Sichtbarkeit umschalten" -command-death-message-toggle-disable: "#C084FC☠ #B794F4Todesnachrichten sind jetzt #E9D5FFversteckt #B794F4für %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4Todesnachrichten sind jetzt #E9D5FFsichtbar #B794F4für %player%#B794F4." +command-death-message-toggle-disable: "☠ Todesnachrichten sind jetzt versteckt für %player%." +command-death-message-toggle-enable: "☠ Todesnachrichten sind jetzt sichtbar für %player%." # Todesnachrichten (detailliert) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4ist gestorben." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4wurde von #E9D5FF%killer%#B794F4 getötet." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4wurde von #E9D5FF%killer%#B794F4 getötet." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4wurde von #E9D5FF%killer%#B794F4 erschossen." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4wurde von #E9D5FF%killer%#B794F4 gesprengt." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4ist aus großer Höhe gefallen." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4ist verbrannt." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4versuchte in Lava zu schwimmen." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4ist ertrunken." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4wurde gesprengt." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4wurde vom Blitz getroffen." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4ist in einer Wand erstickt." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4ist verhungert." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4wurde vergiftet." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4wurde durch Magie getötet." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4ist verwelkt." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4wurde von einem fallenden Block zerquetscht." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4hat kinetische Energie erfahren." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4ist aus der Welt gefallen." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4wurde zu Tode gestochen." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4wurde zu sehr gequetscht." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4ist erfroren." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4wurde von einem Schallknall ausgelöscht." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4entdeckte, dass der Boden Lava war." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4wurde beim Versuch jemanden zu verletzen getötet." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4lief in ein Lagerfeuer." -death-hover-details: "#D8B4FE☠ Todesort#B794F4:\n#E9D5FF▸ Welt: #D8B4FE%world%\n#E9D5FF▸ Position: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oKlicke zum Teleportieren" +death-generic: "☠ %player% ist gestorben." +death-by-player: "⚔ %player% wurde von %killer% getötet." +death-by-mob: "☠ %player% wurde von %killer% getötet." +death-by-projectile: "🏹 %player% wurde von %killer% erschossen." +death-by-mob-explosion: "💥 %player% wurde von %killer% gesprengt." +death-by-fall: "⬇ %player% ist aus großer Höhe gefallen." +death-by-fire: "🔥 %player% ist verbrannt." +death-by-lava: "🌋 %player% versuchte in Lava zu schwimmen." +death-by-drowning: "💧 %player% ist ertrunken." +death-by-explosion: "💥 %player% wurde gesprengt." +death-by-lightning: "⚡ %player% wurde vom Blitz getroffen." +death-by-suffocation: "▓ %player% ist in einer Wand erstickt." +death-by-starvation: "🍖 %player% ist verhungert." +death-by-poison: "☣ %player% wurde vergiftet." +death-by-magic: "✦ %player% wurde durch Magie getötet." +death-by-wither: "💀 %player% ist verwelkt." +death-by-falling-block: "▼ %player% wurde von einem fallenden Block zerquetscht." +death-by-fly-into-wall: "💨 %player% hat kinetische Energie erfahren." +death-by-void: "✧ %player% ist aus der Welt gefallen." +death-by-cactus: "🌵 %player% wurde zu Tode gestochen." +death-by-cramming: "⊞ %player% wurde zu sehr gequetscht." +death-by-freeze: "❄ %player% ist erfroren." +death-by-sonic-boom: "◈ %player% wurde von einem Schallknall ausgelöscht." +death-by-magma: "♨ %player% entdeckte, dass der Boden Lava war." +death-by-thorns: "✵ %player% wurde beim Versuch jemanden zu verletzen getötet." +death-by-campfire: "🔥 %player% lief in ein Lagerfeuer." +death-hover-details: "☠ Todesort:\n▸ Welt: %world%\n▸ Position: %x%, %y%, %z%\n\nKlicke zum Teleportieren" # Todesnachrichten (Fallback wenn keine benutzerdefinierte Konfiguration gesetzt ist) -death-message-generic: "#99E0FF%player% &7ist gestorben." -death-message-player: "#99E0FF%player% &7wurde von #34cfe0%killer% &7mit %weapon% &7getötet." -death-message-mob: "#99E0FF%player% &7wurde von &c%mob% &7getötet." -death-message-mythic-mob: "#99E0FF%player% &7wurde von %mob% &7getötet!" -death-message-fists: "&7Fäusten" - -teleport-message-spawn-console: "Du hast den Spieler %player% zum Spawn teleportiert." -teleport-random-start: "&7Suche nach einem Ziel... du darfst dich nicht bewegen." +death-message-generic: "%player% ist gestorben." +death-message-player: "%player% wurde von %killer% mit %weapon% getötet." +death-message-mob: "%player% wurde von %mob% getötet." +death-message-mythic-mob: "%player% wurde von %mob% getötet!" +death-message-fists: "Fäusten" + +teleport-message-spawn-console: "Du hast den Spieler %player% zum Spawn teleportiert." +teleport-random-start: "Suche nach einem Ziel... du darfst dich nicht bewegen." worldedit-permission-error: "Du kannst WorldEdit hier nicht verwenden." # Ignorieren, Chat-Ping-Ton & Teleport zu einem anderen Spieler -command-tp-other: "&7Du hast gerade #34cfe0%player% &7zu #34cfe0%target%&7 teleportiert." +command-tp-other: "Du hast gerade %player% zu %target% teleportiert." description-ping-sound: "Chat-Ping-Ton ein-/ausschalten" -command-ping-sound-enable: "&7Chat-Ping-Ton aktiviert &7für &f%player%." -command-ping-sound-disable: "&7Chat-Ping-Ton deaktiviert &7für &f%player%." +command-ping-sound-enable: "Chat-Ping-Ton aktiviert für %player%." +command-ping-sound-disable: "Chat-Ping-Ton deaktiviert für %player%." description-ignore: "Einen Spieler ignorieren und dessen private Nachrichten und Teleport-Anfragen blockieren" description-unignore: "Einen Spieler nicht mehr ignorieren" description-ignore-list: "Die Spieler auflisten, die du ignorierst" -command-ignore-add: "Du ignorierst jetzt &f%player%. Du erhältst keine privaten Nachrichten oder Teleport-Anfragen mehr von ihm." -command-ignore-remove: "Du ignorierst &f%player% nicht mehr." -command-ignore-already: "Du ignorierst &f%player% bereits." -command-ignore-not: "Du ignorierst &f%player% nicht." +command-ignore-add: "Du ignorierst jetzt %player%. Du erhältst keine privaten Nachrichten oder Teleport-Anfragen mehr von ihm." +command-ignore-remove: "Du ignorierst %player% nicht mehr." +command-ignore-already: "Du ignorierst %player% bereits." +command-ignore-not: "Du ignorierst %player% nicht." command-ignore-self: "Du kannst dich nicht selbst ignorieren." command-ignore-list-empty: "Du ignorierst niemanden." -command-ignore-list-header: "Du ignorierst &f%count% Spieler:" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "Du kannst keine Nachricht an #34cfe0%player% senden, da er dich ignoriert." +command-ignore-list-header: "Du ignorierst %count% Spieler:" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "Du kannst keine Nachricht an %player% senden, da er dich ignoriert." description-del-home-other: "Das Zuhause eines anderen Spielers löschen" # Home-System (öffentlich, geteilt, Kategorien, Favoriten, Vorschau, Import) @@ -1175,29 +1175,29 @@ description-home-category: "Die Kategorie eines Homes festlegen" description-home-favorite: "Ein Home als Favorit umschalten" description-home-import: "Homes von einem anderen Plugin importieren" command-home-feature-disabled: "Diese Home-Funktion ist auf diesem Server deaktiviert." -command-home-public-enable: "Dein Home &f%name% ist jetzt öffentlich." -command-home-public-disable: "Dein Home &f%name% ist nicht mehr öffentlich." -command-home-public-limit: "Du hast die maximale Anzahl an öffentlichen Homes erreicht (&f%max%)." -command-home-not-accessible: "Das Home &f%name% von &f%player% ist für dich nicht zugänglich." -command-public-homes-header: "Öffentliche Homes (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Teleportieren]" +command-home-public-enable: "Dein Home %name% ist jetzt öffentlich." +command-home-public-disable: "Dein Home %name% ist nicht mehr öffentlich." +command-home-public-limit: "Du hast die maximale Anzahl an öffentlichen Homes erreicht (%max%)." +command-home-not-accessible: "Das Home %name% von %player% ist für dich nicht zugänglich." +command-public-homes-header: "Öffentliche Homes (%count%):" +command-public-homes-line: "- %player%:%name% Zu diesem Home teleportieren'>[Teleportieren]" command-public-homes-empty: "Es gibt kein öffentliches Home." -command-home-share-add: "Du hast dein Home &f%name% mit &f%player% geteilt." -command-home-share-remove: "Du teilst dein Home &f%name% nicht mehr mit &f%player%." -command-home-share-already: "Dein Home &f%name% ist bereits mit &f%player% geteilt." -command-home-share-not: "Dein Home &f%name% ist nicht mit &f%player% geteilt." +command-home-share-add: "Du hast dein Home %name% mit %player% geteilt." +command-home-share-remove: "Du teilst dein Home %name% nicht mehr mit %player%." +command-home-share-already: "Dein Home %name% ist bereits mit %player% geteilt." +command-home-share-not: "Dein Home %name% ist nicht mit %player% geteilt." command-home-share-self: "Du kannst ein Home nicht mit dir selbst teilen." -command-home-share-limit: "Du hast die maximale Anzahl an Freigaben für dieses Home erreicht (&f%max%)." -command-home-share-list-header: "Home &f%name% ist mit &f%count% Spieler(n) geteilt:" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "Home &f%name% ist mit niemandem geteilt." -command-home-category-set: "Die Kategorie deines Homes &f%name% ist jetzt &f%category%." -command-home-category-reset: "Die Kategorie deines Homes &f%name% wurde entfernt." +command-home-share-limit: "Du hast die maximale Anzahl an Freigaben für dieses Home erreicht (%max%)." +command-home-share-list-header: "Home %name% ist mit %count% Spieler(n) geteilt:" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "Home %name% ist mit niemandem geteilt." +command-home-category-set: "Die Kategorie deines Homes %name% ist jetzt %category%." +command-home-category-reset: "Die Kategorie deines Homes %name% wurde entfernt." command-home-category-invalid: "Ungültiger Kategoriename." -command-home-favorite-add: "Dein Home &f%name% ist jetzt ein Favorit." -command-home-favorite-remove: "Dein Home &f%name% ist kein Favorit mehr." -command-home-preview: "&7Home &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teleportieren]" -command-home-import-start: "Importiere Homes von &f%source%..." -command-home-import-done: "Import abgeschlossen: &f%imported% importiert, &f%skipped% übersprungen, &f%errors% Fehler." -command-home-import-unknown: "Unbekannte Importquelle &f%source%. Verfügbar: essentialsx." +command-home-favorite-add: "Dein Home %name% ist jetzt ein Favorit." +command-home-favorite-remove: "Dein Home %name% ist kein Favorit mehr." +command-home-preview: "Home %name% - %world% (%x%, %y%, %z%) [Teleportieren]" +command-home-import-start: "Importiere Homes von %source%..." +command-home-import-done: "Import abgeschlossen: %imported% importiert, %skipped% übersprungen, %errors% Fehler." +command-home-import-unknown: "Unbekannte Importquelle %source%. Verfügbar: essentialsx." command-home-import-error: "Beim Import ist ein Fehler aufgetreten, überprüfe die Konsole." diff --git a/src/main/resources/messages/messages_es.yml b/src/main/resources/messages/messages_es.yml index 5278c9b1..78fad23e 100644 --- a/src/main/resources/messages/messages_es.yml +++ b/src/main/resources/messages/messages_es.yml @@ -19,230 +19,230 @@ prefix: "zEssentials • " you: "tú" -trash: "&8Basura" +trash: "Basura" console: "Consola" expired: "Expirado" -player-not-found: "&f%player% no fue encontrado." -module-disable: "El módulo &f%name% está deshabilitado. No puedes usar este comando." -code-not-found: "No se puede encontrar el código." +player-not-found: "%player% no fue encontrado." +module-disable: "El módulo %name% está deshabilitado. No puedes usar este comando." +code-not-found: "No se puede encontrar el código." rules: - - "#ffd353ℹ ʀᴇɢʟᴀs ᴅᴇʟ sᴇʀᴠɪᴅᴏʀ#3f3f3f:" - - "#3f3f3f• &7Respeta a todos los jugadores y al staff." - - "#3f3f3f• &7No destruyas ni robes." - - "#3f3f3f• &7No hagas trampas ni uses hacks." - - "#3f3f3f• &7Mantén el chat limpio y respetuoso." - - "#3f3f3f• &7No hagas spam ni publicites." + - "ℹ ʀᴇɢʟᴀs ᴅᴇʟ sᴇʀᴠɪᴅᴏʀ:" + - "• Respeta a todos los jugadores y al staff." + - "• No destruyas ni robes." + - "• No hagas trampas ni uses hacks." + - "• Mantén el chat limpio y respetuoso." + - "• No hagas spam ni publicites." # Comandos -command-syntax-error: "Debes ejecutar el comando de esta forma#656665: &f%syntax%" +command-syntax-error: "Debes ejecutar el comando de esta forma: %syntax%" command-no-permission: "No tienes permiso para ejecutar este comando." command-no-console: "Solo un jugador puede ejecutar este comando." command-no-arg: "Imposible encontrar el comando con sus argumentos." command-restricted: "No puedes usar este comando aquí." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "Has recargado los archivos de configuración." -command-reload-module: "Has recargado los archivos de configuración del módulo &f%module%." -command-reload-error: "&f%module% no fue encontrado!" -command-essentials: "&ezEssentials&8, &eVersión &f%version%" +command-reload-module: "Has recargado los archivos de configuración del módulo %module%." +command-reload-error: "%module% no fue encontrado!" +command-essentials: "zEssentials, Versión %version%" # Comandos de GameMode -command-gamemode: "&fModo de juego establecido a&e %gamemode%&f para &b%player%&f." +command-gamemode: "Modo de juego establecido a %gamemode% para %player%." command-gamemode-invalid: "Necesitas especificar un jugador válido." # Comandos del clima command-time-error: "Debes especificar un mundo." -command-time-already-changing: "El tiempo ya está cambiando en &f%world%." -command-day: "&fHas traído &eluz del día&f al mundo %world%&f." -command-night: "&fHas traído &enoche&f al mundo %world%&f." -command-sun: "&fHas traído el &esol&f al mundo %world%&f." +command-time-already-changing: "El tiempo ya está cambiando en %world%." +command-day: "Has traído luz del día al mundo %world%." +command-night: "Has traído noche al mundo %world%." +command-sun: "Has traído el sol al mundo %world%." # Comandos de administración -command-top: "&7Has sido teletransportado a la &ecima&7." +command-top: "Has sido teletransportado a la cima." command-top-error: "No se pudo encontrar una posición segura para teletransportarte." command-speed-invalid: "Necesitas especificar un jugador válido." -command-speed-fly: "&7Acabas de configurar tu velocidad de vuelo a &f%speed%&7 para &f%player%&7. &8(&f2 &7por defecto&8)" -command-speed-walk: "&7Acabas de configurar tu velocidad de caminata a &f%speed%&7 para &f%player%&7. &8(&f2 &7por defecto&8)" -command-speed-error: "Debes ingresar un número entre &60 y &610. &8(&f2 &7por defecto&8)" -command-god-enable: "&7Modo dios habilitado &7para &f%player%." -command-god-disable: "&7Modo dios deshabilitado &7para &f%player%." -command-vanish-enable: "&7Vanish habilitado &7para &f%player%." -command-vanish-disable: "&7Vanish deshabilitado &7para &f%player%." -command-night-vision-enable: "&7Visión nocturna habilitada &7para &f%player%." -command-night-vision-disable: "&7Visión nocturna deshabilitada &7para &f%player%." -command-phantoms-enable: "&7Generación de fantasmas habilitada &7para &f%player%." -command-phantoms-disable: "&7Generación de fantasmas deshabilitada &7para &f%player%." -command-ext-sender: "&7Acabas de apagar al jugador &f%player%&7." +command-speed-fly: "Acabas de configurar tu velocidad de vuelo a %speed% para %player%. (2 por defecto)" +command-speed-walk: "Acabas de configurar tu velocidad de caminata a %speed% para %player%. (2 por defecto)" +command-speed-error: "Debes ingresar un número entre 0 y 10. (2 por defecto)" +command-god-enable: "Modo dios habilitado para %player%." +command-god-disable: "Modo dios deshabilitado para %player%." +command-vanish-enable: "Vanish habilitado para %player%." +command-vanish-disable: "Vanish deshabilitado para %player%." +command-night-vision-enable: "Visión nocturna habilitada para %player%." +command-night-vision-disable: "Visión nocturna deshabilitada para %player%." +command-phantoms-enable: "Generación de fantasmas habilitada para %player%." +command-phantoms-disable: "Generación de fantasmas deshabilitada para %player%." +command-ext-sender: "Acabas de apagar al jugador %player%." command-ext-receiver: "Ya no estás en llamas." command-ext-error: "¡No puedes apagar a alguien que está muerto!" -command-heal-all: "&7Has curado a todos los jugadores del servidor." -command-heal-sender: "&7Acabas de curar al jugador &f%player%&7." +command-heal-all: "Has curado a todos los jugadores del servidor." +command-heal-sender: "Acabas de curar al jugador %player%." command-heal-receiver: "Has sido curado." command-heal-error: "¡No puedes curar a alguien que está muerto!" -command-lighting-all: "&7Acabas de golpear a todos los jugadores con un rayo." -command-lighting: "&7Acabas de invocar un rayo en la ubicación seleccionada." -command-lighting-sender: "&7Acabas de invocar un rayo en la ubicación de &f%player%&7." -command-lighting-receiver: "&c¡Has sido alcanzado por un rayo!" +command-lighting-all: "Acabas de golpear a todos los jugadores con un rayo." +command-lighting: "Acabas de invocar un rayo en la ubicación seleccionada." +command-lighting-sender: "Acabas de invocar un rayo en la ubicación de %player%." +command-lighting-receiver: "¡Has sido alcanzado por un rayo!" command-lighting-error: "¡No puedes golpear a un jugador muerto con un rayo!" command-more-error: "No puedes ejecutar esta orden con el objeto en mano." -command-more-success: "&7Acabas de aumentar la cantidad de tu objeto a &f64&7." -command-feed-all: "&7Has alimentado a todos los jugadores del servidor." -command-feed-sender: "&7Acabas de alimentar al jugador &f%player%&7." +command-more-success: "Acabas de aumentar la cantidad de tu objeto a 64." +command-feed-all: "Has alimentado a todos los jugadores del servidor." +command-feed-sender: "Acabas de alimentar al jugador %player%." command-feed-receiver: "Has sido alimentado." command-feed-error: "¡No puedes alimentar a alguien que está muerto!" -command-afk-enable: "&7Ahora estás marcado como AFK&7." +command-afk-enable: "Ahora estás marcado como AFK." command-afk-disable: "Ya no estás marcado como AFK." -command-message-target-afk: "&f%player% &7está actualmente AFK&7." -command-compact-type: "Imposible compactar el material &f%material%." -command-compact-error: "No tienes &f%item% en tu inventario." -command-compact-success: "&7Acabas de transformar #0EEA93x%amount% #99E0FF%item% &7en #0EEA93x%toAmount% #99E0FF%toItem%&7." -command-compact-success-all: "&7Acabas de convertir todos tus ítems." -command-hat-success: "&7Acabas de ponerte #0ef0ce%item% &7en la cabeza." +command-message-target-afk: "%player% está actualmente AFK." +command-compact-type: "Imposible compactar el material %material%." +command-compact-error: "No tienes %item% en tu inventario." +command-compact-success: "Acabas de transformar x%amount% %item% en x%toAmount% %toItem%." +command-compact-success-all: "Acabas de convertir todos tus ítems." +command-hat-success: "Acabas de ponerte %item% en la cabeza." command-hat-error: "No puedes ponerte aire en la cabeza." -command-player-weather-reset: "&7Acabas de cambiar el clima al del servidor." -command-player-weather-downfall: "&7Acabas de poner la lluvia solo para ti." -command-player-time-reset: "&7Acabas de cambiar la hora al del servidor." -command-player-time-change: "&7Has cambiado tu hora." -command-lag-world-line: "&a%world%&7: &a%peaceful% pacíficas&7, &c%monsters% monstruos&7, &e%items% ítems" -command-lag-world-header: "&aEntidades del mundo &2%world%&a:" -command-lag-world-entry: "&7- &a%type%&7: &f%amount%" -command-lag-clear-success: "&7Se eliminaron &a%amount% &7entidades en &a%world%&7." -command-lag-clear-countdown: "&cEliminación de entidades en &e%time% &csegundos!" -command-fly-enable: "&7Modo vuelo habilitado &7para &f%player%." -command-fly-disable: "&7Modo vuelo deshabilitado &7para &f%player%." -command-furnace-type: "Imposible fundir el material &f%material%." -command-furnace-error: "No tienes &f%item% en tu inventario." -command-furnace-success: "&7Acabas de transformar #0EEA93x%amount% #34cfe0%item% &7en #0EEA93x%toAmount% #34cfe0%toItem%&7." -command-skull: "Acabas de obtener la cabeza del jugador &f%name%." +command-player-weather-reset: "Acabas de cambiar el clima al del servidor." +command-player-weather-downfall: "Acabas de poner la lluvia solo para ti." +command-player-time-reset: "Acabas de cambiar la hora al del servidor." +command-player-time-change: "Has cambiado tu hora." +command-lag-world-line: "%world%: %peaceful% pacíficas, %monsters% monstruos, %items% ítems" +command-lag-world-header: "Entidades del mundo %world%:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "Se eliminaron %amount% entidades en %world%." +command-lag-clear-countdown: "Eliminación de entidades en %time% segundos!" +command-fly-enable: "Modo vuelo habilitado para %player%." +command-fly-disable: "Modo vuelo deshabilitado para %player%." +command-furnace-type: "Imposible fundir el material %material%." +command-furnace-error: "No tienes %item% en tu inventario." +command-furnace-success: "Acabas de transformar x%amount% %item% en x%toAmount% %toItem%." +command-skull: "Acabas de obtener la cabeza del jugador %name%." command-repair-error: "El objeto en tu mano no se puede reparar." command-repair-success: "Acabas de reparar el objeto en tu mano." command-repair-all-error: "No tienes ítems para reparar." command-repair-all-success: "Acabas de reparar todos los objetos en tu inventario." command-near-empty: "No hay jugadores cerca de ti." -command-near-player: "&fJugadores cercanos a ti&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Jugadores cercanos a ti:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7Has jugado&8: %playtime%" - - "&7Sesión actual&8: %playtime_session%" -command-bottom: "&7Has sido teletransportado a la &eparte inferior&7." + - "Has jugado: %playtime%" + - "Sesión actual: %playtime_session%" +command-bottom: "Has sido teletransportado a la parte inferior." command-bottom-error: "No se pudo encontrar una posición segura para teletransportarte." -command-remove: "&7Eliminados %amount% &7entidades." +command-remove: "Eliminados %amount% entidades." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FFEl jugador &f%player% #99E0FFha estado desconectado #99E0FFdesde &7%date%#99E0FF." + message: "El jugador %player% ha estado desconectado desde %date%." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FFEl jugador &f%player% #99E0FFha estado conectado #99E0FFdesde %date%#99E0FF." + message: "El jugador %player% ha estado conectado desde %date%." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFTiempo jugado&8: &f%playtime%" + message: "Tiempo jugado: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFDirección IP&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "No se pudieron encontrar jugadores con la ip &f%ip%." -command-seen-ip-line: "#99E0FFJugadores con la ip &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "Dirección IP:%ips%" +command-seen-address: " Mostrar jugadores con la misma dirección'>%ip%" +command-seen-ip-empty: "No se pudieron encontrar jugadores con la ip %ip%." +command-seen-ip-line: "Jugadores con la ip %ip%:%players%" +command-seen-ip-info: " Mostrar la información del jugador'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFÚltima ubicación&8: &f%world%, %x%, %y%, %z%" + message: "Última ubicación: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFPrimera conexión&8: &f%created_at%" -command-economy-not-found: " No se puede encontrar una economía con el nombre &f%name%." -command-economy-reset-all-confirm: "Estás a punto de restablecer todos los saldos de &f%economy%. Ejecuta el comando de nuevo en &f%seconds% segundos para confirmar." -command-economy-reset-all-success: "#99E0FFHas restablecido todos los saldos de &f%economy%#99E0FF." -command-economy-give-all-sender: "#99E0FFAcabas de dar &f%economyFormat% #99E0FFa todos los jugadores en línea." -command-economy-give-sender: "#99E0FFAcabas de dar &f%economyFormat% #99E0FFal jugador &7%player%#99E0FF." -command-economy-give-receiver: "#99E0FFAcabas de recibir &f%economyFormat%." -command-economy-set-sender: "#99E0FFAcabas de establecer &f%economyFormat% #99E0FFal jugador &7%player%#99E0FF." -command-economy-set-receiver: "#99E0FFTu &f%economyFormat% #99E0FFha sido modificado." -command-economy-take-sender: "#99E0FFAcabas de quitar &f%economyFormat% #99E0FFal jugador &7%player%#99E0FF." -command-economy-take-receiver: "#99E0FFAcabas de perder &f%economyFormat%." -command-economy-show-empty: "&f%player% no tiene dinero." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." + message: "Primera conexión: %created_at%" +command-economy-not-found: " No se puede encontrar una economía con el nombre %name%." +command-economy-reset-all-confirm: "Estás a punto de restablecer todos los saldos de %economy%. Ejecuta el comando de nuevo en %seconds% segundos para confirmar." +command-economy-reset-all-success: "Has restablecido todos los saldos de %economy%." +command-economy-give-all-sender: "Acabas de dar %economyFormat% a todos los jugadores en línea." +command-economy-give-sender: "Acabas de dar %economyFormat% al jugador %player%." +command-economy-give-receiver: "Acabas de recibir %economyFormat%." +command-economy-set-sender: "Acabas de establecer %economyFormat% al jugador %player%." +command-economy-set-receiver: "Tu %economyFormat% ha sido modificado." +command-economy-take-sender: "Acabas de quitar %economyFormat% al jugador %player%." +command-economy-take-receiver: "Acabas de perder %economyFormat%." +command-economy-show-empty: "%player% no tiene dinero." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFTienes&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "Tienes:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-money-other: - - "#99E0FF%player% tiene&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "%player% tiene:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "La cantidad a pagar debe ser positiva." -command-pay-min: "La cantidad mínima que puedes pagar es &f%amount%." -command-pay-max: "La cantidad máxima que puedes pagar es &f%amount%." -command-pay-sender: "#99E0FFAcabas de enviar #F8F327%amount%#99E0FF al jugador &f%player%#99E0FF." -command-pay-receiver: "&f%player% #99E0FFacaba de enviarte #F8F327%amount%#99E0FF." +command-pay-min: "La cantidad mínima que puedes pagar es %amount%." +command-pay-max: "La cantidad máxima que puedes pagar es %amount%." +command-pay-sender: "Acabas de enviar %amount% al jugador %player%." +command-pay-receiver: "%player% acaba de enviarte %amount%." command-pay-disable: "No puedes enviar %name%." command-pay-self: "No puedes enviarte dinero a ti mismo." command-pay-not-enough: "No tienes suficiente dinero." # Teleport commands -command-tpa-error: "Ya has enviado una solicitud a #99E0FF%player%." +command-tpa-error: "Ya has enviado una solicitud a %player%." command-tpa-error-same: "No puedes teletransportarte a ti mismo." command-tpa-error-offline: "No se puede encontrar al jugador, debe estar desconectado." command-tpa-error-to-late-empty: "No tienes una solicitud de teletransporte." command-tpa-error-to-late-expire: "La solicitud de teletransporte ha caducado." command-tpa-sender: - - "#00FF00✔ #99E0FFEnviaste &f%displayName% #99E0FFuna solicitud de teletransporte." - - " ✘ Cancelar teletransporte'>#99E0FFEscribe #00FF00/tpacancel %player%#99E0FF para cancelar tu solicitud." + - "✔ Enviaste %displayName% una solicitud de teletransporte." + - " ✘ Cancelar teletransporte'>Escribe /tpacancel %player% para cancelar tu solicitud." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFha solicitado teletransportarse a ti!" - - " #99E0FFEscribe #00FF00/tpaccept #99E0FFpara #00FF00aceptar#99E0FF." - - " ✘ Rechazar teletransporte'>#99E0FFEscribe /tpdeny #99E0FFpara rechazar#99E0FF." + - "⚠ %displayName% ha solicitado teletransportarse a ti!" + - " ✔ Aceptar teletransporte'>Escribe /tpaccept para aceptar." + - " ✘ Rechazar teletransporte'>Escribe /tpdeny para rechazar." - "" - - "&7&oTienes 60 segundos para aceptar la solicitud de teletransporte." -command-tpa-accept-receiver: "#99E0FFAcabas de #00FF00aceptar #99E0FFla solicitud de teletransporte de #99E0FF%player%." -command-tpa-accept-sender: "#99E0FF%player% acaba de aceptar tu solicitud de teletransporte." -command-teleport-ignore-player: "No puedes enviar una solicitud de teletransporte a #99E0FF%player%, te está ignorando." + - "Tienes 60 segundos para aceptar la solicitud de teletransporte." +command-tpa-accept-receiver: "Acabas de aceptar la solicitud de teletransporte de %player%." +command-tpa-accept-sender: "%player% acaba de aceptar tu solicitud de teletransporte." +command-teleport-ignore-player: "No puedes enviar una solicitud de teletransporte a %player%, te está ignorando." command-teleport-world: "Necesitas estar en el mismo mundo para teletransportarte." command-tpa-error-to-late: "No tienes una solicitud de teletransporte." command-tpa-error-to-late-2: "La solicitud ha caducado." -command-tp-deny-sender: "#00FF00✔ Rechazaste &f%player% #00FF00la solicitud de teletransporte." -command-tp-deny-receiver: "✘ &f%player% ha rechazado tu solicitud de teletransporte." -command-tp-cancel-error: "No enviaste una solicitud de teletransporte a &f%player%." -command-tp-cancel-sender: "Cancelaste #99E0FFtu solicitud de teletransporte a %player%." -command-tp-cancel-receiver: "&f%player% canceló su solicitud de teletransporte hacia ti." -command-world-teleport-self: "Acabas de ser teletransportado al mundo &f%world%." -command-world-teleport-other: "Acabas de teletransportar al jugador &f%player% al mundo &f%world%." -command-random-tp-other: "Acabas de teletransportar aleatoriamente al jugador &f%player% al mundo &f%world%." -command-tp: "&fAcabas de teletransportarte al jugador #34cfe0%player%&f." -command-tp-location: "&fAcabas de teletransportarte a #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tp-location-other: "&fAcabas de teletransportar #34cfe0%player% &fa #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tp-all: "&fAcabas de teletransportar a todos los jugadores hacia ti." -command-tp-self: "&fAcabas de teletransportar #34cfe0%player%&f a tu posición." -command-back: "&7Volviendo a la ubicación anterior." +command-tp-deny-sender: "✔ Rechazaste %player% la solicitud de teletransporte." +command-tp-deny-receiver: "✘ %player% ha rechazado tu solicitud de teletransporte." +command-tp-cancel-error: "No enviaste una solicitud de teletransporte a %player%." +command-tp-cancel-sender: "Cancelaste tu solicitud de teletransporte a %player%." +command-tp-cancel-receiver: "%player% canceló su solicitud de teletransporte hacia ti." +command-world-teleport-self: "Acabas de ser teletransportado al mundo %world%." +command-world-teleport-other: "Acabas de teletransportar al jugador %player% al mundo %world%." +command-random-tp-other: "Acabas de teletransportar aleatoriamente al jugador %player% al mundo %world%." +command-tp: "Acabas de teletransportarte al jugador %player%." +command-tp-location: "Acabas de teletransportarte a %x%, %y%, %z%." +command-tp-location-other: "Acabas de teletransportar %player% a %x%, %y%, %z%." +command-tp-all: "Acabas de teletransportar a todos los jugadores hacia ti." +command-tp-self: "Acabas de teletransportar %player% a tu posición." +command-back: "Volviendo a la ubicación anterior." command-back-error: "No tienes ninguna ubicación anterior. Imposible volver atrás." command-random-tp-error: "No se encontró ninguna ubicación segura después de varios intentos, por favor inténtalo de nuevo." # First join -join-message: "#99E0FF%player% &7se unió al juego" -quit-message: "#99E0FF%player% &7abandonó el juego" -first-join-message: "&7¡Bienvenido #99E0FF%player% &7a ! &8(&f%totalUserFormat% &7jugadores registrados&8)" +join-message: "%player% se unió al juego" +quit-message: "%player% abandonó el juego" +first-join-message: "¡Bienvenido %player% a ! (%totalUserFormat% jugadores registrados)" first-join-motd: - "" - - "#00FF00✔ #99E0FF¡Bienvenido %player%#99E0FF!" + - "✔ ¡Bienvenido %player%!" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Sitio web&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: ¡Únete al servidor de Discord !'>https://discord.groupez.dev/" + - "Sitio web: ¡Abre el sitio web !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FF¡Bienvenido de nuevo %player%#99E0FF!" + - "¡Bienvenido de nuevo %player%!" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Sitio web&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: ¡Únete al servidor de Discord !'>https://discord.groupez.dev/" + - "Sitio web: ¡Abre el sitio web !'>https://minecraft-inventory-builder.com/" - "" # Spawn -command-set-spawn: "&fAcabas de establecer la ubicación del spawn." +command-set-spawn: "Acabas de establecer la ubicación del spawn." command-spawn-not-define: "El spawn no existe. Por favor, contacta a un administrador." # Command description @@ -446,8 +446,8 @@ format-hour: "hora" format-hours: "horas" format-day: "d" format-days: "días" -cooldown: "✘ Debes esperar &f%cooldown% antes de realizar esta acción." -cooldown-commands: "✘ Debes esperar &f%cooldown% antes de realizar estos comandos." +cooldown: "✘ Debes esperar %cooldown% antes de realizar esta acción." +cooldown-commands: "✘ Debes esperar %cooldown% antes de realizar estos comandos." # Teleportation @@ -457,82 +457,82 @@ teleport-error-location: "No puedo teletransportarte de forma segura." # Sistema de cola RTP teleport-already-in-queue: "¡Ya estás en la cola de teletransportación!" -teleport-added-to-queue: "Has sido añadido a la cola de teletransportación. Posición: #0EEA93%position%" +teleport-added-to-queue: "Has sido añadido a la cola de teletransportación. Posición: %position%" teleport-message: type: ACTION - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + message: "Teletransportándose en %seconds% segundos, no debes moverte." teleport-success: type: ACTION - message: "#99E0FF¡Acabas de teletransportarte con éxito!" + message: "¡Acabas de teletransportarte con éxito!" teleport-message-spawn: - - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + - message: "Teletransportándose en %seconds% segundos, no debes moverte." - type: ACTION - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + message: "Teletransportándose en %seconds% segundos, no debes moverte." teleport-success-spawn: - - message: "&7¡Acabas de teletransportarte a #0EEA93spawn &7!" + - message: "¡Acabas de teletransportarte a spawn !" - type: ACTION - message: "&7¡Acabas de teletransportarte a #0EEA93spawn &7!" + message: "¡Acabas de teletransportarte a spawn !" teleport-message-warp: - - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + - message: "Teletransportándose en %seconds% segundos, no debes moverte." - type: ACTION - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + message: "Teletransportándose en %seconds% segundos, no debes moverte." teleport-success-warp: - - message: "&7¡Acabas de teletransportarte al warp #0EEA93%name% &7!" + - message: "¡Acabas de teletransportarte al warp %name% !" - type: ACTION - message: "&7¡Acabas de teletransportarte al warp #0EEA93%name% &7!" + message: "¡Acabas de teletransportarte al warp %name% !" teleport-message-random: type: ACTION - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + message: "Teletransportándose en %seconds% segundos, no debes moverte." teleport-success-random: type: ACTION - message: "#99E0FF¡Acabas de teletransportarte con éxito!" + message: "¡Acabas de teletransportarte con éxito!" teleport-message-home: - - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + - message: "Teletransportándose en %seconds% segundos, no debes moverte." - type: ACTION - message: "&7Teletransportándose en #0EEA93%seconds% &7segundos, no debes moverte." + message: "Teletransportándose en %seconds% segundos, no debes moverte." teleport-success-home: - - message: "&7¡Acabas de teletransportarte al hogar #0EEA93%name% &7!" + - message: "¡Acabas de teletransportarte al hogar %name% !" - type: ACTION - message: "&7¡Acabas de teletransportarte al hogar #0EEA93%name% &7!" + message: "¡Acabas de teletransportarte al hogar %name% !" # Warps -command-warp-already-exist: "El warp &f%name% ya existe. &7Usa el comando &n/setwarp %name% true&r para modificar el warp" -command-warp-doesnt-exist: "El warp &f%name% no existe." -command-warp-no-permission: "No tienes permiso para usar el warp &f%name%." +command-warp-already-exist: "El warp %name% ya existe. Usa el comando Usa este comando'>/setwarp %name% true para modificar el warp" +command-warp-doesnt-exist: "El warp %name% no existe." +command-warp-no-permission: "No tienes permiso para usar el warp %name%." command-warp-create: - - "#00ff00Acabas de crear el warp &f%name% #00ff00en tu posición." - - "&7El permiso de warp es: permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + - "Acabas de crear el warp %name% en tu posición." + - "El permiso de warp es: Copia el comando para agregar permiso a un jugador'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: - - "Uso&8: &f/warp " - - "&7Warps&8:&f%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Warps&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "#00ff00Acabas de eliminar el warp &f%name%#00ff00." + - "Uso: /warp " + - "Warps:%destinations%" +command-warp-destination: " Haz clic para teletransportarte al warp %name%'>%name%" +command-warp-list: "Warps:%destinations%" +command-warp-list-info: " Haz clic para teletransportarte al warp %name%'>%name%" +command-warp-delete: "Acabas de eliminar el warp %name%." # Homes -command-set-home-invalide-name: "&f%name% no es un nombre válido, por favor elige otro." -command-set-home-too-long: "&f%name% es demasiado largo, por favor elige otro." -command-set-home-too-short: "&f%name% es un nombre demasiado corto, por favor elige otro." -command-set-home-max: "No puedes tener más de &f%max% hogares." +command-set-home-invalide-name: "%name% no es un nombre válido, por favor elige otro." +command-set-home-too-long: "%name% es demasiado largo, por favor elige otro." +command-set-home-too-short: "%name% es un nombre demasiado corto, por favor elige otro." +command-set-home-max: "No puedes tener más de %max% hogares." command-set-home-world: "No puedes crear un hogar aquí" command-set-home-create: - "" - - "#99E0FFAcabas de crear el hogar &f%name%#99E0FF. &8(&7%current%&8/&7%max%&8)" - - "&fUsa el comando &n/home %name%&r para teletransportarte a él" + - "Acabas de crear el hogar %name%. (%current%/%max%)" + - "Usa el comando Haz clic para teletransportarte al hogar'>/home %name% para teletransportarte a él" - "" -command-home-doesnt-exist: "El hogar &f%name% no existe." +command-home-doesnt-exist: "El hogar %name% no existe." # Available placeholders: # %count% - Home count # %max% - Max player's home command-home-information-multi-line-header: - "" - - "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%) &8- &7(Max: %max%)" + - "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%) - (Max: %max%)" # Available placeholders: # %count% - Home count @@ -545,7 +545,7 @@ command-home-information-multi-line-header: # %z% - Home location z command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7en %world% (%environment%) [CLICK]" + message: " ♢ %name% en %world% (%environment%) Haz clic para teletransportarte al hogar %name%'>[CLICK]" # Available placeholders: # %count% - Home count @@ -565,85 +565,85 @@ command-home-information-multi-line-footer: # %z% - Home location z command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccʏᴏᴜʀ ʜᴏᴍᴇs ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" + message: "ʏᴏᴜʀ ʜᴏᴍᴇs ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Haz clic para teletransportarte al hogar %name%'>%name%" command-home-icon-error: "Debes tener un objeto en la mano para cambiar el icono de tu hogar." -command-home-icon-success: "#00ff00Acabas de cambiar el icono del hogar &f%name%#00ff00." -command-home-icon-reset: "#00ff00Acabas de restablecer el icono del hogar &f%name%#00ff00." -command-home-delete: "#99E0FFAcabas de eliminar el hogar &f%name%#99E0FF." -command-home-admin-delete: "#00ff00Acabas de eliminar el hogar &f%name%#00ff00 de &b%player%#00ff00." -command-home-admin-set: "#00ff00Acabas de crear el hogar &f%name%#00ff00 de &b%player%#00ff00." -command-home-admin-list: "#8cc0cc%player% ʜᴏᴍᴇs&8:&f%homes%" -command-home-admin-list-info: " &f%name%&7" +command-home-icon-success: "Acabas de cambiar el icono del hogar %name%." +command-home-icon-reset: "Acabas de restablecer el icono del hogar %name%." +command-home-delete: "Acabas de eliminar el hogar %name%." +command-home-admin-delete: "Acabas de eliminar el hogar %name% de %player%." +command-home-admin-set: "Acabas de crear el hogar %name% de %player%." +command-home-admin-list: "%player% ʜᴏᴍᴇs:%homes%" +command-home-admin-list-info: " Haz clic para teletransportarte al hogar %name%'>%name%" # Sanction command-kick-notify: type: WITHOUT_PREFIX - message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>&8(#f59e07Sanción&8) #8aebeb%player% #e33414acaba de expulsar al jugador #e0d12d%target%#e33414." + message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>(Sanción) %player% acaba de expulsar al jugador %target%." command-ban-notify: type: WITHOUT_PREFIX - message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%Expira: %expired_at%'>&8(#f59e07Sanción&8) #8aebeb%player% #e33414acaba de banear al jugador #e0d12d%target%#e33414." + message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%Expira: %expired_at%'>(Sanción) %player% acaba de banear al jugador %target%." command-mute-notify: type: WITHOUT_PREFIX - message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%Expira: %expired_at%'>&8(#f59e07Sanción&8) #8aebeb%player% #e33414acaba de silenciar al jugador #e0d12d%target%#e33414." + message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%Expira: %expired_at%'>(Sanción) %player% acaba de silenciar al jugador %target%." command-unmute-notify: type: WITHOUT_PREFIX - message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>&8(#f59e07Sanción&8) #8aebeb%player% #e33414acaba de desilenciar al jugador #e0d12d%target%#e33414." + message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>(Sanción) %player% acaba de desilenciar al jugador %target%." command-unban-notify: type: WITHOUT_PREFIX - message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>&8(#f59e07Sanción&8) #8aebeb%player% #e33414acaba de desbanear al jugador #e0d12d%target%#e33414." + message: "Por: %sender%Duración: %duration%Razón: %reason%Fecha: %created_at%'>(Sanción) %player% acaba de desbanear al jugador %target%." command-ban-error-duration: "La duración de un baneo debe ser de al menos 1 segundo." command-mute-error-duration: "La duración de un silencio debe ser de al menos 1 segundo." -command-un-mute-error: "&f%player% no está silenciado." -command-un-ban-error: "&f%player% no está baneado." +command-un-mute-error: "%player% no está silenciado." +command-un-ban-error: "%player% no está baneado." command-sanction-error: "No puedes sancionar a ese jugador. Está protegido." message-kick: - "" - "Has sido expulsado del servidor por la siguiente razón:" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&f¡Has perdido tu voz!" - - "&fDuración&8: %duration%" - - "&fRazón&8: #82d1ff%reason%" + - "¡Has perdido tu voz!" + - "Duración: %duration%" + - "Razón: %reason%" - "" message-unmute: - "" - - "&f¡Has recuperado tu voz, felicitaciones!" - - "&fRazón&8: #82d1ff%reason%" + - "¡Has recuperado tu voz, felicitaciones!" + - "Razón: %reason%" - "" message-mute-talk: - "" - - "&fNo tienes derecho a hablar." + - "No tienes derecho a hablar." - "" - - "&fDuración&8: %duration%" - - "&fRazón&8: #82d1ff%reason%" + - "Duración: %duration%" + - "Razón: %reason%" - "" message-ban: - "" - "Has sido baneado del servidor por la siguiente razón:" - - "&f%reason%" - - "&fDuración&8: &7%duration%" + - "%reason%" + - "Duración: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "Estás baneado en el servidor:" - - "&f%reason%" - - "&fTiempo restante&8: &7%remaining%" + - "%reason%" + - "Tiempo restante: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" # Chat chat-error: "Imposible dejarte hablar, tus datos no se han cargado." chat-alphanumeric-regex: "Usas un carácter prohibido." -chat-cooldown: "Por favor, espera antes de enviar tu próximo mensaje. &8(&7%cooldown%&8)" +chat-cooldown: "Por favor, espera antes de enviar tu próximo mensaje. (%cooldown%)" chat-same: "No puedes poner la misma frase." chat-link: "No puedes enviar un enlace en el chat." chat-item-forbidden-characters: "No puedes mostrar este objeto porque su nombre contiene caracteres prohibidos." @@ -651,14 +651,14 @@ chat-disable: "El chat está actualmente no disponible." chat-caps: "¡No tienes que gritar para hablar!" chat-flood: "No puedes hablar así." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% no escribió ningún mensaje." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% no escribió ningún mensaje." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "El chat acaba de quedar claro." command-chat-disable-error: "El chat ya está desactivado." command-chat-disable-success: "Acabas de desactivar el chat." @@ -666,50 +666,50 @@ command-chat-enable-error: "El chat ya está activado." command-chat-enable-success: "Acabas de activar el chat." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ᴀɴᴜɴᴄɪᴏ • %message%" + message: "ᴀɴᴜɴᴄɪᴏ • %message%" # Messages command-message-self: "No puedes hablar contigo mismo." -command-message-disable: "&f%player% ha desactivado los mensajes privados." +command-message-disable: "%player% ha desactivado los mensajes privados." command-message-mute: "No tienes permitido hablar." -command-message-me: "&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6" +command-message-me: "Haz clic para responder'>(me -> %target%) " +command-message-other: "Haz clic para responder'>(%target% -> me) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Abrir sanción para %sender%'>%sender% -> Abrir sanción para %receiver%'>%receiver%) %message%" command-message-error: "No tienes a nadie a quien responder." -command-message-toggle-enable: "&7Mensaje privado activado &7para &f%player%." -command-message-toggle-disable: "&7Mensaje privado desactivado &7para &f%player%." -command-social-spy-enable: "&7Espía social activado &7para &f%player%." -command-social-spy-disable: "&7Espía social desactivado &7para &f%player%." -command-warp-empty: "No hay warp definido, usa el comando &f/setwarp " -command-pay-toggle-enable: "&7Pago activado &7para &f%player%." -command-pay-toggle-disable: "&7Pago desactivado &7para &f%player%." -command-pay-notification-toggle-enable: "&7Notificaciones de pago activadas &7para &f%player%." -command-pay-notification-toggle-disable: "&7Notificaciones de pago desactivadas &7para &f%player%." -command-power-tools-toggle-enable: "Todas tus herramientas poderosas se han activado &7para &f%player%." -command-power-tools-toggle-disable: "Todas tus herramientas poderosas se han desactivado &7para &f%player%." +command-message-toggle-enable: "Mensaje privado activado para %player%." +command-message-toggle-disable: "Mensaje privado desactivado para %player%." +command-social-spy-enable: "Espía social activado para %player%." +command-social-spy-disable: "Espía social desactivado para %player%." +command-warp-empty: "No hay warp definido, usa el comando /setwarp " +command-pay-toggle-enable: "Pago activado para %player%." +command-pay-toggle-disable: "Pago desactivado para %player%." +command-pay-notification-toggle-enable: "Notificaciones de pago activadas para %player%." +command-pay-notification-toggle-disable: "Notificaciones de pago desactivadas para %player%." +command-power-tools-toggle-enable: "Todas tus herramientas poderosas se han activado para %player%." +command-power-tools-toggle-disable: "Todas tus herramientas poderosas se han desactivado para %player%." # Kit -command-kit-no-permission: "No tienes permiso para usar el kit &f%kit%." -command-kit-not-found: "No se puede encontrar el kit &f%kit%." -command-kit-already-exists: "El kit &f%kit% ya existe." -command-kit-information-in-line-empty: "#8cc0ccᴛᴜꜱ ᴋɪᴛꜱ ♦ &7(%count%/%max%)&8: ɴᴏ ᴅɪꜱᴘᴏɴɪʙʟᴇ" -command-kit-information-in-line: "#8cc0ccᴛᴜꜱ ᴋɪᴛꜱ&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% antes de obtener el kit &f&n%name%'><#de1f1f>%name%&7" +command-kit-no-permission: "No tienes permiso para usar el kit %kit%." +command-kit-not-found: "No se puede encontrar el kit %kit%." +command-kit-already-exists: "El kit %kit% ya existe." +command-kit-information-in-line-empty: "ᴛᴜꜱ ᴋɪᴛꜱ ♦ (%count%/%max%): ɴᴏ ᴅɪꜱᴘᴏɴɪʙʟᴇ" +command-kit-information-in-line: "ᴛᴜꜱ ᴋɪᴛꜱ:%kits%" +command-kit-information-in-line-info-available: " Haz clic para obtener el kit %name%'>%name%" +command-kit-information-in-line-info-unavailable: " Debes esperar %time% antes de obtener el kit %name%'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% antes de obtener el kit &f&n%name%'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Haz clic para obtener el kit %name%'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ Debes esperar %time% antes de obtener el kit %name%'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "Acabas de modificar el kit &f%kit%." -command-kit-create: "Acabas de crear el kit &f%kit%." -command-kit-delete: "Acabas de eliminar el kit &f%kit%." +command-kit-editor-save: "Acabas de modificar el kit %kit%." +command-kit-create: "Acabas de crear el kit %kit%." +command-kit-delete: "Acabas de eliminar el kit %kit%." # Cooldown -command-cooldown-header: "&fEnfriamiento del jugador %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% no tiene enfriamiento." +command-cooldown-header: "Enfriamiento del jugador %player% (%amount%)" +command-cooldown-empty: "%player% no tiene enfriamiento." # Available placeholders: # %key% - The key to the cooldown # %value% - The cooldown expiration timestamp @@ -718,168 +718,168 @@ command-cooldown-empty: "&f%player% no tiene enfriamiento." # %player% - the Player's nickname command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴅᴇʟᴇᴛᴇ&8]" -command-cooldown-not-found: "&f%cooldown% no se encontró." -command-cooldown-delete: "Acabas de eliminar el enfriamiento &f%cooldown% de &n%player%&r." + message: "%key% - %createdAt% - %timeLeft% - Haz clic para eliminar el enfriamiento'>[ᴅᴇʟᴇᴛᴇ]" +command-cooldown-not-found: "%cooldown% no se encontró." +command-cooldown-delete: "Acabas de eliminar el enfriamiento %cooldown% de %player%." # Available placeholders: # %key% - The key to the cooldown # %player% - the Player's nickname # %duration% - the duration of the cooldown -command-cooldown-create: "Acabas de crear el enfriamiento &f%key% para &n%player%&r." +command-cooldown-create: "Acabas de crear el enfriamiento %key% para %player%." command-item-empty: "No tienes ningún objeto en la mano." command-item-clear: "Has borrado el nombre de este objeto." -command-item-set: "Has cambiado el nombre de tu objeto sostenido a &f%name%." -command-item-lore-add: "Acabas de agregar la línea &f%text%." -command-item-lore-set: "Acabas de establecer la línea %line% en &f%text%." +command-item-set: "Has cambiado el nombre de tu objeto sostenido a %name%." +command-item-lore-add: "Acabas de agregar la línea %text%." +command-item-lore-set: "Acabas de establecer la línea %line% en %text%." command-item-lore-clear: "Acabas de borrar el lore del objeto." -command-item-lore-set-error: "No se puede encontrar la línea &f%line%." -command-give-error: "No se puede encontrar el objeto &f%item%." -command-give: "Acabas de dar &n&fx%amount% %item%&r al jugador &f%player%." -command-give-all: "Acabas de dar &n&fx%amount% %item%&r a los jugadores en línea." -command-give-vault: "Acabas de dar &n&fx%amount% %item%&r al vault de &f%player%." +command-item-lore-set-error: "No se puede encontrar la línea %line%." +command-give-error: "No se puede encontrar el objeto %item%." +command-give: "Acabas de dar x%amount% %item% al jugador %player%." +command-give-all: "Acabas de dar x%amount% %item% a los jugadores en línea." +command-give-vault: "Acabas de dar x%amount% %item% al vault de %player%." command-power-tool-error-item: "No tienes ningún objeto en la mano." command-power-tool-error-reset: "Este objeto no tiene ningún comando registrado." -command-power-tool-info: "Acabas de poner el comando &f/%command% en el objeto &f%item%." -command-power-tool-reset: "Acabas de eliminar el comando en el objeto &f%item%." +command-power-tool-info: "Acabas de poner el comando /%command% en el objeto %item%." +command-power-tool-reset: "Acabas de eliminar el comando en el objeto %item%." mailbox-remove-full: "Debes tener espacio en tu inventario para recuperar un objeto." mailbox-remove-expire: "Ya no puedes recuperar este objeto, ha caducado." mailbox-add: type: ACTION - message: "Se acaba de agregar un objeto a tu buzón &8(&f/mail&8)" -mailbox-give-error: "No se puede encontrar el objeto &f%item%." -mailbox-give: "Acabas de dar &n&fx%amount% %item%&r al buzón del jugador &f%player%." -mailbox-give-all: "Acabas de dar &n&fx%amount% %item%&r a los buzones de los jugadores en línea." -mailbox-give-hand: "Acabas de enviar el objeto en tu mano al buzón de &f%player% (&fx%amount% %item%)." -mailbox-give-all-hand: "Acabas de enviar el objeto en tu mano (&fx%amount% %item%) a los buzones de todos los jugadores conectados." + message: "Se acaba de agregar un objeto a tu buzón (/mail)" +mailbox-give-error: "No se puede encontrar el objeto %item%." +mailbox-give: "Acabas de dar x%amount% %item% al buzón del jugador %player%." +mailbox-give-all: "Acabas de dar x%amount% %item% a los buzones de los jugadores en línea." +mailbox-give-hand: "Acabas de enviar el objeto en tu mano al buzón de %player% (x%amount% %item%)." +mailbox-give-all-hand: "Acabas de enviar el objeto en tu mano (x%amount% %item%) a los buzones de todos los jugadores conectados." -hologram-create-error: "El holograma &f%name% ya existe." +hologram-create-error: "El holograma %name% ya existe." hologram-create: type: WITHOUT_PREFIX messages: - - "Acabas de crear el holograma &f%name%." - - "&7Usa el comando &n/hologram %command% %name%&r&7 para editar el holograma" -hologram-delete: "Se ha eliminado el holograma &f%name% ." -hologram-doesnt-exist: "El holograma &f%name% no existe." -hologram-is-not-a-text: "El holograma &f%name% no es un holograma de texto." -hologram-is-not-a-block: "El holograma &f%name% no es un holograma de bloque." -hologram-is-not-a-item: "El holograma &f%name% no es un holograma de objeto." -hologram-add-line: "Acabas de agregar una línea al holograma &f%name%." -hologram-set-line: "Acabas de establecer la línea &f%line% en el holograma &f%name%." -hologram-insert-before-line: "Acabas de establecer una nueva línea antes de la línea &f%line% en el holograma &f%name%." -hologram-insert-after-line: "Acabas de establecer una nueva línea después de la línea &f%line% en el holograma &f%name%." -hologram-line-doesnt-exist: "La línea &f%line% no existe para el holograma &f%name%." -hologram-remove-line: "Acabas de eliminar la línea &f%line% del holograma &f%name%." -hologram-scale: "Acabas de cambiar la escala del holograma &f%name% a &7%x%&8, &7%y%&8, &7%z%." -hologram-translation: "Acabas de cambiar la traducción del holograma &f%name% a &7%x%&8, &7%y%&8, &7%z%." -hologram-move-here: "Acabas de teletransportar el holograma &f%name% a tu posición." -hologram-move-to: "Acabas de teletransportar el holograma &f%name% a &7%x%&8, &7%y%&8, &7%z%." -hologram-billboard: "Acabas de cambiar el cartel del holograma &f%name% a &f%billboard%." -hologram-text-alignment: "Acabas de cambiar la alineación del texto del holograma &f%name% a &f%textAlignment%." -hologram-yaw: "Acabas de cambiar el yaw del holograma &f%name% a &f%yaw%." -hologram-pitch: "Acabas de cambiar el pitch del holograma &f%name% a &f%pitch%." -hologram-text-background: "Acabas de cambiar el color de fondo del holograma &f%name% a &f%color%." + - "Acabas de crear el holograma %name%." + - "Usa el comando /hologram %command% %name% para editar el holograma" +hologram-delete: "Se ha eliminado el holograma %name% ." +hologram-doesnt-exist: "El holograma %name% no existe." +hologram-is-not-a-text: "El holograma %name% no es un holograma de texto." +hologram-is-not-a-block: "El holograma %name% no es un holograma de bloque." +hologram-is-not-a-item: "El holograma %name% no es un holograma de objeto." +hologram-add-line: "Acabas de agregar una línea al holograma %name%." +hologram-set-line: "Acabas de establecer la línea %line% en el holograma %name%." +hologram-insert-before-line: "Acabas de establecer una nueva línea antes de la línea %line% en el holograma %name%." +hologram-insert-after-line: "Acabas de establecer una nueva línea después de la línea %line% en el holograma %name%." +hologram-line-doesnt-exist: "La línea %line% no existe para el holograma %name%." +hologram-remove-line: "Acabas de eliminar la línea %line% del holograma %name%." +hologram-scale: "Acabas de cambiar la escala del holograma %name% a %x%, %y%, %z%." +hologram-translation: "Acabas de cambiar la traducción del holograma %name% a %x%, %y%, %z%." +hologram-move-here: "Acabas de teletransportar el holograma %name% a tu posición." +hologram-move-to: "Acabas de teletransportar el holograma %name% a %x%, %y%, %z%." +hologram-billboard: "Acabas de cambiar el cartel del holograma %name% a %billboard%." +hologram-text-alignment: "Acabas de cambiar la alineación del texto del holograma %name% a %textAlignment%." +hologram-yaw: "Acabas de cambiar el yaw del holograma %name% a %yaw%." +hologram-pitch: "Acabas de cambiar el pitch del holograma %name% a %pitch%." +hologram-text-background: "Acabas de cambiar el color de fondo del holograma %name% a %color%." hologram-text-background-error: "No se pudo analizar el color de fondo." -hologram-text-shadow: "Acabas de establecer la sombra del texto en &f%textshadow% para el holograma &f%name%." -hologram-see-through: "Acabas de establecer la transparencia en &f%seethrough% para el holograma &f%name%." -hologram-shadow-strength: "Acabas de establecer la intensidad de la sombra en &f%shadow% para el holograma &f%name%." -hologram-shadow-radius: "Acabas de establecer el radio de la sombra en &f%shadow% para el holograma &f%name%." -hologram-view-distance: "Acabas de establecer la distancia de visión en &f%distance% para el holograma &f%name%." -hologram-list-empty: "No hay ningún holograma, para crear uno usa el comando &f/holo create " +hologram-text-shadow: "Acabas de establecer la sombra del texto en %textshadow% para el holograma %name%." +hologram-see-through: "Acabas de establecer la transparencia en %seethrough% para el holograma %name%." +hologram-shadow-strength: "Acabas de establecer la intensidad de la sombra en %shadow% para el holograma %name%." +hologram-shadow-radius: "Acabas de establecer el radio de la sombra en %shadow% para el holograma %name%." +hologram-view-distance: "Acabas de establecer la distancia de visión en %distance% para el holograma %name%." +hologram-list-empty: "No hay ningún holograma, para crear uno usa el comando /holo create " hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛ Haz clic para eliminar este holograma'>ᴅᴇʟᴇᴛᴇ" + message: "%name% - %world%: %x%, %y%, %z% - Haz clic para ser teletransportado a este holograma'>ᴛᴇʟᴇᴘᴏʀᴛ Haz clic para eliminar este holograma'>ᴅᴇʟᴇᴛᴇ" hologram-item-error: "No puedes usar aire para este holograma." -hologram-item: "Acabas de modificar el objeto del holograma &f%name%." -hologram-block: "Acabas de modificar el bloque del holograma &f%name% a &f%material%." +hologram-item: "Acabas de modificar el objeto del holograma %name%." +hologram-block: "Acabas de modificar el bloque del holograma %name% a %material%." scoreboard-disable: "Acabas de desactivar el marcador." scoreboard-enable: "Acabas de activar el marcador." -command-baltop-error: "No se puede encontrar la economía &f%name%." +command-baltop-error: "No se puede encontrar la economía %name%." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴍᴀꜱ ᴅɪɴᴇʀᴏ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴍᴀꜱ ᴅɪɴᴇʀᴏ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "Acabas de establecer la voteparty en &f%amount% votos." -command-voteparty-add: "Acabas de agregar &f%amount% voto en la voteparty." -command-voteparty-remove: "Acabas de eliminar &f%amount% voto en la voteparty." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "Acabas de establecer la voteparty en %amount% votos." +command-voteparty-add: "Acabas de agregar %amount% voto en la voteparty." +command-voteparty-remove: "Acabas de eliminar %amount% voto en la voteparty." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "Acabas de agregar un voto a &f%player%." -command-vote-add-error: "El sitio &f%site% no existe!" +command-vote-add: "Acabas de agregar un voto a %player%." +command-vote-add-error: "El sitio %site% no existe!" command-vote: type: ACTION message: "Acabas de votar y recibir una clave de voto." vote-offline: - "" - - "Has votado %amount% veces mientras estabas desconectado, usa el comando /mailbox para obtener tus objetos!" + - "Has votado %amount% veces mientras estabas desconectado, usa el comando /mailbox para obtener tus objetos!" - "" vault-lore: - "" - - "&fɪɴꜰᴏʀᴍᴀᴄɪᴏɴ" - - " #f8b175• &7Cantidad&8: &e%quantity%" + - "ɪɴꜰᴏʀᴍᴀᴄɪᴏɴ" + - " • Cantidad: %quantity%" - "" - - "&f➥ #fc99f8Clic izquierdo &7para tomar 1" - - "&f➥ #fc99f8Clic derecho &7para tomar 64" - - "&f➥ #fc99f8Shift + Clic derecho &7para tomar todo" -command-vault-not-found: "No se puede encontrar el vault &f%vaultId%." + - "➥ Clic izquierdo para tomar 1" + - "➥ Clic derecho para tomar 64" + - "➥ Shift + Clic derecho para tomar todo" +command-vault-not-found: "No se puede encontrar el vault %vaultId%." command-vault-no-permission: "No tienes permiso para ver el vault." -command-vault-set-slot: "Acabas de definir la ranura de &f%player% a &7%slots%." -command-vault-add-slot: "Acabas de agregar &7%amount% ranura a &f%player%." -command-vault-get-slot-empty: "No se encontró ningún objeto en Vault &f%vault% ranura &f%slot% para &f%player%." -command-vault-get-slot-success: "Ranura de Vault para &f%player%: Vault &7%vault%, ranura &7%slot%, cantidad &7%amount%, objeto &f%item%." -command-vault-delete-slot-success: "Has eliminado la ranura &7%slot% de Vault &7%vault% para &f%player%." -command-vault-delete-slot-empty: "Cannot find slot &f%slot% in vault &f%vault% for &f%player%." +command-vault-set-slot: "Acabas de definir la ranura de %player% a %slots%." +command-vault-add-slot: "Acabas de agregar %amount% ranura a %player%." +command-vault-get-slot-empty: "No se encontró ningún objeto en Vault %vault% ranura %slot% para %player%." +command-vault-get-slot-success: "Ranura de Vault para %player%: Vault %vault%, ranura %slot%, cantidad %amount%, objeto %item%." +command-vault-delete-slot-success: "Has eliminado la ranura %slot% de Vault %vault% para %player%." +command-vault-delete-slot-empty: "Cannot find slot %slot% in vault %vault% for %player%." command-vault-change-icon-error: "Tienes un objeto en la mano." command-vault-change-icon-success: "Acabas de cambiar el icono de tu vault." command-vault-reset-icon: "Acabas de restablecer el icono de tu vault." command-vault-rename-start: "Por favor, escribe en el chat el nuevo nombre del vault." -command-vault-rename-success: "Acabas de establecer el nombre del vault a &f%name%." +command-vault-rename-success: "Acabas de establecer el nombre del vault a %name%." command-vault-rename-error: "No puedes usar este nombre para tu vault." command-vault-rename-reset: "Acabas de restablecer el nombre de tu vault." command-enchant-invalid: "Debes especificar un jugador válido." -command-enchant-error-enchant: "Imposible encontrar el encantamiento &f%name%." +command-enchant-error-enchant: "Imposible encontrar el encantamiento %enchant%." command-enchant-error-item-self: "Debes tener un objeto en la mano." command-enchant-error-item-player: "%player% no tiene ningún objeto en la mano." -command-enchant-remove-self: "El encantamiento &f%enchant% ha sido eliminado de tu objeto en la mano." -command-enchant-remove-player: "El encantamiento &f%enchant% ha sido eliminado del objeto de &f%player%’s mano." -command-enchant-success-self: "El encantamiento &f%enchant% ha sido aplicado a tu objeto en la mano." -command-enchant-success-player: "El encantamiento &f%enchant% ha sido aplicado al objeto de &f%player%’s mano." +command-enchant-remove-self: "El encantamiento %enchant% ha sido eliminado de tu objeto en la mano." +command-enchant-remove-player: "El encantamiento %enchant% ha sido eliminado del objeto de %player%’s mano." +command-enchant-success-self: "El encantamiento %enchant% ha sido aplicado a tu objeto en la mano." +command-enchant-success-player: "El encantamiento %enchant% ha sido aplicado al objeto de %player%’s mano." command-sudo-error: "No puedes forzar al jugador a ejecutar comandos." -command-sudo-command: "Acabas de forzar al jugador %player% a ejecutar el comando /%command%." -command-sudo-message: "Acabas de forzar al jugador %player% a enviar el mensaje %message%." +command-sudo-command: "Acabas de forzar al jugador %player% a ejecutar el comando /%command%." +command-sudo-message: "Acabas de forzar al jugador %player% a enviar el mensaje %message%." # WorldEdit -command-worldedit-give-error: "No se puede encontrar el objeto &f%name%" -command-worldedit-give-sender: "Acabas de dar &f%item% al jugador &f%player%." -command-worldedit-give-receiver: "Acabas de recibir &f%item%." -command-worldedit-material-not-found: "No se puede encontrar el material &f%material%." +command-worldedit-give-error: "No se puede encontrar el objeto %name%" +command-worldedit-give-sender: "Acabas de dar %item% al jugador %player%." +command-worldedit-give-receiver: "Acabas de recibir %item%." +command-worldedit-material-not-found: "No se puede encontrar el material %material%." command-worldedit-confirm-price: - "" - - "Precio: %price%" - - "Bloques:%materials%" - - "Duración: %duration% (%blocks% bloques a %speed% bloque%s%/s)" + - "Precio: %price%" + - "Bloques:%materials%" + - "Duración: %duration% (%blocks% bloques a %speed% bloque%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" + - "Haz clic para confirmar la acción'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" command-worldedit-confirm-price-cut: - "" - - "Precio: %price%" - - "Duración: %duration% (%blocks% bloques a %speed% bloque%s%/s)" + - "Precio: %price%" + - "Duración: %duration% (%blocks% bloques a %speed% bloque%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" -command-worldedit-confirm-material: " Cantidad: %amount%Precio total: %price%Precio por bloque: %price-per-block%'>" + - "Haz clic para confirmar la acción'>ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ᴄᴏɴғɪʀᴍ" +command-worldedit-confirm-material: " Cantidad: %amount%Precio total: %price%Precio por bloque: %price-per-block%'>" command-worldedit-confirm-error: "No puedes hacer eso ahora." command-worldedit-stop-empty: "No tienes ninguna edición actual." command-worldedit-stop-error: "No puedes detener la edición actualmente." @@ -896,66 +896,66 @@ worldedit-not-enough-money: "No tienes suficiente dinero para realizar es worldedit-not-enough-items: "No tienes los objetos en tu inventario, no puedes hacer eso." worldedit-selection-pos1: "Acabas de definir la primera posición." worldedit-selection-pos2: "Acabas de definir la segunda posición." -worldedit-selection-volume: "No puedes cambiar más de &f%blocks% al mismo tiempo." -worldedit-selection-distance: "La distancia entre tus dos puntos en tu selección es demasiado grande. (Máximo %distance% bloques)" +worldedit-selection-volume: "No puedes cambiar más de %blocks% al mismo tiempo." +worldedit-selection-distance: "La distancia entre tus dos puntos en tu selección es demasiado grande. (Máximo %distance% bloques)" -worldedit-start-calculate-price: "&7Cálculo de precio en progreso, por favor espere..." -worldedit-start-check-inventory: "&7Comprobando que tienes suficientes objetos en tu inventario, por favor espera..." -worldedit-start-running: "&7Lanzamiento de la edición actual, por favor espere..." +worldedit-start-calculate-price: "Cálculo de precio en progreso, por favor espere..." +worldedit-start-check-inventory: "Comprobando que tienes suficientes objetos en tu inventario, por favor espera..." +worldedit-start-running: "Lanzamiento de la edición actual, por favor espere..." worldedit-finish: "¡Edición completada!" worldedit-refund: - "ᴀᴄᴀʙᴀꜱ ᴅᴇ ʀᴇᴄɪʙɪʀ ᴜɴ ʀᴇᴇᴍʙᴏʟꜱᴏ" - "" - - "Precio: %price%" - - "Bloques:%materials%" -worldedit-refund-material: " Cantidad: %amount%Precio total: %price%Precio por bloque: %price-per-block%'>" + - "Precio: %price%" + - "Bloques:%materials%" +worldedit-refund-material: " Cantidad: %amount%Precio total: %price%Precio por bloque: %price-per-block%'>" worldedit-refund-empty: " No hay bloques que reembolsar" -worldedit-bossbar: "#45ff45Tiempo restante: %time%" +worldedit-bossbar: "Tiempo restante: %time%" worldedit-speed-error: "No tienes permiso para establecer la velocidad por segundo." # Traducciones añadidas command-clearinventory-success: "Has limpiado tu inventario." -command-clearinventory-success-other: "Has limpiado el inventario de &f%player%." -command-fly-add: "Acabas de añadir %time% de tiempo de vuelo a &f%player%." -command-fly-enable-seconds: "&7Modo de vuelo activado &7para &f%player%. &8(&7tiempo restante %time%&8)" +command-clearinventory-success-other: "Has limpiado el inventario de %player%." +command-fly-add: "Acabas de añadir %time% de tiempo de vuelo a %player%." +command-fly-enable-seconds: "Modo de vuelo activado para %player%. (tiempo restante %time%)" command-fly-end: "Has agotado todo tu tiempo de vuelo, ya no puedes volar." command-fly-error: "No te queda tiempo de vuelo disponible." command-fly-error-other: "%player% no tiene tiempo de vuelo disponible." command-fly-error-world: "No puedes volar en este mundo." -command-fly-get: "%player%&8: &f%player%." -command-fly-info: "Tienes &f%time%." +command-fly-get: "%player%: %player%." +command-fly-info: "Tienes %time%." command-fly-info-empty: "No tienes tiempo de vuelo disponible." -command-fly-remaining: "Te quedan &f%time% de tiempo de vuelo." -command-fly-remove: "Acabas de quitar %time% de tiempo de vuelo a &f%player%." -command-fly-set: "Acabas de establecer %time% de tiempo de vuelo a &f%player%." -command-freeze-success: "&7Acabas de congelar al jugador &f%player%&7." +command-fly-remaining: "Te quedan %time% de tiempo de vuelo." +command-fly-remove: "Acabas de quitar %time% de tiempo de vuelo a %player%." +command-fly-set: "Acabas de establecer %time% de tiempo de vuelo a %player%." +command-freeze-success: "Acabas de congelar al jugador %player%." command-home-admin-list-empty: "El jugador no tiene hogar." command-home-error-teleport: "No se encontró una posición para teletransportarse, elimina tu hogar." -command-kit-delete-error: "Es imposible eliminar el kit &f%kit%." -command-kit-give: "Acabas de dar el kit &f%kit% a %player%." +command-kit-delete-error: "Es imposible eliminar el kit %kit%." +command-kit-give: "Acabas de dar el kit %kit% a %player%." command-link-account-already-linked: "Ya estás vinculado a una cuenta." command-link-account-disabled: "No puedes vincular tu cuenta en este momento." command-link-account-invalid-code: "Código inválido." command-link-account-not-linked: "No estás vinculado a ninguna cuenta." command-link-account-reset: "Acabas de restablecer el enlace de tu cuenta." -command-link-account-success: "Acabas de vincular tu cuenta %discord%." +command-link-account-success: "Acabas de vincular tu cuenta %discord%." command-pay-disabled: "No puedes enviar dinero a este jugador." command-pub: - message: "&8[&fPUB&8] %player%: %message%" + message: "[PUB] %player%: %message%" type: WITHOUT_PREFIX command-pub-pattern-error: "Tu mensaje contiene caracteres prohibidos." -command-random-tp-configuration-not-found: "No se pudo encontrar la configuración de TP aleatorio para el mundo &f%world%." +command-random-tp-configuration-not-found: "No se pudo encontrar la configuración de TP aleatorio para el mundo %world%." command-spawn-first-not-define: "El primer spawn no existe. Contacta con un administrador." command-spawn-location-invalid: "El spawn es inválido, contacta con un administrador." command-tp-location-error: "Las coordenadas están fuera del mundo." -command-tpa-here-accept-receiver: "#99E0FFAcabas de #00FF00aceptar #99E0FFla solicitud de teletransporte de #99E0FF%player%." -command-tpa-here-accept-sender: "#99E0FF%player% acaba de aceptar tu solicitud de teletransporte." -command-tpa-here-error: "Ya has enviado una solicitud a #99E0FF%player%." +command-tpa-here-accept-receiver: "Acabas de aceptar la solicitud de teletransporte de %player%." +command-tpa-here-accept-sender: "%player% acaba de aceptar tu solicitud de teletransporte." +command-tpa-here-error: "Ya has enviado una solicitud a %player%." command-tpa-here-error-same: "No puedes teletransportarte a ti mismo." -command-un-freeze_success: "&7Acabas de descongelar al jugador &f%player%&7." -command-vault-info: "Información de la bóveda de &f%player%: máx. &7%max%, permiso &7%permissionSlots%, plugin &7%pluginSlots%, usados &7%used%, libres &7%available%." -command-warp-invalid: "El warp &f%name% tiene una ubicación inválida." +command-un-freeze_success: "Acabas de descongelar al jugador %player%." +command-vault-info: "Información de la bóveda de %player%: máx. %max%, permiso %permissionSlots%, plugin %pluginSlots%, usados %used%, libres %available%." +command-warp-invalid: "El warp %name% tiene una ubicación inválida." command-worldedit-cancel: "Acabas de cancelar tu selección actual." description-clear-random-word: "Borra palabras aleatorias" description-clearinventory: "Vacía el inventario de un jugador" @@ -991,132 +991,132 @@ description-tpa-here: "Teletransporta a un jugador hacia ti" description-vault-info: "Muestra información sobre la bóveda de un jugador" description-vault-show: "Muestra la bóveda de un jugador" description-worldedit-cancel: "Cancela la selección actual" -experience-granted: "Acabas de dar %amount% %type% a %player%." -experience-queried: "%player% tiene %amount% %type%." -experience-setted: "Acabas de establecer %amount% %type% a %player%." -experience-taken: "Acabas de quitar %amount% %type% a %player%." -mailbox-clear: "Acabas de vaciar el buzón de &f%player%." +experience-granted: "Acabas de dar %amount% %type% a %player%." +experience-queried: "%player% tiene %amount% %type%." +experience-setted: "Acabas de establecer %amount% %type% a %player%." +experience-taken: "Acabas de quitar %amount% %type% a %player%." +mailbox-clear: "Acabas de vaciar el buzón de %player%." -mailbox-message-send: "Tu correo ha sido enviado a &f%player%." -mailbox-message-receive: "&f%player% te ha enviado un correo &8(&f/mail read&8)" -mailbox-message-send-all: "Tu correo ha sido enviado a &f%amount% jugador(es)." -mailbox-message-notify: "Tienes &f%amount% correo(s) sin leer, usa &f/mail read." +mailbox-message-send: "Tu correo ha sido enviado a %player%." +mailbox-message-receive: "%player% te ha enviado un correo (/mail read)" +mailbox-message-send-all: "Tu correo ha sido enviado a %amount% jugador(es)." +mailbox-message-notify: "Tienes %amount% correo(s) sin leer, usa Haz clic para leer tus correos'>/mail read." mailbox-message-empty: "No tienes ningún correo." mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "Tus correos (&f%amount%)" + - "Tus correos (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Usa &f/mail clearmessages para eliminarlos." + - "Usa Haz clic para eliminar tus correos'>/mail clearmessages para eliminarlos." - "" -mailbox-message-clear: "Acabas de eliminar los correos de &f%player%." +mailbox-message-clear: "Acabas de eliminar los correos de %player%." mailbox-message-self: "No puedes enviarte un correo a ti mismo." mailbox-message-mute: "No puedes enviar un correo mientras estás silenciado." -mailbox-message-ignore: "&f%player% no quiere recibir tus correos." -mailbox-message-full: "El buzón de &f%player% está lleno." -mailbox-message-too-long: "Tu correo no puede superar los &f%max% caracteres." +mailbox-message-ignore: "%player% no quiere recibir tus correos." +mailbox-message-full: "El buzón de %player% está lleno." +mailbox-message-too-long: "Tu correo no puede superar los %max% caracteres." random-word-clear: "La palabra aleatoria ha sido limpiada." -step-already-exist: "El paso &f%step% ya ha comenzado." -step-doesnt-exist: "El paso &f%step% no existe." -step-doesnt-started: "El paso &f%step% no se ha iniciado." +step-already-exist: "El paso %step% ya ha comenzado." +step-doesnt-exist: "El paso %step% no existe." +step-doesnt-started: "El paso %step% no se ha iniciado." # Enderchest -command-endersee-error: "No se pudo cargar el cofre del End de &f%player%." +command-endersee-error: "No se pudo cargar el cofre del End de %player%." # TPA -command-tpa-error-no-request-from-player: "No tienes una solicitud de teletransporte de &f%player%." -command-tpa-accept-all-success: "Has aceptado &f%count% solicitud(es) de teletransporte." -command-tpa-deny-all-success: "Has rechazado &f%count% solicitud(es) de teletransporte." +command-tpa-error-no-request-from-player: "No tienes una solicitud de teletransporte de %player%." +command-tpa-accept-all-success: "Has aceptado %count% solicitud(es) de teletransporte." +command-tpa-deny-all-success: "Has rechazado %count% solicitud(es) de teletransporte." description-tp-toggle: "Activar/desactivar solicitudes de teletransporte" -command-teleport-request-disabled: "El jugador &f%player% ha desactivado las solicitudes de teletransporte." -command-tp-toggle-enable: "&7Solicitudes de teletransporte activadas &7para &f%player%." -command-tp-toggle-disable: "&7Solicitudes de teletransporte desactivadas &7para &f%player%." +command-teleport-request-disabled: "El jugador %player% ha desactivado las solicitudes de teletransporte." +command-tp-toggle-enable: "Solicitudes de teletransporte activadas para %player%." +command-tp-toggle-disable: "Solicitudes de teletransporte desactivadas para %player%." description-tpa-here-toggle: "Activar/desactivar solicitudes de tpahere" -command-teleport-here-request-disabled: "El jugador &f%player% ha desactivado las solicitudes de tpahere." -command-tpa-here-toggle-enable: "&7Solicitudes de tpahere activadas &7para &f%player%." -command-tpa-here-toggle-disable: "&7Solicitudes de tpahere desactivadas &7para &f%player%." +command-teleport-here-request-disabled: "El jugador %player% ha desactivado las solicitudes de tpahere." +command-tpa-here-toggle-enable: "Solicitudes de tpahere activadas para %player%." +command-tpa-here-toggle-disable: "Solicitudes de tpahere desactivadas para %player%." # Teletransporte cross-servidor teleport-cross-server-not-supported: "El teletransporte cross-servidor no está soportado en este servidor." -teleport-cross-server-connecting: "Conectando al servidor &f%server%..." -teleport-cross-server-player-not-found: "El jugador &f%player% no fue encontrado en ningún servidor." +teleport-cross-server-connecting: "Conectando al servidor %server%..." +teleport-cross-server-player-not-found: "El jugador %player% no fue encontrado en ningún servidor." # ItemFrame description-itemframe: "Alternar visibilidad del marco" -command-itemframe-invisible: "El marco ahora es invisible." -command-itemframe-visible: "El marco ahora es visible." +command-itemframe-invisible: "El marco ahora es invisible." +command-itemframe-visible: "El marco ahora es visible." command-itemframe-not-found: "No se encontró ningún marco. Mira un marco e inténtalo de nuevo." # Módulo de mensajes de muerte description-death-message: "Mensajes de muerte personalizados" description-death-message-toggle: "Alternar visibilidad de mensajes de muerte" -command-death-message-toggle-disable: "#C084FC☠ #B794F4Los mensajes de muerte ahora están #E9D5FFocultos #B794F4para %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4Los mensajes de muerte ahora están #E9D5FFvisibles #B794F4para %player%#B794F4." +command-death-message-toggle-disable: "☠ Los mensajes de muerte ahora están ocultos para %player%." +command-death-message-toggle-enable: "☠ Los mensajes de muerte ahora están visibles para %player%." # Mensajes de muerte (detallados) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4murió." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4fue asesinado por #E9D5FF%killer%#B794F4." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4fue asesinado por #E9D5FF%killer%#B794F4." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4fue disparado por #E9D5FF%killer%#B794F4." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4fue explotado por #E9D5FF%killer%#B794F4." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4cayó desde un lugar alto." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4murió quemado." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4intentó nadar en lava." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4se ahogó." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4explotó." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4fue alcanzado por un rayo." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4se asfixió en una pared." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4murió de hambre." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4fue envenenado." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4fue asesinado por magia." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4se marchitó." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4fue aplastado por un bloque." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4experimentó energía cinética." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4cayó fuera del mundo." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4murió pinchado." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4fue aplastado." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4murió congelado." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4fue obliterado por una onda sónica." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4descubrió que el suelo era lava." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4murió intentando herir a alguien." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4caminó hacia una fogata." -death-hover-details: "#D8B4FE☠ Ubicación de muerte#B794F4:\n#E9D5FF▸ Mundo: #D8B4FE%world%\n#E9D5FF▸ Posición: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oClick para teletransportarse" +death-generic: "☠ %player% murió." +death-by-player: "⚔ %player% fue asesinado por %killer%." +death-by-mob: "☠ %player% fue asesinado por %killer%." +death-by-projectile: "🏹 %player% fue disparado por %killer%." +death-by-mob-explosion: "💥 %player% fue explotado por %killer%." +death-by-fall: "⬇ %player% cayó desde un lugar alto." +death-by-fire: "🔥 %player% murió quemado." +death-by-lava: "🌋 %player% intentó nadar en lava." +death-by-drowning: "💧 %player% se ahogó." +death-by-explosion: "💥 %player% explotó." +death-by-lightning: "⚡ %player% fue alcanzado por un rayo." +death-by-suffocation: "▓ %player% se asfixió en una pared." +death-by-starvation: "🍖 %player% murió de hambre." +death-by-poison: "☣ %player% fue envenenado." +death-by-magic: "✦ %player% fue asesinado por magia." +death-by-wither: "💀 %player% se marchitó." +death-by-falling-block: "▼ %player% fue aplastado por un bloque." +death-by-fly-into-wall: "💨 %player% experimentó energía cinética." +death-by-void: "✧ %player% cayó fuera del mundo." +death-by-cactus: "🌵 %player% murió pinchado." +death-by-cramming: "⊞ %player% fue aplastado." +death-by-freeze: "❄ %player% murió congelado." +death-by-sonic-boom: "◈ %player% fue obliterado por una onda sónica." +death-by-magma: "♨ %player% descubrió que el suelo era lava." +death-by-thorns: "✵ %player% murió intentando herir a alguien." +death-by-campfire: "🔥 %player% caminó hacia una fogata." +death-hover-details: "☠ Ubicación de muerte:\n▸ Mundo: %world%\n▸ Posición: %x%, %y%, %z%\n\nClick para teletransportarse" # Mensajes de muerte (fallback cuando no hay configuración personalizada) -death-message-generic: "#99E0FF%player% &7ha muerto." -death-message-player: "#99E0FF%player% &7fue asesinado por #34cfe0%killer% &7usando %weapon%&7." -death-message-mob: "#99E0FF%player% &7fue asesinado por &c%mob%&7." -death-message-mythic-mob: "#99E0FF%player% &7fue asesinado por %mob%&7!" -death-message-fists: "&7puños" +death-message-generic: "%player% ha muerto." +death-message-player: "%player% fue asesinado por %killer% usando %weapon%." +death-message-mob: "%player% fue asesinado por %mob%." +death-message-mythic-mob: "%player% fue asesinado por %mob%!" +death-message-fists: "puños" -teleport-message-spawn-console: "Acabas de teletransportar al jugador %player% al spawn." -teleport-random-start: "&7Buscando un destino... no debes moverte." +teleport-message-spawn-console: "Acabas de teletransportar al jugador %player% al spawn." +teleport-random-start: "Buscando un destino... no debes moverte." worldedit-permission-error: "No puedes usar worldedit aquí." # Ignorar, sonido de ping & teletransporte a otro jugador -command-tp-other: "&7Acabas de teletransportar #34cfe0%player% &7a #34cfe0%target%&7." +command-tp-other: "Acabas de teletransportar %player% a %target%." description-ping-sound: "Activar o desactivar el sonido de ping del chat" -command-ping-sound-enable: "&7Sonido de ping del chat habilitado &7para &f%player%." -command-ping-sound-disable: "&7Sonido de ping del chat deshabilitado &7para &f%player%." +command-ping-sound-enable: "Sonido de ping del chat habilitado para %player%." +command-ping-sound-disable: "Sonido de ping del chat deshabilitado para %player%." description-ignore: "Ignorar a un jugador, bloqueando sus mensajes privados y solicitudes de teletransporte" description-unignore: "Dejar de ignorar a un jugador" description-ignore-list: "Listar los jugadores que estás ignorando" -command-ignore-add: "Ahora estás ignorando a &f%player%. Ya no recibirás sus mensajes privados ni solicitudes de teletransporte." -command-ignore-remove: "Ya no estás ignorando a &f%player%." -command-ignore-already: "Ya estás ignorando a &f%player%." -command-ignore-not: "No estás ignorando a &f%player%." +command-ignore-add: "Ahora estás ignorando a %player%. Ya no recibirás sus mensajes privados ni solicitudes de teletransporte." +command-ignore-remove: "Ya no estás ignorando a %player%." +command-ignore-already: "Ya estás ignorando a %player%." +command-ignore-not: "No estás ignorando a %player%." command-ignore-self: "No puedes ignorarte a ti mismo." command-ignore-list-empty: "No estás ignorando a nadie." -command-ignore-list-header: "Estás ignorando a &f%count% jugador(es):" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "No puedes enviar un mensaje a #34cfe0%player%, te está ignorando." +command-ignore-list-header: "Estás ignorando a %count% jugador(es):" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "No puedes enviar un mensaje a %player%, te está ignorando." description-del-home-other: "Eliminar un hogar de otro jugador" # Sistema de hogares (públicos, compartidos, categorías, favoritos, vista previa, importación) @@ -1129,29 +1129,29 @@ description-home-category: "Establecer la categoría de un hogar" description-home-favorite: "Alternar un hogar como favorito" description-home-import: "Importar hogares desde otro plugin" command-home-feature-disabled: "Esta función de hogares está deshabilitada en este servidor." -command-home-public-enable: "Tu hogar &f%name% ahora es público." -command-home-public-disable: "Tu hogar &f%name% ya no es público." -command-home-public-limit: "Has alcanzado el número máximo de hogares públicos (&f%max%)." -command-home-not-accessible: "El hogar &f%name% de &f%player% no es accesible para ti." -command-public-homes-header: "Hogares públicos (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Teletransportar]" +command-home-public-enable: "Tu hogar %name% ahora es público." +command-home-public-disable: "Tu hogar %name% ya no es público." +command-home-public-limit: "Has alcanzado el número máximo de hogares públicos (%max%)." +command-home-not-accessible: "El hogar %name% de %player% no es accesible para ti." +command-public-homes-header: "Hogares públicos (%count%):" +command-public-homes-line: "- %player%:%name% Teletransportarse a este hogar'>[Teletransportar]" command-public-homes-empty: "No hay ningún hogar público." -command-home-share-add: "Compartiste tu hogar &f%name% con &f%player%." -command-home-share-remove: "Dejaste de compartir tu hogar &f%name% con &f%player%." -command-home-share-already: "Tu hogar &f%name% ya está compartido con &f%player%." -command-home-share-not: "Tu hogar &f%name% no está compartido con &f%player%." +command-home-share-add: "Compartiste tu hogar %name% con %player%." +command-home-share-remove: "Dejaste de compartir tu hogar %name% con %player%." +command-home-share-already: "Tu hogar %name% ya está compartido con %player%." +command-home-share-not: "Tu hogar %name% no está compartido con %player%." command-home-share-self: "No puedes compartir un hogar contigo mismo." -command-home-share-limit: "Has alcanzado el número máximo de comparticiones para este hogar (&f%max%)." -command-home-share-list-header: "El hogar &f%name% está compartido con &f%count% jugador(es):" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "El hogar &f%name% no está compartido con nadie." -command-home-category-set: "La categoría de tu hogar &f%name% ahora es &f%category%." -command-home-category-reset: "La categoría de tu hogar &f%name% ha sido eliminada." +command-home-share-limit: "Has alcanzado el número máximo de comparticiones para este hogar (%max%)." +command-home-share-list-header: "El hogar %name% está compartido con %count% jugador(es):" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "El hogar %name% no está compartido con nadie." +command-home-category-set: "La categoría de tu hogar %name% ahora es %category%." +command-home-category-reset: "La categoría de tu hogar %name% ha sido eliminada." command-home-category-invalid: "Nombre de categoría inválido." -command-home-favorite-add: "Tu hogar &f%name% ahora es un favorito." -command-home-favorite-remove: "Tu hogar &f%name% ya no es un favorito." -command-home-preview: "&7Hogar &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teletransportar]" -command-home-import-start: "Importando hogares desde &f%source%..." -command-home-import-done: "Importación finalizada: &f%imported% importados, &f%skipped% omitidos, &f%errors% errores." -command-home-import-unknown: "Fuente de importación desconocida &f%source%. Disponibles: essentialsx." +command-home-favorite-add: "Tu hogar %name% ahora es un favorito." +command-home-favorite-remove: "Tu hogar %name% ya no es un favorito." +command-home-preview: "Hogar %name% - %world% (%x%, %y%, %z%) [Teletransportar]" +command-home-import-start: "Importando hogares desde %source%..." +command-home-import-done: "Importación finalizada: %imported% importados, %skipped% omitidos, %errors% errores." +command-home-import-unknown: "Fuente de importación desconocida %source%. Disponibles: essentialsx." command-home-import-error: "Ocurrió un error durante la importación, revisa la consola." diff --git a/src/main/resources/messages/messages_fr.yml b/src/main/resources/messages/messages_fr.yml index 81d95cde..88438c46 100644 --- a/src/main/resources/messages/messages_fr.yml +++ b/src/main/resources/messages/messages_fr.yml @@ -19,263 +19,263 @@ prefix: "zEssentials • " you: "vous" -trash: "&8Corbeille" +trash: "Corbeille" console: "Console" expired: "Expiré" -player-not-found: "&f%player% n'a pas été trouvé." -module-disable: "Le module &f%name% est désactivé. Vous ne pouvez pas utiliser cette commande." +player-not-found: "%player% n'a pas été trouvé." +module-disable: "Le module %name% est désactivé. Vous ne pouvez pas utiliser cette commande." code-not-found: "Impossible de trouver le code." rules: - - "#ffd353ℹ ʀèɢʟᴇs ᴅᴜ sᴇʀᴠᴇᴜʀ#3f3f3f:" - - "#3f3f3f• &7Respectez tous les joueurs et le personnel." - - "#3f3f3f• &7Pas de griefing ou de vol." - - "#3f3f3f• &7Pas de triche ou de piratage." - - "#3f3f3f• &7Gardez le chat propre et respectueux." - - "#3f3f3f• &7Pas de spam ou de publicité." + - "ℹ ʀèɢʟᴇs ᴅᴜ sᴇʀᴠᴇᴜʀ:" + - "• Respectez tous les joueurs et le personnel." + - "• Pas de griefing ou de vol." + - "• Pas de triche ou de piratage." + - "• Gardez le chat propre et respectueux." + - "• Pas de spam ou de publicité." # Commandes -command-syntax-error: "Vous devez exécuter la commande comme ceci#656665: &f%syntax%" +command-syntax-error: "Vous devez exécuter la commande comme ceci: %syntax%" command-no-permission: "Vous n'avez pas la permission d'exécuter cette commande." command-no-console: "Seul un joueur peut exécuter cette commande." command-no-arg: "Impossible de trouver la commande avec ses arguments." command-restricted: "Vous ne pouvez pas utiliser cette commande ici." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "Vous venez de recharger les fichiers de configuration." -command-reload-module: "Vous venez de recharger les fichiers de configuration du module &f%module%." -command-reload-error: "&f%module% n'a pas été trouvé !" -command-essentials: "&ezEssentials&8, &eVersion &f%version%" +command-reload-module: "Vous venez de recharger les fichiers de configuration du module %module%." +command-reload-error: "%module% n'a pas été trouvé !" +command-essentials: "zEssentials, Version %version%" # Commandes de mode de jeu -command-gamemode: "&fMode de jeu&e %gamemode%&f défini pour &b%player%&f." +command-gamemode: "Mode de jeu %gamemode% défini pour %player%." command-gamemode-invalid: "Vous devez spécifier un joueur valide." # Commandes de météo command-time-error: "Tu dois indiquer un monde." -command-time-already-changing: "Le temps est déjà en train de changer dans &f%world%." -command-day: "&fVous venez d'apporter la &elumière du jour&f dans le monde %world%&f." -command-night: "&fVous venez d'apporter la &enuit&f dans le monde %world%&f." -command-sun: "&fVous venez d'apporter le &esoleil&f dans le monde %world%&f." +command-time-already-changing: "Le temps est déjà en train de changer dans %world%." +command-day: "Vous venez d'apporter la lumière du jour dans le monde %world%." +command-night: "Vous venez d'apporter la nuit dans le monde %world%." +command-sun: "Vous venez d'apporter le soleil dans le monde %world%." # Commandes d'administration -command-top: "&7Vous venez d'être téléporté en &esommet&7." +command-top: "Vous venez d'être téléporté en sommet." command-top-error: "Impossible de trouver une position pour vous téléporter en toute sécurité." command-speed-invalid: "Vous devez spécifier un joueur valide." -command-speed-fly: "&7Vous venez de définir votre vitesse de &nvole&r&7 sur &f%speed%&7 pour &f%player%&7. &8(&f2 &7par défaut&8)" -command-speed-walk: "&7Vous venez de définir votre vitesse de &nmarche&r&7 sur &f%speed%&7 pour &f%player%&7. &8(&f2 &7par défaut&8)" -command-speed-error: "Vous devez entrer un nombre entre &60 et &610. &8(&f2 &7par défaut&8)" -command-god-enable: "&7Mode divin activé &7pour &f%player%." -command-god-disable: "&7Mode divin désactivé &7pour &f%player%." -command-vanish-enable: "&7Mode vanish activé &7pour &f%player%." -command-vanish-disable: "&7Mode vanish désactivé &7pour &f%player%." -command-night-vision-enable: "&7Vision nocturne activé &7pour &f%player%." -command-night-vision-disable: "&7Vision nocturne désactivé &7pour &f%player%." -command-phantoms-enable: "&7Apparition des fantômes activée &7pour &f%player%." -command-phantoms-disable: "&7Apparition des fantômes désactivée &7pour &f%player%." -command-ext-sender: "&7Tu as éteint le joueur &f%player%&7." +command-speed-fly: "Vous venez de définir votre vitesse de vole sur %speed% pour %player%. (2 par défaut)" +command-speed-walk: "Vous venez de définir votre vitesse de marche sur %speed% pour %player%. (2 par défaut)" +command-speed-error: "Vous devez entrer un nombre entre 0 et 10. (2 par défaut)" +command-god-enable: "Mode divin activé pour %player%." +command-god-disable: "Mode divin désactivé pour %player%." +command-vanish-enable: "Mode vanish activé pour %player%." +command-vanish-disable: "Mode vanish désactivé pour %player%." +command-night-vision-enable: "Vision nocturne activé pour %player%." +command-night-vision-disable: "Vision nocturne désactivé pour %player%." +command-phantoms-enable: "Apparition des fantômes activée pour %player%." +command-phantoms-disable: "Apparition des fantômes désactivée pour %player%." +command-ext-sender: "Tu as éteint le joueur %player%." command-ext-receiver: "Tu ne brûles plus." command-ext-error: "Impossible d’éteindre un joueur mort !" -command-heal-all: "&7Tu as soigné tous les joueurs du serveur." -command-heal-sender: "&7Vous venez de soigner le joueur &f%player%&7." +command-heal-all: "Tu as soigné tous les joueurs du serveur." +command-heal-sender: "Vous venez de soigner le joueur %player%." command-heal-receiver: "Vous avez été soigné." command-heal-error: "Vous ne pouvez pas soigner quelqu'un qui est mort !" -command-lighting-all: "&7Tu viens de frapper tous les joueurs avec la foudre." -command-lighting: "&7Tu as invoqué la foudre à l’emplacement ciblé." -command-lighting-sender: "&7Tu as invoqué la foudre à l’emplacement de &f%player%&7." -command-lighting-receiver: "&cTu as été frappé par la foudre !" +command-lighting-all: "Tu viens de frapper tous les joueurs avec la foudre." +command-lighting: "Tu as invoqué la foudre à l’emplacement ciblé." +command-lighting-sender: "Tu as invoqué la foudre à l’emplacement de %player%." +command-lighting-receiver: "Tu as été frappé par la foudre !" command-lighting-error: "Impossible de frapper un joueur mort avec la foudre !" command-more-error: "Vous ne pouvez pas effectuer cette commande sur l'objet en main." -command-more-success: "&7Vous venez de mettre votre objet à &f64&7." -command-feed-all: "&7Tu as nourri tous les joueurs du serveur." -command-feed-sender: "&7Vous venez de nourrir le joueur &f%player%&7." +command-more-success: "Vous venez de mettre votre objet à 64." +command-feed-all: "Tu as nourri tous les joueurs du serveur." +command-feed-sender: "Vous venez de nourrir le joueur %player%." command-feed-receiver: "Vous avez été nourri." command-feed-error: "Vous ne pouvez pas nourrir quelqu'un qui est mort !" -command-afk-enable: "&7Vous êtes maintenant marqué comme AFK&7." +command-afk-enable: "Vous êtes maintenant marqué comme AFK." command-afk-disable: "Vous n'êtes plus marqué comme AFK." -command-message-target-afk: "&f%player% &7est actuellement AFK&7." -command-compact-type: "Impossible de compacter le matériau &f%material%." -command-compact-error: "Vous n'avez pas &f%item% dans votre inventaire." -command-compact-success: "&7Vous venez de transformer #0EEA93x%amount% #99E0FF%item% &7en #0EEA93x%toAmount% #99E0FF%toItem%&7." -command-compact-success-all: "&7Vous venez de compacter tous vos objets." -command-hat-success: "&7Vous venez de mettre #0ef0ce%item% &7sur votre tête." +command-message-target-afk: "%player% est actuellement AFK." +command-compact-type: "Impossible de compacter le matériau %material%." +command-compact-error: "Vous n'avez pas %item% dans votre inventaire." +command-compact-success: "Vous venez de transformer x%amount% %item% en x%toAmount% %toItem%." +command-compact-success-all: "Vous venez de compacter tous vos objets." +command-hat-success: "Vous venez de mettre %item% sur votre tête." command-hat-error: "Vous ne pouvez pas mettre de l'air sur votre tête." -command-player-weather-reset: "&7Vous venez de changer la météo pour celle du serveur." -command-player-weather-downfall: "&7Vous venez de mettre la pluie pour vous-même." -command-player-time-reset: "&7Vous venez de changer l'heure pour celle du serveur." -command-player-time-change: "&7Vous êtes ici pour changer votre heure." -command-lag-world-line: "&a%world%&7 : &a%peaceful% pacifiques&7, &c%monsters% monstres&7, &e%items% items" -command-lag-world-header: "&aEntités pour le monde &2%world%&a :" -command-lag-world-entry: "&7- &a%type%&7 : &f%amount%" -command-lag-clear-success: "&7Suppression de &a%amount% &7entités dans &a%world%&7." -command-lag-clear-countdown: "&cSuppression des entités dans &e%time% &csecondes !" -command-fly-enable: "&7Mode vol activé &7pour &f%player%." -command-fly-disable: "&7Mode vol désactivé &7pour &f%player%." +command-player-weather-reset: "Vous venez de changer la météo pour celle du serveur." +command-player-weather-downfall: "Vous venez de mettre la pluie pour vous-même." +command-player-time-reset: "Vous venez de changer l'heure pour celle du serveur." +command-player-time-change: "Vous êtes ici pour changer votre heure." +command-lag-world-line: "%world% : %peaceful% pacifiques, %monsters% monstres, %items% items" +command-lag-world-header: "Entités pour le monde %world% :" +command-lag-world-entry: "- %type% : %amount%" +command-lag-clear-success: "Suppression de %amount% entités dans %world%." +command-lag-clear-countdown: "Suppression des entités dans %time% secondes !" +command-fly-enable: "Mode vol activé pour %player%." +command-fly-disable: "Mode vol désactivé pour %player%." command-fly-error-world: "Vous ne pouvez pas voler dans ce monde." -command-fly-enable-seconds: "&7Mode de vol activé &7pour &f%player%. &8(&7temps restant %time%&8)" +command-fly-enable-seconds: "Mode de vol activé pour %player%. (temps restant %time%)" command-fly-error: "Vous n'avez plus de temps de vol disponible." command-fly-end: "Vous avez utilisé tout votre temps de vol, vous ne pouvez plus voler." command-fly-error-other: "%player% n'a plus de temps de vol disponible." -command-fly-add: "Vous venez d'ajouter %time% de temps de vol à &f%player%." -command-fly-get: "%player%&8: &f%player%." +command-fly-add: "Vous venez d'ajouter %time% de temps de vol à %player%." +command-fly-get: "%player%: %player%." command-fly-info-empty: "Vous n'avez pas de temps de vol disponible." -command-fly-info: "Vous avez &f%time%." -command-fly-remove: "Vous venez de retirer %time% de temps de vol à &f%player%." -command-fly-set: "Vous venez de définir %time% de temps de vol à &f%player%." -command-fly-remaining: "Il vous reste &f%time% de temps de vol." -command-furnace-type: "Impossible de fondre le matériau &f%material%." -command-furnace-error: "Vous n'avez pas d'&f%item% dans votre inventaire." -command-furnace-success: "&7Vous venez de transformer #0EEA93x%amount% #34cfe0%item% &7en #0EEA93x%toAmount% #34cfe0%toItem%&7." -command-skull: "Vous venez d'obtenir la tête du joueur &f%name%." +command-fly-info: "Vous avez %time%." +command-fly-remove: "Vous venez de retirer %time% de temps de vol à %player%." +command-fly-set: "Vous venez de définir %time% de temps de vol à %player%." +command-fly-remaining: "Il vous reste %time% de temps de vol." +command-furnace-type: "Impossible de fondre le matériau %material%." +command-furnace-error: "Vous n'avez pas d'%item% dans votre inventaire." +command-furnace-success: "Vous venez de transformer x%amount% %item% en x%toAmount% %toItem%." +command-skull: "Vous venez d'obtenir la tête du joueur %name%." command-repair-error: "L'objet dans votre main ne peut pas être réparé." command-repair-success: "Vous venez de réparer l'objet dans votre main." command-repair-all-error: "Vous n'avez aucun objet à réparer." command-repair-all-success: "Vous venez de réparer tous les objets dans votre inventaire." command-near-empty: "Aucun joueur à proximité de vous." -command-near-player: "&fJoueurs à proximité de vous&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Joueurs à proximité de vous:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7Vous avez joué&8: %playtime%" - - "&7Session en cours&8: %playtime_session%" + - "Vous avez joué: %playtime%" + - "Session en cours: %playtime_session%" -command-bottom: "&7Vous venez d'être téléporté en &ebottom&7." +command-bottom: "Vous venez d'être téléporté en bottom." command-bottom-error: "Impossible de trouver une position pour vous téléporter en toute sécurité." -command-remove: "&7Supprimé %amount% &7entités." +command-remove: "Supprimé %amount% entités." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FFLe joueur &f%player% #99E0FFa été hors ligne #99E0FFdepuis &7%date%#99E0FF." + message: "Le joueur %player% a été hors ligne depuis %date%." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FFLe joueur &f%player% #99E0FFest en ligne #99E0FFdepuis %date%#99E0FF." + message: "Le joueur %player% est en ligne depuis %date%." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFTemps de jeu&8: &f%playtime%" + message: "Temps de jeu: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFAdresse IP&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "Impossible de trouver des joueurs avec l'adresse IP &f%ip%." -command-seen-ip-line: "#99E0FFJoueurs avec l'adresse IP &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "Adresse IP:%ips%" +command-seen-address: " Afficher les joueurs qui ont la même adresse'>%ip%" +command-seen-ip-empty: "Impossible de trouver des joueurs avec l'adresse IP %ip%." +command-seen-ip-line: "Joueurs avec l'adresse IP %ip%:%players%" +command-seen-ip-info: " Afficher les informations du joueur'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFDernière position&8: &f%world%, %x%, %y%, %z%" + message: "Dernière position: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFPremière connexion&8:&f%created_at%" + message: "Première connexion:%created_at%" # Économie -command-economy-not-found: "Impossible de trouver une économie avec le nom &f%name%." -command-economy-reset-all-confirm: "Vous êtes sur le point de réinitialiser tous les soldes pour &f%economy%. Exécutez à nouveau la commande dans &f%seconds% secondes pour confirmer." -command-economy-reset-all-success: "#99E0FFVous avez réinitialisé tous les soldes pour &f%economy%#99E0FF." -command-economy-give-all-sender: "#99E0FFVous venez de donner &f%economyFormat% #99E0FFaux joueurs en ligne." -command-economy-give-sender: "#99E0FFVous venez de donner &f%economyFormat% #99E0FFau joueur &7%player%#99E0FF." -command-economy-give-receiver: "#99E0FFVous venez de recevoir &f%economyFormat%." -command-economy-set-sender: "#99E0FFVous venez de définir &f%economyFormat% #99E0FFau joueur &7%player%#99E0FF." -command-economy-set-receiver: "#99E0FFVotre solde a été modifié en &f%economyFormat%." -command-economy-take-sender: "#99E0FFVous venez de prendre &f%economyFormat% #99E0FFau joueur &7%player%#99E0FF." -command-economy-take-receiver: "#99E0FFVous venez de perdre &f%economyFormat%." -command-economy-show-empty: "&f%player% n'a pas d'argent." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." +command-economy-not-found: "Impossible de trouver une économie avec le nom %name%." +command-economy-reset-all-confirm: "Vous êtes sur le point de réinitialiser tous les soldes pour %economy%. Exécutez à nouveau la commande dans %seconds% secondes pour confirmer." +command-economy-reset-all-success: "Vous avez réinitialisé tous les soldes pour %economy%." +command-economy-give-all-sender: "Vous venez de donner %economyFormat% aux joueurs en ligne." +command-economy-give-sender: "Vous venez de donner %economyFormat% au joueur %player%." +command-economy-give-receiver: "Vous venez de recevoir %economyFormat%." +command-economy-set-sender: "Vous venez de définir %economyFormat% au joueur %player%." +command-economy-set-receiver: "Votre solde a été modifié en %economyFormat%." +command-economy-take-sender: "Vous venez de prendre %economyFormat% au joueur %player%." +command-economy-take-receiver: "Vous venez de perdre %economyFormat%." +command-economy-show-empty: "%player% n'a pas d'argent." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFVous avez&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "Vous avez:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-money-other: - - "#99E0FF%player% a&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "%player% a:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "Le montant à payer doit être positif." -command-pay-min: "Le montant minimum que vous pouvez payer est &f%amount%." -command-pay-max: "Le montant maximum que vous pouvez payer est &f%amount%." -command-pay-sender: "#99E0FFVous venez d'envoyer #F8F327%amount%#99E0FF au joueur &f%player%#99E0FF." -command-pay-receiver: "&f%player% #99E0FFvient de vous envoyer #F8F327%amount%#99E0FF." +command-pay-min: "Le montant minimum que vous pouvez payer est %amount%." +command-pay-max: "Le montant maximum que vous pouvez payer est %amount%." +command-pay-sender: "Vous venez d'envoyer %amount% au joueur %player%." +command-pay-receiver: "%player% vient de vous envoyer %amount%." command-pay-disable: "Vous ne pouvez pas envoyer %name%." command-pay-self: "Vous ne pouvez pas vous envoyer d'argent à vous-même." command-pay-not-enough: "Vous n'avez pas assez d'argent." command-pay-disabled: "Vous ne pouvez pas envoyer de l'argent à ce joueur." # Commandes de téléportation -command-tpa-error: "Vous avez déjà envoyé une demande à #99E0FF%player%." +command-tpa-error: "Vous avez déjà envoyé une demande à %player%." command-tpa-error-same: "Vous ne pouvez pas vous téléporter à vous-même." -command-tpa-here-error: "Vous avez déjà envoyé une demande à #99E0FF%player%." +command-tpa-here-error: "Vous avez déjà envoyé une demande à %player%." command-tpa-here-error-same: "Vous ne pouvez pas vous téléporter à vous-même." command-tpa-error-offline: "Impossible de trouver le joueur, il doit être hors ligne." command-tpa-error-to-late-empty: "Vous n'avez pas de demande de téléportation." command-tpa-error-to-late-expire: "La demande de téléportation a expiré." command-tpa-sender: - - "✔ #99E0FFVous avez envoyé à &f%displayName% #99E0FFune demande de téléportation." - - " ✘ Annuler la téléportation'>#99E0FFTapez /tpacancel %player%#99E0FF pour annuler votre demande." + - "✔ Vous avez envoyé à %displayName% une demande de téléportation." + - " ✘ Annuler la téléportation'>Tapez /tpacancel %player% pour annuler votre demande." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFa demandé à se téléporter vers vous !" - - " ✔ Accepter la téléportation'>#99E0FFTapez /tpaccept #99E0FFpour accepter#99E0FF." - - " ✘ Refuser la téléportation'>#99E0FFTapez /tpdeny #99E0FFpour refuser#99E0FF." + - "⚠ %displayName% a demandé à se téléporter vers vous !" + - " ✔ Accepter la téléportation'>Tapez /tpaccept pour accepter." + - " ✘ Refuser la téléportation'>Tapez /tpdeny pour refuser." - "" - - "&7&oVous avez 60 secondes pour accepter la demande de téléportation." + - "Vous avez 60 secondes pour accepter la demande de téléportation." command-tpa-here-sender: - - "✔ #99E0FFVous avez envoyé à &f%displayName% #99E0FFune demande de téléportation." - - " ✘ Annuler la téléportation'>#99E0FFTapez /tpacancel %player%#99E0FF pour annuler votre demande." + - "✔ Vous avez envoyé à %displayName% une demande de téléportation." + - " ✘ Annuler la téléportation'>Tapez /tpacancel %player% pour annuler votre demande." command-tpa-here-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFa demandé à vous téléporter vers lui !" - - " ✔ Accepter la téléportation'>#99E0FFTapez /tpaccept #99E0FFpour accepter#99E0FF." - - " ✘ Refuser la téléportation'>#99E0FFTapez /tpdeny #99E0FFpour refuser#99E0FF." + - "⚠ %displayName% a demandé à vous téléporter vers lui !" + - " ✔ Accepter la téléportation'>Tapez /tpaccept pour accepter." + - " ✘ Refuser la téléportation'>Tapez /tpdeny pour refuser." - "" - - "&7&oVous avez 60 secondes pour accepter la demande de téléportation." -command-tpa-accept-receiver: "#99E0FFVous venez de accepter #99E0FFla demande de téléportation de #99E0FF%player%." -command-tpa-accept-sender: "#99E0FF%player% vient de accepter #99E0FFvotre demande de téléportation." -command-tpa-here-accept-receiver: "#99E0FFVous venez de accepter #99E0FFla demande de téléportation de #99E0FF%player%." -command-tpa-here-accept-sender: "#99E0FF%player% vient de accepter #99E0FFvotre demande de téléportation." -command-teleport-ignore-player: "Vous ne pouvez pas envoyer de demande de téléportation à #99E0FF%player%, ils vous ignorent." + - "Vous avez 60 secondes pour accepter la demande de téléportation." +command-tpa-accept-receiver: "Vous venez de accepter la demande de téléportation de %player%." +command-tpa-accept-sender: "%player% vient de accepter votre demande de téléportation." +command-tpa-here-accept-receiver: "Vous venez de accepter la demande de téléportation de %player%." +command-tpa-here-accept-sender: "%player% vient de accepter votre demande de téléportation." +command-teleport-ignore-player: "Vous ne pouvez pas envoyer de demande de téléportation à %player%, ils vous ignorent." command-teleport-world: "Vous devez être dans le même monde pour vous téléporter." command-tpa-error-to-late: "Vous n'avez pas de demande de téléportation." command-tpa-error-to-late-2: "La demande a expiré." -command-tp-deny-sender: "✔ Refusé &f%player% la demande de téléportation." -command-tp-deny-receiver: "✘ &f%player% a refusé votre demande de téléportation." -command-tp-cancel-error: "Vous n'avez pas envoyé de demande de téléportation à &f%player%." -command-tp-cancel-sender: "Annulé #99E0FFvotre demande de téléportation vers %player%." -command-tp-cancel-receiver: "&f%player% a annulé leur demande de téléportation vers vous." -command-world-teleport-self: "Vous venez d'être téléporté dans le monde &f%world%." -command-world-teleport-other: "Vous venez de téléporter le joueur &f%player% dans le monde &f%world%." -command-random-tp-other: "Vous venez de téléporter aléatoirement le joueur &f%player% dans le monde &f%world%." -command-tp: "&fVous venez de vous téléporter vers le joueur #34cfe0%player%&f." -command-tp-location: "&fVous venez de vous téléporter en #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." +command-tp-deny-sender: "✔ Refusé %player% la demande de téléportation." +command-tp-deny-receiver: "✘ %player% a refusé votre demande de téléportation." +command-tp-cancel-error: "Vous n'avez pas envoyé de demande de téléportation à %player%." +command-tp-cancel-sender: "Annulé votre demande de téléportation vers %player%." +command-tp-cancel-receiver: "%player% a annulé leur demande de téléportation vers vous." +command-world-teleport-self: "Vous venez d'être téléporté dans le monde %world%." +command-world-teleport-other: "Vous venez de téléporter le joueur %player% dans le monde %world%." +command-random-tp-other: "Vous venez de téléporter aléatoirement le joueur %player% dans le monde %world%." +command-tp: "Vous venez de vous téléporter vers le joueur %player%." +command-tp-location: "Vous venez de vous téléporter en %x%, %y%, %z%." command-tp-location-error: "Les coordonnées sont en dehors du monde." -command-tp-location-other: "&fVous venez de téléporter #34cfe0%player% &fen #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tp-all: "&fVous venez de téléporter tous les joueurs vers vous." -command-tp-self: "&fVous venez de téléporter #34cfe0%player%&f à votre position." -command-back: "&fRetour à l'emplacement précédent." +command-tp-location-other: "Vous venez de téléporter %player% en %x%, %y%, %z%." +command-tp-all: "Vous venez de téléporter tous les joueurs vers vous." +command-tp-self: "Vous venez de téléporter %player% à votre position." +command-back: "Retour à l'emplacement précédent." command-back-error: "Vous n'avez pas de dernier emplacement. Impossible de revenir en arrière." command-random-tp-error: "Aucun emplacement sûr trouvé après plusieurs tentatives, veuillez réessayer." -command-random-tp-configuration-not-found: "Impossible de trouver la configuration de téléportation aléatoire pour le monde &f%world%." -command-set-spawn: "&fVous venez de définir l'emplacement de spawn." +command-random-tp-configuration-not-found: "Impossible de trouver la configuration de téléportation aléatoire pour le monde %world%." +command-set-spawn: "Vous venez de définir l'emplacement de spawn." command-spawn-not-define: "Le spawn n'est pas défini. Veuillez contacter un administrateur." command-spawn-location-invalid: "Le spawn est invalide, veuillez contacter un administrateur." command-spawn-first-not-define: "Le spawn des nouveaux joueurs n'est pas défini. Veuillez contacter un administrateur." # Première connexion -join-message: "#99E0FF%player% &7a rejoint la partie." -quit-message: "#99E0FF%player% &7a quitté la partie." -first-join-message: "&7Bienvenue #99E0FF%player% &7sur ! &8(&f%totalUserFormat% &7joueurs enregistrés&8)" +join-message: "%player% a rejoint la partie." +quit-message: "%player% a quitté la partie." +first-join-message: "Bienvenue %player% sur ! (%totalUserFormat% joueurs enregistrés)" first-join-motd: - "" - - "✔ #99E0FFBienvenue %player%#99E0FF !" + - "✔ Bienvenue %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Site Web&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Rejoignez le serveur Discord !'>https://discord.groupez.dev/" + - "Site Web: Ouvrez le site Web !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FFBon retour parmi nous %player%#99E0FF !" + - "Bon retour parmi nous %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Site Web&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Rejoignez le serveur Discord !'>https://discord.groupez.dev/" + - "Site Web: Ouvrez le site Web !'>https://minecraft-inventory-builder.com/" - "" # Description des commandes @@ -513,8 +513,8 @@ format-hour: " heure" format-hours: " heures" format-day: " jour" format-days: " jours" -cooldown: "✘ Vous devez attendre &f%cooldown% avant de pouvoir effectuer cette action." -cooldown-commands: "✘ Vous devez attendre &f%cooldown% avant de pouvoir exécuter cette commande." +cooldown: "✘ Vous devez attendre %cooldown% avant de pouvoir effectuer cette action." +cooldown-commands: "✘ Vous devez attendre %cooldown% avant de pouvoir exécuter cette commande." # Téléportation @@ -524,97 +524,97 @@ teleport-error-location: "Impossible de vous téléporter en toute sécur # Système de file d'attente RTP teleport-already-in-queue: "Vous êtes déjà dans la file d'attente de téléportation !" -teleport-added-to-queue: "Vous avez été ajouté à la file d'attente de téléportation. Position : #0EEA93%position%" +teleport-added-to-queue: "Vous avez été ajouté à la file d'attente de téléportation. Position : %position%" teleport-message: type: ACTION - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." + message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." teleport-success: type: ACTION - message: "#99E0FFVous avez été téléporté avec succès !" + message: "Vous avez été téléporté avec succès !" teleport-message-spawn: - type: ACTION - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." - - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." -teleport-message-spawn-console: "Vous venez de téléporter le joueur %player% au spawn." + message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." + - message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." +teleport-message-spawn-console: "Vous venez de téléporter le joueur %player% au spawn." teleport-success-spawn: - type: ACTION - message: "&7Vous venez de téléporter à #0EEA93l'apparition &7!" - - message: "&7Vous venez de téléporter à #0EEA93l'apparition &7!" + message: "Vous venez de téléporter à l'apparition !" + - message: "Vous venez de téléporter à l'apparition !" teleport-message-warp: - type: ACTION - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." - - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." + message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." + - message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." teleport-success-warp: - type: ACTION - message: "&7Vous venez de téléporter à la balise #0EEA93%name% &7!" - - message: "&7Vous venez de téléporter à la balise #0EEA93%name% &7!" + message: "Vous venez de téléporter à la balise %name% !" + - message: "Vous venez de téléporter à la balise %name% !" -teleport-random-start: "&7Recherche d’une destination... vous ne devez pas bouger." +teleport-random-start: "Recherche d’une destination... vous ne devez pas bouger." teleport-message-random: type: ACTION - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." + message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." teleport-success-random: type: ACTION - message: "#99E0FFVous avez été téléporté avec succès !" + message: "Vous avez été téléporté avec succès !" teleport-message-home: - type: ACTION - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." - - message: "&7Téléportation dans #0EEA93%seconds% &7secondes, vous ne devez pas bouger." + message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." + - message: "Téléportation dans %seconds% secondes, vous ne devez pas bouger." teleport-success-home: - type: ACTION - message: "&7Vous venez de téléporter à la maison #0EEA93%name% &7!" - - message: "&7Vous venez de téléporter à la maison #0EEA93%name% &7!" + message: "Vous venez de téléporter à la maison %name% !" + - message: "Vous venez de téléporter à la maison %name% !" # Points de téléportation (Warps) -command-warp-already-exist: "Le point de téléportation &f%name% existe déjà. &7Utilisez la commande &n/setwarp %name% true&r pour modifier le point de téléportation." -command-warp-doesnt-exist: "Le point de téléportation &f%name% n'existe pas." -command-warp-no-permission: "Vous n'avez pas la permission d'utiliser le point de téléportation &f%name%." +command-warp-already-exist: "Le point de téléportation %name% existe déjà. Utilisez la commande Utiliser cette commande'>/setwarp %name% true pour modifier le point de téléportation." +command-warp-doesnt-exist: "Le point de téléportation %name% n'existe pas." +command-warp-no-permission: "Vous n'avez pas la permission d'utiliser le point de téléportation %name%." command-warp-create: - - "Vous venez de créer le point de téléportation &f%name% à votre position." - - "&7Permission du point de téléportation : permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + - "Vous venez de créer le point de téléportation %name% à votre position." + - "Permission du point de téléportation : Copier la commande pour ajouter la permission à un joueur'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: - - "Utilisation&8: &f/warp " - - "&7Points de téléportation&8:&f%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Points de téléportation&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "Vous venez de supprimer le point de téléportation &f%name%." -command-warp-invalid: "Le point de téléportation &f%name% a une position invalide." + - "Utilisation: /warp " + - "Points de téléportation:%destinations%" +command-warp-destination: " Cliquez pour vous téléporter au point de téléportation %name%'>%name%" +command-warp-list: "Points de téléportation:%destinations%" +command-warp-list-info: " Cliquez pour vous téléporter au point de téléportation %name%'>%name%" +command-warp-delete: "Vous venez de supprimer le point de téléportation %name%." +command-warp-invalid: "Le point de téléportation %name% a une position invalide." # Maisons (Homes) -command-set-home-invalide-name: "&f%name% n'est pas un nom valide, veuillez en choisir un autre." -command-set-home-too-long: "&f%name% est trop long, veuillez en choisir un autre." -command-set-home-too-short: "&f%name% est trop court, veuillez en choisir un autre." -command-set-home-max: "Vous ne pouvez pas avoir plus de &f%max% maisons." +command-set-home-invalide-name: "%name% n'est pas un nom valide, veuillez en choisir un autre." +command-set-home-too-long: "%name% est trop long, veuillez en choisir un autre." +command-set-home-too-short: "%name% est trop court, veuillez en choisir un autre." +command-set-home-max: "Vous ne pouvez pas avoir plus de %max% maisons." command-set-home-world: "Vous ne pouvez pas créer une maison ici." command-set-home-create: - "" - - "#99E0FFVous venez de créer la maison &f%name%#99E0FF. &8(&7%current%&8/&7%max%&8)" - - "&fUtilisez la commande &n/home %name%&r pour vous y téléporter." + - "Vous venez de créer la maison %name%. (%current%/%max%)" + - "Utilisez la commande Cliquez pour vous téléporter à la maison'>/home %name% pour vous y téléporter." - "" command-set-home-create-confirm: - "" - - "#99E0FFLa maison &f%name%#99E0FF existe déjà. Voulez-vous l'écraser ?" - - "ᴄᴏɴғɪʀᴍᴇʀ" + - "La maison %name% existe déjà. Voulez-vous l'écraser ?" + - "Cliquez pour écraser la maison %name%'>ᴄᴏɴғɪʀᴍᴇʀ" - "" -command-home-doesnt-exist: "La maison &f%name% n'existe pas." +command-home-doesnt-exist: "La maison %name% n'existe pas." # En-tête multi-lignes des informations sur les maisons command-home-information-multi-line-header: - "" - - "#8cc0ccVos maisons ♦ &7(%count%) &8- &7(Max : %max%)" + - "Vos maisons ♦ (%count%) - (Max : %max%)" # Contenu multi-lignes des informations sur les maisons command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7à %world% (%environment%) [CLIQUEZ]" + message: " ♢ %name% à %world% (%environment%) Cliquez pour vous téléporter à la maison %name%'>[CLIQUEZ]" # Pied de page multi-lignes des informations sur les maisons command-home-information-multi-line-footer: @@ -624,23 +624,23 @@ command-home-information-multi-line-footer: # Informations sur les maisons en ligne command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccVos maisons ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" + message: "Vos maisons ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Cliquez pour vous téléporter à la maison %name%'>%name%" # Messages liés à l'icône de maison command-home-icon-error: "Vous devez avoir un objet en main pour changer l'icône de votre maison." -command-home-icon-success: "Vous venez de changer l'icône de la maison &f%name%." -command-home-icon-reset: "Vous venez de réinitialiser l'icône de la maison &f%name%." -command-home-delete: "#99E0FFVous venez de supprimer la maison &f%name%#99E0FF." +command-home-icon-success: "Vous venez de changer l'icône de la maison %name%." +command-home-icon-reset: "Vous venez de réinitialiser l'icône de la maison %name%." +command-home-delete: "Vous venez de supprimer la maison %name%." command-home-delete-confirm: - "" - - "#99E0FFVous voulez vraiment supprimer la maison &f%name%#99E0FF." - - "ᴄᴏɴғɪʀᴍᴇʀ" + - "Vous voulez vraiment supprimer la maison %name%." + - "Cliquez pour confirmer la suppression de la maison %name%'>ᴄᴏɴғɪʀᴍᴇʀ" - "" -command-home-admin-delete: "Vous venez de supprimer la maison &f%name% de &b%player%." -command-home-admin-set: "Vous venez de créer la maison &f%name% pour &b%player%." -command-home-admin-list: "#8cc0ccMaisons de %player%&8:&f%homes%" -command-home-admin-list-info: " &f%name%&7" +command-home-admin-delete: "Vous venez de supprimer la maison %name% de %player%." +command-home-admin-set: "Vous venez de créer la maison %name% pour %player%." +command-home-admin-list: "Maisons de %player%:%homes%" +command-home-admin-list-info: " Cliquez pour vous téléporter à la maison %name%'>%name%" command-home-admin-list-empty: "Aucun" command-home-error-teleport: "Impossible de trouver la position pour le téléportation, veuillez supprimer votre maison." @@ -648,70 +648,70 @@ command-home-error-teleport: "Impossible de trouver la position pour le t # Sanctions command-kick-notify: type: WITHOUT_PREFIX - message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414a kické le joueur #e0d12d%target%#e33414." + message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>(Sanction) %player% a kické le joueur %target%." command-ban-notify: type: WITHOUT_PREFIX - message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%Expire : %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414a banni le joueur #e0d12d%target%#e33414." + message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%Expire : %expired_at%'>(Sanction) %player% a banni le joueur %target%." command-mute-notify: type: WITHOUT_PREFIX - message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%Expire : %expired_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414a rendu muet le joueur #e0d12d%target%#e33414." + message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%Expire : %expired_at%'>(Sanction) %player% a rendu muet le joueur %target%." command-unmute-notify: type: WITHOUT_PREFIX - message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414a rendu la parole au joueur #e0d12d%target%#e33414." + message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>(Sanction) %player% a rendu la parole au joueur %target%." command-unban-notify: type: WITHOUT_PREFIX - message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>&8(#f59e07Sanction&8) #8aebeb%player% #e33414a débanni le joueur #e0d12d%target%#e33414." + message: "Par : %sender%Durée : %duration%Raison : %reason%Date : %created_at%'>(Sanction) %player% a débanni le joueur %target%." command-ban-error-duration: "La durée d'un bannissement doit être d'au moins 1 seconde." command-mute-error-duration: "La durée d'un mute doit être d'au moins 1 seconde." -command-un-mute-error: "&f%player% n'est pas muet." -command-un-ban-error: "&f%player% n'est pas banni." +command-un-mute-error: "%player% n'est pas muet." +command-un-ban-error: "%player% n'est pas banni." command-sanction-error: "Vous ne pouvez pas sanctionner ce joueur. Il est protégé." message-kick: - "" - "Vous avez été expulsé du serveur pour la raison suivante :" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&fVous venez de perdre votre voix." - - "&fDurée&8: %duration%" - - "&fRaison&8: #82d1ff%reason%" + - "Vous venez de perdre votre voix." + - "Durée: %duration%" + - "Raison: %reason%" - "" message-unmute: - "" - - "&fVous venez de retrouver votre voix, félicitations !" - - "&fRaison&8: #82d1ff%reason%" + - "Vous venez de retrouver votre voix, félicitations !" + - "Raison: %reason%" - "" message-mute-talk: - "" - - "&fVous n'avez pas le droit de parler." + - "Vous n'avez pas le droit de parler." - "" - - "&fDurée&8: %duration%" - - "&fRaison&8: #82d1ff%reason%" + - "Durée: %duration%" + - "Raison: %reason%" - "" message-ban: - "" - "Vous avez été banni du serveur pour la raison suivante :" - - "&f%reason%" - - "&fDurée&8: &7%duration%" + - "%reason%" + - "Durée: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "Vous êtes banni du serveur :" - - "&f%reason%" - - "&fTemps restant&8: &7%remaining%" + - "%reason%" + - "Temps restant: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" # Chat chat-error: "Impossible de vous laisser parler, vos données ne sont pas chargées." chat-alphanumeric-regex: "Vous utilisez un caractère interdit." -chat-cooldown: "Veuillez attendre avant d'envoyer votre prochain message. &8(&7%cooldown%&8)" +chat-cooldown: "Veuillez attendre avant d'envoyer votre prochain message. (%cooldown%)" chat-same: "Vous ne pouvez pas envoyer la même phrase." chat-link: "Vous ne pouvez pas envoyer de lien dans le chat." chat-item-forbidden-characters: "Vous ne pouvez pas afficher cet objet car son nom contient des caractères interdits." @@ -719,14 +719,14 @@ chat-disable: "Le chat est actuellement indisponible." chat-caps: "Pas besoin de crier pour parler !" chat-flood: "Tu ne peux pas dire ça." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% n'a pas écrit de message." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% n'a pas écrit de message." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "Le chat vient d'être vidé." command-chat-disable-error: "Le chat est déjà désactivé." command-chat-disable-success: "Vous venez de désactiver le chat." @@ -734,51 +734,51 @@ command-chat-enable-error: "Le chat est déjà activé." command-chat-enable-success: "Vous venez d'activer le chat." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" + message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" # Messages command-message-self: "Vous ne pouvez pas vous parler à vous-même." -command-message-disable: "&f%%player% a désactivé les messages privés." +command-message-disable: "%%player% a désactivé les messages privés." command-message-mute: "Vous n'êtes pas autorisé à parler." -command-message-me: "&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6" +command-message-me: "Cliquez pour répondre'>(me -> %target%) " +command-message-other: "Cliquez pour répondre'>(%target% -> me) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Ouvrir les sanctions pour %sender%'>%sender% -> Ouvrir les sanctions pour %receiver%'>%receiver%) %message%" command-message-error: "Vous n'avez personne à qui répondre." -command-message-toggle-enable: "&7Les messages privés sont activés &7pour &f%player%." -command-message-toggle-disable: "&7Les messages privés sont désactivés &7pour &f%player%." -command-social-spy-enable: "&7Le mode SocialSpy est activé &7pour &f%player%." -command-social-spy-disable: "&7Le mode SocialSpy est désactivé &7pour &f%player%." -command-warp-empty: "Aucun warp défini, utilisez la commande &f/setwarp " -command-pay-toggle-enable: "&7Le paiement est activé &7pour &f%player%." -command-pay-toggle-disable: "&7Le paiement est dDésactivé &7pour &f%player%." -command-pay-notification-toggle-enable: "&7Les notifications de paiement sont activées &7pour &f%player%." -command-pay-notification-toggle-disable: "&7Les notifications de paiement sont désactivées &7pour &f%player%." -command-power-tools-toggle-enable: "Tous vos outils de puissance ont été activés &7pour &f%player%." -command-power-tools-toggle-disable: "Tous vos outils de puissance ont été désactivés &7pour &f%player%." +command-message-toggle-enable: "Les messages privés sont activés pour %player%." +command-message-toggle-disable: "Les messages privés sont désactivés pour %player%." +command-social-spy-enable: "Le mode SocialSpy est activé pour %player%." +command-social-spy-disable: "Le mode SocialSpy est désactivé pour %player%." +command-warp-empty: "Aucun warp défini, utilisez la commande /setwarp " +command-pay-toggle-enable: "Le paiement est activé pour %player%." +command-pay-toggle-disable: "Le paiement est dDésactivé pour %player%." +command-pay-notification-toggle-enable: "Les notifications de paiement sont activées pour %player%." +command-pay-notification-toggle-disable: "Les notifications de paiement sont désactivées pour %player%." +command-power-tools-toggle-enable: "Tous vos outils de puissance ont été activés pour %player%." +command-power-tools-toggle-disable: "Tous vos outils de puissance ont été désactivés pour %player%." # Kit -command-kit-no-permission: "Vous n'avez pas la permission d'utiliser le kit &f%kit%." -command-kit-not-found: "Impossible de trouver le kit &f%kit%." -command-kit-already-exists: "Le kit &f%kit% existe déjà." -command-kit-information-in-line-empty: "#8cc0ccVos kits ♦ &7(%count%/%max%)&8: Aucun kit disponible" -command-kit-information-in-line: "#8cc0ccVos kits&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% avant d'obtenir le kit &f&n%name%'><#de1f1f>%name%&7" +command-kit-no-permission: "Vous n'avez pas la permission d'utiliser le kit %kit%." +command-kit-not-found: "Impossible de trouver le kit %kit%." +command-kit-already-exists: "Le kit %kit% existe déjà." +command-kit-information-in-line-empty: "Vos kits ♦ (%count%/%max%): Aucun kit disponible" +command-kit-information-in-line: "Vos kits:%kits%" +command-kit-information-in-line-info-available: " Cliquez pour obtenir le kit %name%'>%name%" +command-kit-information-in-line-info-unavailable: " Vous devez attendre %time% avant d'obtenir le kit %name%'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% avant d'obtenir le kit &f&n%name%'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Cliquez pour obtenir le kit %name%'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ Vous devez attendre %time% avant d'obtenir le kit %name%'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "Vous venez de modifier le kit &f%kit%." -command-kit-create: "Vous venez de créer le kit &f%kit%." -command-kit-delete: "Vous venez de supprimer le kit &f%kit%." -command-kit-delete-error: "Impossible de supprimer le kit &f%kit%." -command-kit-give: "Vous venez de donner le kit &f%kit% à %player%." +command-kit-editor-save: "Vous venez de modifier le kit %kit%." +command-kit-create: "Vous venez de créer le kit %kit%." +command-kit-delete: "Vous venez de supprimer le kit %kit%." +command-kit-delete-error: "Impossible de supprimer le kit %kit%." +command-kit-give: "Vous venez de donner le kit %kit% à %player%." # Cooldown -command-cooldown-header: "&fCooldown du joueur %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% n'a pas de cooldown." +command-cooldown-header: "Cooldown du joueur %player% (%amount%)" +command-cooldown-empty: "%player% n'a pas de cooldown." # Placeholder disponibles : # %key% - La clé du temps de recharge # %value% - Le délai d’expiration du temps de recharge @@ -787,195 +787,195 @@ command-cooldown-empty: "&f%player% n'a pas de cooldown." # %player% - le pseudo du joueur command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[Supprimer&8]" -command-cooldown-not-found: "&f%cooldown% n'a pas été trouvé." -command-cooldown-delete: "Vous venez de supprimer le cooldown &f%cooldown% de &n%player%&r." + message: "%key% - %createdAt% - %timeLeft% - Cliquez pour supprimer le cooldown'>[Supprimer]" +command-cooldown-not-found: "%cooldown% n'a pas été trouvé." +command-cooldown-delete: "Vous venez de supprimer le cooldown %cooldown% de %player%." # Placeholder disponibles : # %key% - La clé du temps de recharge # %player% - le pseudo du joueur # %duration% - la durée du temps de recharge -command-cooldown-create: "Vous venez de créer le cooldown &f%key% pour &n%player%&r." +command-cooldown-create: "Vous venez de créer le cooldown %key% pour %player%." command-item-empty: "Vous n'avez aucun objet dans votre main." command-item-clear: "Vous avez effacé le nom de cet objet." -command-item-set: "Vous avez renommé votre objet tenu en &f%name%." -command-item-lore-add: "Vous venez d'ajouter la ligne &f%text%." -command-item-lore-set: "Vous avez défini la ligne %line% à &f%text%." +command-item-set: "Vous avez renommé votre objet tenu en %name%." +command-item-lore-add: "Vous venez d'ajouter la ligne %text%." +command-item-lore-set: "Vous avez défini la ligne %line% à %text%." command-item-lore-clear: "Vous avez effacé le lore de l'objet." -command-item-lore-set-error: "Impossible de trouver la ligne &f%line%." -command-give-error: "Impossible de trouver l'objet &f%item%." -command-give: "Vous venez de donner &n&fx%amount% %item%&r au joueur &f%player%." -command-give-all: "Vous venez de donner &n&fx%amount% %item%&r à tous les joueurs en ligne." -command-give-vault: "Vous venez de donner &n&fx%amount% %item%&r au vault de &f%player%." +command-item-lore-set-error: "Impossible de trouver la ligne %line%." +command-give-error: "Impossible de trouver l'objet %item%." +command-give: "Vous venez de donner x%amount% %item% au joueur %player%." +command-give-all: "Vous venez de donner x%amount% %item% à tous les joueurs en ligne." +command-give-vault: "Vous venez de donner x%amount% %item% au vault de %player%." command-power-tool-error-item: "Vous n'avez aucun objet dans votre main." command-power-tool-error-reset: "Cet objet n'a pas de commande enregistrée." -command-power-tool-info: "Vous venez d'attribuer la commande &f/%command% à l'objet &f%item%." -command-power-tool-reset: "Vous avez supprimé la commande de l'objet &f%item%." +command-power-tool-info: "Vous venez d'attribuer la commande /%command% à l'objet %item%." +command-power-tool-reset: "Vous avez supprimé la commande de l'objet %item%." mailbox-remove-full: "Vous devez avoir de la place dans votre inventaire pour récupérer un objet." mailbox-remove-expire: "Vous ne pouvez plus récupérer cet objet, il a expiré." mailbox-add: type: ACTION - message: "Un objet vient d'être ajouté à votre boîte aux lettres &8(&f/mail&8)" -mailbox-give-error: "Impossible de trouver l'objet &f%item%." -mailbox-give: "Vous venez de donner &n&fx%amount% %item%&r à la boîte aux lettres du joueur &f%player%." -mailbox-give-all: "Vous venez de donner &n&fx%amount% %item%&r aux boîtes aux lettres des joueurs en ligne." -mailbox-give-hand: "Vous venez d'envoyer l'objet dans votre main dans la boîte aux lettres de &f%player% (&fx%amount% %item%)." -mailbox-give-all-hand: "Vous venez d'envoyer l'objet dans votre main (&fx%amount% %item%) dans la boîte aux lettres de tous les joueurs connectés." -mailbox-clear: "Vous venez d’effacer la boîte aux lettres de &f%player%." - -mailbox-message-send: "Votre courrier a été envoyé à &f%player%." -mailbox-message-receive: "&f%player% vous a envoyé un courrier &8(&f/mail read&8)" -mailbox-message-send-all: "Votre courrier a été envoyé à &f%amount% joueur(s)." -mailbox-message-notify: "Vous avez &f%amount% courrier(s) non lu(s), utilisez &f/mail read." + message: "Un objet vient d'être ajouté à votre boîte aux lettres (/mail)" +mailbox-give-error: "Impossible de trouver l'objet %item%." +mailbox-give: "Vous venez de donner x%amount% %item% à la boîte aux lettres du joueur %player%." +mailbox-give-all: "Vous venez de donner x%amount% %item% aux boîtes aux lettres des joueurs en ligne." +mailbox-give-hand: "Vous venez d'envoyer l'objet dans votre main dans la boîte aux lettres de %player% (x%amount% %item%)." +mailbox-give-all-hand: "Vous venez d'envoyer l'objet dans votre main (x%amount% %item%) dans la boîte aux lettres de tous les joueurs connectés." +mailbox-clear: "Vous venez d’effacer la boîte aux lettres de %player%." + +mailbox-message-send: "Votre courrier a été envoyé à %player%." +mailbox-message-receive: "%player% vous a envoyé un courrier (/mail read)" +mailbox-message-send-all: "Votre courrier a été envoyé à %amount% joueur(s)." +mailbox-message-notify: "Vous avez %amount% courrier(s) non lu(s), utilisez Cliquez pour lire vos courriers'>/mail read." mailbox-message-empty: "Vous n’avez aucun courrier." mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "Vos courriers (&f%amount%)" + - "Vos courriers (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Utilisez &f/mail clearmessages pour les supprimer." + - "Utilisez Cliquez pour supprimer vos courriers'>/mail clearmessages pour les supprimer." - "" -mailbox-message-clear: "Vous venez de supprimer les courriers de &f%player%." +mailbox-message-clear: "Vous venez de supprimer les courriers de %player%." mailbox-message-self: "Vous ne pouvez pas vous envoyer un courrier à vous-même." mailbox-message-mute: "Vous ne pouvez pas envoyer de courrier lorsque vous êtes muet." -mailbox-message-ignore: "&f%player% ne souhaite pas recevoir vos courriers." -mailbox-message-full: "La boîte aux lettres de &f%player% est pleine." -mailbox-message-too-long: "Votre courrier ne peut pas dépasser &f%max% caractères." +mailbox-message-ignore: "%player% ne souhaite pas recevoir vos courriers." +mailbox-message-full: "La boîte aux lettres de %player% est pleine." +mailbox-message-too-long: "Votre courrier ne peut pas dépasser %max% caractères." -hologram-create-error: "Le hologramme &f%name% existe déjà." +hologram-create-error: "Le hologramme %name% existe déjà." hologram-create: type: WITHOUT_PREFIX messages: - - "Vous venez de créer le hologramme &f%name%." - - "&7Utilisez la commande &n/hologram %command% %name%&r&7 pour éditer le hologramme" -hologram-delete: "Le hologramme &f%name% a été supprimé." -hologram-doesnt-exist: "Le hologramme &f%name% n'existe pas." -hologram-is-not-a-text: "Le hologramme &f%name% n'est pas un hologramme texte." -hologram-is-not-a-block: "Le hologramme &f%name% n'est pas un hologramme bloc." -hologram-is-not-a-item: "Le hologramme &f%name% n'est pas un hologramme objet." -hologram-add-line: "Vous venez d'ajouter une ligne au hologramme &f%name%." -hologram-set-line: "Vous avez défini la ligne &f%line% pour le hologramme &f%name%." -hologram-insert-before-line: "Vous avez ajouté une nouvelle ligne avant la ligne &f%line% pour le hologramme &f%name%." -hologram-insert-after-line: "Vous avez ajouté une nouvelle ligne après la ligne &f%line% pour le hologramme &f%name%." -hologram-line-doesnt-exist: "La ligne &f%line% n'existe pas pour le hologramme &f%name%." -hologram-remove-line: "Vous avez supprimé la ligne &f%line% du hologramme &f%name%." -hologram-scale: "Vous avez modifié l'échelle du hologramme &f%name% à &7%x%&8, &7%y%&8, &7%z%." -hologram-translation: "Vous avez modifié la position du hologramme &f%name% à &7%x%&8, &7%y%&8, &7%z%." -hologram-move-here: "Vous avez téléporté le hologramme &f%name% à votre position." -hologram-move-to: "Vous avez téléporté le hologramme &f%name% à &7%x%&8, &7%y%&8, &7%z%." -hologram-billboard: "Vous avez changé le panneau d'affichage du hologramme &f%name% en &f%billboard%." -hologram-text-alignment: "Vous avez changé l'alignement du texte du hologramme &f%name% en &f%textAlignment%." -hologram-yaw: "Vous avez changé l'orientation du hologramme &f%name% à &f%yaw%." -hologram-pitch: "Vous avez changé l'inclinaison du hologramme &f%name% à &f%pitch%." -hologram-text-background: "Vous avez changé la couleur de fond du hologramme &f%name% en &f%color%." + - "Vous venez de créer le hologramme %name%." + - "Utilisez la commande /hologram %command% %name% pour éditer le hologramme" +hologram-delete: "Le hologramme %name% a été supprimé." +hologram-doesnt-exist: "Le hologramme %name% n'existe pas." +hologram-is-not-a-text: "Le hologramme %name% n'est pas un hologramme texte." +hologram-is-not-a-block: "Le hologramme %name% n'est pas un hologramme bloc." +hologram-is-not-a-item: "Le hologramme %name% n'est pas un hologramme objet." +hologram-add-line: "Vous venez d'ajouter une ligne au hologramme %name%." +hologram-set-line: "Vous avez défini la ligne %line% pour le hologramme %name%." +hologram-insert-before-line: "Vous avez ajouté une nouvelle ligne avant la ligne %line% pour le hologramme %name%." +hologram-insert-after-line: "Vous avez ajouté une nouvelle ligne après la ligne %line% pour le hologramme %name%." +hologram-line-doesnt-exist: "La ligne %line% n'existe pas pour le hologramme %name%." +hologram-remove-line: "Vous avez supprimé la ligne %line% du hologramme %name%." +hologram-scale: "Vous avez modifié l'échelle du hologramme %name% à %x%, %y%, %z%." +hologram-translation: "Vous avez modifié la position du hologramme %name% à %x%, %y%, %z%." +hologram-move-here: "Vous avez téléporté le hologramme %name% à votre position." +hologram-move-to: "Vous avez téléporté le hologramme %name% à %x%, %y%, %z%." +hologram-billboard: "Vous avez changé le panneau d'affichage du hologramme %name% en %billboard%." +hologram-text-alignment: "Vous avez changé l'alignement du texte du hologramme %name% en %textAlignment%." +hologram-yaw: "Vous avez changé l'orientation du hologramme %name% à %yaw%." +hologram-pitch: "Vous avez changé l'inclinaison du hologramme %name% à %pitch%." +hologram-text-background: "Vous avez changé la couleur de fond du hologramme %name% en %color%." hologram-text-background-error: "Impossible de définir la couleur de fond." -hologram-text-shadow: "Vous avez défini l'ombre du texte à &f%textshadow% pour le hologramme &f%name%." -hologram-see-through: "Vous avez défini la transparence à &f%seethrough% pour le hologramme &f%name%." -hologram-shadow-strength: "Vous avez défini l'intensité de l'ombre à &f%shadow% pour le hologramme &f%name%." -hologram-shadow-radius: "Vous avez défini le rayon de l'ombre à &f%shadow% pour le hologramme &f%name%." -hologram-view-distance: "Vous avez défini la distance de vision à &f%distance% pour le hologramme &f%name%." -hologram-list-empty: "Il n'y a pas de hologramme, pour en créer un veuillez utiliser la commande &f/holo create " +hologram-text-shadow: "Vous avez défini l'ombre du texte à %textshadow% pour le hologramme %name%." +hologram-see-through: "Vous avez défini la transparence à %seethrough% pour le hologramme %name%." +hologram-shadow-strength: "Vous avez défini l'intensité de l'ombre à %shadow% pour le hologramme %name%." +hologram-shadow-radius: "Vous avez défini le rayon de l'ombre à %shadow% pour le hologramme %name%." +hologram-view-distance: "Vous avez défini la distance de vision à %distance% pour le hologramme %name%." +hologram-list-empty: "Il n'y a pas de hologramme, pour en créer un veuillez utiliser la commande /holo create " hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛ Cliquez pour supprimer ce hologramme'>ᴅᴇʟᴇᴛᴇ" + message: "%name% - %world%: %x%, %y%, %z% - Cliquez pour vous téléporter à ce hologramme'>ᴛᴇʟᴇᴘᴏʀᴛ Cliquez pour supprimer ce hologramme'>ᴅᴇʟᴇᴛᴇ" hologram-item-error: "Vous ne pouvez pas utiliser de l'air pour ce hologramme." -hologram-item: "Vous avez modifié l'objet du hologramme &f%name%." -hologram-block: "Vous avez modifié le bloc du hologramme &f%name% en &f%material%." +hologram-item: "Vous avez modifié l'objet du hologramme %name%." +hologram-block: "Vous avez modifié le bloc du hologramme %name% en %material%." scoreboard-disable: "Vous avez désactivé le tableau de score." scoreboard-enable: "Vous avez activé le tableau de score." -command-baltop-error: "Impossible de trouver l'économie &f%name%." +command-baltop-error: "Impossible de trouver l'économie %name%." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴘʟᴜs ᴅ'ᴀʀɢᴇɴᴛ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴘʟᴜs ᴅ'ᴀʀɢᴇɴᴛ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "Vous venez de définir le voteparty à &f%amount% votes." -command-voteparty-add: "Vous venez d'ajouter &f%amount% vote dans le voteparty." -command-voteparty-remove: "Vous venez de retirer &f%amount% vote dans le voteparty." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "Vous venez de définir le voteparty à %amount% votes." +command-voteparty-add: "Vous venez d'ajouter %amount% vote dans le voteparty." +command-voteparty-remove: "Vous venez de retirer %amount% vote dans le voteparty." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "Vous venez d'ajouter un vote à &f%player%." -command-vote-add-error: "Le site &f%site% n'existe pas !" +command-vote-add: "Vous venez d'ajouter un vote à %player%." +command-vote-add-error: "Le site %site% n'existe pas !" command-vote: type: ACTION message: "Vous venez de voter et avez reçu une clé de vote." vote-offline: - "" - - "Vous avez voté %amount% fois hors ligne, utilisez la commande /mailbox pour récupérer vos objets !" + - "Vous avez voté %amount% fois hors ligne, utilisez la commande /mailbox pour récupérer vos objets !" - "" vault-lore: - "" - - "&fɪɴғᴏʀᴍᴀᴛɪᴏɴs" - - " #f8b175• &7Quantité&8: &e%quantity%" + - "ɪɴғᴏʀᴍᴀᴛɪᴏɴs" + - " • Quantité: %quantity%" - "" - - "&f➥ #fc99f8Clic gauche &7pour prendre 1" - - "&f➥ #fc99f8Clic droit &7pour prendre 64" - - "&f➥ #fc99f8Clic droit + sneaky &7pour tout prendre" -command-vault-not-found: "Impossible de trouver le coffre &f%vaultId%." + - "➥ Clic gauche pour prendre 1" + - "➥ Clic droit pour prendre 64" + - "➥ Clic droit + sneaky pour tout prendre" +command-vault-not-found: "Impossible de trouver le coffre %vaultId%." command-vault-no-permission: "Vous n'avez pas la permission de voir ce coffre." -command-vault-set-slot: "Vous venez de définir le slot de &f%player% à &7%slots%." -command-vault-add-slot: "Vous venez d'ajouter &7%amount% slot à &f%player%." -command-vault-info: "Informations du coffre pour &f%player% : max &7%max%, permission &7%permissionSlots%, plugin &7%pluginSlots%, utilisés &7%used%, disponibles &7%available%." -command-vault-get-slot-empty: "Aucun objet trouvé dans le sac &f%vault% slot &f%slot% pour &f%player%." -command-vault-get-slot-success: "Emplacement Vault pour &f%player% : Vault &7%vault%, emplacement &7%slot%, quantité &7%amount%, objet &f%item%." -command-vault-delete-slot-success: "Vous avez supprimé l’emplacement &7%slot% de Vault &7%vault% pour &f%player%." -command-vault-delete-slot-empty: "Impossible de trouver le slot &f%slot% dans le sac &f%vault% de &f%player%." +command-vault-set-slot: "Vous venez de définir le slot de %player% à %slots%." +command-vault-add-slot: "Vous venez d'ajouter %amount% slot à %player%." +command-vault-info: "Informations du coffre pour %player% : max %max%, permission %permissionSlots%, plugin %pluginSlots%, utilisés %used%, disponibles %available%." +command-vault-get-slot-empty: "Aucun objet trouvé dans le sac %vault% slot %slot% pour %player%." +command-vault-get-slot-success: "Emplacement Vault pour %player% : Vault %vault%, emplacement %slot%, quantité %amount%, objet %item%." +command-vault-delete-slot-success: "Vous avez supprimé l’emplacement %slot% de Vault %vault% pour %player%." +command-vault-delete-slot-empty: "Impossible de trouver le slot %slot% dans le sac %vault% de %player%." command-vault-change-icon-error: "Vous avez un objet dans votre main." command-vault-change-icon-success: "Vous venez de changer l'icône de votre coffre." command-vault-reset-icon: "Vous venez de réinitialiser l'icône de votre coffre." command-vault-rename-start: "Veuillez écrire dans le chat le nouveau nom du coffre." -command-vault-rename-success: "Vous venez de définir le nom du coffre à &f%name%." +command-vault-rename-success: "Vous venez de définir le nom du coffre à %name%." command-vault-rename-error: "Vous ne pouvez pas utiliser ce nom pour votre coffre." command-vault-rename-reset: "Vous venez de réinitialiser le nom de votre coffre." command-enchant-invalid: "Vous devez spécifier un joueur valide." -command-enchant-error-enchant: "Impossible de trouver l'enchantement &f%name%." +command-enchant-error-enchant: "Impossible de trouver l'enchantement %enchant%." command-enchant-error-item-self: "Vous devez avoir un objet dans votre main." command-enchant-error-item-player: "%player% n'a pas d'objet dans sa main." -command-enchant-remove-self: "L'enchantement &f%enchant% a été retiré de votre objet en main." -command-enchant-remove-player: "L'enchantement &f%enchant% a été retiré de l'objet de la main de &f%player%." -command-enchant-success-self: "L'enchantement &f%enchant% a été appliqué à votre objet en main." -command-enchant-success-player: "L'enchantement &f%enchant% a été appliqué à l'objet de la main de &f%player%." +command-enchant-remove-self: "L'enchantement %enchant% a été retiré de votre objet en main." +command-enchant-remove-player: "L'enchantement %enchant% a été retiré de l'objet de la main de %player%." +command-enchant-success-self: "L'enchantement %enchant% a été appliqué à votre objet en main." +command-enchant-success-player: "L'enchantement %enchant% a été appliqué à l'objet de la main de %player%." command-sudo-error: "Vous ne pouvez pas forcer le joueur à exécuter des commandes." -command-sudo-command: "Vous venez de forcer le joueur %player% à exécuter la commande /%command%." -command-sudo-message: "Vous venez de forcer le joueur %player% à envoyer le message %message%." +command-sudo-command: "Vous venez de forcer le joueur %player% à exécuter la commande /%command%." +command-sudo-message: "Vous venez de forcer le joueur %player% à envoyer le message %message%." -command-worldedit-give-error: "Impossible de trouver l'objet &f%name%" -command-worldedit-give-sender: "Vous venez de donner &f%item% au joueur &f%player%." -command-worldedit-give-receiver: "Vous avez reçu &f%item%." -command-worldedit-material-not-found: "Impossible de trouver le matériau &f%material%." +command-worldedit-give-error: "Impossible de trouver l'objet %name%" +command-worldedit-give-sender: "Vous venez de donner %item% au joueur %player%." +command-worldedit-give-receiver: "Vous avez reçu %item%." +command-worldedit-material-not-found: "Impossible de trouver le matériau %material%." command-worldedit-confirm-price: - "" - - "Prix : %price%" - - "Blocs : %materials%" - - "Durée : %duration% (%blocks% blocs à %speed% bloc%s%/s)" + - "Prix : %price%" + - "Blocs : %materials%" + - "Durée : %duration% (%blocks% blocs à %speed% bloc%s%/s)" - "" - - "<#45ff55>ᴄʟɪǫᴜᴇʀ ɪᴄɪ ᴘᴏᴜʀ ᴄᴏɴғɪʀᴍᴇʀ" + - "Cliquez pour confirmer l'action'>ᴄʟɪǫᴜᴇʀ ɪᴄɪ ᴘᴏᴜʀ ᴄᴏɴғɪʀᴍᴇʀ" command-worldedit-confirm-price-cut: - "" - - "Prix : %price%" - - "Durée : %duration% (%blocks% blocs à %speed% bloc%s%/s)" + - "Prix : %price%" + - "Durée : %duration% (%blocks% blocs à %speed% bloc%s%/s)" - "" - - "<#45ff55>ᴄʟɪǫᴜᴇʀ ɪᴄɪ ᴘᴏᴜʀ ᴄᴏɴғɪʀᴍᴇʀ" -command-worldedit-confirm-material: " Quantité : %amount%Prix total : %price%Prix par bloc : %price-per-block%'>" + - "Cliquez pour confirmer l'action'>ᴄʟɪǫᴜᴇʀ ɪᴄɪ ᴘᴏᴜʀ ᴄᴏɴғɪʀᴍᴇʀ" +command-worldedit-confirm-material: " Quantité : %amount%Prix total : %price%Prix par bloc : %price-per-block%'>" command-worldedit-confirm-error: "Vous ne pouvez pas faire cela maintenant." command-worldedit-stop-empty: "Vous n'avez aucune édition en cours." command-worldedit-stop-error: "Vous ne pouvez pas arrêter l'édition actuellement." @@ -993,44 +993,44 @@ worldedit-not-enough-money: "Vous n'avez pas assez d'argent pour faire ce worldedit-not-enough-items: "Vous n'avez pas les objets dans votre inventaire, vous ne pouvez pas faire cela." worldedit-selection-pos1: "Vous venez de définir la première position." worldedit-selection-pos2: "Vous venez de définir la deuxième position." -worldedit-selection-volume: "Vous ne pouvez pas changer plus de &f%blocks% en même temps." -worldedit-selection-distance: "La distance entre vos deux points de sélection est trop grande. (Maximum %distance% blocs)" +worldedit-selection-volume: "Vous ne pouvez pas changer plus de %blocks% en même temps." +worldedit-selection-distance: "La distance entre vos deux points de sélection est trop grande. (Maximum %distance% blocs)" -worldedit-start-calculate-price: "&7Calcul du prix en cours, veuillez patienter..." -worldedit-start-check-inventory: "&7Vérification de la disponibilité des objets dans votre inventaire, veuillez patienter..." -worldedit-start-running: "&7Lancement de l'édition en cours, veuillez patienter..." +worldedit-start-calculate-price: "Calcul du prix en cours, veuillez patienter..." +worldedit-start-check-inventory: "Vérification de la disponibilité des objets dans votre inventaire, veuillez patienter..." +worldedit-start-running: "Lancement de l'édition en cours, veuillez patienter..." worldedit-finish: "Édition terminée !" worldedit-refund: - "ᴠᴏᴜs ᴠᴇɴᴇᴢ ᴅ'êᴛʀᴇ ʀᴇᴍʙᴏᴜʀsᴇ́" - "" - - "Prix : %price%" - - "Blocs :%materials%" -worldedit-refund-material: " Quantité : %amount%Prix total : %price%Prix par bloc : %price-per-block%'>" + - "Prix : %price%" + - "Blocs :%materials%" +worldedit-refund-material: " Quantité : %amount%Prix total : %price%Prix par bloc : %price-per-block%'>" worldedit-refund-empty: " Aucun bloc à rembourser" -worldedit-bossbar: "#45ff45Temps restant : %time%" +worldedit-bossbar: "Temps restant : %time%" worldedit-speed-error: "Vous n'avez pas la permission de définir la vitesse par seconde." worldedit-permission-error: "Vous ne pouvez pas utiliser le worldedit ici." message-freeze: - "" - - "&fVous venez d'être gelé." + - "Vous venez d'être gelé." - "" message-un-freeze: - "" - - "&fVous venez d'être dégelé." + - "Vous venez d'être dégelé." - "" -command-freeze-success: "&7Vous venez de geler le joueur &f%player%&7." -command-un-freeze_success: "&7Vous venez de dégeler le joueur &f%player%&7." -experience-granted: "Vous venez de donner %amount% %type% à %player%." -experience-taken: "Vous venez de retirer %amount% %type% à %player%." -experience-setted: "Vous venez de définir %amount% %type% pour %player%." -experience-queried: "%player% a %amount% %type%." +command-freeze-success: "Vous venez de geler le joueur %player%." +command-un-freeze_success: "Vous venez de dégeler le joueur %player%." +experience-granted: "Vous venez de donner %amount% %type% à %player%." +experience-taken: "Vous venez de retirer %amount% %type% à %player%." +experience-setted: "Vous venez de définir %amount% %type% pour %player%." +experience-queried: "%player% a %amount% %type%." command-clearinventory-success: "Vous avez effacé votre inventaire." -command-clearinventory-success-other: "Vous avez effacé l'inventaire de &f%player%." +command-clearinventory-success-other: "Vous avez effacé l'inventaire de %player%." # Discord command-link-account-already-linked: "Vous êtes déjà lié à un compte." command-link-account-invalid-code: "Code invalide." -command-link-account-success: "Vous venez de lier votre compte %discord%." +command-link-account-success: "Vous venez de lier votre compte %discord%." command-link-account-disabled: "Vous ne pouvez pas lier votre compte pour l'instant." command-link-account-not-linked: "Vous n'êtes pas lié à un compte." command-link-account-reset: "Vous venez de réinitialiser votre lien de compte." @@ -1039,98 +1039,98 @@ random-word-clear: "Les mots aléatoire viennent d'être effacé." command-pub-pattern-error: "Votre message contient des caractères interdits." command-pub: type: WITHOUT_PREFIX - message: "&8[&fPUB&8] %player%: %message%" -step-doesnt-exist: "L'étape &f%step% n'existe pas." -step-already-exist: "L'étape &f%step% a déjà commencé." -step-doesnt-started: "L'étape &f%step% n'a pas commencé." + message: "[PUB] %player%: %message%" +step-doesnt-exist: "L'étape %step% n'existe pas." +step-already-exist: "L'étape %step% a déjà commencé." +step-doesnt-started: "L'étape %step% n'a pas commencé." # Enderchest -command-endersee-error: "Impossible de charger l'ender chest de &f%player%." +command-endersee-error: "Impossible de charger l'ender chest de %player%." # TPA -command-tpa-error-no-request-from-player: "Vous n'avez pas de demande de téléportation de &f%player%." -command-tpa-accept-all-success: "Vous avez accepté &f%count% demande(s) de téléportation." -command-tpa-deny-all-success: "Vous avez refusé &f%count% demande(s) de téléportation." +command-tpa-error-no-request-from-player: "Vous n'avez pas de demande de téléportation de %player%." +command-tpa-accept-all-success: "Vous avez accepté %count% demande(s) de téléportation." +command-tpa-deny-all-success: "Vous avez refusé %count% demande(s) de téléportation." description-tp-toggle: "Activer/désactiver les demandes de téléportation" -command-teleport-request-disabled: "Le joueur &f%player% a désactivé les demandes de téléportation." -command-tp-toggle-enable: "&7Les demandes de téléportation sont activées &7pour &f%player%." -command-tp-toggle-disable: "&7Les demandes de téléportation sont désactivées &7pour &f%player%." +command-teleport-request-disabled: "Le joueur %player% a désactivé les demandes de téléportation." +command-tp-toggle-enable: "Les demandes de téléportation sont activées pour %player%." +command-tp-toggle-disable: "Les demandes de téléportation sont désactivées pour %player%." description-tpa-here-toggle: "Activer/désactiver les demandes tpahere" -command-teleport-here-request-disabled: "Le joueur &f%player% a désactivé les demandes tpahere." -command-tpa-here-toggle-enable: "&7Les demandes tpahere sont activées &7pour &f%player%." -command-tpa-here-toggle-disable: "&7Les demandes tpahere sont désactivées &7pour &f%player%." +command-teleport-here-request-disabled: "Le joueur %player% a désactivé les demandes tpahere." +command-tpa-here-toggle-enable: "Les demandes tpahere sont activées pour %player%." +command-tpa-here-toggle-disable: "Les demandes tpahere sont désactivées pour %player%." # Téléportation cross-serveur teleport-cross-server-not-supported: "La téléportation cross-serveur n'est pas supportée sur ce serveur." -teleport-cross-server-connecting: "Connexion au serveur &f%server%..." -teleport-cross-server-player-not-found: "Le joueur &f%player% n'a été trouvé sur aucun serveur." +teleport-cross-server-connecting: "Connexion au serveur %server%..." +teleport-cross-server-player-not-found: "Le joueur %player% n'a été trouvé sur aucun serveur." # ItemFrame description-itemframe: "Basculer la visibilité du cadre" -command-itemframe-invisible: "Le cadre est maintenant invisible." -command-itemframe-visible: "Le cadre est maintenant visible." +command-itemframe-invisible: "Le cadre est maintenant invisible." +command-itemframe-visible: "Le cadre est maintenant visible." command-itemframe-not-found: "Aucun cadre trouvé. Regardez un cadre et réessayez." # Module de messages de mort description-death-message: "Messages de mort personnalisés" description-death-message-toggle: "Activer/désactiver la visibilité des messages de mort" -command-death-message-toggle-disable: "#C084FC☠ #B794F4Les messages de mort sont maintenant #E9D5FFcachés #B794F4pour %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4Les messages de mort sont maintenant #E9D5FFvisibles #B794F4pour %player%#B794F4." +command-death-message-toggle-disable: "☠ Les messages de mort sont maintenant cachés pour %player%." +command-death-message-toggle-enable: "☠ Les messages de mort sont maintenant visibles pour %player%." # Messages de mort (détaillés) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4est mort." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4a été tué par #E9D5FF%killer%#B794F4." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4a été tué par #E9D5FF%killer%#B794F4." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4a été abattu par #E9D5FF%killer%#B794F4." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4a été explosé par #E9D5FF%killer%#B794F4." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4est tombé de haut." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4a brûlé vif." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4a essayé de nager dans la lave." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4s'est noyé." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4a explosé." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4a été frappé par la foudre." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4a suffoqué dans un mur." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4est mort de faim." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4a été empoisonné." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4a été tué par magie." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4s'est flétri." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4a été écrasé par un bloc." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4a expérimenté l'énergie cinétique." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4est tombé dans le vide." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4s'est piqué à mort." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4a été écrasé." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4est mort de froid." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4a été oblitéré par une onde sonique." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4a découvert que le sol était de la lave." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4a été tué en essayant de blesser quelqu'un." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4a marché dans un feu de camp." -death-hover-details: "#D8B4FE☠ Lieu de mort#B794F4:\n#E9D5FF▸ Monde: #D8B4FE%world%\n#E9D5FF▸ Position: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oCliquez pour vous téléporter" +death-generic: "☠ %player% est mort." +death-by-player: "⚔ %player% a été tué par %killer%." +death-by-mob: "☠ %player% a été tué par %killer%." +death-by-projectile: "🏹 %player% a été abattu par %killer%." +death-by-mob-explosion: "💥 %player% a été explosé par %killer%." +death-by-fall: "⬇ %player% est tombé de haut." +death-by-fire: "🔥 %player% a brûlé vif." +death-by-lava: "🌋 %player% a essayé de nager dans la lave." +death-by-drowning: "💧 %player% s'est noyé." +death-by-explosion: "💥 %player% a explosé." +death-by-lightning: "⚡ %player% a été frappé par la foudre." +death-by-suffocation: "▓ %player% a suffoqué dans un mur." +death-by-starvation: "🍖 %player% est mort de faim." +death-by-poison: "☣ %player% a été empoisonné." +death-by-magic: "✦ %player% a été tué par magie." +death-by-wither: "💀 %player% s'est flétri." +death-by-falling-block: "▼ %player% a été écrasé par un bloc." +death-by-fly-into-wall: "💨 %player% a expérimenté l'énergie cinétique." +death-by-void: "✧ %player% est tombé dans le vide." +death-by-cactus: "🌵 %player% s'est piqué à mort." +death-by-cramming: "⊞ %player% a été écrasé." +death-by-freeze: "❄ %player% est mort de froid." +death-by-sonic-boom: "◈ %player% a été oblitéré par une onde sonique." +death-by-magma: "♨ %player% a découvert que le sol était de la lave." +death-by-thorns: "✵ %player% a été tué en essayant de blesser quelqu'un." +death-by-campfire: "🔥 %player% a marché dans un feu de camp." +death-hover-details: "☠ Lieu de mort:\n▸ Monde: %world%\n▸ Position: %x%, %y%, %z%\n\nCliquez pour vous téléporter" # Messages de mort (fallback quand aucune config personnalisée n'est définie) -death-message-generic: "#99E0FF%player% &7est mort." -death-message-player: "#99E0FF%player% &7a été tué par #34cfe0%killer% &7avec %weapon%&7." -death-message-mob: "#99E0FF%player% &7a été tué par &c%mob%&7." -death-message-mythic-mob: "#99E0FF%player% &7a été tué par %mob%&7!" +death-message-generic: "%player% est mort." +death-message-player: "%player% a été tué par %killer% avec %weapon%." +death-message-mob: "%player% a été tué par %mob%." +death-message-mythic-mob: "%player% a été tué par %mob%!" # Ignore, son de ping du chat & téléportation vers un autre joueur -command-tp-other: "&7Vous venez de téléporter #34cfe0%player% &7vers #34cfe0%target%&7." +command-tp-other: "Vous venez de téléporter %player% vers %target%." description-ping-sound: "Active ou désactive le son de ping du chat" -command-ping-sound-enable: "&7Son de ping du chat activé &7pour &f%player%." -command-ping-sound-disable: "&7Son de ping du chat désactivé &7pour &f%player%." +command-ping-sound-enable: "Son de ping du chat activé pour %player%." +command-ping-sound-disable: "Son de ping du chat désactivé pour %player%." description-ignore: "Ignore un joueur, bloquant ses messages privés et ses demandes de téléportation" description-unignore: "Arrête d'ignorer un joueur" description-ignore-list: "Liste les joueurs que vous ignorez" -command-ignore-add: "Vous ignorez désormais &f%player%. Vous ne recevrez plus ses messages privés ni ses demandes de téléportation." -command-ignore-remove: "Vous n'ignorez plus &f%player%." -command-ignore-already: "Vous ignorez déjà &f%player%." -command-ignore-not: "Vous n'ignorez pas &f%player%." +command-ignore-add: "Vous ignorez désormais %player%. Vous ne recevrez plus ses messages privés ni ses demandes de téléportation." +command-ignore-remove: "Vous n'ignorez plus %player%." +command-ignore-already: "Vous ignorez déjà %player%." +command-ignore-not: "Vous n'ignorez pas %player%." command-ignore-self: "Vous ne pouvez pas vous ignorer vous-même." command-ignore-list-empty: "Vous n'ignorez personne." -command-ignore-list-header: "Vous ignorez &f%count% joueur(s) :" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "Vous ne pouvez pas envoyer de message à #34cfe0%player%, il vous ignore." +command-ignore-list-header: "Vous ignorez %count% joueur(s) :" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "Vous ne pouvez pas envoyer de message à %player%, il vous ignore." description-del-home-other: "Supprime le home d'un autre joueur" -death-message-fists: "&7ses poings" +death-message-fists: "ses poings" # Système de homes (publics, partagés, catégories, favoris, aperçu, import) description-home-public: "Rendre une de vos maisons publique" description-public-homes: "Afficher les maisons publiques" @@ -1141,29 +1141,29 @@ description-home-category: "Définir la catégorie d'une maison" description-home-favorite: "Ajouter ou retirer une maison des favoris" description-home-import: "Importer des maisons depuis un autre plugin" command-home-feature-disabled: "Cette fonctionnalité de maison est désactivée sur ce serveur." -command-home-public-enable: "Votre maison &f%name% est maintenant publique." -command-home-public-disable: "Votre maison &f%name% n'est plus publique." -command-home-public-limit: "Vous avez atteint le nombre maximum de maisons publiques (&f%max%)." -command-home-not-accessible: "La maison &f%name% de &f%player% ne vous est pas accessible." -command-public-homes-header: "Maisons publiques (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Téléporter]" +command-home-public-enable: "Votre maison %name% est maintenant publique." +command-home-public-disable: "Votre maison %name% n'est plus publique." +command-home-public-limit: "Vous avez atteint le nombre maximum de maisons publiques (%max%)." +command-home-not-accessible: "La maison %name% de %player% ne vous est pas accessible." +command-public-homes-header: "Maisons publiques (%count%):" +command-public-homes-line: "- %player%:%name% Se téléporter à cette maison'>[Téléporter]" command-public-homes-empty: "Il n'y a aucune maison publique." -command-home-share-add: "Vous avez partagé votre maison &f%name% avec &f%player%." -command-home-share-remove: "Vous ne partagez plus votre maison &f%name% avec &f%player%." -command-home-share-already: "Votre maison &f%name% est déjà partagée avec &f%player%." -command-home-share-not: "Votre maison &f%name% n'est pas partagée avec &f%player%." +command-home-share-add: "Vous avez partagé votre maison %name% avec %player%." +command-home-share-remove: "Vous ne partagez plus votre maison %name% avec %player%." +command-home-share-already: "Votre maison %name% est déjà partagée avec %player%." +command-home-share-not: "Votre maison %name% n'est pas partagée avec %player%." command-home-share-self: "Vous ne pouvez pas partager une maison avec vous-même." -command-home-share-limit: "Vous avez atteint le nombre maximum de partages pour cette maison (&f%max%)." -command-home-share-list-header: "La maison &f%name% est partagée avec &f%count% joueur(s):" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "La maison &f%name% n'est partagée avec personne." -command-home-category-set: "La catégorie de votre maison &f%name% est maintenant &f%category%." -command-home-category-reset: "La catégorie de votre maison &f%name% a été retirée." +command-home-share-limit: "Vous avez atteint le nombre maximum de partages pour cette maison (%max%)." +command-home-share-list-header: "La maison %name% est partagée avec %count% joueur(s):" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "La maison %name% n'est partagée avec personne." +command-home-category-set: "La catégorie de votre maison %name% est maintenant %category%." +command-home-category-reset: "La catégorie de votre maison %name% a été retirée." command-home-category-invalid: "Nom de catégorie invalide." -command-home-favorite-add: "Votre maison &f%name% est maintenant un favori." -command-home-favorite-remove: "Votre maison &f%name% n'est plus un favori." -command-home-preview: "&7Maison &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Téléporter]" -command-home-import-start: "Importation des maisons depuis &f%source%..." -command-home-import-done: "Importation terminée : &f%imported% importées, &f%skipped% ignorées, &f%errors% erreurs." -command-home-import-unknown: "Source d'importation inconnue &f%source%. Disponible : essentialsx." +command-home-favorite-add: "Votre maison %name% est maintenant un favori." +command-home-favorite-remove: "Votre maison %name% n'est plus un favori." +command-home-preview: "Maison %name% - %world% (%x%, %y%, %z%) [Téléporter]" +command-home-import-start: "Importation des maisons depuis %source%..." +command-home-import-done: "Importation terminée : %imported% importées, %skipped% ignorées, %errors% erreurs." +command-home-import-unknown: "Source d'importation inconnue %source%. Disponible : essentialsx." command-home-import-error: "Une erreur est survenue lors de l'importation, vérifiez la console." diff --git a/src/main/resources/messages/messages_it.yml b/src/main/resources/messages/messages_it.yml index e9c4ad37..84cb4150 100644 --- a/src/main/resources/messages/messages_it.yml +++ b/src/main/resources/messages/messages_it.yml @@ -18,229 +18,229 @@ ######################################################################################################################## # Plugin's prefix # Translation made by Melon-Oof -prefix: "#03fcb6zEssentials #656665• " +prefix: "zEssentials • " you: "Tu" #Trash can GUI username -trash: "&8Cestino della Spazzatura" -player-not-found: "&f%player% non è stato trovato." -module-disable: "Il modulo &f%name% è disabilitato, non puoi usare questo comando." -code-not-found: "Non si riesce a trovare il codice." +trash: "Cestino della Spazzatura" +player-not-found: "%player% non è stato trovato." +module-disable: "Il modulo %name% è disabilitato, non puoi usare questo comando." +code-not-found: "Non si riesce a trovare il codice." rules: - - "#ffd353ℹ ʀᴇɢᴏʟᴇ ᴅᴇʟ sᴇʀᴠᴇʀ#3f3f3f:" - - "#3f3f3f• &7Rispetta tutti i giocatori e i membri dello staff." - - "#3f3f3f• &7No griefing o rubare." - - "#3f3f3f• &7No cheats/hacks." - - "#3f3f3f• &7Tenere la chat pulita e rispettosa." - - "#3f3f3f• &7No spam o pubblicità." + - "ℹ ʀᴇɢᴏʟᴇ ᴅᴇʟ sᴇʀᴠᴇʀ:" + - "• Rispetta tutti i giocatori e i membri dello staff." + - "• No griefing o rubare." + - "• No cheats/hacks." + - "• Tenere la chat pulita e rispettosa." + - "• No spam o pubblicità." # Commands -command-syntax-error: "Devi eseguire il comando segunedo questo formato#656665: &f%syntax%" +command-syntax-error: "Devi eseguire il comando segunedo questo formato: %syntax%" command-no-permission: "Non puoi eseguire questo comando." command-no-console: "Solo i giocatori possono eseguire questo comando." command-no-arg: "Non è stato possible trovare il comando con questi argomenti." command-restricted: "Non puoi usare questo comando qui." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "Hai appena aggiornato la configurazione." -command-reload-module: "Hai appena aggiornato la configurazione del modulo &f%module%." -command-reload-error: "&f%module% non trovato!" -command-essentials: "&ezEssentials&8, &eVersione &f%version%" +command-reload-module: "Hai appena aggiornato la configurazione del modulo %module%." +command-reload-error: "%module% non trovato!" +command-essentials: "zEssentials, Versione %version%" # GameMode commands -command-gamemode: "&fLa modalità&e %gamemode%&f è stata data a &b%player%&f." +command-gamemode: "La modalità %gamemode% è stata data a %player%." command-gamemode-invalid: "Giocatore non valido." # Weather commands command-time-error: "Devi specificare un mondo." -command-time-already-changing: "Il tempo sta già cambiando in &f%world%." -command-day: "&fHai fatto diventare &egiorno&f nel mondo %world%&f." -command-night: "&fHai fatto diventare &enotte&f nel mondo %world%&f." -command-sun: "&fHai fatto diventare &esole&f nel mondo %world%&f." +command-time-already-changing: "Il tempo sta già cambiando in %world%." +command-day: "Hai fatto diventare giorno nel mondo %world%." +command-night: "Hai fatto diventare notte nel mondo %world%." +command-sun: "Hai fatto diventare sole nel mondo %world%." # Admins commands -command-top: "&7Sei stato teletrasportato in &ecima&7." +command-top: "Sei stato teletrasportato in cima." command-top-error: "Non è stato possibile trovare un posizione sicura." command-speed-invalid: "Giocatore non valido." -command-speed-fly: "&7Hai impostato la velocità di &nvolo&r&7 a &f%speed%&7 per il giocatore &f%player%&7. &8(&f2 &7di default&8)" -command-speed-walk: "&7Hai impostato la velocità di &ncammino&r&7 a &f%speed%&7 per il giocatore &f%player%&7. &8(&f2 &7di default&8)" -command-speed-error: "Devi immettere un numero tra &60 e &610. &8(&f2 &7by default&8)" -command-god-enable: "&7Modalità God abilitata &7per &f%player%." -command-god-disable: "&7Modalità God disabilitata &7per &f%player%." -command-vanish-enable: "&7Vanish abilitato &7per &f%player%." -command-vanish-disable: "&7Vanish disabilitato &7per &f%player%." -command-night-vision-enable: "&7Visione notturna abilitata &7per &f%player%." -command-night-vision-disable: "&7Visione notturna disabilitata &7per &f%player%." -command-phantoms-enable: "&7Generazione dei fantasmi abilitata &7per &f%player%." -command-phantoms-disable: "&7Generazione dei fantasmi disabilitata &7per &f%player%." -command-ext-sender: "&7Hai spento il fuoco del giocatore &f%player%&7." +command-speed-fly: "Hai impostato la velocità di volo a %speed% per il giocatore %player%. (2 di default)" +command-speed-walk: "Hai impostato la velocità di cammino a %speed% per il giocatore %player%. (2 di default)" +command-speed-error: "Devi immettere un numero tra 0 e 10. (2 by default)" +command-god-enable: "Modalità God abilitata per %player%." +command-god-disable: "Modalità God disabilitata per %player%." +command-vanish-enable: "Vanish abilitato per %player%." +command-vanish-disable: "Vanish disabilitato per %player%." +command-night-vision-enable: "Visione notturna abilitata per %player%." +command-night-vision-disable: "Visione notturna disabilitata per %player%." +command-phantoms-enable: "Generazione dei fantasmi abilitata per %player%." +command-phantoms-disable: "Generazione dei fantasmi disabilitata per %player%." +command-ext-sender: "Hai spento il fuoco del giocatore %player%." command-ext-receiver: "Non stai più bruciando." command-ext-error: "Non puoi spegnere qualcuno che è morto!" -command-heal-all: "&7Hai curato tutti i giocatori del server." -command-heal-sender: "&7Hai appena curato &f%player%&7." +command-heal-all: "Hai curato tutti i giocatori del server." +command-heal-sender: "Hai appena curato %player%." command-heal-receiver: "Sei appena stato curato." command-heal-error: "Non puoi curare qualcuno che è morto!" -command-lighting-all: "&7Hai appena colpito tutti i giocatori con un fulmine." -command-lighting: "&7Hai appena evocato un fulmine nella posizione selezionata." -command-lighting-sender: "&7Hai appena evocato un fulmine sulla posizione di &f%player%&7." -command-lighting-receiver: "&cSei stato colpito da un fulmine!" +command-lighting-all: "Hai appena colpito tutti i giocatori con un fulmine." +command-lighting: "Hai appena evocato un fulmine nella posizione selezionata." +command-lighting-sender: "Hai appena evocato un fulmine sulla posizione di %player%." +command-lighting-receiver: "Sei stato colpito da un fulmine!" command-lighting-error: "Non puoi colpire un giocatore morto con un fulmine!" command-more-error: "You cannot make this order in item in hand." -command-more-success: "&7You just put your item to &f64&7." -command-feed-all: "&7Hai sfamato tutti i giocatori del server." -command-feed-sender: "&7Hai appena sfamato &f%player%&7." +command-more-success: "You just put your item to 64." +command-feed-all: "Hai sfamato tutti i giocatori del server." +command-feed-sender: "Hai appena sfamato %player%." command-feed-receiver: "Sei stato sfamato." command-feed-error: "Non puoi dar da mangiare a giocatori morti!" -command-afk-enable: "&7Ora sei contrassegnato come AFK&7." +command-afk-enable: "Ora sei contrassegnato come AFK." command-afk-disable: "Non sei più contrassegnato come AFK." -command-message-target-afk: "&f%player% &7è attualmente AFK&7." -command-compact-type: "Impossibile comprimere &f%material%." -command-compact-error: "Non hai &f%item% nel tuo inventario." -command-compact-success: "&7Hai appena compresso #0EEA93x%amount% #99E0FF%item% &7in #0EEA93x%toAmount% #99E0FF%toItem%&7." -command-hat-success: "&7Hai appena messo #0ef0ce%item% &7sulla tua testa." +command-message-target-afk: "%player% è attualmente AFK." +command-compact-type: "Impossibile comprimere %material%." +command-compact-error: "Non hai %item% nel tuo inventario." +command-compact-success: "Hai appena compresso x%amount% %item% in x%toAmount% %toItem%." +command-hat-success: "Hai appena messo %item% sulla tua testa." command-hat-error: "Non puoi mettere aria sulla tua testa." -command-player-weather-reset: "&7Hai appena cambiato il tempo atmosferico a quello del server." -command-player-weather-downfall: "&7Hai appena messo pioggia su di te." -command-player-time-reset: "&7Hai appena cambiato il tempo aa quello del server." -command-player-time-change: "&7Sei qui per cambiare il tuo tempo." -command-lag-world-line: "&a%world%&7: &a%peaceful% passive&7, &c%monsters% mostri&7, &e%items% oggetti" -command-lag-world-header: "&aEntità per il mondo &2%world%&a:" -command-lag-world-entry: "&7- &a%type%&7: &f%amount%" -command-lag-clear-success: "&7Rimosse &a%amount% &7entità in &a%world%&7." -command-lag-clear-countdown: "&cRimozione delle entità tra &e%time% &csecondi!" -command-fly-enable: "&7Modalità volo abilitata &7per &f%player%." -command-fly-disable: "&7Modalità volo disabilitata &7per &f%player%." -command-furnace-type: "Impossibile fondere &f%material%." -command-furnace-error: "Non hai &f%item% nel tuo inventario." -command-furnace-success: "&7Hai appena trasformato #0EEA93x%amount% #34cfe0%item% &7in #0EEA93x%toAmount% #34cfe0%toItem%&7." -command-skull: "Hai appena ottenuto la testa di &f%name%." +command-player-weather-reset: "Hai appena cambiato il tempo atmosferico a quello del server." +command-player-weather-downfall: "Hai appena messo pioggia su di te." +command-player-time-reset: "Hai appena cambiato il tempo aa quello del server." +command-player-time-change: "Sei qui per cambiare il tuo tempo." +command-lag-world-line: "%world%: %peaceful% passive, %monsters% mostri, %items% oggetti" +command-lag-world-header: "Entità per il mondo %world%:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "Rimosse %amount% entità in %world%." +command-lag-clear-countdown: "Rimozione delle entità tra %time% secondi!" +command-fly-enable: "Modalità volo abilitata per %player%." +command-fly-disable: "Modalità volo disabilitata per %player%." +command-furnace-type: "Impossibile fondere %material%." +command-furnace-error: "Non hai %item% nel tuo inventario." +command-furnace-success: "Hai appena trasformato x%amount% %item% in x%toAmount% %toItem%." +command-skull: "Hai appena ottenuto la testa di %name%." command-repair-error: "L'oggetto che stai tenendo non può essere riparato." command-repair-success: "Hai riparato l'oggetto che stai tenendo in mano." command-repair-all-error: "Non hai nessun oggetto da riparare." command-repair-all-success: "Hai appena riparato tutti gli oggetti nel tuo inventario." command-near-empty: "Nessun giocatore in vicinanza." -command-near-player: "&fGiocatori vicini a te&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Giocatori vicini a te:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7You played&8: %playtime%" - - "&7Current session&8: %playtime_session%" -command-bottom: "&7Sei stato teletrasportato sul &efondo&7." + - "You played: %playtime%" + - "Current session: %playtime_session%" +command-bottom: "Sei stato teletrasportato sul fondo." command-bottom-error: "Non è stato possibile trovare un punto sicuro in cui teletrasportarti." -command-remove: "&7Tolte %amount% &7entità." +command-remove: "Tolte %amount% entità." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FF&f%player% #99E0FFè stato offline #99E0FFdal &7%date%#99E0FF." + message: "%player% è stato offline dal %date%." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FF&f%player% #99E0FFè stato online #99E0FFdal %date%#99E0FF." + message: "%player% è stato online dal %date%." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFPlayTime&8: &f%playtime%" + message: "PlayTime: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFIndirizzo IP&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "Non è stato possibile trovare giocatori con l'indirizzo IP &f%ip%." -command-seen-ip-line: "#99E0FFGiocatori con l'indirizzo IP &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "Indirizzo IP:%ips%" +command-seen-address: " Show players who have the same address'>%ip%" +command-seen-ip-empty: "Non è stato possibile trovare giocatori con l'indirizzo IP %ip%." +command-seen-ip-line: "Giocatori con l'indirizzo IP %ip%:%players%" +command-seen-ip-info: " Mostra le informazioni del giocatore'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFUltimo Luogo&8: &f%world%, %x%, %y%, %z%" + message: "Ultimo Luogo: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFEntrato la prima volta il&8: &f%created_at%" + message: "Entrato la prima volta il: %created_at%" # Economy -command-economy-not-found: " Non riesco a trovare una valuta di nome &f%name%." -command-economy-reset-all-confirm: "Stai per azzerare tutti i saldi per &f%economy%. Esegui di nuovo il comando entro &f%seconds% secondi per confermare." -command-economy-reset-all-success: "#99E0FFHai azzerato tutti i saldi per &f%economy%#99E0FF." -command-economy-give-all-sender: "#99E0FFHai appena dato &f%economyFormat% #99E0FFai giocatori online." -command-economy-give-sender: "#99E0FFHai appena dato &f%economyFormat% #99E0FFa &7%player%#99E0FF." -command-economy-give-receiver: "#99E0FFHai appena ricevuto &f%economyFormat%." -command-economy-set-sender: "#99E0FFHai impostato il saldo a &f%economyFormat% #99E0FFdel giocatore &7%player%#99E0FF." -command-economy-set-receiver: "#99E0FFHai appena modificato &f%economyFormat%." -command-economy-take-sender: "#99E0FFHai appena preso &f%economyFormat% #99E0FFa &7%player%#99E0FF." -command-economy-take-receiver: "#99E0FFHai perso &f%economyFormat%." -command-economy-show-empty: "&f%player% has no money." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." +command-economy-not-found: " Non riesco a trovare una valuta di nome %name%." +command-economy-reset-all-confirm: "Stai per azzerare tutti i saldi per %economy%. Esegui di nuovo il comando entro %seconds% secondi per confermare." +command-economy-reset-all-success: "Hai azzerato tutti i saldi per %economy%." +command-economy-give-all-sender: "Hai appena dato %economyFormat% ai giocatori online." +command-economy-give-sender: "Hai appena dato %economyFormat% a %player%." +command-economy-give-receiver: "Hai appena ricevuto %economyFormat%." +command-economy-set-sender: "Hai impostato il saldo a %economyFormat% del giocatore %player%." +command-economy-set-receiver: "Hai appena modificato %economyFormat%." +command-economy-take-sender: "Hai appena preso %economyFormat% a %player%." +command-economy-take-receiver: "Hai perso %economyFormat%." +command-economy-show-empty: "%player% has no money." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFHai&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "Hai:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "Quantità da pagare deve essere positiva." -command-pay-min: "La quantità minima che puoi pagare è &f%amount%." -command-pay-max: "La quantità massima che puoi pagare è &f%amount%." -command-pay-sender: "#99E0FFHai dato #F8F327%amount%#99E0FF a &f%player%#99E0FF." -command-pay-receiver: "&f%player% #99E0FFti ha dato #F8F327%amount%#99E0FF." +command-pay-min: "La quantità minima che puoi pagare è %amount%." +command-pay-max: "La quantità massima che puoi pagare è %amount%." +command-pay-sender: "Hai dato %amount% a %player%." +command-pay-receiver: "%player% ti ha dato %amount%." command-pay-disable: "Non puoi dare %name%." command-pay-self: "Non puoi dare soldi a te stesso." command-pay-not-enough: "Non hai abbastanza soldi." # Teleport commands -command-tpa-error: "Hai gia mandato la richiesta a #99E0FF%player%." +command-tpa-error: "Hai gia mandato la richiesta a %player%." command-tpa-error-same: "Non puoi teletrasportarti a te stesso." command-tpa-error-offline: "Non è stato possibile trovare il giocatore." command-tpa-error-to-late-empty: "Non hai nessuna richiesta di teletrasporto." command-tpa-error-to-late-expire: "La richiesta di teletrasporto è scaduta." command-tpa-sender: - - "✔ #99E0FFMandata la richiesta a &f%displayName% #99E0FF." - - " ✘ Cancella richiesta'>#99E0FFType /tpacancel %player%#99E0FF per cancellare la tua richiesta." + - "✔ Mandata la richiesta a %displayName% ." + - " ✘ Cancella richiesta'>Type /tpacancel %player% per cancellare la tua richiesta." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFha richiesto di teletrasportarsi da te!" - - " ✔ Accetta richiesta'>#99E0FFScrivi /tpaccept #99E0FFper accettare#99E0FF." - - " ✘ Rifiuta richiesta'>#99E0FFScrivi /tpdeny #99E0FFper rifiutare#99E0FF." + - "⚠ %displayName% ha richiesto di teletrasportarsi da te!" + - " ✔ Accetta richiesta'>Scrivi /tpaccept per accettare." + - " ✘ Rifiuta richiesta'>Scrivi /tpdeny per rifiutare." - "" - - "&7&oHai 60 secondi per accettare la richiesta di teletrasporto" -command-tpa-accept-receiver: "#99E0FFHai appena accettato #99E0FFla richiesta di teletrasporto da parte di #99E0FF%player%." -command-tpa-accept-sender: "#99E0FF%player% ha appena accettato la tua richiesta di teletrasporto." -command-teleport-ignore-player: "Non puoi mandare la richiesta di teletrasporto a #99E0FF%player% ti ignorano." + - "Hai 60 secondi per accettare la richiesta di teletrasporto" +command-tpa-accept-receiver: "Hai appena accettato la richiesta di teletrasporto da parte di %player%." +command-tpa-accept-sender: "%player% ha appena accettato la tua richiesta di teletrasporto." +command-teleport-ignore-player: "Non puoi mandare la richiesta di teletrasporto a %player% ti ignorano." command-teleport-world: "Devi stare nello stesso mondo per teletrasportarti." command-tpa-error-to-late: "Non hai nessuna richiesta di teletrasporto al momento." command-tpa-error-to-late-2: "La richiesta è scaduta." -command-tp-deny-sender: "✔ Rifiutata la richiesta di teletrasporto di &f%player% ." -command-tp-deny-receiver: "✘ &f%player% ha rifiutato la tua richiesta di teletrasporto." -command-tp-cancel-error: "Non hai mandato nessuna richiesta di teletrasporto a &f%player%." -command-tp-cancel-sender: "Cancellata #99E0FFla tua richiesta di teletrasporto a %player%." -command-tp-cancel-receiver: "&f%player% ha cancellato la sua richiesta di teletrasporto." -command-world-teleport-self: "Sei appena stato teletrasportato nel mondo &f%world%." -command-world-teleport-other: "Hai appena teletrasportato &f%player% nel mondo &f%world%." -command-random-tp-other: "Hai appena teletrasportato casualmente il giocatore &f%player% nel mondo &f%world%." -command-tp: "&7Ti sei teletrasportato da #34cfe0%player%&f." -command-tp-self: "&7Hai teletrasportato #34cfe0%player%&7 da te." -command-back: "&7Tornando alla posizione precedente." +command-tp-deny-sender: "✔ Rifiutata la richiesta di teletrasporto di %player% ." +command-tp-deny-receiver: "✘ %player% ha rifiutato la tua richiesta di teletrasporto." +command-tp-cancel-error: "Non hai mandato nessuna richiesta di teletrasporto a %player%." +command-tp-cancel-sender: "Cancellata la tua richiesta di teletrasporto a %player%." +command-tp-cancel-receiver: "%player% ha cancellato la sua richiesta di teletrasporto." +command-world-teleport-self: "Sei appena stato teletrasportato nel mondo %world%." +command-world-teleport-other: "Hai appena teletrasportato %player% nel mondo %world%." +command-random-tp-other: "Hai appena teletrasportato casualmente il giocatore %player% nel mondo %world%." +command-tp: "Ti sei teletrasportato da %player%." +command-tp-self: "Hai teletrasportato %player% da te." +command-back: "Tornando alla posizione precedente." command-back-error: "Non hai nessuna posizione precedente in cui tornare." command-random-tp-error: "Dopo diversi tentativi, non si è riusciti a trovare una posizione sicura. Riprova." # First join -join-message: "+ #99E0FF%player%" -quit-message: "- #99E0FF%player%" +join-message: "+ %player%" +quit-message: "- %player%" first-join-message: "" first-join-motd: - "" - - "✔ #99E0FFBenvenuto %player%#99E0FF !" + - "✔ Benvenuto %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Sito&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Entra nel server Discord !'>https://discord.groupez.dev/" + - "Sito: Apri il sito !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FFBentornato %player%#99E0FF !" + - "Bentornato %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Sito&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Entra nel server Discord !'>https://discord.groupez.dev/" + - "Sito: Apri il sito !'>https://minecraft-inventory-builder.com/" - "" # Spawn -command-set-spawn: "&fHai appena impostato lo spawn." -command-spawn-not-define: "Lo spawn non esiste. Contatta gli amministratori." +command-set-spawn: "Hai appena impostato lo spawn." +command-spawn-not-define: "Lo spawn non esiste. Contatta gli amministratori." # Command description description-reload: "Aggiorna i file di configurazione" @@ -442,8 +442,8 @@ format-hour: "ora" format-hours: "ore" format-day: "giorno" format-days: "giorni" -cooldown: "✘ Devi aspettare &f%cooldown% prima di poter ripetere questa azione." -cooldown-commands: "✘ Devi aaspettare &f%cooldown% per poter eseguire di nuovo questo comando." +cooldown: "✘ Devi aspettare %cooldown% prima di poter ripetere questa azione." +cooldown-commands: "✘ Devi aaspettare %cooldown% per poter eseguire di nuovo questo comando." # Teleportation teleport-move: "Non devi muoverti!" @@ -452,84 +452,84 @@ teleport-error-location: "Non è stato possibile teletrasportarti in modo # Sistema di coda RTP teleport-already-in-queue: "Sei già nella coda di teletrasporto!" -teleport-added-to-queue: "Sei stato aggiunto alla coda di teletrasporto. Posizione: #0EEA93%position%" +teleport-added-to-queue: "Sei stato aggiunto alla coda di teletrasporto. Posizione: %position%" teleport-message: type: ACTION - message: "&7Verrai teletrasportato entro #0EEA93%seconds% &7secondi, non muoverti." + message: "Verrai teletrasportato entro %seconds% secondi, non muoverti." teleport-success: type: ACTION - message: "#99E0FFTi sei teletrasportato con successo!" + message: "Ti sei teletrasportato con successo!" teleport-message-spawn: - type: ACTION - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." - - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." + message: "Verrai teletrasportato in %seconds% secondi, non muoverti." + - message: "Verrai teletrasportato in %seconds% secondi, non muoverti." teleport-success-spawn: - type: ACTION - message: "&7Ti sei teletrasportato allo #0EEA93spawn &7!" - - message: "&7Ti sei teletrasportato allo #0EEA93spawn &7!" + message: "Ti sei teletrasportato allo spawn !" + - message: "Ti sei teletrasportato allo spawn !" teleport-message-warp: - type: ACTION - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." - - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." + message: "Verrai teletrasportato in %seconds% secondi, non muoverti." + - message: "Verrai teletrasportato in %seconds% secondi, non muoverti." teleport-success-warp: - type: ACTION - message: "&7Ti sei teletrasportato al warp #0EEA93%name% &7!" - - message: "&7Ti sei teletrasportato al warp #0EEA93%name% &7!" + message: "Ti sei teletrasportato al warp %name% !" + - message: "Ti sei teletrasportato al warp %name% !" teleport-message-random: type: ACTION - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." + message: "Verrai teletrasportato in %seconds% secondi, non muoverti." teleport-success-random: type: ACTION - message: "#99E0FFTeletrasportato con successo!" + message: "Teletrasportato con successo!" teleport-message-home: - type: ACTION - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." - - message: "&7Verrai teletrasportato in #0EEA93%seconds% &7secondi, non muoverti." + message: "Verrai teletrasportato in %seconds% secondi, non muoverti." + - message: "Verrai teletrasportato in %seconds% secondi, non muoverti." teleport-success-home: - type: ACTION - message: "&7Ti sei teletrasportato alla casa #0EEA93%name% &7!" - - message: "&7Ti sei teletrasportato alla casa #0EEA93%name% &7!" + message: "Ti sei teletrasportato alla casa %name% !" + - message: "Ti sei teletrasportato alla casa %name% !" # Warps -command-warp-already-exist: "Warp &f%name% #ff0000esiste già. &7Usa &n/setwarp %name% true&r per modificare il warp" -command-warp-doesnt-exist: "#ff0000Warp &f%name% #ff0000 non esiste." -command-warp-no-permission: "#ff0000Non hai il abbastanza permessi per utilizzare il warp &f%name%#ff0000." +command-warp-already-exist: "Warp %name% esiste già. Usa Usa questo comando'>/setwarp %name% true per modificare il warp" +command-warp-doesnt-exist: "Warp %name% non esiste." +command-warp-no-permission: "Non hai il abbastanza permessi per utilizzare il warp %name%." command-warp-create: - - "Hai appena creato il warp &f%name% nella tua posizione." - - "&7Permesso del warp: permission set essentials.warp.%name%'>&f&nessentials.warp.%name%" + - "Hai appena creato il warp %name% nella tua posizione." + - "Permesso del warp: Copia il comando per aggiungere il permesso a un giocatore'> permission set essentials.warp.%name%'>essentials.warp.%name%" command-warp-use: - - "Utilizzo&8: &f/warp " - - "&7Warps&8:&f%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Warps&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "Hai appena rimosso il warp &f%name%." + - "Utilizzo: /warp " + - "Warps:%destinations%" +command-warp-destination: " Click to teleport to warp %name%'>%name%" +command-warp-list: "Warps:%destinations%" +command-warp-list-info: " Clicca per teletrasportarti al warp %name%'>%name%" +command-warp-delete: "Hai appena rimosso il warp %name%." # Homes -command-set-home-invalide-name: "&f%name% #ff0000non è un nome valido, per favore scegline un altro." -command-set-home-too-long: "&f%name% #ff0000è troppo lungo, per favore scegline un altro." -command-set-home-too-short: "&f%name% #ff0000è troppo corto, per favore scegline un altro." -command-set-home-max: "#ff0000Non puoi avere più di &f%max%#ff0000 case." +command-set-home-invalide-name: "%name% non è un nome valido, per favore scegline un altro." +command-set-home-too-long: "%name% è troppo lungo, per favore scegline un altro." +command-set-home-too-short: "%name% è troppo corto, per favore scegline un altro." +command-set-home-max: "Non puoi avere più di %max% case." command-set-home-create: - "" - - "#99E0FFYHai appena creato la casa &f%name%#99E0FF. &8(&7%current%&8/&7%max%&8)" - - "&fUsa &n/home %name%&r per teletrasportarti" + - "YHai appena creato la casa %name%. (%current%/%max%)" + - "Usa Clicca per teletrasportarti a casa'>/home %name% per teletrasportarti" - "" -command-home-doesnt-exist: "#ff0000La casa &f%name%#ff0000 non esiste." +command-home-doesnt-exist: "La casa %name% non esiste." # Available placeholders: # %count% - Home count # %max% - Max player's home command-home-information-multi-line-header: - "" - - "#8cc0ccʟᴇ ᴛᴜᴇ ᴄᴀsᴇ ♦ &7(%count%) &8- &7(Max: %max%)" + - "ʟᴇ ᴛᴜᴇ ᴄᴀsᴇ ♦ (%count%) - (Max: %max%)" # Available placeholders: # %count% - Home count @@ -542,7 +542,7 @@ command-home-information-multi-line-header: # %z% - Home location z command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7in %world% (%environment%) [CLICCARE QUI]" + message: " ♢ %name% in %world% (%environment%) Clicca per teletrasportarti alla casa %name%'>[CLICCARE QUI]" # Available placeholders: # %count% - Home count @@ -562,98 +562,98 @@ command-home-information-multi-line-footer: # %z% - Home location z command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccʟᴇ ᴛᴜᴇ ᴄᴀsᴇ ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" - -command-home-icon-error: "#ff0000Devi tenere un oggetto per cambiare l'icona della tua casa." -command-home-icon-success: "#00ff0Hai cambiato l'icona della casa &f%name%." -command-home-icon-reset: "Hai resettato l'icona della casa &f%name%." -command-home-delete: "#99E0FFHai rimosso la casa &f%name%#99E0FF." -command-home-admin-delete: "Hai rimosso la casa &f%name% di &b%player%." -command-home-admin-set: "Hai creato la casa &f%name% per &b%player%." -command-home-admin-list: "#8cc0ccᴄᴀsᴇ ᴅɪ %player%&8:&f%homes%" -command-home-admin-list-info: " &f%name%&7" + message: "ʟᴇ ᴛᴜᴇ ᴄᴀsᴇ ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Clicca per teletrasportarti alla casa %name%'>%name%" + +command-home-icon-error: "Devi tenere un oggetto per cambiare l'icona della tua casa." +command-home-icon-success: "#00ff0Hai cambiato l'icona della casa %name%." +command-home-icon-reset: "Hai resettato l'icona della casa %name%." +command-home-delete: "Hai rimosso la casa %name%." +command-home-admin-delete: "Hai rimosso la casa %name% di %player%." +command-home-admin-set: "Hai creato la casa %name% per %player%." +command-home-admin-list: "ᴄᴀsᴇ ᴅɪ %player%:%homes%" +command-home-admin-list-info: " Clicca per teletrasportarti alla casa %name%'>%name%" # Sanction command-kick-notify: type: WITHOUT_PREFIX - message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>&8(#f59e07Sanzione&8) #8aebeb%player% #e33414ha appena cacciato #e0d12d%target%#e33414." + message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>(Sanzione) %player% ha appena cacciato %target%." command-ban-notify: type: WITHOUT_PREFIX - message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%Expires: %expired_at%'>&8(#f59e07Sanzione&8) #8aebeb%player% #e33414ha appena bannato #e0d12d%target%#e33414." + message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%Expires: %expired_at%'>(Sanzione) %player% ha appena bannato %target%." command-mute-notify: type: WITHOUT_PREFIX - message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%Expires: %expired_at%'>&8(#f59e07Sanzione&8) #8aebeb%player% #e33414ha appena mutato #e0d12d%target%#e33414." + message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%Expires: %expired_at%'>(Sanzione) %player% ha appena mutato %target%." command-unmute-notify: type: WITHOUT_PREFIX - message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>&8(#f59e07Sanzione&8) #8aebeb%player% #e33414ha appena smutato #e0d12d%target%#e33414." + message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>(Sanzione) %player% ha appena smutato %target%." command-unban-notify: type: WITHOUT_PREFIX - message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>&8(#f59e07Sanzione&8) #8aebeb%player% #e33414just ha appena unbannato #e0d12d%target%#e33414." + message: "Da parte di: %sender%Durata: %duration%Motivo: %reason%Data: %created_at%'>(Sanzione) %player% just ha appena unbannato %target%." command-ban-error-duration: "La durata del ban deve essere almeno di 1 secondo." command-mute-error-duration: "La durata del mute deve essere almeno di 1 secondo." -command-un-mute-error: "&f%player% non è mutato." -command-un-ban-error: "&f%player% non è bannato." +command-un-mute-error: "%player% non è mutato." +command-un-ban-error: "%player% non è bannato." command-sanction-error: "Non puoi sanzionare questo giocatore. È protetto." message-kick: - "" - "Sei appena stato cacciato dal server per il seguente motivo:" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&fHai appena perso la tua voce." - - "&fDurata&8: %duration%" - - "&fMotivo&8: #82d1ff%reason%" + - "Hai appena perso la tua voce." + - "Durata: %duration%" + - "Motivo: %reason%" - "" message-unmute: - "" - - "&fHai appena riottenuto la tua voce, congratulazioni!" - - "&fMotivo&8: #82d1ff%reason%" + - "Hai appena riottenuto la tua voce, congratulazioni!" + - "Motivo: %reason%" - "" message-mute-talk: - "" - - "&fNon hai il diritto di parlare adesso!." + - "Non hai il diritto di parlare adesso!." - "" - - "&fDurata&8: %duration%" - - "&fMotivo&8: #82d1ff%reason%" + - "Durata: %duration%" + - "Motivo: %reason%" - "" message-ban: - "" - "Sei stato bannato per il seguente motivo:" - - "&f%reason%" - - "&fDurata&8: &7%duration%" + - "%reason%" + - "Durata: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "Sei bannato dal server per il seguene motivo:" - - "&f%reason%" - - "&fTempo rimanente&8: &7%remaining%" + - "%reason%" + - "Tempo rimanente: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" # Chat chat-error: "Impossibile lasciarti scrivere, i tuoi dati non sono caricati." chat-alphanumeric-regex: "Hai usato un caratterre proibito." -chat-cooldown: "Aspetta prima di mandare il prossimo messaggio. &8(&7%cooldown%&8)" +chat-cooldown: "Aspetta prima di mandare il prossimo messaggio. (%cooldown%)" chat-same: "Non puoi riscrivere la stessa frase." chat-link: "Non puoi mandare link nella chat." chat-item-forbidden-characters: "Non puoi mostrare questo oggetto perché il suo nome contiene caratteri proibiti." chat-disable: "La chat non è disponibile al momento." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% non ha scritto un messaggio." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% non ha scritto un messaggio." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "La chat è stata pulita." command-chat-disable-error: "La chat è gia disabilitata." command-chat-disable-success: "Hai disabilitato la chat." @@ -661,51 +661,51 @@ command-chat-enable-error: "La chat è gia abilitata." command-chat-enable-success: "Hai appena abilitato la chat." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ᴀɴɴᴜɴᴄɪᴏ • %message%" + message: "ᴀɴɴᴜɴᴄɪᴏ • %message%" # Messages command-message-self: "Non puoi scrivere a te stesso." -command-message-disable: "I messaggi privati per &f%player% sono disabilitati." +command-message-disable: "I messaggi privati per %player% sono disabilitati." command-message-mute: "Non puoi scrivere." -command-message-me: "&8(#f533f5me &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5me&8) #e6e1e6" +command-message-me: "Clicca per rispondere'>(me -> %target%) " +command-message-other: "Clicca per rispondere'>(%target% -> me) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Mostra le sanzioni per %sender%'>%sender% -> Mostra le sanzioni per %receiver%'>%receiver%) %message%" command-message-error: "Non hai nessuno a cui rispondere." -command-message-toggle-enable: "&7Messaggi privati abilitati &7per &f%player%." -command-message-toggle-disable: "&7Messaggi privati disabilitati &7per &f%player%." -command-social-spy-enable: "&7Social spy abilitato &7per &f%player%." -command-social-spy-disable: "&7Social spy disabilitato &7per &f%player%." -command-warp-empty: "Nessun warp definito, usa il commando &f/setwarp " -command-pay-toggle-enable: "&7Pay abilitato &7per &f%player%." -command-pay-toggle-disable: "&7Pay disabilitato &7per &f%player%." -command-pay-notification-toggle-enable: "&7Notifiche di pagamento abilitate &7per &f%player%." -command-pay-notification-toggle-disable: "&7Notifiche di pagamento disabilitate &7per &f%player%." -command-power-tools-toggle-enable: "Tutti i power tools sono stati abilitati &7per &f%player%." -command-power-tools-toggle-disable: "Tutti i power tools sobo stati disabilitati &7per &f%player%." +command-message-toggle-enable: "Messaggi privati abilitati per %player%." +command-message-toggle-disable: "Messaggi privati disabilitati per %player%." +command-social-spy-enable: "Social spy abilitato per %player%." +command-social-spy-disable: "Social spy disabilitato per %player%." +command-warp-empty: "Nessun warp definito, usa il commando /setwarp " +command-pay-toggle-enable: "Pay abilitato per %player%." +command-pay-toggle-disable: "Pay disabilitato per %player%." +command-pay-notification-toggle-enable: "Notifiche di pagamento abilitate per %player%." +command-pay-notification-toggle-disable: "Notifiche di pagamento disabilitate per %player%." +command-power-tools-toggle-enable: "Tutti i power tools sono stati abilitati per %player%." +command-power-tools-toggle-disable: "Tutti i power tools sobo stati disabilitati per %player%." # Kit -command-kit-not-found: "Non è stato possibile trovare il kit &f%kit%." -command-kit-already-exists: "Il kit &f%kit% esiste già." -command-kit-information-in-line-empty: "#8cc0ccʏᴏᴜʀ ᴋɪᴛs ♦ &7(%count%/%max%)&8: ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ" -command-kit-information-in-line: "#8cc0ccɪ ᴛᴜᴏɪ ᴋɪᴛs&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% prima di ottenere il kit &f&n%name%'><#de1f1f>%name%&7" +command-kit-not-found: "Non è stato possibile trovare il kit %kit%." +command-kit-already-exists: "Il kit %kit% esiste già." +command-kit-information-in-line-empty: "ʏᴏᴜʀ ᴋɪᴛs ♦ (%count%/%max%): ɴᴏ ᴋɪᴛ ᴀᴠᴀɪʟᴀʙʟᴇ" +command-kit-information-in-line: "ɪ ᴛᴜᴏɪ ᴋɪᴛs:%kits%" +command-kit-information-in-line-info-available: " Clicca per ottenere il kit %name%'>%name%" +command-kit-information-in-line-info-unavailable: " Devi aspettare%time% prima di ottenere il kit %name%'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% prima di ottenere il kit &f&n%name%'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Clicca per ottenere il kit %name%'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ Devi aspettare%time% prima di ottenere il kit %name%'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "Hai appena modificato il kit &f%kit%." -command-kit-create: "Hai appena creato il kit &f%kit%." -command-kit-delete: "Hai appena eliminato il kit &f%kit%." +command-kit-editor-save: "Hai appena modificato il kit %kit%." +command-kit-create: "Hai appena creato il kit %kit%." +command-kit-delete: "Hai appena eliminato il kit %kit%." # Cooldown -command-cooldown-header: "&fCooldown di %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% non ha nessun cooldown." +command-cooldown-header: "Cooldown di %player% (%amount%)" +command-cooldown-empty: "%player% non ha nessun cooldown." # Available placeholders: # %key% - The key to the cooldown # %value% - The cooldown expiration timestamp @@ -714,170 +714,170 @@ command-cooldown-empty: "&f%player% non ha nessun cooldown." # %player% - the Player's nickname command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴇʟɪᴍɪɴᴀ&8]" -command-cooldown-not-found: "&f%cooldown% non è stato trovato." -command-cooldown-delete: "Hai appena rimosso il cooldown &f%cooldown% da &n%player%&r." + message: "%key% - %createdAt% - %timeLeft% - Clicca per togliere il cooldown'>[ᴇʟɪᴍɪɴᴀ]" +command-cooldown-not-found: "%cooldown% non è stato trovato." +command-cooldown-delete: "Hai appena rimosso il cooldown %cooldown% da %player%." # Available placeholders: # %key% - The key to the cooldown # %player% - the Player's nickname # %duration% - the duration of the cooldown -command-cooldown-create: "Hai appena creato il cooldown &f%key% per &n%player%&r." +command-cooldown-create: "Hai appena creato il cooldown %key% per %player%." command-item-empty: "Non stai tenendo nessun oggetto." command-item-clear: "Hai formattato il nome di questo oggetto" -command-item-set: "Hai rinominato l'oggetto a &f%name%." -command-item-lore-add: "Hai aggiunto la frase &f%text%." -command-item-lore-set: "Hai fatto diventare la frase %line% a &f%text%." +command-item-set: "Hai rinominato l'oggetto a %name%." +command-item-lore-add: "Hai aggiunto la frase %text%." +command-item-lore-set: "Hai fatto diventare la frase %line% a %text%." command-item-lore-clear: "Hai formattato la descrizione dell'oggetto." -command-item-lore-set-error: "Non si riesce a trovare la linea &f%line%." -command-give-error: "Non si riesce a trovare l'oggetto &f%item%." -command-give: "Hai dato &n&fx%amount% %item%&r al giocatore &f%player%." -command-give-all: "Hai dato &n&fx%amount% %item%&r a tutti i giocatori online." -command-give-vault: "Hai dato &n&fx%amount% %item%&r alla cassaforte di &f%player%." +command-item-lore-set-error: "Non si riesce a trovare la linea %line%." +command-give-error: "Non si riesce a trovare l'oggetto %item%." +command-give: "Hai dato x%amount% %item% al giocatore %player%." +command-give-all: "Hai dato x%amount% %item% a tutti i giocatori online." +command-give-vault: "Hai dato x%amount% %item% alla cassaforte di %player%." command-power-tool-error-item: "Non stai tenendo nessun oggetto." command-power-tool-error-reset: "Questo oggetto non ha nessun comando registrato in sé." -command-power-tool-info: "Hai appena dato il comando &f/%command% all'oggetto &f%item%." -command-power-tool-reset: "Hai eliminato il comando dell'oggetto &f%item%." +command-power-tool-info: "Hai appena dato il comando /%command% all'oggetto %item%." +command-power-tool-reset: "Hai eliminato il comando dell'oggetto %item%." mailbox-remove-full: "Devi avere dello spazio vuoto nell'inventario per ottenere l'oggetto." mailbox-remove-expire: "Non puoi più ottenere questo oggetto. Tempo scaduto." mailbox-add: type: ACTION - message: "Un oggetto è stato aggiunto alla tua mailbox &8(&f/mail&8)" -mailbox-give-error: "Non si riesce a trovare l'oggetto &f%item%." -mailbox-give: "Hai dato &n&fx%amount% %item%&r alla mailbox di &f%player%." -mailbox-give-all: "Hai dato &n&fx%amount% %item%&r a tutte le mailbox dei giocatori online." -mailbox-give-hand: "Hai inviato l'oggetto nella tua mano alla mailbox di &f%player% (&fx%amount% %item%)." -mailbox-give-all-hand: "Hai inviato l'oggetto nella tua mano (&fx%amount% %item%) alle mailbox di tutti i giocatori online." + message: "Un oggetto è stato aggiunto alla tua mailbox (/mail)" +mailbox-give-error: "Non si riesce a trovare l'oggetto %item%." +mailbox-give: "Hai dato x%amount% %item% alla mailbox di %player%." +mailbox-give-all: "Hai dato x%amount% %item% a tutte le mailbox dei giocatori online." +mailbox-give-hand: "Hai inviato l'oggetto nella tua mano alla mailbox di %player% (x%amount% %item%)." +mailbox-give-all-hand: "Hai inviato l'oggetto nella tua mano (x%amount% %item%) alle mailbox di tutti i giocatori online." -hologram-create-error: "Ologramma di nome &f%name% esiste già." +hologram-create-error: "Ologramma di nome %name% esiste già." hologram-create: type: WITHOUT_PREFIX messages: - - "Hai creato l'ologramma &f%name%." - - "&7Usa &n/hologram %command% %name%&r&7 per modificare l'ologramma" -hologram-delete: "Ologramma di nome &f%name% è stato rimosso." -hologram-doesnt-exist: "Ologramma di nome &f%name% non esiste." -hologram-is-not-a-text: "Ologramma di nome &f%name% non è un text hologram." -hologram-is-not-a-block: "Ologramma di nome &f%name% non è un block hologram." -hologram-is-not-a-item: "Ologramma di nome &f%name% non è un item hologram." -hologram-add-line: "Hai appena aggiunto una riga all'ologramma &f%name%." -hologram-set-line: "Hai fatto diventare la riga &f%line% per l'ologramma &f%name%." -hologram-insert-before-line: "Hai aggiunto una nuova riga prima della riga &f%line% per l'ologramma &f%name%." -hologram-insert-after-line: "Hai aggiunto una nuova riga dopo la riga &f%line% per l'ologramma &f%name%." -hologram-line-doesnt-exist: "La riga &f%line% non esiste per l'ologramma &f%name%." -hologram-remove-line: "Hai rimosso la linea &f%line% dall'ologramma &f%name%." -hologram-scale: "Hai appena cambiato la scala(grandezza) dell'ologramma &f%name% a &7%x%&8, &7%y%&8, &7%z%." -hologram-translation: "Hai cambiato la traduzione dell'ologramma &f%name% a &7%x%&8, &7%y%&8, &7%z%." -hologram-move-here: "Hai spostato l'ologramma &f%name% alla tua posizione." -hologram-move-to: "Hai spostato l'ologramma &f%name% alle coordinate &7%x%&8, &7%y%&8, &7%z%." -hologram-billboard: "Hai cambiato la billboard dell'ologramma &f%name% a &f%billboard%." -hologram-text-alignment: "Hai appena cambiato l'allineamento del testo dell'ologramma &f%name% a &f%textAlignment%." -hologram-yaw: "Hai camiato la yaw dell'ologramma &f%name% a &f%yaw%." -hologram-pitch: "Hai cambiato il pitch dell'ologramma &f%name% a &f%pitch%." -hologram-text-background: "Hai cambiato il colore di sfondo dell'ologramma &f%name% a &f%color%." + - "Hai creato l'ologramma %name%." + - "Usa /hologram %command% %name% per modificare l'ologramma" +hologram-delete: "Ologramma di nome %name% è stato rimosso." +hologram-doesnt-exist: "Ologramma di nome %name% non esiste." +hologram-is-not-a-text: "Ologramma di nome %name% non è un text hologram." +hologram-is-not-a-block: "Ologramma di nome %name% non è un block hologram." +hologram-is-not-a-item: "Ologramma di nome %name% non è un item hologram." +hologram-add-line: "Hai appena aggiunto una riga all'ologramma %name%." +hologram-set-line: "Hai fatto diventare la riga %line% per l'ologramma %name%." +hologram-insert-before-line: "Hai aggiunto una nuova riga prima della riga %line% per l'ologramma %name%." +hologram-insert-after-line: "Hai aggiunto una nuova riga dopo la riga %line% per l'ologramma %name%." +hologram-line-doesnt-exist: "La riga %line% non esiste per l'ologramma %name%." +hologram-remove-line: "Hai rimosso la linea %line% dall'ologramma %name%." +hologram-scale: "Hai appena cambiato la scala(grandezza) dell'ologramma %name% a %x%, %y%, %z%." +hologram-translation: "Hai cambiato la traduzione dell'ologramma %name% a %x%, %y%, %z%." +hologram-move-here: "Hai spostato l'ologramma %name% alla tua posizione." +hologram-move-to: "Hai spostato l'ologramma %name% alle coordinate %x%, %y%, %z%." +hologram-billboard: "Hai cambiato la billboard dell'ologramma %name% a %billboard%." +hologram-text-alignment: "Hai appena cambiato l'allineamento del testo dell'ologramma %name% a %textAlignment%." +hologram-yaw: "Hai camiato la yaw dell'ologramma %name% a %yaw%." +hologram-pitch: "Hai cambiato il pitch dell'ologramma %name% a %pitch%." +hologram-text-background: "Hai cambiato il colore di sfondo dell'ologramma %name% a %color%." hologram-text-background-error: "Non si è riusciti ad analizzare il colore di sfondo." -hologram-text-shadow: "Hai impostato l'ombra del testo a &f%textshadow% per l'ologramma &f%name%." -hologram-see-through: "Hai impostato l'opacità/possibilità di vedere attraverso a &f%seethrough% per l'ologramma &f%name%." -hologram-shadow-strength: "Hai impostato l'intensità dell'ombraa a &f%shadow% per l'ologramma &f%name%." -hologram-shadow-radius: "per l'ologramma &f%name%." -hologram-view-distance: "Hai impostato la distanza visiva a &f%distance% per l'ologramma &f%name%." -hologram-list-empty: "Non c'è nessun ologramma, per crearne uno, usa il comando &f/holo create " +hologram-text-shadow: "Hai impostato l'ombra del testo a %textshadow% per l'ologramma %name%." +hologram-see-through: "Hai impostato l'opacità/possibilità di vedere attraverso a %seethrough% per l'ologramma %name%." +hologram-shadow-strength: "Hai impostato l'intensità dell'ombraa a %shadow% per l'ologramma %name%." +hologram-shadow-radius: "%shadow% per l'ologramma %name%." +hologram-view-distance: "Hai impostato la distanza visiva a %distance% per l'ologramma %name%." +hologram-list-empty: "Non c'è nessun ologramma, per crearne uno, usa il comando /holo create " hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴛʀᴀsᴘᴏʀᴛᴀᴛɪ Clicca per eliminare questo ologramma'>ᴇʟɪᴍɪɴᴀ" + message: "%name% - %world%: %x%, %y%, %z% - Clicca per essere teletrasportato a questo ologramma'>ᴛᴇʟᴇᴛʀᴀsᴘᴏʀᴛᴀᴛɪ Clicca per eliminare questo ologramma'>ᴇʟɪᴍɪɴᴀ" hologram-item-error: "Non puoi usare aria per questo ologramma." -hologram-item: "Hai modificato l'oggetto dell'ologramma &f%name%." -hologram-block: "Hai modificato il blocco dell'ologramma &f%name% al materiale &f%material%." +hologram-item: "Hai modificato l'oggetto dell'ologramma %name%." +hologram-block: "Hai modificato il blocco dell'ologramma %name% al materiale %material%." scoreboard-disable: "Hai disabilitato la scoreboard." scoreboard-enable: "Hai abilitato la scoreboard." -command-baltop-error: "Economia/Moneta di nome &f%name% inesistente." +command-baltop-error: "Economia/Moneta di nome %name% inesistente." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴛᴏᴘ sᴏʟᴅɪ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴛᴏᴘ sᴏʟᴅɪ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "Hai impostato il voteparty a &f%amount% voti." -command-voteparty-add: "Hai aggiunto &f%amount% voti per il voteparty." -command-voteparty-remove: "Hai tolto &f%amount% voti dal voteparty." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "Hai impostato il voteparty a %amount% voti." +command-voteparty-add: "Hai aggiunto %amount% voti per il voteparty." +command-voteparty-remove: "Hai tolto %amount% voti dal voteparty." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "Hai aggiunto un voto al giocatore &f%player%." -command-vote-add-error: "Il sito &f%site% non esiste !" +command-vote-add: "Hai aggiunto un voto al giocatore %player%." +command-vote-add-error: "Il sito %site% non esiste !" command-vote: type: ACTION message: "Hai appena votato e ricevuto una chiave vote." vote-offline: - "" - - "Hai votato %amount% volte mentre eri offline, usa il comando /mailbox per ottenere i tuoi premi!" + - "Hai votato %amount% volte mentre eri offline, usa il comando /mailbox per ottenere i tuoi premi!" - "" vault-lore: - "" - - "&fɪɴғᴏ" - - " #f8b175• &7Quantità&8: &e%quantity%" + - "ɪɴғᴏ" + - " • Quantità: %quantity%" - "" - - "&f➥ #fc99f8Click Sinitro &7per prenderne 1" - - "&f➥ #fc99f8Click Destro &7per prenderne 64" - - "&f➥ #fc99f8Shift + Click Destro &7per prendere tutto" -command-vault-not-found: "Non si riesce a trovare la cassaforte &f%vaultId%." + - "➥ Click Sinitro per prenderne 1" + - "➥ Click Destro per prenderne 64" + - "➥ Shift + Click Destro per prendere tutto" +command-vault-not-found: "Non si riesce a trovare la cassaforte %vaultId%." command-vault-no-permission: "Non hai il permesso di vedere la cassaforte." -command-vault-set-slot: "Hai impostato la quantita di slots per il giocatore &f%player% a &7%slots% slots." -command-vault-add-slot: "Hai aggiunto &7%amount% slots per &f%player%." -command-vault-get-slot-empty: "No item was found in vault &f%vault% slot &f%slot% for &f%player%." -command-vault-get-slot-success: "Slot Vault per &f%player%: Vault &7%vault%, slot &7%slot%, quantità &7%amount%, oggetto &f%item%." -command-vault-delete-slot-success: "Hai eliminato lo slot &7%slot% da Vault &7%vault% per &f%player%." -command-vault-delete-slot-empty: "Cannot find slot &f%slot% in vault &f%vault% for &f%player%." +command-vault-set-slot: "Hai impostato la quantita di slots per il giocatore %player% a %slots% slots." +command-vault-add-slot: "Hai aggiunto %amount% slots per %player%." +command-vault-get-slot-empty: "No item was found in vault %vault% slot %slot% for %player%." +command-vault-get-slot-success: "Slot Vault per %player%: Vault %vault%, slot %slot%, quantità %amount%, oggetto %item%." +command-vault-delete-slot-success: "Hai eliminato lo slot %slot% da Vault %vault% per %player%." +command-vault-delete-slot-empty: "Cannot find slot %slot% in vault %vault% for %player%." command-vault-change-icon-error: "Stai tenendo un oggetto." command-vault-change-icon-success: "Hai camviato l'icona della tua cassaforte." command-vault-reset-icon: "Hai resettato l'icona della cassaforte." command-vault-rename-start: "Scrivi in chat il nuovo nome della cassaforte." -command-vault-rename-success: "Hai impostato il nome della cassa forte a &f%name%." +command-vault-rename-success: "Hai impostato il nome della cassa forte a %name%." command-vault-rename-error: "Non puoi usare questo nome per la tua cassaforte." command-vault-rename-reset: "Hai resettato il nome della cassaforte." command-enchant-invalid: "Devi specificare un giocatore valido." -command-enchant-error-enchant: "Impossibile trovare l'incantesimo &f%name%." +command-enchant-error-enchant: "Impossibile trovare l'incantesimo %enchant%." command-enchant-error-item-self: "Devi tenere un oggetto in mano." command-enchant-error-item-player: "%player% non sta tenendo nessun oggetto." -command-enchant-remove-self: "L'incantesimo &f%enchant% è stato rimosso dall'oggetto che stai tenendo." -command-enchant-remove-player: "L'incantesimo &f%enchant% è stato rimosso dall'oggeto che &f%player% sta tenendo." -command-enchant-success-self: "L'incantesimo &f%enchant% è stato aggiunto all'oggetto che stai tenendo." -command-enchant-success-player: "L'incantesimo &f%enchant% è stato aggiunto all'oggetto che &f%player% sta tenendo." +command-enchant-remove-self: "L'incantesimo %enchant% è stato rimosso dall'oggetto che stai tenendo." +command-enchant-remove-player: "L'incantesimo %enchant% è stato rimosso dall'oggeto che %player% sta tenendo." +command-enchant-success-self: "L'incantesimo %enchant% è stato aggiunto all'oggetto che stai tenendo." +command-enchant-success-player: "L'incantesimo %enchant% è stato aggiunto all'oggetto che %player% sta tenendo." command-sudo-error: "Non puoi obbligato il giocatore ad eseguire il comando." -command-sudo-command: "Hai obbligato %player% ad eseguire il comando /%command%." -command-sudo-message: "Hai obbligato %player% a mandare il messaggio %message%." +command-sudo-command: "Hai obbligato %player% ad eseguire il comando /%command%." +command-sudo-message: "Hai obbligato %player% a mandare il messaggio %message%." # WorldEdit -command-worldedit-give-error: "Non si riesce a trovare l'oggetto &f%name%" -command-worldedit-give-sender: "Hai dato &f%item% a &f%player%." -command-worldedit-give-receiver: "Hai ricevuto &f%item%." -command-worldedit-material-not-found: "Non si riesce a trovare il materiale &f%material%." +command-worldedit-give-error: "Non si riesce a trovare l'oggetto %name%" +command-worldedit-give-sender: "Hai dato %item% a %player%." +command-worldedit-give-receiver: "Hai ricevuto %item%." +command-worldedit-material-not-found: "Non si riesce a trovare il materiale %material%." command-worldedit-confirm-price: - "" - - "Prezzo: %price%" - - "Blocchi:%materials%" - - "Durata: %duration% (%blocks% blocks at %speed% block%s%/s)" + - "Prezzo: %price%" + - "Blocchi:%materials%" + - "Durata: %duration% (%blocks% blocks at %speed% block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴄᴀ ᴏ̨ᴜɪ ᴘᴇʀ ᴄᴏɴғᴇʀᴍᴀʀᴇ" + - "Clicca per confermare'>ᴄʟɪᴄᴄᴀ ᴏ̨ᴜɪ ᴘᴇʀ ᴄᴏɴғᴇʀᴍᴀʀᴇ" command-worldedit-confirm-price-cut: - "" - - "Prezzo: %price%" - - "Durata: %duration% (%blocks% blocks at %speed% block%s%/s)" + - "Prezzo: %price%" + - "Durata: %duration% (%blocks% blocks at %speed% block%s%/s)" - "" - - "<#45ff55>ᴄʟɪᴄᴄᴀ ᴏ̨ᴜɪ ᴘᴇʀ ᴄᴏɴғᴇʀᴍᴀʀᴇ" -command-worldedit-confirm-material: " Quantità: %amount%Prezzo: %price%Prezzo al blocco: %price-per-block%'>" + - "Clicca per confermare'>ᴄʟɪᴄᴄᴀ ᴏ̨ᴜɪ ᴘᴇʀ ᴄᴏɴғᴇʀᴍᴀʀᴇ" +command-worldedit-confirm-material: " Quantità: %amount%Prezzo: %price%Prezzo al blocco: %price-per-block%'>" command-worldedit-confirm-error: "Non puoi farlo al momento." command-worldedit-stop-empty: "Non hai nessuna sessione attiva." command-worldedit-stop-error: "Non puoi smettere di modificare al momento." @@ -894,21 +894,21 @@ worldedit-not-enough-money: "Non hai abbastanza soldi per creare questa s worldedit-not-enough-items: "Non hai abbastanza oggetti nel tuo inventario, non puoi farlo." worldedit-selection-pos1: "Hai impostato la prima posizione." worldedit-selection-pos2: "Hai impostato la seconda posizione." -worldedit-selection-volume: "Non puoi cambiare più di &f%blocks% blocchi contemporaneamente." -worldedit-selection-distance: "La distanza tra i due angoli è troppo vasta. (Massimo %distance% blocchi)" +worldedit-selection-volume: "Non puoi cambiare più di %blocks% blocchi contemporaneamente." +worldedit-selection-distance: "La distanza tra i due angoli è troppo vasta. (Massimo %distance% blocchi)" -worldedit-start-calculate-price: "&7Calcolando il prezzo..." -worldedit-start-check-inventory: "&7Controllando se hai abbastanza oggetti..." -worldedit-start-running: "&7Iniziando una sessione..." +worldedit-start-calculate-price: "Calcolando il prezzo..." +worldedit-start-check-inventory: "Controllando se hai abbastanza oggetti..." +worldedit-start-running: "Iniziando una sessione..." worldedit-finish: "Sessione completata!" worldedit-refund: - "sᴇɪ sᴛᴀᴛᴏ ʀɪᴍʙᴏʀsᴀᴛᴏ" - "" - - "Prezzo: %price%" - - "Blocchi:%materials%" -worldedit-refund-material: " Quantità: %amount%Prezzo totale: %price%Prezzo al blocco: %price-per-block%'>" + - "Prezzo: %price%" + - "Blocchi:%materials%" +worldedit-refund-material: " Quantità: %amount%Prezzo totale: %price%Prezzo al blocco: %price-per-block%'>" worldedit-refund-empty: " Nessun rimborso per i blocchi" -worldedit-bossbar: "#45ff45Tempo rimanente: %time%" +worldedit-bossbar: "Tempo rimanente: %time%" worldedit-speed-error: "Non hai abbastanza permessi per impostare i blocchi al secondo." @@ -916,52 +916,52 @@ worldedit-speed-error: "Non hai abbastanza permessi per impostare i blocc chat-caps: "Non serve urlare per parlare!" chat-flood: "Non puoi parlare in questo modo." command-clearinventory-success: "Hai svuotato il tuo inventario." -command-clearinventory-success-other: "Hai svuotato l'inventario di &f%player%." -command-compact-success-all: "&7Hai appena convertito tutti i tuoi oggetti." -command-fly-add: "Hai appena aggiunto %time% di tempo di volo a &f%player%." -command-fly-enable-seconds: "&7Modalità volo attivata &7per &f%player%. &8(&7tempo rimanente %time%&8)" +command-clearinventory-success-other: "Hai svuotato l'inventario di %player%." +command-compact-success-all: "Hai appena convertito tutti i tuoi oggetti." +command-fly-add: "Hai appena aggiunto %time% di tempo di volo a %player%." +command-fly-enable-seconds: "Modalità volo attivata per %player%. (tempo rimanente %time%)" command-fly-end: "Hai esaurito tutto il tuo tempo di volo, non puoi più volare." command-fly-error: "Non hai più tempo di volo disponibile." command-fly-error-other: "%player% non ha più tempo di volo disponibile." command-fly-error-world: "Non puoi volare in questo mondo." -command-fly-get: "%player%&8: &f%player%." -command-fly-info: "Hai &f%time%." +command-fly-get: "%player%: %player%." +command-fly-info: "Hai %time%." command-fly-info-empty: "Non hai tempo di volo disponibile." -command-fly-remaining: "Hai ancora &f%time% di tempo di volo." -command-fly-remove: "Hai appena rimosso %time% di tempo di volo a &f%player%." -command-fly-set: "Hai appena impostato %time% di tempo di volo a &f%player%." -command-freeze-success: "&7Hai appena congelato il giocatore &f%player%&7." +command-fly-remaining: "Hai ancora %time% di tempo di volo." +command-fly-remove: "Hai appena rimosso %time% di tempo di volo a %player%." +command-fly-set: "Hai appena impostato %time% di tempo di volo a %player%." +command-freeze-success: "Hai appena congelato il giocatore %player%." command-home-admin-list-empty: "Il giocatore non ha alcuna home." command-home-error-teleport: "Impossibile trovare la posizione per il teletrasporto, elimina la tua home." -command-kit-delete-error: "Impossibile eliminare il kit &f%kit%." -command-kit-give: "Hai appena dato il kit &f%kit% a %player%." -command-kit-no-permission: "Non hai il permesso di usare il kit &f%kit%." +command-kit-delete-error: "Impossibile eliminare il kit %kit%." +command-kit-give: "Hai appena dato il kit %kit% a %player%." +command-kit-no-permission: "Non hai il permesso di usare il kit %kit%." command-link-account-already-linked: "Sei già collegato a un account." command-link-account-disabled: "Non puoi collegare il tuo account in questo momento." command-link-account-invalid-code: "Codice non valido." command-link-account-not-linked: "Non sei collegato a nessun account." command-link-account-reset: "Hai appena reimpostato il collegamento dell'account." -command-link-account-success: "Hai appena collegato il tuo account %discord%." +command-link-account-success: "Hai appena collegato il tuo account %discord%." command-pay-disabled: "Non puoi inviare denaro a questo giocatore." command-pub: - message: "&8[&fPUB&8] %player%: %message%" + message: "[PUB] %player%: %message%" type: WITHOUT_PREFIX command-pub-pattern-error: "Il tuo messaggio contiene caratteri vietati." -command-random-tp-configuration-not-found: "Impossibile trovare la configurazione del TP casuale per il mondo &f%world%." +command-random-tp-configuration-not-found: "Impossibile trovare la configurazione del TP casuale per il mondo %world%." command-set-home-world: "Non puoi creare una home qui" command-spawn-first-not-define: "Il primo spawn non esiste. Contatta un amministratore." command-spawn-location-invalid: "Lo spawn è invalido, contatta un amministratore" -command-tp-all: "&fHai appena teletrasportato tutti i giocatori da te." -command-tp-location: "&fTi sei teletrasportato a #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." +command-tp-all: "Hai appena teletrasportato tutti i giocatori da te." +command-tp-location: "Ti sei teletrasportato a %x%, %y%, %z%." command-tp-location-error: "Le coordinate sono fuori dal mondo." -command-tp-location-other: "&fHai teletrasportato #34cfe0%player% &fa #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tpa-here-accept-receiver: "#99E0FFHai appena #00FF00accettato #99E0FFla richiesta di teletrasporto di #99E0FF%player%." -command-tpa-here-accept-sender: "#99E0FF%player% ha appena accettato la tua richiesta di teletrasporto." -command-tpa-here-error: "Hai già inviato una richiesta a #99E0FF%player%." +command-tp-location-other: "Hai teletrasportato %player% a %x%, %y%, %z%." +command-tpa-here-accept-receiver: "Hai appena accettato la richiesta di teletrasporto di %player%." +command-tpa-here-accept-sender: "%player% ha appena accettato la tua richiesta di teletrasporto." +command-tpa-here-error: "Hai già inviato una richiesta a %player%." command-tpa-here-error-same: "Non puoi teletrasportarti a te stesso." -command-un-freeze_success: "&7Hai appena scongelato il giocatore &f%player%&7." -command-vault-info: "Info cassaforte per &f%player%: max &7%max%, permesso &7%permissionSlots%, plugin &7%pluginSlots%, usati &7%used%, liberi &7%available%." -command-warp-invalid: "Il warp &f%name% ha una posizione non valida." +command-un-freeze_success: "Hai appena scongelato il giocatore %player%." +command-vault-info: "Info cassaforte per %player%: max %max%, permesso %permissionSlots%, plugin %pluginSlots%, usati %used%, liberi %available%." +command-warp-invalid: "Il warp %name% ha una posizione non valida." command-worldedit-cancel: "Hai appena annullato la selezione attuale." console: "Console" description-clear-random-word: "Cancella parole casuali" @@ -999,133 +999,133 @@ description-tpa-here: "Teletrasporta un giocatore da te" description-vault-info: "Mostra informazioni sulla cassaforte di un giocatore" description-vault-show: "Mostra la cassaforte di un giocatore" description-worldedit-cancel: "Annulla la selezione attuale" -experience-granted: "Hai appena dato %amount% %type% a %player%." -experience-queried: "%player% ha %amount% %type%." -experience-setted: "Hai appena impostato %amount% %type% a %player%." -experience-taken: "Hai appena tolto %amount% %type% a %player%." +experience-granted: "Hai appena dato %amount% %type% a %player%." +experience-queried: "%player% ha %amount% %type%." +experience-setted: "Hai appena impostato %amount% %type% a %player%." +experience-taken: "Hai appena tolto %amount% %type% a %player%." expired: "Scaduto" -mailbox-clear: "Hai appena svuotato la cassetta della posta di &f%player%." +mailbox-clear: "Hai appena svuotato la cassetta della posta di %player%." -mailbox-message-send: "Il tuo messaggio è stato inviato a &f%player%." -mailbox-message-receive: "&f%player% ti ha inviato un messaggio &8(&f/mail read&8)" -mailbox-message-send-all: "Il tuo messaggio è stato inviato a &f%amount% giocatore/i." -mailbox-message-notify: "Hai &f%amount% messaggio/i non letto/i, usa &f/mail read." +mailbox-message-send: "Il tuo messaggio è stato inviato a %player%." +mailbox-message-receive: "%player% ti ha inviato un messaggio (/mail read)" +mailbox-message-send-all: "Il tuo messaggio è stato inviato a %amount% giocatore/i." +mailbox-message-notify: "Hai %amount% messaggio/i non letto/i, usa Clicca per leggere i tuoi messaggi'>/mail read." mailbox-message-empty: "Non hai nessun messaggio." mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "I tuoi messaggi (&f%amount%)" + - "I tuoi messaggi (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Usa &f/mail clearmessages per eliminarli." + - "Usa Clicca per eliminare i tuoi messaggi'>/mail clearmessages per eliminarli." - "" -mailbox-message-clear: "Hai appena eliminato i messaggi di &f%player%." +mailbox-message-clear: "Hai appena eliminato i messaggi di %player%." mailbox-message-self: "Non puoi inviare un messaggio a te stesso." mailbox-message-mute: "Non puoi inviare un messaggio mentre sei mutato." -mailbox-message-ignore: "&f%player% non vuole ricevere i tuoi messaggi." -mailbox-message-full: "La cassetta della posta di &f%player% è piena." -mailbox-message-too-long: "Il tuo messaggio non può superare i &f%max% caratteri." +mailbox-message-ignore: "%player% non vuole ricevere i tuoi messaggi." +mailbox-message-full: "La cassetta della posta di %player% è piena." +mailbox-message-too-long: "Il tuo messaggio non può superare i %max% caratteri." random-word-clear: "La parola casuale è stata cancellata." -step-already-exist: "Lo step &f%step% è già iniziato." -step-doesnt-exist: "Lo step &f%step% non esiste." -step-doesnt-started: "Lo step &f%step% non è stato avviato." +step-already-exist: "Lo step %step% è già iniziato." +step-doesnt-exist: "Lo step %step% non esiste." +step-doesnt-started: "Lo step %step% non è stato avviato." # Enderchest -command-endersee-error: "Impossibile caricare l'ender chest di &f%player%." +command-endersee-error: "Impossibile caricare l'ender chest di %player%." # TPA -command-tpa-error-no-request-from-player: "Non hai una richiesta di teletrasporto da &f%player%." -command-tpa-accept-all-success: "Hai accettato &f%count% richiesta/e di teletrasporto." -command-tpa-deny-all-success: "Hai rifiutato &f%count% richiesta/e di teletrasporto." +command-tpa-error-no-request-from-player: "Non hai una richiesta di teletrasporto da %player%." +command-tpa-accept-all-success: "Hai accettato %count% richiesta/e di teletrasporto." +command-tpa-deny-all-success: "Hai rifiutato %count% richiesta/e di teletrasporto." description-tp-toggle: "Attiva/disattiva le richieste di teletrasporto" -command-teleport-request-disabled: "Il giocatore &f%player% ha disattivato le richieste di teletrasporto." -command-tp-toggle-enable: "&7Richieste di teletrasporto abilitate &7per &f%player%." -command-tp-toggle-disable: "&7Richieste di teletrasporto disabilitate &7per &f%player%." +command-teleport-request-disabled: "Il giocatore %player% ha disattivato le richieste di teletrasporto." +command-tp-toggle-enable: "Richieste di teletrasporto abilitate per %player%." +command-tp-toggle-disable: "Richieste di teletrasporto disabilitate per %player%." description-tpa-here-toggle: "Attiva/disattiva le richieste tpahere" -command-teleport-here-request-disabled: "Il giocatore &f%player% ha disattivato le richieste tpahere." -command-tpa-here-toggle-enable: "&7Richieste tpahere abilitate &7per &f%player%." -command-tpa-here-toggle-disable: "&7Richieste tpahere disabilitate &7per &f%player%." +command-teleport-here-request-disabled: "Il giocatore %player% ha disattivato le richieste tpahere." +command-tpa-here-toggle-enable: "Richieste tpahere abilitate per %player%." +command-tpa-here-toggle-disable: "Richieste tpahere disabilitate per %player%." # Teletrasporto cross-server teleport-cross-server-not-supported: "Il teletrasporto cross-server non è supportato su questo server." -teleport-cross-server-connecting: "Connessione al server &f%server%..." -teleport-cross-server-player-not-found: "Il giocatore &f%player% non è stato trovato su nessun server." +teleport-cross-server-connecting: "Connessione al server %server%..." +teleport-cross-server-player-not-found: "Il giocatore %player% non è stato trovato su nessun server." # ItemFrame description-itemframe: "Attiva/disattiva visibilità cornice" -command-itemframe-invisible: "La cornice ora è invisibile." -command-itemframe-visible: "La cornice ora è visibile." +command-itemframe-invisible: "La cornice ora è invisibile." +command-itemframe-visible: "La cornice ora è visibile." command-itemframe-not-found: "Nessuna cornice trovata. Guarda una cornice e riprova." # Modulo messaggi di morte description-death-message: "Messaggi di morte personalizzati" description-death-message-toggle: "Attiva/disattiva visibilità messaggi di morte" -command-death-message-toggle-disable: "#C084FC☠ #B794F4I messaggi di morte sono ora #E9D5FFnascosti #B794F4per %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4I messaggi di morte sono ora #E9D5FFvisibili #B794F4per %player%#B794F4." +command-death-message-toggle-disable: "☠ I messaggi di morte sono ora nascosti per %player%." +command-death-message-toggle-enable: "☠ I messaggi di morte sono ora visibili per %player%." # Messaggi di morte (dettagliati) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4è morto." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4è stato ucciso da #E9D5FF%killer%#B794F4." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4è stato ucciso da #E9D5FF%killer%#B794F4." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4è stato colpito da #E9D5FF%killer%#B794F4." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4è stato fatto esplodere da #E9D5FF%killer%#B794F4." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4è caduto da un luogo alto." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4è bruciato vivo." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4ha cercato di nuotare nella lava." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4è annegato." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4è esploso." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4è stato colpito da un fulmine." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4è soffocato in un muro." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4è morto di fame." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4è stato avvelenato." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4è stato ucciso dalla magia." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4è appassito." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4è stato schiacciato da un blocco." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4ha sperimentato l'energia cinetica." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4è caduto fuori dal mondo." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4è stato punto a morte." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4è stato schiacciato." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4è morto congelato." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4è stato obliterato da un boom sonico." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4ha scoperto che il pavimento era lava." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4è stato ucciso cercando di ferire qualcuno." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4è entrato in un falò." -death-hover-details: "#D8B4FE☠ Luogo di morte#B794F4:\n#E9D5FF▸ Mondo: #D8B4FE%world%\n#E9D5FF▸ Posizione: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oClicca per teletrasportarti" +death-generic: "☠ %player% è morto." +death-by-player: "⚔ %player% è stato ucciso da %killer%." +death-by-mob: "☠ %player% è stato ucciso da %killer%." +death-by-projectile: "🏹 %player% è stato colpito da %killer%." +death-by-mob-explosion: "💥 %player% è stato fatto esplodere da %killer%." +death-by-fall: "⬇ %player% è caduto da un luogo alto." +death-by-fire: "🔥 %player% è bruciato vivo." +death-by-lava: "🌋 %player% ha cercato di nuotare nella lava." +death-by-drowning: "💧 %player% è annegato." +death-by-explosion: "💥 %player% è esploso." +death-by-lightning: "⚡ %player% è stato colpito da un fulmine." +death-by-suffocation: "▓ %player% è soffocato in un muro." +death-by-starvation: "🍖 %player% è morto di fame." +death-by-poison: "☣ %player% è stato avvelenato." +death-by-magic: "✦ %player% è stato ucciso dalla magia." +death-by-wither: "💀 %player% è appassito." +death-by-falling-block: "▼ %player% è stato schiacciato da un blocco." +death-by-fly-into-wall: "💨 %player% ha sperimentato l'energia cinetica." +death-by-void: "✧ %player% è caduto fuori dal mondo." +death-by-cactus: "🌵 %player% è stato punto a morte." +death-by-cramming: "⊞ %player% è stato schiacciato." +death-by-freeze: "❄ %player% è morto congelato." +death-by-sonic-boom: "◈ %player% è stato obliterato da un boom sonico." +death-by-magma: "♨ %player% ha scoperto che il pavimento era lava." +death-by-thorns: "✵ %player% è stato ucciso cercando di ferire qualcuno." +death-by-campfire: "🔥 %player% è entrato in un falò." +death-hover-details: "☠ Luogo di morte:\n▸ Mondo: %world%\n▸ Posizione: %x%, %y%, %z%\n\nClicca per teletrasportarti" # Messaggi di morte (fallback quando non c'è configurazione personalizzata) -death-message-generic: "#99E0FF%player% &7è morto." -death-message-player: "#99E0FF%player% &7è stato ucciso da #34cfe0%killer% &7con %weapon%&7." -death-message-mob: "#99E0FF%player% &7è stato ucciso da &c%mob%&7." -death-message-mythic-mob: "#99E0FF%player% &7è stato ucciso da %mob%&7!" -death-message-fists: "&7pugni" - -teleport-message-spawn-console: "Hai appena teletrasportato il giocatore %player% allo spawn." -teleport-random-start: "&7Ricerca di una destinazione... non devi muoverti." +death-message-generic: "%player% è morto." +death-message-player: "%player% è stato ucciso da %killer% con %weapon%." +death-message-mob: "%player% è stato ucciso da %mob%." +death-message-mythic-mob: "%player% è stato ucciso da %mob%!" +death-message-fists: "pugni" + +teleport-message-spawn-console: "Hai appena teletrasportato il giocatore %player% allo spawn." +teleport-random-start: "Ricerca di una destinazione... non devi muoverti." worldedit-permission-error: "Non puoi usare worldedit qui." # Ignora, suono del ping & teletrasporto a un altro giocatore -command-tp-other: "&7Hai appena teletrasportato #34cfe0%player% &7a #34cfe0%target%&7." +command-tp-other: "Hai appena teletrasportato %player% a %target%." description-ping-sound: "Abilita/disabilita il suono del ping in chat" -command-ping-sound-enable: "&7Suono del ping in chat abilitato &7per &f%player%." -command-ping-sound-disable: "&7Suono del ping in chat disabilitato &7per &f%player%." +command-ping-sound-enable: "Suono del ping in chat abilitato per %player%." +command-ping-sound-disable: "Suono del ping in chat disabilitato per %player%." description-ignore: "Ignora un giocatore, bloccando i suoi messaggi privati e le richieste di teletrasporto" description-unignore: "Smetti di ignorare un giocatore" description-ignore-list: "Elenca i giocatori che stai ignorando" -command-ignore-add: "Ora stai ignorando &f%player%. Non riceverai più i suoi messaggi privati né le sue richieste di teletrasporto." -command-ignore-remove: "Non stai più ignorando &f%player%." -command-ignore-already: "Stai già ignorando &f%player%." -command-ignore-not: "Non stai ignorando &f%player%." +command-ignore-add: "Ora stai ignorando %player%. Non riceverai più i suoi messaggi privati né le sue richieste di teletrasporto." +command-ignore-remove: "Non stai più ignorando %player%." +command-ignore-already: "Stai già ignorando %player%." +command-ignore-not: "Non stai ignorando %player%." command-ignore-self: "Non puoi ignorare te stesso." command-ignore-list-empty: "Non stai ignorando nessuno." -command-ignore-list-header: "Stai ignorando &f%count% giocatore/i:" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "Non puoi mandare un messaggio a #34cfe0%player% ti ignorano." +command-ignore-list-header: "Stai ignorando %count% giocatore/i:" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "Non puoi mandare un messaggio a %player% ti ignorano." description-del-home-other: "Elimina la casa di un altro giocatore" # Sistema di case (pubbliche, condivise, categorie, preferiti, anteprima, importazione) @@ -1138,29 +1138,29 @@ description-home-category: "Imposta la categoria di una casa" description-home-favorite: "Attiva o disattiva una casa come preferita" description-home-import: "Importa case da un altro plugin" command-home-feature-disabled: "Questa funzione delle case è disabilitata su questo server." -command-home-public-enable: "La tua casa &f%name% è ora pubblica." -command-home-public-disable: "La tua casa &f%name% non è più pubblica." -command-home-public-limit: "Hai raggiunto il numero massimo di case pubbliche (&f%max%)." -command-home-not-accessible: "La casa &f%name% di &f%player% non ti è accessibile." -command-public-homes-header: "Case pubbliche (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Teletrasporta]" +command-home-public-enable: "La tua casa %name% è ora pubblica." +command-home-public-disable: "La tua casa %name% non è più pubblica." +command-home-public-limit: "Hai raggiunto il numero massimo di case pubbliche (%max%)." +command-home-not-accessible: "La casa %name% di %player% non ti è accessibile." +command-public-homes-header: "Case pubbliche (%count%):" +command-public-homes-line: "- %player%:%name% Teletrasportati a questa casa'>[Teletrasporta]" command-public-homes-empty: "Non c'è nessuna casa pubblica." -command-home-share-add: "Hai condiviso la tua casa &f%name% con &f%player%." -command-home-share-remove: "Hai smesso di condividere la tua casa &f%name% con &f%player%." -command-home-share-already: "La tua casa &f%name% è già condivisa con &f%player%." -command-home-share-not: "La tua casa &f%name% non è condivisa con &f%player%." +command-home-share-add: "Hai condiviso la tua casa %name% con %player%." +command-home-share-remove: "Hai smesso di condividere la tua casa %name% con %player%." +command-home-share-already: "La tua casa %name% è già condivisa con %player%." +command-home-share-not: "La tua casa %name% non è condivisa con %player%." command-home-share-self: "Non puoi condividere una casa con te stesso." -command-home-share-limit: "Hai raggiunto il numero massimo di condivisioni per questa casa (&f%max%)." -command-home-share-list-header: "La casa &f%name% è condivisa con &f%count% giocatore/i:" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "La casa &f%name% non è condivisa con nessuno." -command-home-category-set: "La categoria della tua casa &f%name% è ora &f%category%." -command-home-category-reset: "La categoria della tua casa &f%name% è stata rimossa." +command-home-share-limit: "Hai raggiunto il numero massimo di condivisioni per questa casa (%max%)." +command-home-share-list-header: "La casa %name% è condivisa con %count% giocatore/i:" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "La casa %name% non è condivisa con nessuno." +command-home-category-set: "La categoria della tua casa %name% è ora %category%." +command-home-category-reset: "La categoria della tua casa %name% è stata rimossa." command-home-category-invalid: "Nome della categoria non valido." -command-home-favorite-add: "La tua casa &f%name% è ora tra i preferiti." -command-home-favorite-remove: "La tua casa &f%name% non è più tra i preferiti." -command-home-preview: "&7Casa &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teletrasporta]" -command-home-import-start: "Importazione delle case da &f%source%..." -command-home-import-done: "Importazione completata: &f%imported% importate, &f%skipped% saltate, &f%errors% errori." -command-home-import-unknown: "Fonte di importazione sconosciuta &f%source%. Disponibili: essentialsx." +command-home-favorite-add: "La tua casa %name% è ora tra i preferiti." +command-home-favorite-remove: "La tua casa %name% non è più tra i preferiti." +command-home-preview: "Casa %name% - %world% (%x%, %y%, %z%) [Teletrasporta]" +command-home-import-start: "Importazione delle case da %source%..." +command-home-import-done: "Importazione completata: %imported% importate, %skipped% saltate, %errors% errori." +command-home-import-unknown: "Fonte di importazione sconosciuta %source%. Disponibili: essentialsx." command-home-import-error: "Si è verificato un errore durante l'importazione, controlla la console." diff --git a/src/main/resources/messages/messages_nl.yml b/src/main/resources/messages/messages_nl.yml index 1a9fcf85..989f2e09 100644 --- a/src/main/resources/messages/messages_nl.yml +++ b/src/main/resources/messages/messages_nl.yml @@ -19,181 +19,181 @@ prefix: "zEssentials • " you: "jezelf" -trash: "&8Vuilnis" +trash: "Vuilnis" console: "Console" expired: "Verlopen" -player-not-found: "&f%player% was niet gevonden." -module-disable: "The &f%name% module is uitgeschakeld. Je kan dit commando niet gebruiken." -code-not-found: "Kan code niet vinden." +player-not-found: "%player% was niet gevonden." +module-disable: "The %name% module is uitgeschakeld. Je kan dit commando niet gebruiken." +code-not-found: "Kan code niet vinden." rules: - - "#ffd353ℹ sᴇʀᴠᴇʀʀᴇɢᴇʟs#3f3f3f:" - - "#3f3f3f• &7Respecteer alle spelers en staff." - - "#3f3f3f• &7Niets verwoesten of stelen." - - "#3f3f3f• &7Niet valsspelen of hacken." - - "#3f3f3f• &7Houd de chat net en respectvol." - - "#3f3f3f• &7Geen spam of advertenties." + - "ℹ sᴇʀᴠᴇʀʀᴇɢᴇʟs:" + - "• Respecteer alle spelers en staff." + - "• Niets verwoesten of stelen." + - "• Niet valsspelen of hacken." + - "• Houd de chat net en respectvol." + - "• Geen spam of advertenties." # commando's -command-syntax-error: "Je moet het commando als volgt uitvoeren#656665: &f%syntax%" +command-syntax-error: "Je moet het commando als volgt uitvoeren: %syntax%" command-no-permission: "Je hebt geen toestemming om dit commando uit te voeren." command-no-console: "Alleen een speler kan dit commando uitvoeren." command-no-arg: "Onmogelijk om het commando te vinden met deze argumenten." command-restricted: "Je kunt deze opdracht hier niet gebruiken." -command-syntaxe-help: "&f%syntax% #656665» &7%description%" +command-syntaxe-help: "%syntax% » %description%" command-reload: "Je hebt zojuist de configuratiebestanden herladen." -command-reload-module: "Je hebt zojuist de configuratiebestanden van de module &f%module% herladen." -command-reload-error: "&f%module% werd niet gevonden!" -command-essentials: "&ezEssentials&8, &eVersie &f%version%" +command-reload-module: "Je hebt zojuist de configuratiebestanden van de module %module% herladen." +command-reload-error: "%module% werd niet gevonden!" +command-essentials: "zEssentials, Versie %version%" # Gamemodus commando's -command-gamemode: "&fSpelmodus ingesteld op&e %gamemode%&f voor &b%player%&f." +command-gamemode: "Spelmodus ingesteld op %gamemode% voor %player%." command-gamemode-invalid: "Je moet een geldige speler specificeren." # Weer commando's command-time-error: "Je moet een wereld opgeven." -command-time-already-changing: "De tijd verandert al in &f%world%." -command-day: "&fJe hebt zojuist &edaglicht&f gebracht in de wereld %world%&f." -command-night: "&fJe hebt zojuist &enacht&f gebracht in de wereld %world%&f." -command-sun: "&fJe hebt zojuist de &ezon&f gebracht in de wereld %world%&f." +command-time-already-changing: "De tijd verandert al in %world%." +command-day: "Je hebt zojuist daglicht gebracht in de wereld %world%." +command-night: "Je hebt zojuist nacht gebracht in de wereld %world%." +command-sun: "Je hebt zojuist de zon gebracht in de wereld %world%." # Beheer commando's -command-top: "&7Je bent zojuist naar de &etop&7 geteleporteerd." +command-top: "Je bent zojuist naar de top geteleporteerd." command-top-error: "Kan geen veilige positie vinden om je naartoe te transporteren." command-speed-invalid: "Je moet een geldige speler specificeren." -command-speed-fly: "&7Je hebt zojuist je &nvluchtsnelheid&r&7 ingesteld op &f%speed%&7 voor &f%player%&7. &8(&f2 &7standaard&8)" -command-speed-walk: "&7Je hebt zojuist je &nloopsnelheid&r&7 ingesteld op &f%speed%&7 voor &f%player%&7. &8(&f2 &7standaard&8)" -command-speed-error: "Je moet een getal tussen &60 en &610 invoeren. &8(&f2 &7standaard&8)" -command-god-enable: "&7God modus ingeschakeld &7voor &f%player%." -command-god-disable: "&7God modus uitgeschakeld &7voor &f%player%." -command-vanish-enable: "&7Vanish ingeschakeld &7voor &f%player%." -command-vanish-disable: "&7Vanish uitgeschakeld &7voor &f%player%." -command-night-vision-enable: "&7Night vision ingeschakeld &7voor &f%player%." -command-night-vision-disable: "&7Night vision uitgeschakeld &7voor &f%player%." -command-phantoms-enable: "&7Phantom-spawn ingeschakeld &7voor &f%player%." -command-phantoms-disable: "&7Phantom-spawn uitgeschakeld &7voor &f%player%." -command-ext-sender: "&7Je hebt de speler &f%player%&7 geblust." +command-speed-fly: "Je hebt zojuist je vluchtsnelheid ingesteld op %speed% voor %player%. (2 standaard)" +command-speed-walk: "Je hebt zojuist je loopsnelheid ingesteld op %speed% voor %player%. (2 standaard)" +command-speed-error: "Je moet een getal tussen 0 en 10 invoeren. (2 standaard)" +command-god-enable: "God modus ingeschakeld voor %player%." +command-god-disable: "God modus uitgeschakeld voor %player%." +command-vanish-enable: "Vanish ingeschakeld voor %player%." +command-vanish-disable: "Vanish uitgeschakeld voor %player%." +command-night-vision-enable: "Night vision ingeschakeld voor %player%." +command-night-vision-disable: "Night vision uitgeschakeld voor %player%." +command-phantoms-enable: "Phantom-spawn ingeschakeld voor %player%." +command-phantoms-disable: "Phantom-spawn uitgeschakeld voor %player%." +command-ext-sender: "Je hebt de speler %player% geblust." command-ext-receiver: "Je staat niet meer in brand." command-ext-error: "Je kunt geen dode speler blussen!" -command-heal-all: "&7Je hebt alle spelers op de server genezen." -command-heal-sender: "&7Je hebt zojuist de speler &f%player%&7 genezen." +command-heal-all: "Je hebt alle spelers op de server genezen." +command-heal-sender: "Je hebt zojuist de speler %player% genezen." command-heal-receiver: "Je bent genezen." command-heal-error: "Je kunt iemand die dood is niet genezen!" -command-lighting-all: "&7Je hebt zojuist alle spelers met bliksem getroffen." -command-lighting: "&7Je hebt zojuist bliksem op de geselecteerde locatie opgeroepen." -command-lighting-sender: "&7Je hebt zojuist bliksem op de locatie van &f%player%&7 opgeroepen." -command-lighting-receiver: "&cJe bent door de bliksem getroffen." +command-lighting-all: "Je hebt zojuist alle spelers met bliksem getroffen." +command-lighting: "Je hebt zojuist bliksem op de geselecteerde locatie opgeroepen." +command-lighting-sender: "Je hebt zojuist bliksem op de locatie van %player% opgeroepen." +command-lighting-receiver: "Je bent door de bliksem getroffen." command-lighting-error: "Je kunt een dode speler niet met bliksem treffen!" command-more-error: "Je kunt dit commando niet uitvoeren zonder een item in de hand." -command-more-success: "&7Je hebt je item zojuist op &f64&7 gezet." -command-feed-all: "&7Je hebt alle spelers op de server gevoed." -command-feed-sender: "&7Je hebt zojuist de speler &f%player%&7 gevoed." +command-more-success: "Je hebt je item zojuist op 64 gezet." +command-feed-all: "Je hebt alle spelers op de server gevoed." +command-feed-sender: "Je hebt zojuist de speler %player% gevoed." command-feed-receiver: "Je bent gevoed." command-feed-error: "Je kunt iemand die dood is niet voeden!" -command-afk-enable: "&7Je bent nu gemarkeerd als AFK&7." +command-afk-enable: "Je bent nu gemarkeerd als AFK." command-afk-disable: "Je bent niet langer gemarkeerd als AFK." -command-message-target-afk: "&f%player% &7is momenteel AFK&7." -command-compact-type: "Het is onmogelijk om het materiaal &f%material% samen te persen." -command-compact-error: "Je hebt geen &f%item% in je inventaris." -command-compact-success: "&7Je hebt zojuist #0EEA93x%amount% #99E0FF%item% &7omgezet in #0EEA93x%toAmount% #99E0FF%toItem%&7." -command-compact-success-all: "&7Je hebt zojuist al je items omgezet." -command-hat-success: "&7Je hebt zojuist #0ef0ce%item% &7op je hoofd gezet." +command-message-target-afk: "%player% is momenteel AFK." +command-compact-type: "Het is onmogelijk om het materiaal %material% samen te persen." +command-compact-error: "Je hebt geen %item% in je inventaris." +command-compact-success: "Je hebt zojuist x%amount% %item% omgezet in x%toAmount% %toItem%." +command-compact-success-all: "Je hebt zojuist al je items omgezet." +command-hat-success: "Je hebt zojuist %item% op je hoofd gezet." command-hat-error: "Je kunt geen lucht op je hoofd zetten." -command-player-weather-reset: "&7Je hebt zojuist het weer veranderd naar dat van de server." -command-player-weather-downfall: "&7Je hebt zojuist regen voor jezelf ingeschakeld." -command-player-time-reset: "&7Je hebt zojuist de tijd veranderd naar die van de server." -command-player-time-change: "&7Je hebt zojuist je tijd aangepast." -command-lag-world-line: "&a%world%&7: &a%peaceful% vreedzame&7, &c%monsters% monsters&7, &e%items% items" -command-lag-world-header: "&aEntiteiten voor wereld &2%world%&a:" -command-lag-world-entry: "&7- &a%type%&7: &f%amount%" -command-lag-clear-success: "&7Verwijderd &a%amount% &7entiteiten in &a%world%&7." -command-lag-clear-countdown: "&cEntiteiten worden verwijderd over &e%time% &cseconden!" -command-fly-enable: "&7Vliegmodus ingeschakeld &7voor &f%player%." -command-fly-disable: "&7Vliegmodus uitgeschakeld &7voor &f%player%." +command-player-weather-reset: "Je hebt zojuist het weer veranderd naar dat van de server." +command-player-weather-downfall: "Je hebt zojuist regen voor jezelf ingeschakeld." +command-player-time-reset: "Je hebt zojuist de tijd veranderd naar die van de server." +command-player-time-change: "Je hebt zojuist je tijd aangepast." +command-lag-world-line: "%world%: %peaceful% vreedzame, %monsters% monsters, %items% items" +command-lag-world-header: "Entiteiten voor wereld %world%:" +command-lag-world-entry: "- %type%: %amount%" +command-lag-clear-success: "Verwijderd %amount% entiteiten in %world%." +command-lag-clear-countdown: "Entiteiten worden verwijderd over %time% seconden!" +command-fly-enable: "Vliegmodus ingeschakeld voor %player%." +command-fly-disable: "Vliegmodus uitgeschakeld voor %player%." command-fly-error-world: "Je kunt niet vliegen in deze wereld." -command-fly-enable-seconds: "&7Vliegmodus ingeschakeld &7voor &f%player%. &8(&7resterende tijd %time%&8)" +command-fly-enable-seconds: "Vliegmodus ingeschakeld voor %player%. (resterende tijd %time%)" command-fly-error: "Je hebt geen vliegtijd meer beschikbaar." command-fly-end: "Je hebt al je vliegtijd verbruikt, je kunt niet meer vliegen." command-fly-error-other: "%player% heeft geen vliegtijd meer beschikbaar." -command-fly-add: "Je hebt zojuist %time% vliegtijd toegevoegd aan &f%player%." -command-fly-get: "%player%&8: &f%time%." +command-fly-add: "Je hebt zojuist %time% vliegtijd toegevoegd aan %player%." +command-fly-get: "%player%: %time%." command-fly-info-empty: "Je hebt geen vliegtijd beschikbaar." -command-fly-info: "Je hebt &f%time%." -command-fly-remove: "Je hebt zojuist %time% vliegtijd verwijderd van &f%player%." -command-fly-set: "Je hebt zojuist %time% vliegtijd ingesteld voor &f%player%." -command-fly-remaining: "Je hebt nog &f%time% vliegtijd over." -command-furnace-type: "Het is onmogelijk om het materiaal &f%material% te smelten." -command-furnace-error: "Je hebt geen &f%item% in je inventaris." -command-furnace-success: "&7Je hebt zojuist #0EEA93x%amount% #34cfe0%item% &7omgezet in #0EEA93x%toAmount% #34cfe0%toItem%&7." -command-skull: "Je hebt zojuist het hoofd van de speler &f%name% gekregen." +command-fly-info: "Je hebt %time%." +command-fly-remove: "Je hebt zojuist %time% vliegtijd verwijderd van %player%." +command-fly-set: "Je hebt zojuist %time% vliegtijd ingesteld voor %player%." +command-fly-remaining: "Je hebt nog %time% vliegtijd over." +command-furnace-type: "Het is onmogelijk om het materiaal %material% te smelten." +command-furnace-error: "Je hebt geen %item% in je inventaris." +command-furnace-success: "Je hebt zojuist x%amount% %item% omgezet in x%toAmount% %toItem%." +command-skull: "Je hebt zojuist het hoofd van de speler %name% gekregen." command-repair-error: "Het item in je hand kan niet gerepareerd worden." command-repair-success: "Je hebt zojuist het item in je hand gerepareerd." command-repair-all-error: "Je hebt geen items om te repareren." command-repair-all-success: "Je hebt zojuist alle items in je inventaris gerepareerd." command-near-empty: "Er is geen speler in de buurt van jou." -command-near-player: "&fSpelers in de buurt van jou&7:%players%" -command-near-info: "&6%direction% &7%player% &8(&e%distance%m&8)" +command-near-player: "Spelers in de buurt van jou:%players%" +command-near-info: "%direction% %player% (%distance%m)" command-play-time: - - "&7Totale Speeltijd&8: %playtime%" - - "&7Huidige Sessie&8: %playtime_session%" -command-bottom: "&7Je bent zojuist naar de &ebodem&7 geteleporteerd." + - "Totale Speeltijd: %playtime%" + - "Huidige Sessie: %playtime_session%" +command-bottom: "Je bent zojuist naar de bodem geteleporteerd." command-bottom-error: "Kan geen veilige positie vinden om je naartoe te transporteren." -command-remove: "&7Verwijderd %amount% &7entiteiten." +command-remove: "Verwijderd %amount% entiteiten." command-seen-offline: type: WITHOUT_PREFIX - message: "#99E0FFSpeler &f%player% #99E0FFis offline #99E0FFsinds &7%date%#99E0FF." + message: "Speler %player% is offline sinds %date%." command-seen-online: type: WITHOUT_PREFIX - message: "#99E0FFSpeler &f%player% #99E0FFis online #99E0FFsinds %date%#99E0FF." + message: "Speler %player% is online sinds %date%." command-seen-playtime: type: WITHOUT_PREFIX - message: "#99E0FFSpeeltijd&8: &f%playtime%" + message: "Speeltijd: %playtime%" command-seen-uuid: type: WITHOUT_PREFIX - message: "#99E0FFUUID&8: &f%uuid%" + message: "UUID: %uuid%" command-seen-ip: type: WITHOUT_PREFIX - message: "#99E0FFIP-adres&8:&f%ips%" -command-seen-address: " %ip%" -command-seen-ip-empty: "Kan geen spelers vinden met ip &f%ip%." -command-seen-ip-line: "#99E0FFSpelers met het ip &f%ip%&8:%players%" -command-seen-ip-info: " %name%" + message: "IP-adres:%ips%" +command-seen-address: " Toon spelers met hetzelfde adres'>%ip%" +command-seen-ip-empty: "Kan geen spelers vinden met ip %ip%." +command-seen-ip-line: "Spelers met het ip %ip%:%players%" +command-seen-ip-info: " Toon spelerinformatie'>%name%" command-seen-last-location: type: WITHOUT_PREFIX - message: "#99E0FFLaatste locatie&8: &f%world%, %x%, %y%, %z%" + message: "Laatste locatie: %world%, %x%, %y%, %z%" command-seen-first-join: type: WITHOUT_PREFIX - message: "#99E0FFEerste join&8:&f%created_at%" + message: "Eerste join:%created_at%" # Economie -command-economy-not-found: "Kan geen economie vinden met de naam &f%name%." -command-economy-reset-all-confirm: "Je staat op het punt alle saldi voor &f%economy% te resetten. Voer het commando opnieuw uit binnen &f%seconds% seconden om te bevestigen." -command-economy-reset-all-success: "#99E0FFJe hebt alle saldi voor &f%economy%#99E0FF gereset." -command-economy-give-all-sender: "#99E0FFJe hebt zojuist &f%economyFormat% #99E0FFgegeven aan de online spelers." -command-economy-give-sender: "#99E0FFJe hebt zojuist &f%economyFormat% #99E0FFgegeven aan de speler &7%player%#99E0FF." -command-economy-give-receiver: "#99E0FFJe hebt zojuist &f%economyFormat% ontvangen." -command-economy-set-sender: "#99E0FFJe hebt zojuist &f%economyFormat% #99E0FF ingesteld voor de speler &7%player%#99E0FF." -command-economy-set-receiver: "#99E0FFJe hebt zojuist &f%economyFormat% gewijzigd." -command-economy-take-sender: "#99E0FFJe hebt zojuist &f%economyFormat% #99E0FF afgenomen van de speler &7%player%#99E0FF." -command-economy-take-receiver: "#99E0FFJe hebt zojuist &f%economyFormat% verloren." -command-economy-show-empty: "&f%player% heeft geen geld." -command-economy-show-info: "&7- #99E0FF%economy% &f%amount%." +command-economy-not-found: "Kan geen economie vinden met de naam %name%." +command-economy-reset-all-confirm: "Je staat op het punt alle saldi voor %economy% te resetten. Voer het commando opnieuw uit binnen %seconds% seconden om te bevestigen." +command-economy-reset-all-success: "Je hebt alle saldi voor %economy% gereset." +command-economy-give-all-sender: "Je hebt zojuist %economyFormat% gegeven aan de online spelers." +command-economy-give-sender: "Je hebt zojuist %economyFormat% gegeven aan de speler %player%." +command-economy-give-receiver: "Je hebt zojuist %economyFormat% ontvangen." +command-economy-set-sender: "Je hebt zojuist %economyFormat% ingesteld voor de speler %player%." +command-economy-set-receiver: "Je hebt zojuist %economyFormat% gewijzigd." +command-economy-take-sender: "Je hebt zojuist %economyFormat% afgenomen van de speler %player%." +command-economy-take-receiver: "Je hebt zojuist %economyFormat% verloren." +command-economy-show-empty: "%player% heeft geen geld." +command-economy-show-info: "- %economy% %amount%." command-money: - - "#99E0FFJe hebt&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "Je hebt:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-money-other: - - "#99E0FF%player% heeft&8:" - - " &7- #99E0FF%economy-name-money% &f%economy-money%." - - " &7- #99E0FF%economy-name-coins% &f%economy-coins%." + - "%player% heeft:" + - " - %economy-name-money% %economy-money%." + - " - %economy-name-coins% %economy-coins%." command-pay-negative: "Het te betalen bedrag moet positief zijn." -command-pay-min: "Het minimale bedrag dat je kunt betalen is &f%amount%." -command-pay-max: "Het maximale bedrag dat je kunt betalen is &f%amount%." -command-pay-sender: "#99E0FFJe hebt zojuist #F8F327%amount%#99E0FF gestuurd naar de speler &f%player%#99E0FF." -command-pay-receiver: "&f%player% #99E0FFheeft je zojuist #F8F327%amount%#99E0FF gestuurd." +command-pay-min: "Het minimale bedrag dat je kunt betalen is %amount%." +command-pay-max: "Het maximale bedrag dat je kunt betalen is %amount%." +command-pay-sender: "Je hebt zojuist %amount% gestuurd naar de speler %player%." +command-pay-receiver: "%player% heeft je zojuist %amount% gestuurd." command-pay-disable: "Je kunt geen geld sturen naar %name%." command-pay-self: "Je kunt geen geld naar jezelf sturen." command-pay-not-enough: "Je hebt niet genoeg geld." @@ -201,83 +201,83 @@ command-pay-disabled: "Je kunt geen geld naar deze speler sturen." # Teleporteer commando's -command-tpa-error: "Je hebt al een verzoek gestuurd naar #99E0FF%player%." +command-tpa-error: "Je hebt al een verzoek gestuurd naar %player%." command-tpa-error-same: "Je kunt niet naar jezelf teleporteren." -command-tpa-here-error: "Je hebt al een verzoek gestuurd naar #99E0FF%player%." +command-tpa-here-error: "Je hebt al een verzoek gestuurd naar %player%." command-tpa-here-error-same: "Je kunt niet naar jezelf teleporteren." command-tpa-error-offline: "Kan speler niet vinden, mogelijk offline." command-tpa-error-to-late-empty: "Je hebt geen teleportverzoek." command-tpa-error-to-late-expire: "Het teleportverzoek is verlopen." command-tpa-sender: - - "#00FF00✔ #99E0FFVerzoek om teleportatie naar &f%displayName% #99E0FFgestuurd." - - " ✘ Annuleer teleportatie'>#99E0FFType #00FF00/tpacancel %player%#99E0FF om je verzoek te annuleren." + - "✔ Verzoek om teleportatie naar %displayName% gestuurd." + - " ✘ Annuleer teleportatie'>Type /tpacancel %player% om je verzoek te annuleren." command-tpa-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFheeft een verzoek om naar jou te teleporteren!" - - " #99E0FFType #00FF00/tpaccept #99E0FFom #00FF00te accepteren#99E0FF." - - " ✘ Weiger teleportatie'>#99E0FFType /tpdeny #99E0FFom te weigeren#99E0FF." + - "⚠ %displayName% heeft een verzoek om naar jou te teleporteren!" + - " ✔ Accepteer teleportatie'>Type /tpaccept om te accepteren." + - " ✘ Weiger teleportatie'>Type /tpdeny om te weigeren." - "" - - "&7&oJe hebt 60 seconden om het teleportverzoek te accepteren." + - "Je hebt 60 seconden om het teleportverzoek te accepteren." command-tpa-here-sender: - - "#00FF00✔ #99E0FFVerzoek gestuurd naar &f%displayName% #99E0FFom te teleporteren." - - " ✘ Teleportatie annuleren'>#99E0FFTyp #00FF00/tpacancel %player%#99E0FF om je verzoek te annuleren." + - "✔ Verzoek gestuurd naar %displayName% om te teleporteren." + - " ✘ Teleportatie annuleren'>Typ /tpacancel %player% om je verzoek te annuleren." command-tpa-here-receiver: - "" - - "#F8F327⚠ &f%displayName% #99E0FFverzoekt om jou naar hem te teleporteren!" - - " #99E0FFTyp #00FF00/tpaccept #99E0FFom #00FF00te accepteren#99E0FF." - - " ✘ Teleportatie weigeren'>#99E0FFTyp /tpdeny #99E0FFom te weigeren#99E0FF." + - "⚠ %displayName% verzoekt om jou naar hem te teleporteren!" + - " ✔ Teleportatie accepteren'>Typ /tpaccept om te accepteren." + - " ✘ Teleportatie weigeren'>Typ /tpdeny om te weigeren." - "" - - "&7&oJe hebt 60 seconden om het teleportverzoek te accepteren." -command-tpa-accept-receiver: "#99E0FFJe hebt zojuist #00FF00het verzoek om teleportatie van #99E0FF%player% geaccepteerd." -command-tpa-accept-sender: "#99E0FF%player% heeft zojuist je verzoek om teleportatie geaccepteerd." -command-tpa-here-accept-receiver: "#99E0FFJe hebt zojuist de #00FF00teleportverzoek #99E0FFvan #99E0FF%player% geaccepteerd." -command-tpa-here-accept-sender: "#99E0FF%player% heeft zojuist je teleportverzoek geaccepteerd." -command-teleport-ignore-player: "Je kunt geen teleportverzoek sturen naar #99E0FF%player% omdat ze je negeren." + - "Je hebt 60 seconden om het teleportverzoek te accepteren." +command-tpa-accept-receiver: "Je hebt zojuist het verzoek om teleportatie van %player% geaccepteerd." +command-tpa-accept-sender: "%player% heeft zojuist je verzoek om teleportatie geaccepteerd." +command-tpa-here-accept-receiver: "Je hebt zojuist de teleportverzoek van %player% geaccepteerd." +command-tpa-here-accept-sender: "%player% heeft zojuist je teleportverzoek geaccepteerd." +command-teleport-ignore-player: "Je kunt geen teleportverzoek sturen naar %player% omdat ze je negeren." command-teleport-world: "Je moet je in dezelfde wereld bevinden om te teleporteren." command-tpa-error-to-late: "Je hebt geen teleportverzoek." command-tpa-error-to-late-2: "Het verzoek is verlopen." -command-tp-deny-sender: "#00FF00✔ Verzoek tot teleportatie van &f%player% #00FF00geweigerd." -command-tp-deny-receiver: "✘ &f%player% heeft je teleportatieverzoek geweigerd." -command-tp-cancel-error: "Je hebt geen teleportatieverzoek gestuurd naar &f%player%." +command-tp-deny-sender: "✔ Verzoek tot teleportatie van %player% geweigerd." +command-tp-deny-receiver: "✘ %player% heeft je teleportatieverzoek geweigerd." +command-tp-cancel-error: "Je hebt geen teleportatieverzoek gestuurd naar %player%." command-tp-cancel-sender: "Je teleportverzoek naar %player% is geannuleerd." -command-tp-cancel-receiver: "&f%player% heeft hun teleportatieverzoek naar jou geannuleerd." -command-world-teleport-self: "Je bent zojuist geteleporteerd naar de wereld &f%world%." -command-world-teleport-other: "Je hebt de speler &f%player% geteleporteerd naar de wereld &f%world%." -command-random-tp-other: "Je hebt zojuist speler &f%player% willekeurig naar wereld &f%world% geteleporteerd." -command-tp: "&7Je bent zojuist geteleporteerd naar de speler #34cfe0%player%&f." -command-tp-location: "&7Je bent zojuist geteleporteerd naar #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." +command-tp-cancel-receiver: "%player% heeft hun teleportatieverzoek naar jou geannuleerd." +command-world-teleport-self: "Je bent zojuist geteleporteerd naar de wereld %world%." +command-world-teleport-other: "Je hebt de speler %player% geteleporteerd naar de wereld %world%." +command-random-tp-other: "Je hebt zojuist speler %player% willekeurig naar wereld %world% geteleporteerd." +command-tp: "Je bent zojuist geteleporteerd naar de speler %player%." +command-tp-location: "Je bent zojuist geteleporteerd naar %x%, %y%, %z%." command-tp-location-error: "De coördinaten liggen buiten de wereld." -command-tp-location-other: "&7Je hebt zojuist #34cfe0%player% &fgeteleporteerd naar #34cfe0%x%&f, #34cfe0%y%&f, #34cfe0%z%&f." -command-tp-all: "&7Je hebt zojuist alle spelers naar jou geteleporteerd." -command-tp-self: "&7Je hebt zojuist #34cfe0%player%&7 naar jouw positie geteleporteerd." -command-back: "&7Terugkeren naar de vorige locatie." +command-tp-location-other: "Je hebt zojuist %player% geteleporteerd naar %x%, %y%, %z%." +command-tp-all: "Je hebt zojuist alle spelers naar jou geteleporteerd." +command-tp-self: "Je hebt zojuist %player% naar jouw positie geteleporteerd." +command-back: "Terugkeren naar de vorige locatie." command-back-error: "Je hebt geen vorige locatie. Kan niet terugkeren." command-random-tp-error: "Na meerdere pogingen geen veilige locatie gevonden, probeer het opnieuw." -command-random-tp-configuration-not-found: "Kan de configuratie voor willekeurige teleport voor wereld &f%world% niet vinden." +command-random-tp-configuration-not-found: "Kan de configuratie voor willekeurige teleport voor wereld %world% niet vinden." # Eerste join -join-message: "#99E0FF%player% &7heeft het spel betreden" -quit-message: "#99E0FF%player% &7heeft het spel verlaten" -first-join-message: "&7Welkom #99E0FF%player% &7op ! &8(&f%totalUserFormat% &7geregistreerde spelers&8)" +join-message: "%player% heeft het spel betreden" +quit-message: "%player% heeft het spel verlaten" +first-join-message: "Welkom %player% op ! (%totalUserFormat% geregistreerde spelers)" first-join-motd: - "" - - "#00FF00✔ #99E0FFWelkom %player%#99E0FF !" + - "✔ Welkom %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Word lid van de Discord !'>https://discord.groupez.dev/" + - "Website: Bezoek de Website !'>https://minecraft-inventory-builder.com/" - "" join-motd: - "" - - "#99E0FFWelkom terug %player%#99E0FF !" + - "Welkom terug %player% !" - "" - - "#858ef8Discord&8: #99E0FFhttps://discord.groupez.dev/" - - "&7Website&8: #99E0FFhttps://minecraft-inventory-builder.com/" + - "Discord: Word lid van de Discord !'>https://discord.groupez.dev/" + - "Website: Bezoek de Website !'>https://minecraft-inventory-builder.com/" - "" # Spawn -command-set-spawn: "&fJe hebt zojuist de spawnlocatie ingesteld." +command-set-spawn: "Je hebt zojuist de spawnlocatie ingesteld." command-spawn-first-not-define: "De eerste spawn bestaat niet. Neem contact op met een beheerder." command-spawn-not-define: "De spawn bestaat niet. Neem contact op met een beheerder." command-spawn-location-invalid: "De spawnlocatie is ongeldig, neem contact op met een beheerder." @@ -518,8 +518,8 @@ format-hour: "uur" format-hours: "uren" format-day: "dag" format-days: "dagen" -cooldown: "✘ Je moet &f%cooldown% wachten voordat je deze actie kunt uitvoeren." -cooldown-commands: "✘ Je moet &f%cooldown% wachten voordat je deze commando's kunt uitvoeren." +cooldown: "✘ Je moet %cooldown% wachten voordat je deze actie kunt uitvoeren." +cooldown-commands: "✘ Je moet %cooldown% wachten voordat je deze commando's kunt uitvoeren." # Teleportatie @@ -529,90 +529,90 @@ teleport-error-location: "Niet mogelijk om je veilig te teleporteren." # RTP-wachtrijsysteem teleport-already-in-queue: "Je staat al in de teleportatiewachtrij!" -teleport-added-to-queue: "Je bent toegevoegd aan de teleportatiewachtrij. Positie: #0EEA93%position%" +teleport-added-to-queue: "Je bent toegevoegd aan de teleportatiewachtrij. Positie: %position%" teleport-message: type: ACTION - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + message: "Teleporteren in %seconds% seconden. Niet bewegen!" teleport-success: type: ACTION - message: "#99E0FFJe hebt succesvol geteleporteerd!" + message: "Je hebt succesvol geteleporteerd!" teleport-message-spawn: - - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + - message: "Teleporteren in %seconds% seconden. Niet bewegen!" - type: ACTION - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" -teleport-message-spawn-console: "Je hebt zonet de speler %player% geteleporteerd naar spawn." + message: "Teleporteren in %seconds% seconden. Niet bewegen!" +teleport-message-spawn-console: "Je hebt zonet de speler %player% geteleporteerd naar spawn." teleport-success-spawn: - - message: "&7Je bent net geteleporteerd naar #0EEA93spawn &7!" + - message: "Je bent net geteleporteerd naar spawn !" - type: ACTION - message: "&7Je bent net geteleporteerd naar #0EEA93spawn &7!" + message: "Je bent net geteleporteerd naar spawn !" teleport-message-warp: - - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + - message: "Teleporteren in %seconds% seconden. Niet bewegen!" - type: ACTION - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + message: "Teleporteren in %seconds% seconden. Niet bewegen!" teleport-success-warp: - - message: "&7Je bent net geteleporteerd naar warp #0EEA93%name% &7!" + - message: "Je bent net geteleporteerd naar warp %name% !" - type: ACTION - message: "&7Je bent net geteleporteerd naar warp #0EEA93%name% &7!" + message: "Je bent net geteleporteerd naar warp %name% !" teleport-message-random: type: ACTION - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" -teleport-random-start: "&7Zoeken naar een bestemming... je mag niet bewegen." + message: "Teleporteren in %seconds% seconden. Niet bewegen!" +teleport-random-start: "Zoeken naar een bestemming... je mag niet bewegen." teleport-success-random: type: ACTION - message: "#99E0FFJe hebt succesvol geteleporteerd!" + message: "Je hebt succesvol geteleporteerd!" teleport-message-home: - - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + - message: "Teleporteren in %seconds% seconden. Niet bewegen!" - type: ACTION - message: "&7Teleporteren in #0EEA93%seconds% &7seconden. Niet bewegen!" + message: "Teleporteren in %seconds% seconden. Niet bewegen!" teleport-success-home: - - message: "&7Je bent net geteleporteerd naar home #0EEA93%name% &7!" + - message: "Je bent net geteleporteerd naar home %name% !" - type: ACTION - message: "&7Je bent net geteleporteerd naar home #0EEA93%name% &7!" + message: "Je bent net geteleporteerd naar home %name% !" # Warps -command-warp-already-exist: "Warp &f%name% bestaat al. &7Gebruik &n/setwarp %name% true&r commando om de warp te wijzigen" -command-warp-doesnt-exist: "Warp &f%name% bestaat niet." -command-warp-no-permission: "Je hebt geen toestemming om de warp &f%name% te gebruiken." +command-warp-already-exist: "Warp %name% bestaat al. Gebruik Gebruik dit commando'>/setwarp %name% true commando om de warp te wijzigen" +command-warp-doesnt-exist: "Warp %name% bestaat niet." +command-warp-no-permission: "Je hebt geen toestemming om de warp %name% te gebruiken." command-warp-create: - - "#00ff00Je hebt zojuist de warp &f%name% #00ff00naar je positie gemaakt." - - "&7Warp toestemming is: permission set essentials.warp.%name%'>&f&essentials.warp.%name%" + - "Je hebt zojuist de warp %name% naar je positie gemaakt." + - "Warp toestemming is: Kopieer commando om toestemming aan een speler toe te voegen'> permission set essentials.warp.%name%'>ssentials.warp.%name%" command-warp-use: - - "Gebruik&8: &f/warp " - - "&7Warps&8:&f%destinations%" -command-warp-destination: " &f%name%&7" -command-warp-list: "&7Warps&8:&f%destinations%" -command-warp-list-info: " &f%name%&7" -command-warp-delete: "#00ff00Je hebt zojuist de warp &f%name%#00ff00 verwijderd." -command-warp-invalid: "Warp &f%name% heeft een ongeldige locatie." + - "Gebruik: /warp " + - "Warps:%destinations%" +command-warp-destination: " Klik om te teleporteren naar warp %name%'>%name%" +command-warp-list: "Warps:%destinations%" +command-warp-list-info: " Klik om te teleporteren naar warp %name%'>%name%" +command-warp-delete: "Je hebt zojuist de warp %name% verwijderd." +command-warp-invalid: "Warp %name% heeft een ongeldige locatie." # Homes -command-set-home-invalide-name: "&f%name% is geen geldige naam, kies een andere." -command-set-home-too-long: "&f%name% is te lang, kies een andere naam." -command-set-home-too-short: "&f%name% is te kort, kies een andere naam." -command-set-home-max: "Je kunt niet meer dan &f%max% homes hebben." +command-set-home-invalide-name: "%name% is geen geldige naam, kies een andere." +command-set-home-too-long: "%name% is te lang, kies een andere naam." +command-set-home-too-short: "%name% is te kort, kies een andere naam." +command-set-home-max: "Je kunt niet meer dan %max% homes hebben." command-set-home-world: "Je kunt hier geen home aanmaken." command-set-home-create: - "" - - "#99E0FFJe hebt zojuist de home &f%name%#99E0FF aangemaakt. &8(&7%current%&8/&7%max%&8)" - - "&fGebruik &n/home %name%&r commando om ernaartoe te teleporteren" + - "Je hebt zojuist de home %name% aangemaakt. (%current%/%max%)" + - "Gebruik Klik om te teleporteren naar home'>/home %name% commando om ernaartoe te teleporteren" - "" command-set-home-create-confirm: - "" - - "#99E0FFThe home &f%name%#99E0FF bestaat al. Wil je het overschrijven?" - - "ᴄᴏɴғɪʀᴍ" + - "The home %name% bestaat al. Wil je het overschrijven?" + - "Klik om de home %name% te overschrijven'>ᴄᴏɴғɪʀᴍ" - "" -command-home-doesnt-exist: "De home &f%name% bestaat niet." +command-home-doesnt-exist: "De home %name% bestaat niet." # Beschikbare placeholders: # %count% - Aantal homes # %max% - Maximaal aantal homes van de speler command-home-information-multi-line-header: - "" - - "#8cc0ccᴊᴏᴜᴡ ʜᴏᴍᴇꜱ ♦ &7(%count%) &8- &7(Max: %max%)" + - "ᴊᴏᴜᴡ ʜᴏᴍᴇꜱ ♦ (%count%) - (Max: %max%)" # Beschikbare placeholders: # %count% - Aantal homes @@ -625,7 +625,7 @@ command-home-information-multi-line-header: # %z% - Home locatie z command-home-information-multi-line-content: type: WITHOUT_PREFIX - message: " #8cc0cc♢ &f%name% &7in %world% (%environment%) [ᴋʟɪᴋ]" + message: " ♢ %name% in %world% (%environment%) Klik om naar je home %name% te teleporteren'>[ᴋʟɪᴋ]" # Beschikbare placeholders: # %count% - Aantal homes @@ -645,104 +645,104 @@ command-home-information-multi-line-footer: # %z% - Home locatie z command-home-information-in-line: type: WITHOUT_PREFIX - message: "#8cc0ccᴊᴏᴜᴡ ʜᴏᴍᴇꜱ ♦ &7(%count%/%max%) &8:&f%homes%" -command-home-information-in-line-info: " &f%name%&7" + message: "ᴊᴏᴜᴡ ʜᴏᴍᴇꜱ ♦ (%count%/%max%) :%homes%" +command-home-information-in-line-info: " Klik om te teleporteren naar home %name%'>%name%" command-home-icon-error: "Je moet een item in je hand hebben om het pictogram van je home te veranderen." -command-home-icon-success: "#00ff00Je hebt het home-pictogram &f%name% #00ff00veranderd." -command-home-icon-reset: "#00ff00Je hebt het home-pictogram &f%name% #00ff00gereset." -command-home-delete: "#99E0FFJe hebt de home &f%name% #99E0FFverwijderd." +command-home-icon-success: "Je hebt het home-pictogram %name% veranderd." +command-home-icon-reset: "Je hebt het home-pictogram %name% gereset." +command-home-delete: "Je hebt de home %name% verwijderd." command-home-delete-confirm: - "" - - "#99E0FFBen je zeker dat je de home &f%name%#99E0FF wil verwijderen?" - - "ᴄᴏɴғɪʀᴍ" + - "Ben je zeker dat je de home %name% wil verwijderen?" + - "Klik om de home %name% te verwijderen'>ᴄᴏɴғɪʀᴍ" - "" command-home-error-teleport: "Kan geen positie vinden om te teleporteren, verwijder je home." -command-home-admin-delete: "#00ff00Je hebt de home &f%name% #00ff00van &b%player% #00ff00verwijderd." -command-home-admin-set: "#00ff00Je hebt de home &f%name% #00ff00van &b%player% #00ff00aangemaakt." -command-home-admin-list: "#8cc0cc%player%'s ʜᴏᴍᴇs&8:&f%homes%" +command-home-admin-delete: "Je hebt de home %name% van %player% verwijderd." +command-home-admin-set: "Je hebt de home %name% van %player% aangemaakt." +command-home-admin-list: "%player%'s ʜᴏᴍᴇs:%homes%" command-home-admin-list-empty: "De speler heeft geen home." -command-home-admin-list-info: " &f%name%&7" +command-home-admin-list-info: " Klik om te teleporteren naar home %name%'>%name%" # Sancties command-kick-notify: type: WITHOUT_PREFIX - message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>&8(#f59e07Sanctie&8) #8aebeb%player% #e33414heeft de speler #e0d12d%target%#e33414uit de game gegooid." + message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>(Sanctie) %player% heeft de speler %target%uit de game gegooid." command-ban-notify: type: WITHOUT_PREFIX - message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%Verloopt op: %expired_at%'>&8(#f59e07Sanctie&8) #8aebeb%player% #e33414heeft de speler #e0d12d%target%#e33414verbannen." + message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%Verloopt op: %expired_at%'>(Sanctie) %player% heeft de speler %target%verbannen." command-mute-notify: type: WITHOUT_PREFIX - message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%Verloopt op: %expired_at%'>&8(#f59e07Sanctie&8) #8aebeb%player% #e33414heeft de speler #e0d12d%target%#e33414gemute." + message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%Verloopt op: %expired_at%'>(Sanctie) %player% heeft de speler %target%gemute." command-unmute-notify: type: WITHOUT_PREFIX - message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>&8(#f59e07Sanctie&8) #8aebeb%player% #e33414heeft de speler #e0d12d%target%#e33414ontmute." + message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>(Sanctie) %player% heeft de speler %target%ontmute." command-unban-notify: type: WITHOUT_PREFIX - message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>&8(#f59e07Sanctie&8) #8aebeb%player% #e33414heeft de speler #e0d12d%target%#e33414ontbannen." + message: "Door: %sender%Duur: %duration%Reden: %reason%Datum: %created_at%'>(Sanctie) %player% heeft de speler %target%ontbannen." command-ban-error-duration: "De duur van een verbanning moet minstens 1 seconde zijn." command-mute-error-duration: "De duur van een mute moet minstens 1 seconde zijn." -command-un-mute-error: "&f%player% is niet gemute." -command-un-ban-error: "&f%player% is niet verbannen." +command-un-mute-error: "%player% is niet gemute." +command-un-ban-error: "%player% is niet verbannen." command-sanction-error: "Je kunt die speler niet straffen. Hij is beschermd." message-kick: - "" - "Je bent net van de server gekickt om de reden:" - "%reason%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-mute: - "" - - "&fJe hebt net je stem verloren." - - "&fDuur&8: %duration%" - - "&fReden&8: #82d1ff%reason%" + - "Je hebt net je stem verloren." + - "Duur: %duration%" + - "Reden: %reason%" - "" message-unmute: - "" - - "&fJe hebt net je stem teruggekregen, gefeliciteerd!" - - "&fReden&8: #82d1ff%reason%" + - "Je hebt net je stem teruggekregen, gefeliciteerd!" + - "Reden: %reason%" - "" message-mute-talk: - "" - - "&fJe hebt niet het recht om te spreken." + - "Je hebt niet het recht om te spreken." - "" - - "&fDuur&8: %duration%" - - "&fReden&8: #82d1ff%reason%" + - "Duur: %duration%" + - "Reden: %reason%" - "" message-ban: - "" - "Je bent net verbannen van de server om de reden:" - - "&f%reason%" - - "&fDuur&8: &7%duration%" + - "%reason%" + - "Duur: %duration%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-ban-join: - "" - "Je bent verbannen op de server:" - - "&f%reason%" - - "&fOvergebleven tijd&8: &7%remaining%" + - "%reason%" + - "Overgebleven tijd: %remaining%" - "" - - "&fMinecraft-Inventory-Builder.com" + - "Minecraft-Inventory-Builder.com" - "" message-freeze: - "" - - "&fJe bent bevroren." + - "Je bent bevroren." - "" message-un-freeze: - "" - - "&fJe bent ontdooid." + - "Je bent ontdooid." - "" -command-freeze-success: "&7Je hebt zojuist de speler &f%player%&7 bevroren." -command-un-freeze_success: "&7Je hebt zojuist de speler &f%player%&7 ontdooid." +command-freeze-success: "Je hebt zojuist de speler %player% bevroren." +command-un-freeze_success: "Je hebt zojuist de speler %player% ontdooid." # Chat chat-error: "Het is niet mogelijk om je te laten spreken, je gegevens zijn nog niet geladen." chat-alphanumeric-regex: "Je gebruikt een verboden teken." -chat-cooldown: "Wacht alstublieft voordat je je volgende bericht verstuurt. &8(&7%cooldown%&8)" +chat-cooldown: "Wacht alstublieft voordat je je volgende bericht verstuurt. (%cooldown%)" chat-same: "Je kunt dezelfde zin niet herhalen." chat-link: "Je kunt geen link in de chat sturen." chat-item-forbidden-characters: "Je kunt dit item niet tonen omdat de naam verboden tekens bevat." @@ -750,14 +750,14 @@ chat-disable: "De chat is momenteel niet beschikbaar." chat-caps: "Je hoeft niet te schreeuwen om te praten!" chat-flood: "Je kunt niet op deze manier praten." -chat-default-format: "%displayName% <#656665>• %message%" -chat-messages-empty: "&f%player% heeft geen bericht geschreven." +chat-default-format: "%displayName% • %message%" +chat-messages-empty: "%player% heeft geen bericht geschreven." chat-messages-line: type: WITHOUT_PREFIX - message: "&f%date% &7%message%" + message: "%date% %message%" chat-messages-footer: type: WITHOUT_PREFIX - message: "⬅ %page%/%maxPage% ➡" + message: "⬅ %page%/%maxPage% ➡" command-chat-clear: "De chat is net leeggemaakt." command-chat-disable-error: "De chat is al uitgeschakeld." command-chat-disable-success: "Je hebt de chat net gedeactiveerd." @@ -765,54 +765,54 @@ command-chat-enable-error: "De chat is al ingeschakeld." command-chat-enable-success: "Je hebt de chat net geactiveerd." command-chat-broadcast: type: WITHOUT_PREFIX - message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" + message: "ʙʀᴏᴀᴅᴄᴀsᴛ • %message%" # Berichten command-message-self: "Je kunt niet met jezelf praten." -command-message-disable: "&f%player% heeft privéberichten uitgeschakeld." +command-message-disable: "%player% heeft privéberichten uitgeschakeld." command-message-mute: "Je mag niet spreken." -command-message-me: "&8(#f533f5ik &7-> #34cfe0%target%&8) #e6e1e6" -command-message-other: "&8(#34cfe0%target% &7-> #f533f5ik&8) #e6e1e6" +command-message-me: "Klik om te antwoorden'>(ik -> %target%) " +command-message-other: "Klik om te antwoorden'>(%target% -> ik) " command-message-social-spy: type: WITHOUT_PREFIX - message: "&8(&7SocialSpy&8) &8(#34cfe0%sender% &7-> #f533f5%receiver%&8) #e6e1e6%message%" + message: "(SocialSpy) (Open sancties voor %sender%'>%sender% -> Open sancties voor %receiver%'>%receiver%) %message%" command-message-error: "Je hebt niemand om te antwoorden." -command-message-toggle-enable: "&7Privéberichten ingeschakeld &7voor &f%player%." -command-message-toggle-disable: "&7Privéberichten uitgeschakeld &7voor &f%player%." -command-social-spy-enable: "&7Social spy ingeschakeld &7voor &f%player%." -command-social-spy-disable: "&7Social spy uitgeschakeld &7voor &f%player%." -command-warp-empty: "Geen warp gedefinieerd, gebruik het commando &f/setwarp " -command-pay-toggle-enable: "&7Betalen ingeschakeld &7voor &f%player%." -command-pay-toggle-disable: "&7Betalen uitgeschakeld &7voor &f%player%." -command-pay-notification-toggle-enable: "&7Betalingsmeldingen ingeschakeld &7voor &f%player%." -command-pay-notification-toggle-disable: "&7Betalingsmeldingen uitgeschakeld &7voor &f%player%." -command-power-tools-toggle-enable: "Al je power tools zijn ingeschakeld &7voor &f%player%." -command-power-tools-toggle-disable: "Al je power tools zijn uitgeschakeld &7voor &f%player%." +command-message-toggle-enable: "Privéberichten ingeschakeld voor %player%." +command-message-toggle-disable: "Privéberichten uitgeschakeld voor %player%." +command-social-spy-enable: "Social spy ingeschakeld voor %player%." +command-social-spy-disable: "Social spy uitgeschakeld voor %player%." +command-warp-empty: "Geen warp gedefinieerd, gebruik het commando /setwarp " +command-pay-toggle-enable: "Betalen ingeschakeld voor %player%." +command-pay-toggle-disable: "Betalen uitgeschakeld voor %player%." +command-pay-notification-toggle-enable: "Betalingsmeldingen ingeschakeld voor %player%." +command-pay-notification-toggle-disable: "Betalingsmeldingen uitgeschakeld voor %player%." +command-power-tools-toggle-enable: "Al je power tools zijn ingeschakeld voor %player%." +command-power-tools-toggle-disable: "Al je power tools zijn uitgeschakeld voor %player%." # Kit -command-kit-no-permission: "Je hebt geen toestemming om de kit &f%kit% te gebruiken." -command-kit-not-found: "Kan de kit &f%kit% niet vinden." -command-kit-already-exists: "De kit &f%kit% bestaat al." -command-kit-information-in-line-empty: "#8cc0ccᴊᴏᴜᴡ ᴋɪᴛꜱ ♦ &7(%count%/%max%)&8: ɢᴇᴇɴ ᴋɪᴛ ʙᴇꜱᴄʜɪᴋʙᴀᴀʀ" -command-kit-information-in-line: "#8cc0ccᴊᴏᴜᴡ ᴋɪᴛꜱ&8:&f%kits%" -command-kit-information-in-line-info-available: " <#1fde65>%name%&7" -command-kit-information-in-line-info-unavailable: " %time% voordat je de kit &f&n%name% kunt krijgen'><#de1f1f>%name%&7" +command-kit-no-permission: "Je hebt geen toestemming om de kit %kit% te gebruiken." +command-kit-not-found: "Kan de kit %kit% niet vinden." +command-kit-already-exists: "De kit %kit% bestaat al." +command-kit-information-in-line-empty: "ᴊᴏᴜᴡ ᴋɪᴛꜱ ♦ (%count%/%max%): ɢᴇᴇɴ ᴋɪᴛ ʙᴇꜱᴄʜɪᴋʙᴀᴀʀ" +command-kit-information-in-line: "ᴊᴏᴜᴡ ᴋɪᴛꜱ:%kits%" +command-kit-information-in-line-info-available: " Klik om de kit %name% te krijgen'>%name%" +command-kit-information-in-line-info-unavailable: " Je moet wachten %time% voordat je de kit %name% kunt krijgen'>%name%" command-kit-information-multi-line-header: "" -command-kit-information-multi-line-content-available: "<#8cc0cc>♢ <#1fde65>%name% " -command-kit-information-multi-line-content-unavailable: "<#8cc0cc>♢ %time% voordat je de kit &f&n%name% kunt krijgen'><#de1f1f>%name% &8(&7%time%&8)" +command-kit-information-multi-line-content-available: "♢ Klik om de kit %name% te krijgen'>%name% " +command-kit-information-multi-line-content-unavailable: "♢ Je moet wachten %time% voordat je de kit %name% kunt krijgen'>%name% (%time%)" command-kit-information-multi-line-footer: "" -command-kit-editor-save: "Je hebt zojuist de kit &f%kit% aangepast." -command-kit-create: "Je hebt zojuist de kit &f%kit% aangemaakt." -command-kit-delete: "Je hebt zojuist de kit &f%kit% verwijderd." -command-kit-delete-error: "Onmogelijk om de kit &f%kit% te verwijderen." -command-kit-give: "Je hebt zojuist de kit &f%kit% gegeven aan %player%." +command-kit-editor-save: "Je hebt zojuist de kit %kit% aangepast." +command-kit-create: "Je hebt zojuist de kit %kit% aangemaakt." +command-kit-delete: "Je hebt zojuist de kit %kit% verwijderd." +command-kit-delete-error: "Onmogelijk om de kit %kit% te verwijderen." +command-kit-give: "Je hebt zojuist de kit %kit% gegeven aan %player%." # Cooldown -command-cooldown-header: "&fSpeler cooldown %player% &8(&7%amount%&8)" -command-cooldown-empty: "&f%player% heeft geen cooldown." +command-cooldown-header: "Speler cooldown %player% (%amount%)" +command-cooldown-empty: "%player% heeft geen cooldown." # Beschikbare placeholders: # %key% - De key van de cooldown # %value% - De vervaldatum van de cooldown @@ -821,198 +821,198 @@ command-cooldown-empty: "&f%player% heeft geen cooldown." # %player% - De bijnaam van de speler command-cooldown-line: type: WITHOUT_PREFIX - message: "&f%key% - &7%createdAt% - %timeLeft% - &8[ᴠᴇʀᴡɪᴊᴅᴇʀ&8]" -command-cooldown-not-found: "&f%cooldown% werd niet gevonden." -command-cooldown-delete: "Je hebt zojuist de cooldown &f%cooldown% van &n%player%&r verwijderd." + message: "%key% - %createdAt% - %timeLeft% - Klik om de cooldown te verwijderen'>[ᴠᴇʀᴡɪᴊᴅᴇʀ]" +command-cooldown-not-found: "%cooldown% werd niet gevonden." +command-cooldown-delete: "Je hebt zojuist de cooldown %cooldown% van %player% verwijderd." # Beschikbare placeholders: # %key% - De key van de cooldown # %player% - De bijnaam van de speler # %duration% - De duur van de cooldown -command-cooldown-create: "Je hebt zojuist de cooldown &f%key% gemaakt voor &n%player%&r." +command-cooldown-create: "Je hebt zojuist de cooldown %key% gemaakt voor %player%." command-item-empty: "Je hebt geen item in je hand." command-item-clear: "Je hebt de naam van dit item verwijderd." -command-item-set: "Je hebt je vastgehouden item hernoemd naar &f%name%." -command-item-lore-add: "Je hebt de regel &f%text% toegevoegd." -command-item-lore-set: "Je hebt regel %line% ingesteld op &f%text%." +command-item-set: "Je hebt je vastgehouden item hernoemd naar %name%." +command-item-lore-add: "Je hebt de regel %text% toegevoegd." +command-item-lore-set: "Je hebt regel %line% ingesteld op %text%." command-item-lore-clear: "Je hebt de item lore gewist." -command-item-lore-set-error: "Kan de regel &f%line% niet vinden." -command-give-error: "Kan het item &f%item% niet vinden." -command-give: "Je hebt &n&fx%amount% %item%&r gegeven aan speler &f%player%." -command-give-all: "Je hebt &n&fx%amount% %item%&r gegeven aan alle online spelers." -command-give-vault: "Je hebt zojuist &n&fx%amount% %item%&r gegeven aan de kluis van &f%player%." +command-item-lore-set-error: "Kan de regel %line% niet vinden." +command-give-error: "Kan het item %item% niet vinden." +command-give: "Je hebt x%amount% %item% gegeven aan speler %player%." +command-give-all: "Je hebt x%amount% %item% gegeven aan alle online spelers." +command-give-vault: "Je hebt zojuist x%amount% %item% gegeven aan de kluis van %player%." command-power-tool-error-item: "Je hebt geen item in je hand." command-power-tool-error-reset: "Dit item heeft geen geregistreerd commando." -command-power-tool-info: "Je hebt het commando &f/%command% aan het item &f%item% toegevoegd." -command-power-tool-reset: "Je hebt het commando van het item &f%item% verwijderd." +command-power-tool-info: "Je hebt het commando /%command% aan het item %item% toegevoegd." +command-power-tool-reset: "Je hebt het commando van het item %item% verwijderd." mailbox-remove-full: "Je moet ruimte in je inventaris hebben om een item op te halen." mailbox-remove-expire: "Je kunt dit item niet meer ophalen, het is verlopen." mailbox-add: type: ACTION - message: "Een item is zojuist aan je mailbox toegevoegd &8(&f/mail&8)" -mailbox-give-error: "Kan het item &f%item% niet vinden." -mailbox-give: "Je hebt zojuist &n&fx%amount% %item%&r gegeven aan de mailbox van speler &f%player%." -mailbox-give-all: "Je hebt zojuist &n&fx%amount% %item%&r gegeven aan de mailboxes van alle online spelers." -mailbox-give-hand: "Je hebt het item in je hand naar de mailbox van &f%player% gestuurd (&fx%amount% %item%)." -mailbox-give-all-hand: "Je hebt het item in je hand (&fx%amount% %item%) naar de mailboxes van alle online spelers gestuurd." -mailbox-clear: "Je hebt zojuist de mailbox van &f%player% leeggemaakt." - -mailbox-message-send: "Je bericht is verzonden naar &f%player%." -mailbox-message-receive: "&f%player% heeft je een bericht gestuurd &8(&f/mail read&8)" -mailbox-message-send-all: "Je bericht is verzonden naar &f%amount% speler(s)." -mailbox-message-notify: "Je hebt &f%amount% ongelezen bericht(en), gebruik &f/mail read." + message: "Een item is zojuist aan je mailbox toegevoegd (/mail)" +mailbox-give-error: "Kan het item %item% niet vinden." +mailbox-give: "Je hebt zojuist x%amount% %item% gegeven aan de mailbox van speler %player%." +mailbox-give-all: "Je hebt zojuist x%amount% %item% gegeven aan de mailboxes van alle online spelers." +mailbox-give-hand: "Je hebt het item in je hand naar de mailbox van %player% gestuurd (x%amount% %item%)." +mailbox-give-all-hand: "Je hebt het item in je hand (x%amount% %item%) naar de mailboxes van alle online spelers gestuurd." +mailbox-clear: "Je hebt zojuist de mailbox van %player% leeggemaakt." + +mailbox-message-send: "Je bericht is verzonden naar %player%." +mailbox-message-receive: "%player% heeft je een bericht gestuurd (/mail read)" +mailbox-message-send-all: "Je bericht is verzonden naar %amount% speler(s)." +mailbox-message-notify: "Je hebt %amount% ongelezen bericht(en), gebruik Klik om je berichten te lezen'>/mail read." mailbox-message-empty: "Je hebt geen enkel bericht." mailbox-message-header: type: WITHOUT_PREFIX messages: - "" - - "Je berichten (&f%amount%)" + - "Je berichten (%amount%)" - "" mailbox-message-line: type: WITHOUT_PREFIX - message: "&8[&f%date%&8] %player%: &f%message%" + message: "[%date%] %player%: %message%" mailbox-message-footer: type: WITHOUT_PREFIX messages: - "" - - "Gebruik &f/mail clearmessages om ze te verwijderen." + - "Gebruik Klik om je berichten te verwijderen'>/mail clearmessages om ze te verwijderen." - "" -mailbox-message-clear: "Je hebt zojuist de berichten van &f%player% verwijderd." +mailbox-message-clear: "Je hebt zojuist de berichten van %player% verwijderd." mailbox-message-self: "Je kunt jezelf geen bericht sturen." mailbox-message-mute: "Je kunt geen bericht sturen terwijl je gemute bent." -mailbox-message-ignore: "&f%player% wil je berichten niet ontvangen." -mailbox-message-full: "De mailbox van &f%player% is vol." -mailbox-message-too-long: "Je bericht mag niet langer zijn dan &f%max% tekens." +mailbox-message-ignore: "%player% wil je berichten niet ontvangen." +mailbox-message-full: "De mailbox van %player% is vol." +mailbox-message-too-long: "Je bericht mag niet langer zijn dan %max% tekens." -hologram-create-error: "Hologram &f%name% bestaat al." +hologram-create-error: "Hologram %name% bestaat al." hologram-create: type: WITHOUT_PREFIX messages: - - "Je hebt zojuist het hologram &f%name% gemaakt." - - "&7Gebruik &n/hologram %command% %name%&r&7 commando om het hologram te bewerken." -hologram-delete: "Hologram &f%name% is verwijderd." -hologram-doesnt-exist: "Hologram &f%name% bestaat niet." -hologram-is-not-a-text: "Hologram &f%name% is geen tekst-hologram." -hologram-is-not-a-block: "Hologram &f%name% is geen blok-hologram." -hologram-is-not-a-item: "Hologram &f%name% is geen item-hologram." -hologram-add-line: "Je hebt zojuist een regel toegevoegd aan het hologram &f%name%." -hologram-set-line: "Je hebt zojuist de regel &f%line% ingesteld voor het hologram &f%name%." -hologram-insert-before-line: "Je hebt zojuist een nieuwe regel vóór regel &f%line% toegevoegd aan het hologram &f%name%." -hologram-insert-after-line: "Je hebt zojuist een nieuwe regel na regel &f%line% toegevoegd aan het hologram &f%name%." -hologram-line-doesnt-exist: "De regel &f%line% bestaat niet voor het hologram &f%name%." -hologram-remove-line: "Je hebt zojuist de regel &f%line% verwijderd van het hologram &f%name%." -hologram-scale: "Je hebt zojuist de schaal van het hologram &f%name% veranderd naar &7%x%&8, &7%y%&8, &7%z%." -hologram-translation: "Je hebt zojuist de vertaling van het hologram &f%name% veranderd naar &7%x%&8, &7%y%&8, &7%z%." -hologram-move-here: "Je hebt zojuist het hologram &f%name% naar je positie geteleporteerd." -hologram-move-to: "Je hebt zojuist het hologram &f%name% geteleporteerd naar &7%x%&8, &7%y%&8, &7%z%." -hologram-billboard: "Je hebt zojuist het billboard van het hologram &f%name% veranderd naar &f%billboard%." -hologram-text-alignment: "Je hebt zojuist de tekstuitlijning van het hologram &f%name% veranderd naar &f%textAlignment%." -hologram-yaw: "Je hebt zojuist de yaw van het hologram &f%name% veranderd naar &f%yaw%." -hologram-pitch: "Je hebt zojuist de pitch van het hologram &f%name% veranderd naar &f%pitch%." -hologram-text-background: "Je hebt zojuist de achtergrondkleur van het hologram &f%name% veranderd naar &f%color%." + - "Je hebt zojuist het hologram %name% gemaakt." + - "Gebruik /hologram %command% %name% commando om het hologram te bewerken." +hologram-delete: "Hologram %name% is verwijderd." +hologram-doesnt-exist: "Hologram %name% bestaat niet." +hologram-is-not-a-text: "Hologram %name% is geen tekst-hologram." +hologram-is-not-a-block: "Hologram %name% is geen blok-hologram." +hologram-is-not-a-item: "Hologram %name% is geen item-hologram." +hologram-add-line: "Je hebt zojuist een regel toegevoegd aan het hologram %name%." +hologram-set-line: "Je hebt zojuist de regel %line% ingesteld voor het hologram %name%." +hologram-insert-before-line: "Je hebt zojuist een nieuwe regel vóór regel %line% toegevoegd aan het hologram %name%." +hologram-insert-after-line: "Je hebt zojuist een nieuwe regel na regel %line% toegevoegd aan het hologram %name%." +hologram-line-doesnt-exist: "De regel %line% bestaat niet voor het hologram %name%." +hologram-remove-line: "Je hebt zojuist de regel %line% verwijderd van het hologram %name%." +hologram-scale: "Je hebt zojuist de schaal van het hologram %name% veranderd naar %x%, %y%, %z%." +hologram-translation: "Je hebt zojuist de vertaling van het hologram %name% veranderd naar %x%, %y%, %z%." +hologram-move-here: "Je hebt zojuist het hologram %name% naar je positie geteleporteerd." +hologram-move-to: "Je hebt zojuist het hologram %name% geteleporteerd naar %x%, %y%, %z%." +hologram-billboard: "Je hebt zojuist het billboard van het hologram %name% veranderd naar %billboard%." +hologram-text-alignment: "Je hebt zojuist de tekstuitlijning van het hologram %name% veranderd naar %textAlignment%." +hologram-yaw: "Je hebt zojuist de yaw van het hologram %name% veranderd naar %yaw%." +hologram-pitch: "Je hebt zojuist de pitch van het hologram %name% veranderd naar %pitch%." +hologram-text-background: "Je hebt zojuist de achtergrondkleur van het hologram %name% veranderd naar %color%." hologram-text-background-error: "Kon achtergrondkleur niet parseren." -hologram-text-shadow: "Je hebt de tekstschaduw ingesteld op &f%textshadow% voor het hologram &f%name%." -hologram-see-through: "Je hebt de doorzichtigheid ingesteld op &f%seethrough% voor het hologram &f%name%." -hologram-shadow-strength: "Je hebt de schaduwsterkte ingesteld op &f%shadow% voor het hologram &f%name%." -hologram-shadow-radius: "Je hebt de schaduwradius ingesteld op &f%shadow% voor het hologram &f%name%." -hologram-view-distance: "Je hebt de kijkafstand ingesteld op &f%distance% voor het hologram &f%name%." -hologram-list-empty: "Er is geen hologram, gebruik het commando &f/holo create om er een te maken." +hologram-text-shadow: "Je hebt de tekstschaduw ingesteld op %textshadow% voor het hologram %name%." +hologram-see-through: "Je hebt de doorzichtigheid ingesteld op %seethrough% voor het hologram %name%." +hologram-shadow-strength: "Je hebt de schaduwsterkte ingesteld op %shadow% voor het hologram %name%." +hologram-shadow-radius: "Je hebt de schaduwradius ingesteld op %shadow% voor het hologram %name%." +hologram-view-distance: "Je hebt de kijkafstand ingesteld op %distance% voor het hologram %name%." +hologram-list-empty: "Er is geen hologram, gebruik het commando /holo create om er een te maken." hologram-list: type: WITHOUT_PREFIX - message: "&f%name% &8- &7%world%: %x%, %y%, %z% &8- ᴛᴇʟᴇᴘᴏʀᴛᴇᴇʀKlik om dit hologram te verwijderen'>ᴠᴇʀᴡɪᴊᴅᴇʀ" + message: "%name% - %world%: %x%, %y%, %z% - Klik om naar dit hologram geteleporteerd te worden'>ᴛᴇʟᴇᴘᴏʀᴛᴇᴇʀKlik om dit hologram te verwijderen'>ᴠᴇʀᴡɪᴊᴅᴇʀ" hologram-item-error: "Je kunt lucht niet gebruiken voor dit hologram." -hologram-item: "Je hebt zojuist het item van het hologram &f%name% gewijzigd." -hologram-block: "Je hebt zojuist het blok van het hologram &f%name% gewijzigd naar &f%material%." +hologram-item: "Je hebt zojuist het item van het hologram %name% gewijzigd." +hologram-block: "Je hebt zojuist het blok van het hologram %name% gewijzigd naar %material%." scoreboard-disable: "Je hebt zojuist het scoreboard uitgeschakeld." scoreboard-enable: "Je hebt zojuist het scoreboard ingeschakeld." -command-baltop-error: "Kan de economie &f%name% niet vinden." +command-baltop-error: "Kan de economie %name% niet vinden." command-baltop-header: type: WITHOUT_PREFIX - message: "#00f986ᴍᴇᴇꜱᴛᴇ ɢᴇʟᴅ &8(&f%page%&8/&7%maxPage%&8) &f◀ &8- &f▶" + message: "ᴍᴇᴇꜱᴛᴇ ɢᴇʟᴅ (%page%/%maxPage%) ◀ - ▶" command-baltop: type: WITHOUT_PREFIX - message: "#00f986#%position% &f%name%&8: %amount%" + message: "#%position% %name%: %amount%" -command-voteparty-set: "Je hebt de voteparty ingesteld op &f%amount% stemmen." -command-voteparty-add: "Je hebt &f%amount% stemmen toegevoegd aan de voteparty." -command-voteparty-remove: "Je hebt &f%amount% stemmen verwijderd uit de voteparty." -command-voteparty-informations: "VoteParty: %amount%/%objective%" +command-voteparty-set: "Je hebt de voteparty ingesteld op %amount% stemmen." +command-voteparty-add: "Je hebt %amount% stemmen toegevoegd aan de voteparty." +command-voteparty-remove: "Je hebt %amount% stemmen verwijderd uit de voteparty." +command-voteparty-informations: "VoteParty: %amount%/%objective%" -command-vote-add: "Je hebt een stem toegevoegd aan &f%player%." -command-vote-add-error: "De site &f%site% bestaat niet!" +command-vote-add: "Je hebt een stem toegevoegd aan %player%." +command-vote-add-error: "De site %site% bestaat niet!" command-vote: type: ACTION message: "Je hebt gestemd en een sleutel ontvangen." vote-offline: - "" - - "Je hebt %amount% keer gestemd terwijl je offline was. Gebruik het commando /mailbox om je items te ontvangen!" + - "Je hebt %amount% keer gestemd terwijl je offline was. Gebruik het commando /mailbox om je items te ontvangen!" - "" vault-lore: - "" - - "&fɪɴꜰᴏʀᴍᴀᴛɪᴇ" - - " #f8b175• &7Hoeveelheid&8: &e%quantity%" + - "ɪɴꜰᴏʀᴍᴀᴛɪᴇ" + - " • Hoeveelheid: %quantity%" - "" - - "&f➥ #fc99f8Linker Klik &7om 1 te nemen" - - "&f➥ #fc99f8Rechter Klik &7om 64 te nemen" - - "&f➥ #fc99f8Sneak + Rechter Klik &7om alles te nemen" -command-vault-not-found: "Kan de kluis &f%vaultId% niet vinden." + - "➥ Linker Klik om 1 te nemen" + - "➥ Rechter Klik om 64 te nemen" + - "➥ Sneak + Rechter Klik om alles te nemen" +command-vault-not-found: "Kan de kluis %vaultId% niet vinden." command-vault-no-permission: "Je hebt geen toestemming om de kluis te bekijken." -command-vault-set-slot: "Je hebt net de slotten van &f%player% ingesteld op &7%slots%." -command-vault-add-slot: "Je hebt zojuist &7%amount% sloten toegevoegd aan &f%player%." -command-vault-get-slot-empty: "No item was found in vault &f%vault% slot &f%slot% for &f%player%." -command-vault-get-slot-success: "Vault-slot voor &f%player%: Vault &7%vault%, slot &7%slot%, aantal &7%amount%, item &f%item%." -command-vault-delete-slot-success: "Je hebt slot &7%slot% uit Vault &7%vault% voor &f%player% verwijderd." -command-vault-info: "Kluisinformatie voor &f%player%: max &7%max%, permissie &7%permissionSlots%, plug-in &7%pluginSlots%, gebruikt &7%used%, vrij &7%available%." -command-vault-delete-slot-empty: "Cannot find slot &f%slot% in vault &f%vault% for &f%player%." +command-vault-set-slot: "Je hebt net de slotten van %player% ingesteld op %slots%." +command-vault-add-slot: "Je hebt zojuist %amount% sloten toegevoegd aan %player%." +command-vault-get-slot-empty: "No item was found in vault %vault% slot %slot% for %player%." +command-vault-get-slot-success: "Vault-slot voor %player%: Vault %vault%, slot %slot%, aantal %amount%, item %item%." +command-vault-delete-slot-success: "Je hebt slot %slot% uit Vault %vault% voor %player% verwijderd." +command-vault-info: "Kluisinformatie voor %player%: max %max%, permissie %permissionSlots%, plug-in %pluginSlots%, gebruikt %used%, vrij %available%." +command-vault-delete-slot-empty: "Cannot find slot %slot% in vault %vault% for %player%." command-vault-change-icon-error: "Je hebt een item in je hand." command-vault-change-icon-success: "Je hebt het pictogram van je kluis gewijzigd." command-vault-reset-icon: "Je hebt het pictogram van je kluis gereset." command-vault-rename-start: "Schrijf in de chat de nieuwe naam van de kluis." -command-vault-rename-success: "Je hebt de naam van de kluis ingesteld op &f%name%." +command-vault-rename-success: "Je hebt de naam van de kluis ingesteld op %name%." command-vault-rename-error: "Je kunt deze naam niet voor je kluis gebruiken." command-vault-rename-reset: "Je hebt de naam van je kluis gereset." command-enchant-invalid: "Je moet een geldige speler opgeven." -command-enchant-error-enchant: "Kan de betovering &f%name% niet vinden." +command-enchant-error-enchant: "Kan de betovering %enchant% niet vinden." command-enchant-error-item-self: "Je moet een item in je hand hebben." command-enchant-error-item-player: "%player% heeft geen item in zijn hand." -command-enchant-remove-self: "De betovering &f%enchant% is verwijderd van je item in de hand." -command-enchant-remove-player: "De betovering &f%enchant% is verwijderd van het item van &f%player%." -command-enchant-success-self: "De betovering &f%enchant% is toegepast op je item in de hand." -command-enchant-success-player: "De betovering &f%enchant% is toegepast op het item van &f%player%." +command-enchant-remove-self: "De betovering %enchant% is verwijderd van je item in de hand." +command-enchant-remove-player: "De betovering %enchant% is verwijderd van het item van %player%." +command-enchant-success-self: "De betovering %enchant% is toegepast op je item in de hand." +command-enchant-success-player: "De betovering %enchant% is toegepast op het item van %player%." command-sudo-error: "Je kunt de speler niet dwingen om opdrachten uit te voeren." -command-sudo-command: "Je hebt zojuist de speler %player% gedwongen om het commando /%command% uit te voeren." -command-sudo-message: "Je hebt zojuist de speler %player% gedwongen om het bericht %message% te verzenden." +command-sudo-command: "Je hebt zojuist de speler %player% gedwongen om het commando /%command% uit te voeren." +command-sudo-message: "Je hebt zojuist de speler %player% gedwongen om het bericht %message% te verzenden." # WorldEdit -command-worldedit-give-error: "Kan item &f%name% niet vinden." -command-worldedit-give-sender: "Je hebt zojuist &f%item% gegeven aan speler &f%player%." -command-worldedit-give-receiver: "Je hebt zojuist &f%item% ontvangen." -command-worldedit-material-not-found: "Kan materiaal &f%material% niet vinden." +command-worldedit-give-error: "Kan item %name% niet vinden." +command-worldedit-give-sender: "Je hebt zojuist %item% gegeven aan speler %player%." +command-worldedit-give-receiver: "Je hebt zojuist %item% ontvangen." +command-worldedit-material-not-found: "Kan materiaal %material% niet vinden." command-worldedit-confirm-price: - "" - - "Prijs: %price%" - - "Blokken:%materials%" - - "Duur: %duration% (%blocks% blokken bij %speed% blok%s%/s)" + - "Prijs: %price%" + - "Blokken:%materials%" + - "Duur: %duration% (%blocks% blokken bij %speed% blok%s%/s)" - "" - - "<#45ff55>ᴋʟɪᴋ ʜɪᴇʀ ᴏᴍ ᴛᴇ ʙᴇᴠᴇsᴛɪɢᴇɴ" + - "Klik om actie te bevestigen'>ᴋʟɪᴋ ʜɪᴇʀ ᴏᴍ ᴛᴇ ʙᴇᴠᴇsᴛɪɢᴇɴ" command-worldedit-confirm-price-cut: - "" - - "Prijs: %price%" - - "Duur: %duration% (%blocks% blokken bij %speed% blok%s%/s)" + - "Prijs: %price%" + - "Duur: %duration% (%blocks% blokken bij %speed% blok%s%/s)" - "" - - "<#45ff55>ᴋʟɪᴋ ʜɪᴇʀ ᴏᴍ ᴛᴇ ʙᴇᴠᴇsᴛɪɢᴇɴ" -command-worldedit-confirm-material: " Aantal: %amount%Totaalprijs: %price%Prijs per blok: %price-per-block%'>" + - "Klik om actie te bevestigen'>ᴋʟɪᴋ ʜɪᴇʀ ᴏᴍ ᴛᴇ ʙᴇᴠᴇsᴛɪɢᴇɴ" +command-worldedit-confirm-material: " Aantal: %amount%Totaalprijs: %price%Prijs per blok: %price-per-block%'>" command-worldedit-confirm-error: "Je kunt dit nu niet doen." command-worldedit-stop-empty: "Je hebt geen actieve sessie." command-worldedit-stop-error: "Je kunt momenteel niet stoppen met bewerken." @@ -1031,33 +1031,33 @@ worldedit-not-enough-money: "Je hebt niet genoeg geld om deze sessie te s worldedit-not-enough-items: "Je hebt niet genoeg items in je inventaris, je kunt dit niet doen." worldedit-selection-pos1: "Je hebt zojuist de eerste positie gedefinieerd." worldedit-selection-pos2: "Je hebt zojuist de tweede positie gedefinieerd." -worldedit-selection-volume: "Je kunt niet meer dan &f%blocks% blokken tegelijk veranderen." -worldedit-selection-distance: "De afstand tussen je twee selecties is te groot. (Maximum %distance% blokken)" +worldedit-selection-volume: "Je kunt niet meer dan %blocks% blokken tegelijk veranderen." +worldedit-selection-distance: "De afstand tussen je twee selecties is te groot. (Maximum %distance% blokken)" -worldedit-start-calculate-price: "&7Prijsberekening bezig, even geduld..." -worldedit-start-check-inventory: "&7Bezig met controleren of je genoeg items in je inventaris hebt, even geduld..." -worldedit-start-running: "&7Start huidige sessie, even geduld..." +worldedit-start-calculate-price: "Prijsberekening bezig, even geduld..." +worldedit-start-check-inventory: "Bezig met controleren of je genoeg items in je inventaris hebt, even geduld..." +worldedit-start-running: "Start huidige sessie, even geduld..." worldedit-finish: "Sessie voltooid!" worldedit-refund: - "ᴊᴇ ʜᴇʙᴛ ᴇᴇɴ ᴛᴇʀᴜɢʙᴇᴛᴀʟɪɴɢ ᴏɴᴛᴠᴀɴɢᴇɴ" - "" - - "Prijs: %price%" - - "Blokken:%materials%" -worldedit-refund-material: " Aantal: %amount%Totaalprijs: %price%Prijs per blok: %price-per-block%'>" + - "Prijs: %price%" + - "Blokken:%materials%" +worldedit-refund-material: " Aantal: %amount%Totaalprijs: %price%Prijs per blok: %price-per-block%'>" worldedit-refund-empty: " Geen blok om terug te betalen" -worldedit-bossbar: "#45ff45Resterende tijd: %time%" +worldedit-bossbar: "Resterende tijd: %time%" worldedit-speed-error: "Je hebt geen toestemming om blokken per seconde in te stellen." -experience-granted: "Je hebt zojuist %amount% %type% gegeven aan %player%." -experience-setted: "Je hebt zojuist %amount% %type% ingesteld voor %player%." -experience-queried: "%player% heeft %amount% %type%." -experience-taken: "Je hebt zojuist %amount% %type% afgenomen van %player%." +experience-granted: "Je hebt zojuist %amount% %type% gegeven aan %player%." +experience-setted: "Je hebt zojuist %amount% %type% ingesteld voor %player%." +experience-queried: "%player% heeft %amount% %type%." +experience-taken: "Je hebt zojuist %amount% %type% afgenomen van %player%." command-clearinventory-success: "Je hebt je inventaris geleegd." -command-clearinventory-success-other: "Je hebt de inventaris van &f%player% geleegd." +command-clearinventory-success-other: "Je hebt de inventaris van %player% geleegd." # Discord command-link-account-already-linked: "Je bent al gekoppeld aan een account." command-link-account-invalid-code: "Ongeldige code." -command-link-account-success: "Je hebt zojuist je account gekoppeld met %discord%." +command-link-account-success: "Je hebt zojuist je account gekoppeld met %discord%." command-link-account-disabled: "Je kunt je account op dit moment niet koppelen." command-link-account-not-linked: "Je bent niet gekoppeld aan een account." command-link-account-reset: "Je hebt zojuist je accountkoppeling gereset." @@ -1065,98 +1065,98 @@ command-link-account-reset: "Je hebt zojuist je accountkoppeling gerese command-pub-pattern-error: "Je bericht bevat verboden tekens." command-pub: type: WITHOUT_PREFIX - message: "&8[&fPUB&8] %player%: %message%" + message: "[PUB] %player%: %message%" random-word-clear: "Het willekeurige woord is gewist." -step-doesnt-exist: "Stap &f%step% bestaat niet." -step-already-exist: "Stap &f%step% is al gestart." -step-doesnt-started: "Stap &f%step% is niet gestart." +step-doesnt-exist: "Stap %step% bestaat niet." +step-already-exist: "Stap %step% is al gestart." +step-doesnt-started: "Stap %step% is niet gestart." # Enderchest -command-endersee-error: "Kan de ender chest van &f%player% niet laden." +command-endersee-error: "Kan de ender chest van %player% niet laden." # TPA -command-tpa-error-no-request-from-player: "Je hebt geen teleportverzoek van &f%player%." -command-tpa-accept-all-success: "Je hebt &f%count% teleportverzoek(en) geaccepteerd." -command-tpa-deny-all-success: "Je hebt &f%count% teleportverzoek(en) geweigerd." +command-tpa-error-no-request-from-player: "Je hebt geen teleportverzoek van %player%." +command-tpa-accept-all-success: "Je hebt %count% teleportverzoek(en) geaccepteerd." +command-tpa-deny-all-success: "Je hebt %count% teleportverzoek(en) geweigerd." description-tp-toggle: "Teleportverzoeken aan/uitzetten" -command-teleport-request-disabled: "De speler &f%player% heeft teleportverzoeken uitgeschakeld." -command-tp-toggle-enable: "&7Teleportverzoeken ingeschakeld &7voor &f%player%." -command-tp-toggle-disable: "&7Teleportverzoeken uitgeschakeld &7voor &f%player%." +command-teleport-request-disabled: "De speler %player% heeft teleportverzoeken uitgeschakeld." +command-tp-toggle-enable: "Teleportverzoeken ingeschakeld voor %player%." +command-tp-toggle-disable: "Teleportverzoeken uitgeschakeld voor %player%." description-tpa-here-toggle: "Tpahere-verzoeken aan/uitzetten" -command-teleport-here-request-disabled: "De speler &f%player% heeft tpahere-verzoeken uitgeschakeld." -command-tpa-here-toggle-enable: "&7Tpahere-verzoeken ingeschakeld &7voor &f%player%." -command-tpa-here-toggle-disable: "&7Tpahere-verzoeken uitgeschakeld &7voor &f%player%." +command-teleport-here-request-disabled: "De speler %player% heeft tpahere-verzoeken uitgeschakeld." +command-tpa-here-toggle-enable: "Tpahere-verzoeken ingeschakeld voor %player%." +command-tpa-here-toggle-disable: "Tpahere-verzoeken uitgeschakeld voor %player%." # Cross-server teleportatie teleport-cross-server-not-supported: "Cross-server teleportatie wordt niet ondersteund op deze server." -teleport-cross-server-connecting: "Verbinden met server &f%server%..." -teleport-cross-server-player-not-found: "Speler &f%player% werd niet gevonden op enige server." +teleport-cross-server-connecting: "Verbinden met server %server%..." +teleport-cross-server-player-not-found: "Speler %player% werd niet gevonden op enige server." # ItemFrame description-itemframe: "Itemframe zichtbaarheid wisselen" -command-itemframe-invisible: "Het itemframe is nu onzichtbaar." -command-itemframe-visible: "Het itemframe is nu zichtbaar." +command-itemframe-invisible: "Het itemframe is nu onzichtbaar." +command-itemframe-visible: "Het itemframe is nu zichtbaar." command-itemframe-not-found: "Geen itemframe gevonden. Kijk naar een itemframe en probeer opnieuw." # Doodsberichten module description-death-message: "Aangepaste doodsberichten" description-death-message-toggle: "Doodsberichten zichtbaarheid wisselen" -command-death-message-toggle-disable: "#C084FC☠ #B794F4Doodsberichten zijn nu #E9D5FFverborgen #B794F4voor %player%#B794F4." -command-death-message-toggle-enable: "#C084FC☠ #B794F4Doodsberichten zijn nu #E9D5FFzichtbaar #B794F4voor %player%#B794F4." +command-death-message-toggle-disable: "☠ Doodsberichten zijn nu verborgen voor %player%." +command-death-message-toggle-enable: "☠ Doodsberichten zijn nu zichtbaar voor %player%." # Doodsberichten (gedetailleerd) -death-generic: "#C084FC☠ #E9D5FF%player% #B794F4is gestorven." -death-by-player: "#C084FC⚔ #E9D5FF%player% #B794F4werd gedood door #E9D5FF%killer%#B794F4." -death-by-mob: "#C084FC☠ #E9D5FF%player% #B794F4werd gedood door #E9D5FF%killer%#B794F4." -death-by-projectile: "#C084FC🏹 #E9D5FF%player% #B794F4werd neergeschoten door #E9D5FF%killer%#B794F4." -death-by-mob-explosion: "#C084FC💥 #E9D5FF%player% #B794F4werd opgeblazen door #E9D5FF%killer%#B794F4." -death-by-fall: "#C084FC⬇ #E9D5FF%player% #B794F4viel van grote hoogte." -death-by-fire: "#C084FC🔥 #E9D5FF%player% #B794F4verbrandde." -death-by-lava: "#C084FC🌋 #E9D5FF%player% #B794F4probeerde in lava te zwemmen." -death-by-drowning: "#C084FC💧 #E9D5FF%player% #B794F4is verdronken." -death-by-explosion: "#C084FC💥 #E9D5FF%player% #B794F4is ontploft." -death-by-lightning: "#C084FC⚡ #E9D5FF%player% #B794F4werd getroffen door bliksem." -death-by-suffocation: "#C084FC▓ #E9D5FF%player% #B794F4stikte in een muur." -death-by-starvation: "#C084FC🍖 #E9D5FF%player% #B794F4is verhongerd." -death-by-poison: "#C084FC☣ #E9D5FF%player% #B794F4werd vergiftigd." -death-by-magic: "#C084FC✦ #E9D5FF%player% #B794F4werd gedood door magie." -death-by-wither: "#C084FC💀 #E9D5FF%player% #B794F4is verwelkt." -death-by-falling-block: "#C084FC▼ #E9D5FF%player% #B794F4werd verpletterd door een blok." -death-by-fly-into-wall: "#C084FC💨 #E9D5FF%player% #B794F4ervoer kinetische energie." -death-by-void: "#C084FC✧ #E9D5FF%player% #B794F4viel uit de wereld." -death-by-cactus: "#C084FC🌵 #E9D5FF%player% #B794F4werd doodgeprikt." -death-by-cramming: "#C084FC⊞ #E9D5FF%player% #B794F4werd te veel samengedrukt." -death-by-freeze: "#C084FC❄ #E9D5FF%player% #B794F4is doodgevroren." -death-by-sonic-boom: "#C084FC◈ #E9D5FF%player% #B794F4werd vernietigd door een sonic boom." -death-by-magma: "#C084FC♨ #E9D5FF%player% #B794F4ontdekte dat de vloer lava was." -death-by-thorns: "#C084FC✵ #E9D5FF%player% #B794F4werd gedood bij het proberen iemand te verwonden." -death-by-campfire: "#C084FC🔥 #E9D5FF%player% #B794F4liep in een kampvuur." -death-hover-details: "#D8B4FE☠ Sterflocatie#B794F4:\n#E9D5FF▸ Wereld: #D8B4FE%world%\n#E9D5FF▸ Positie: #D8B4FE%x%#E9D5FF, #D8B4FE%y%#E9D5FF, #D8B4FE%z%\n\n#9F7AEA&oKlik om te teleporteren" +death-generic: "☠ %player% is gestorven." +death-by-player: "⚔ %player% werd gedood door %killer%." +death-by-mob: "☠ %player% werd gedood door %killer%." +death-by-projectile: "🏹 %player% werd neergeschoten door %killer%." +death-by-mob-explosion: "💥 %player% werd opgeblazen door %killer%." +death-by-fall: "⬇ %player% viel van grote hoogte." +death-by-fire: "🔥 %player% verbrandde." +death-by-lava: "🌋 %player% probeerde in lava te zwemmen." +death-by-drowning: "💧 %player% is verdronken." +death-by-explosion: "💥 %player% is ontploft." +death-by-lightning: "⚡ %player% werd getroffen door bliksem." +death-by-suffocation: "▓ %player% stikte in een muur." +death-by-starvation: "🍖 %player% is verhongerd." +death-by-poison: "☣ %player% werd vergiftigd." +death-by-magic: "✦ %player% werd gedood door magie." +death-by-wither: "💀 %player% is verwelkt." +death-by-falling-block: "▼ %player% werd verpletterd door een blok." +death-by-fly-into-wall: "💨 %player% ervoer kinetische energie." +death-by-void: "✧ %player% viel uit de wereld." +death-by-cactus: "🌵 %player% werd doodgeprikt." +death-by-cramming: "⊞ %player% werd te veel samengedrukt." +death-by-freeze: "❄ %player% is doodgevroren." +death-by-sonic-boom: "◈ %player% werd vernietigd door een sonic boom." +death-by-magma: "♨ %player% ontdekte dat de vloer lava was." +death-by-thorns: "✵ %player% werd gedood bij het proberen iemand te verwonden." +death-by-campfire: "🔥 %player% liep in een kampvuur." +death-hover-details: "☠ Sterflocatie:\n▸ Wereld: %world%\n▸ Positie: %x%, %y%, %z%\n\nKlik om te teleporteren" # Doodsberichten (fallback wanneer geen aangepaste configuratie is ingesteld) -death-message-generic: "#99E0FF%player% &7is gestorven." -death-message-player: "#99E0FF%player% &7werd gedood door #34cfe0%killer% &7met %weapon%&7." -death-message-mob: "#99E0FF%player% &7werd gedood door &c%mob%&7." -death-message-mythic-mob: "#99E0FF%player% &7werd gedood door %mob%&7!" -death-message-fists: "&7vuisten" +death-message-generic: "%player% is gestorven." +death-message-player: "%player% werd gedood door %killer% met %weapon%." +death-message-mob: "%player% werd gedood door %mob%." +death-message-mythic-mob: "%player% werd gedood door %mob%!" +death-message-fists: "vuisten" # Negeren, ping-geluid & teleport naar een andere speler -command-tp-other: "&7Je hebt zojuist #34cfe0%player% &7naar #34cfe0%target%&7 geteleporteerd." +command-tp-other: "Je hebt zojuist %player% naar %target% geteleporteerd." description-ping-sound: "Schakel het chat ping-geluid in of uit" -command-ping-sound-enable: "&7Chat ping-geluid ingeschakeld &7voor &f%player%." -command-ping-sound-disable: "&7Chat ping-geluid uitgeschakeld &7voor &f%player%." +command-ping-sound-enable: "Chat ping-geluid ingeschakeld voor %player%." +command-ping-sound-disable: "Chat ping-geluid uitgeschakeld voor %player%." description-ignore: "Negeer een speler en blokkeer hun privéberichten en teleportverzoeken" description-unignore: "Stop met het negeren van een speler" description-ignore-list: "Toon de spelers die je negeert" -command-ignore-add: "Je negeert nu &f%player%. Je ontvangt geen privéberichten of teleportverzoeken meer van hen." -command-ignore-remove: "Je negeert &f%player% niet meer." -command-ignore-already: "Je negeert &f%player% al." -command-ignore-not: "Je negeert &f%player% niet." +command-ignore-add: "Je negeert nu %player%. Je ontvangt geen privéberichten of teleportverzoeken meer van hen." +command-ignore-remove: "Je negeert %player% niet meer." +command-ignore-already: "Je negeert %player% al." +command-ignore-not: "Je negeert %player% niet." command-ignore-self: "Je kunt jezelf niet negeren." command-ignore-list-empty: "Je negeert niemand." -command-ignore-list-header: "Je negeert &f%count% speler(s):" -command-ignore-list-line: "&7- &f%player%" -command-message-ignore-player: "Je kunt geen bericht sturen naar #34cfe0%player% omdat ze je negeren." +command-ignore-list-header: "Je negeert %count% speler(s):" +command-ignore-list-line: "- %player%" +command-message-ignore-player: "Je kunt geen bericht sturen naar %player% omdat ze je negeren." description-del-home-other: "Verwijder een home van een andere speler" # Home-systeem (openbaar, gedeeld, categorieën, favorieten, voorbeeld, import) @@ -1169,29 +1169,29 @@ description-home-category: "Stel de categorie van een home in" description-home-favorite: "Schakel een home als favoriet in of uit" description-home-import: "Importeer homes van een andere plugin" command-home-feature-disabled: "Deze home-functie is uitgeschakeld op deze server." -command-home-public-enable: "Je home &f%name% is nu openbaar." -command-home-public-disable: "Je home &f%name% is niet langer openbaar." -command-home-public-limit: "Je hebt het maximale aantal openbare homes bereikt (&f%max%)." -command-home-not-accessible: "De home &f%name% van &f%player% is niet toegankelijk voor jou." -command-public-homes-header: "Openbare homes (&f%count%):" -command-public-homes-line: "&7- &f%player%&7:&f%name% <#34cfe0>[Teleporteren]" +command-home-public-enable: "Je home %name% is nu openbaar." +command-home-public-disable: "Je home %name% is niet langer openbaar." +command-home-public-limit: "Je hebt het maximale aantal openbare homes bereikt (%max%)." +command-home-not-accessible: "De home %name% van %player% is niet toegankelijk voor jou." +command-public-homes-header: "Openbare homes (%count%):" +command-public-homes-line: "- %player%:%name% Teleporteer naar deze home'>[Teleporteren]" command-public-homes-empty: "Er is geen openbare home." -command-home-share-add: "Je hebt je home &f%name% gedeeld met &f%player%." -command-home-share-remove: "Je deelt je home &f%name% niet langer met &f%player%." -command-home-share-already: "Je home &f%name% is al gedeeld met &f%player%." -command-home-share-not: "Je home &f%name% is niet gedeeld met &f%player%." +command-home-share-add: "Je hebt je home %name% gedeeld met %player%." +command-home-share-remove: "Je deelt je home %name% niet langer met %player%." +command-home-share-already: "Je home %name% is al gedeeld met %player%." +command-home-share-not: "Je home %name% is niet gedeeld met %player%." command-home-share-self: "Je kunt geen home met jezelf delen." -command-home-share-limit: "Je hebt het maximale aantal keer delen voor deze home bereikt (&f%max%)." -command-home-share-list-header: "Home &f%name% is gedeeld met &f%count% speler(s):" -command-home-share-list-line: "&7- &f%player%" -command-home-share-list-empty: "Home &f%name% is met niemand gedeeld." -command-home-category-set: "De categorie van je home &f%name% is nu &f%category%." -command-home-category-reset: "De categorie van je home &f%name% is verwijderd." +command-home-share-limit: "Je hebt het maximale aantal keer delen voor deze home bereikt (%max%)." +command-home-share-list-header: "Home %name% is gedeeld met %count% speler(s):" +command-home-share-list-line: "- %player%" +command-home-share-list-empty: "Home %name% is met niemand gedeeld." +command-home-category-set: "De categorie van je home %name% is nu %category%." +command-home-category-reset: "De categorie van je home %name% is verwijderd." command-home-category-invalid: "Ongeldige categorienaam." -command-home-favorite-add: "Je home &f%name% is nu een favoriet." -command-home-favorite-remove: "Je home &f%name% is niet langer een favoriet." -command-home-preview: "&7Home &f%name% &8- &7%world% &8(&7%x%&8, &7%y%&8, &7%z%&8) <#34cfe0>[Teleporteren]" -command-home-import-start: "Homes importeren van &f%source%..." -command-home-import-done: "Import voltooid: &f%imported% geïmporteerd, &f%skipped% overgeslagen, &f%errors% fouten." -command-home-import-unknown: "Onbekende importbron &f%source%. Beschikbaar: essentialsx." +command-home-favorite-add: "Je home %name% is nu een favoriet." +command-home-favorite-remove: "Je home %name% is niet langer een favoriet." +command-home-preview: "Home %name% - %world% (%x%, %y%, %z%) [Teleporteren]" +command-home-import-start: "Homes importeren van %source%..." +command-home-import-done: "Import voltooid: %imported% geïmporteerd, %skipped% overgeslagen, %errors% fouten." +command-home-import-unknown: "Onbekende importbron %source%. Beschikbaar: essentialsx." command-home-import-error: "Er is een fout opgetreden tijdens het importeren, controleer de console." diff --git a/src/main/resources/modules/afk/config.yml b/src/main/resources/modules/afk/config.yml index dac746c8..2b598734 100644 --- a/src/main/resources/modules/afk/config.yml +++ b/src/main/resources/modules/afk/config.yml @@ -18,16 +18,16 @@ check-interval: 20 # in ticks # Allows kicking the player with the spigot method, this avoids using a kick command and that your sanction plugin log the kick soft-kick: true -soft-kick-message: "You have been kicked for being AFK" +soft-kick-message: "You have been kicked for being AFK" # Placeholders used by %user_afk_status% -placeholder-afk: "&aV" -placeholder-not-afk: "&cX" +placeholder-afk: "V" +placeholder-not-afk: "X" kick-actions: - type: message messages: - - "&cYou have been kicked for being AFK" + - "You have been kicked for being AFK" # - type: console command # commands: # - "kick %player% AFK" @@ -38,19 +38,19 @@ permissions: start-afk-time: 20 max-afk-time: 60 # in seconds kick: true - message-on-start-afk: "&cYou are now AFK, we have only &f40&c seconds left before being expelled from the server." - message-on-end-afk: "&aYou are no longer AFK. You have been afk for &f%duration%&a." + message-on-start-afk: "You are now AFK, we have only 40 seconds left before being expelled from the server." + message-on-end-afk: "You are no longer AFK. You have been afk for %duration%." - priority: 1 permission: "zessentials.afk.vip" start-afk-time: 30 max-afk-time: 120 # in seconds - message-on-start-afk: "&cYou are now AFK, we have only &f90&c seconds left before being expelled from the server." - message-on-end-afk: "&aYou are no longer AFK. You have been afk for &f%duration%&a." + message-on-start-afk: "You are now AFK, we have only 90 seconds left before being expelled from the server." + message-on-end-afk: "You are no longer AFK. You have been afk for %duration%." kick: true - priority: 2 permission: "zessentials.afk.admin" start-afk-time: 60 max-afk-time: 300 # in seconds - # message-on-start-afk: "&cYou are now AFK, we have only &f240&c seconds left before being expelled from the server." - # message-on-end-afk: "&aYou are no longer AFK. You have been afk for &f%duration%&a." + # message-on-start-afk: "You are now AFK, we have only 240 seconds left before being expelled from the server." + # message-on-end-afk: "You are no longer AFK. You have been afk for %duration%." kick: true diff --git a/src/main/resources/modules/automessage/config.yml b/src/main/resources/modules/automessage/config.yml index 35a203a1..308ba886 100644 --- a/src/main/resources/modules/automessage/config.yml +++ b/src/main/resources/modules/automessage/config.yml @@ -32,8 +32,8 @@ random-order: false messages: - lines: - "" - - "#ffd353ℹ ᴀɴɴᴏᴜɴᴄᴇᴍᴇɴᴛ" - - "&7Welcome to our server! Type &f/rules &7for server rules." + - "ℹ ᴀɴɴᴏᴜɴᴄᴇᴍᴇɴᴛ" + - "Welcome to our server! Type /rules for server rules." - "" # actions: # - type: sound @@ -42,9 +42,9 @@ messages: # volume: 1.0 - lines: - "" - - "#ffd353ℹ ᴀɴɴᴏᴜɴᴄᴇᴍᴇɴᴛ" - - "&7Join our Discord: &f/discord" + - "ℹ ᴀɴɴᴏᴜɴᴄᴇᴍᴇɴᴛ" + - "Join our Discord: /discord" - "" # actions: # - type: actionbar - # message: "&eClick here to join our Discord!" + # message: "Click here to join our Discord!" diff --git a/src/main/resources/modules/chat/config.yml b/src/main/resources/modules/chat/config.yml index e53447ae..b52dbd4c 100644 --- a/src/main/resources/modules/chat/config.yml +++ b/src/main/resources/modules/chat/config.yml @@ -109,23 +109,23 @@ chat-cooldown-max: 50 chat-formats: - priority: 1 permission: "essentials.chat.format.vip" - format: "<#ff0000>⚠ %moderator_action%<#ffffff>#3f3f3f• &7Money#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_money%#3f3f3f• &7Coins#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_coins%&f➥ &7Click for more information'>%player% <#333333>» <#ffff6b>" + format: "Report this message'>⚠ %moderator_action%ℹ Informations:• Money: %zessentials_user_formatted_balance_money%• Coins: %zessentials_user_formatted_balance_coins%➥ Click for more information'>%player% » Send a private message'>" - priority: 2 permission: "essentials.chat.format.admin" - format: "<#ffffff>#3f3f3f• &7Money#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_money%#3f3f3f• &7Coins#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_coins%&f➥ &7Click for more information'>%player% <#333333>» <#ff4444>" + format: "ℹ Informations:• Money: %zessentials_user_formatted_balance_money%• Coins: %zessentials_user_formatted_balance_coins%➥ Click for more information'>%player% » Send a private message'>" # Default chat format -default-chat-format: "<#ff0000>⚠ %moderator_action%<#ffffff>#3f3f3f• &7Money#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_money%#3f3f3f• &7Coins#3f3f3f: #4cd5ff%zessentials_user_formatted_balance_coins%&f➥ &7Click for more information'>%player% <#333333>» " +default-chat-format: "Report this message'>⚠ %moderator_action%ℹ Informations:• Money: %zessentials_user_formatted_balance_money%• Coins: %zessentials_user_formatted_balance_coins%➥ Click for more information'>%player% » Send a private message'>" # Allows players who have the essentials.chat.moderator permission to have a different view from other players. # By default, moderators will have a button to punish the player # # Available placeholder (you can use PlaceholderAPI here): # %player% - Player's name -moderator-action: "Punish the player'><#ff8888>✗ " +moderator-action: "Punish the player'>✗ " # Turns a link into a clickable link by players -link-transform: "%url%" +link-transform: "Open the link'>%url%" # Date format for /chathistory date-format: "yyyy-MM-dd HH:mm:ss" @@ -148,10 +148,10 @@ player-ping-sound-volume: 0.8 player-ping-sound-pitch: 1 # Color of ping displayed to the player -player-ping-color: "%name%" +player-ping-color: "%name%" # Color of ping displayed for other players -player-ping-color-other: "%name%" +player-ping-color-other: "%name%" # Placeholders @@ -162,7 +162,7 @@ chat-placeholders: permission: "zessentials.chat.placeholder.ping" # You must define a permission - name: "block" # Placeholder name, the name must consist only of lowercase letters, numbers 0 to 9 and characters _ and - regex: "(?i)\\[blocks\\]" # [blocks] placeholder - result: "&a%statistic_mine_block% &fblocks" # PlaceholderAPI extension Statistic: https://api.extendedclip.com/expansions/statistic/ + result: "%statistic_mine_block% blocks" # PlaceholderAPI extension Statistic: https://api.extendedclip.com/expansions/statistic/ permission: "zessentials.chat.placeholder.block" # You must define a permission - name: "money" # Placeholder name, the name must consist only of lowercase letters, numbers 0 to 9 and characters _ and - regex: "(?i)\\[money\\]" # [money] placeholder @@ -174,18 +174,18 @@ chat-placeholders: permission: "zessentials.chat.placeholder.coins" # You must define a permission - name: "playtime" # Placeholder name, the name must consist only of lowercase letters, numbers 0 to 9 and characters _ and - regex: "(?i)\\[playtime\\]" # [playtime] placeholder - result: "&fI've played &7%zessentials_user_playtime_formatted%" + result: "I've played %zessentials_user_playtime_formatted%" permission: "zessentials.chat.placeholder.playtime" # You must define a permission - name: "pos" # Placeholder name, the name must consist only of lowercase letters, numbers 0 to 9 and characters _ and - regex: "(?i)\\[pos\\]" # [pos] placeholder - result: "&bWorld: &f%player_world% &eX: &f%player_x% &eY: &f%player_y% &eZ: &f%player_z%" + result: "World: %player_world% X: %player_x% Y: %player_y% Z: %player_z%" permission: "zessentials.chat.placeholder.pos" # You must define a permission # Displays the item in your hand item-placeholder: enable: true regex: "(?i)\\[item\\]|\\[i\\]" # [item] or [i] placeholder - result: "&bx &f" + result: "x " permission: "zessentials.chat.placeholder.item" # You must define a permission # Regex used to ensure item names do not contain forbidden characters when displayed in chat item-name-regex: "^[a-zA-Z0-9_.?!^¨%ù*&é\"#'{(\\[-|èêë`\\\\çà)\\]=}ûî+<>:²€$/\\-\\,-â@;ô ]+$" @@ -196,7 +196,7 @@ item-placeholder: # Example: "Please use ./zah. to open the auction house" command-placeholder: # ./. placeholder enable: true - result: "Try this command'>/%command%" + result: "Try this command'>/%command%" permission: "zessentials.chat.placeholder.command" # You must define a permission # Replace check all messages sent to players and replace the command if it exists @@ -208,13 +208,13 @@ command-placeholder: # ./. placeholder custom-rules: - regex: "(can|may|would you like if) i (have|be|become|get|has) (op|admin|mod|builder)" permission: "essentials.chat.bypass.custom.rules" - message: "&cCurrently, we are not looking for new staff." + message: "Currently, we are not looking for new staff." - regex: "(do|are) you (need|wish|looking for) (any|some|one|good) (op|ops|operators|admins|mods|builders|new people|ateam)" permission: "essentials.chat.bypass.custom.rules" - message: "&cCurrently, we are not looking for new staff." + message: "Currently, we are not looking for new staff." - regex: "((admin|op|team|server|owner) (is|are)) + *(dick|cock|duck|noob)" permission: "essentials.chat.bypass.custom.rules" - message: "&cYet so much hate, we are only love" + message: "Yet so much hate, we are only love" - regex: "this server (is (bad|crappy|shitty)|suck)" permission: "essentials.chat.bypass.custom.rules" - message: "&cNo, the server is great, you’re the bad one!" \ No newline at end of file + message: "No, the server is great, you’re the bad one!" \ No newline at end of file diff --git a/src/main/resources/modules/customcommands/config.yml b/src/main/resources/modules/customcommands/config.yml index 9ef12093..c55d7486 100644 --- a/src/main/resources/modules/customcommands/config.yml +++ b/src/main/resources/modules/customcommands/config.yml @@ -35,7 +35,7 @@ enable: true # messages: the lines to display, used by TCHAT, CENTER and ACTION. # actions: zMenu actions run after the messages, for example a sound or another command. # -# MiniMessage, legacy colors and PlaceholderAPI placeholders are supported everywhere. +# MiniMessage and PlaceholderAPI placeholders are supported everywhere. # and allow to create clickable links. commands: @@ -48,7 +48,7 @@ commands: messages: - "" - "Join our Discord server:" - - "https://discord.gg/your-invite" + - "Click to open the invitation'>https://discord.gg/your-invite" - "" actions: - type: sound @@ -61,32 +61,32 @@ commands: messages: - "" - "Our live map:" - - "https://map.example.com" + - "Click to open the map'>https://map.example.com" - "" - command: "updates" permission: "" type: CENTER messages: - - "&8&m-----------------------------------------" + - "-----------------------------------------" - "Latest updates" - "" - - "&7- &fNew shop at the spawn" - - "&7- &fThe end is now open" - - "&8&m-----------------------------------------" + - "- New shop at the spawn" + - "- The end is now open" + - "-----------------------------------------" - command: "playerinfo" permission: "essentials.playerinfo" type: TCHAT messages: - - "Balance: &f%zessentials_user_formatted_balance_money%" - - "Playtime: &f%zessentials_user_playtime_formatted%" + - "Balance: %zessentials_user_formatted_balance_money%" + - "Playtime: %zessentials_user_playtime_formatted%" # Example with a title # - command: "welcome" # type: TITLE # title: "Welcome" -# subtitle: "&fon our server, %player%" +# subtitle: "on our server, %player%" # start: 100 # time: 2800 # end: 100 diff --git a/src/main/resources/modules/death_message/config.yml b/src/main/resources/modules/death_message/config.yml index 644547c1..b8207c97 100644 --- a/src/main/resources/modules/death_message/config.yml +++ b/src/main/resources/modules/death_message/config.yml @@ -30,40 +30,40 @@ death-message-type: CUSTOM # - And all vanilla damage causes: FALL, DROWNING, FIRE, LAVA, VOID, etc. custom-messages: GENERIC: - - "#99E0FF%player% &7died." + - "%player% died." PLAYER: - - "#99E0FF%player% &7was slain by #34cfe0%killer%&7." - - "#34cfe0%killer% &7killed #99E0FF%player%&7." + - "%player% was slain by %killer%." + - "%killer% killed %player%." MOB: - - "#99E0FF%player% &7was killed by &c%mob%&7." + - "%player% was killed by %mob%." MYTHIC_MOB: - - "#99E0FF%player% &7was slain by %mob%&7!" + - "%player% was slain by %mob%!" FALL: - - "#99E0FF%player% &7fell from a high place." - - "#99E0FF%player% &7hit the ground too hard." + - "%player% fell from a high place." + - "%player% hit the ground too hard." DROWNING: - - "#99E0FF%player% &7drowned." + - "%player% drowned." FIRE: - - "#99E0FF%player% &7burned to death." + - "%player% burned to death." LAVA: - - "#99E0FF%player% &7tried to swim in lava." + - "%player% tried to swim in lava." VOID: - - "#99E0FF%player% &7fell out of the world." + - "%player% fell out of the world." LIGHTNING: - - "#99E0FF%player% &7was struck by lightning." + - "%player% was struck by lightning." STARVATION: - - "#99E0FF%player% &7starved to death." + - "%player% starved to death." SUFFOCATION: - - "#99E0FF%player% &7suffocated in a wall." + - "%player% suffocated in a wall." EXPLOSION: - - "#99E0FF%player% &7blew up." + - "%player% blew up." POISON: - - "#99E0FF%player% &7died of poisoning." + - "%player% died of poisoning." WITHER: - - "#99E0FF%player% &7withered away." + - "%player% withered away." CRAMMING: - - "#99E0FF%player% &7was squished too much." + - "%player% was squished too much." FLY_INTO_WALL: - - "#99E0FF%player% &7experienced kinetic energy." + - "%player% experienced kinetic energy." FREEZE: - - "#99E0FF%player% &7froze to death." + - "%player% froze to death." diff --git a/src/main/resources/modules/economy/baltop.yml b/src/main/resources/modules/economy/baltop.yml index 329690a4..0e9251ac 100644 --- a/src/main/resources/modules/economy/baltop.yml +++ b/src/main/resources/modules/economy/baltop.yml @@ -1,18 +1,18 @@ -name: "#00f986ᴍᴏsᴛ ᴍᴏɴᴇʏ" +name: "ᴍᴏsᴛ ᴍᴏɴᴇʏ" size: 36 items: first: slot: 13 item: playerHead: "%zessentials_economy_baltop_name_money_1%" - name: "#00f986#1 &f%zessentials_economy_baltop_name_money_1%: %zessentials_economy_baltop_formatted_amount_money_1%" + name: "#1 %zessentials_economy_baltop_name_money_1%: %zessentials_economy_baltop_formatted_amount_money_1%" second: slot: 21 item: playerHead: "%zessentials_economy_baltop_name_money_2%" - name: "#00f986#2 &f%zessentials_economy_baltop_name_money_2%: %zessentials_economy_baltop_formatted_amount_money_2%" + name: "#2 %zessentials_economy_baltop_name_money_2%: %zessentials_economy_baltop_formatted_amount_money_2%" third: slot: 23 item: playerHead: "%zessentials_economy_baltop_name_money_3%" - name: "#00f986#3 &f%zessentials_economy_baltop_name_money_3%: %zessentials_economy_baltop_formatted_amount_money_3%" \ No newline at end of file + name: "#3 %zessentials_economy_baltop_name_money_3%: %zessentials_economy_baltop_formatted_amount_money_3%" \ No newline at end of file diff --git a/src/main/resources/modules/economy/config.yml b/src/main/resources/modules/economy/config.yml index bfbedfe5..9622fcfd 100644 --- a/src/main/resources/modules/economy/config.yml +++ b/src/main/resources/modules/economy/config.yml @@ -117,22 +117,22 @@ price-reductions: - format: "#.#" # Blank format to display text directly maxAmount: 1000 # Add colors to text display, works with MiniMessage - display: "#2bd66f%amount%" + display: "%amount%" - format: "%.1fK" maxAmount: 1000000 - display: "#a3d14d%amount%" + display: "%amount%" - format: "%.1fM" maxAmount: 1000000000 - display: "#ebbc23%amount%" + display: "%amount%" - format: "%.1fB" maxAmount: 1000000000000 - display: "#eb4b23%amount%" + display: "%amount%" - format: "%.2fT" maxAmount: 1000000000000000 - display: "#ff9999%amount%" + display: "%amount%" - format: "%.2fQ" maxAmount: 100000000000000000 - display: "#ff3535%amount%" + display: "%amount%" # Baltop @@ -180,5 +180,5 @@ command-set-reason: "Set by %sender%" # Placeholders for /paytoggle status # %zessentials_user_is_pay_disabled% returns true/false # %zessentials_user_pay_status% returns the configured value below -paytoggle-placeholder-enabled: "&aEnabled" -paytoggle-placeholder-disabled: "&cDisabled" \ No newline at end of file +paytoggle-placeholder-enabled: "Enabled" +paytoggle-placeholder-disabled: "Disabled" \ No newline at end of file diff --git a/src/main/resources/modules/economy/confirm_pay_inventory.yml b/src/main/resources/modules/economy/confirm_pay_inventory.yml index c1c4fafa..dad5876d 100644 --- a/src/main/resources/modules/economy/confirm_pay_inventory.yml +++ b/src/main/resources/modules/economy/confirm_pay_inventory.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fᴄᴏɴꜰɪʀᴍ' +name: "ᴄᴏɴꜰɪʀᴍ" size: 27 items: cancel: @@ -6,17 +6,17 @@ items: closeInventory: true item: material: RED_STAINED_GLASS_PANE - name: '#ff0000ᴄᴀɴᴄᴇʟ' + name: "ᴄᴀɴᴄᴇʟ" lore: - - '&7Click to cancel the payment' + - "Click to cancel the payment" head: slot: 13 item: playerHead: '%zessentials_user_target_player_name%' - name: '#99E0FF%zessentials_user_target_player_name%' + name: "%zessentials_user_target_player_name%" lore: - - '&7Amount&8: #99E0FF%zessentials_user_target_pay_amount%' + - "Amount: %zessentials_user_target_pay_amount%" confirm: type: ZESSENTIALS_PAY_CONFIRM @@ -24,6 +24,6 @@ items: closeInventory: true item: material: GREEN_STAINED_GLASS_PANE - name: '#00ff00ᴄᴏɴғɪʀᴍ' + name: "ᴄᴏɴғɪʀᴍ" lore: - - '&7Click to send &n%zessentials_user_target_player_name%&r &7payment of #99E0FF%zessentials_user_target_pay_amount%' \ No newline at end of file + - "Click to send %zessentials_user_target_player_name% payment of %zessentials_user_target_pay_amount%" \ No newline at end of file diff --git a/src/main/resources/modules/hologram/config.yml b/src/main/resources/modules/hologram/config.yml index 5e304e9b..fd17fd77 100644 --- a/src/main/resources/modules/hologram/config.yml +++ b/src/main/resources/modules/hologram/config.yml @@ -35,9 +35,9 @@ damage-indicator: # How long will the hologram stay in ticks duration: 40 # Damage placeholder: %damage% - appearance: '<#ed2626>%damage%' + appearance: "%damage%" # Appearance of the damage, if the damage is critical - criticalAppearance: '<#ed2626>ᴄʀɪᴛ<#bf0b0b> %damage%' + criticalAppearance: "ᴄʀɪᴛ %damage%" # Height offset height: 1.0 # Set an offset to X diff --git a/src/main/resources/modules/hologram/holograms/baltop.yml.example b/src/main/resources/modules/hologram/holograms/baltop.yml.example index c9abd040..c9d5fd25 100644 --- a/src/main/resources/modules/hologram/holograms/baltop.yml.example +++ b/src/main/resources/modules/hologram/holograms/baltop.yml.example @@ -22,41 +22,41 @@ text-background: default see-through: false lines: - line: 1 - text: '#00f986ᴍᴏsᴛ ᴍᴏɴᴇʏ' + text: 'ᴍᴏsᴛ ᴍᴏɴᴇʏ' - line: 2 - text: ' #00f986#1 &f%zessentials_center_{zessentials_economy_baltop_name_money_1}&7_{zessentials_economy_baltop_formatted_amount_money_1}_120%' + text: ' #1 %zessentials_center_{zessentials_economy_baltop_name_money_1}_{zessentials_economy_baltop_formatted_amount_money_1}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 3 - text: ' #00f986#2 &f%zessentials_center_{zessentials_economy_baltop_name_money_2}&7_{zessentials_economy_baltop_formatted_amount_money_2}_120%' + text: ' #2 %zessentials_center_{zessentials_economy_baltop_name_money_2}_{zessentials_economy_baltop_formatted_amount_money_2}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 4 - text: ' #00f986#3 &f%zessentials_center_{zessentials_economy_baltop_name_money_3}&7_{zessentials_economy_baltop_formatted_amount_money_3}_120%' + text: ' #3 %zessentials_center_{zessentials_economy_baltop_name_money_3}_{zessentials_economy_baltop_formatted_amount_money_3}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 5 - text: ' #00f986#4 &f%zessentials_center_{zessentials_economy_baltop_name_money_4}&7_{zessentials_economy_baltop_formatted_amount_money_4}_120%' + text: ' #4 %zessentials_center_{zessentials_economy_baltop_name_money_4}_{zessentials_economy_baltop_formatted_amount_money_4}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 6 - text: ' #00f986#5 &f%zessentials_center_{zessentials_economy_baltop_name_money_5}&7_{zessentials_economy_baltop_formatted_amount_money_5}_120%' + text: ' #5 %zessentials_center_{zessentials_economy_baltop_name_money_5}_{zessentials_economy_baltop_formatted_amount_money_5}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 7 - text: ' #00f986#6 &f%zessentials_center_{zessentials_economy_baltop_name_money_6}&7_{zessentials_economy_baltop_formatted_amount_money_6}_120%' + text: ' #6 %zessentials_center_{zessentials_economy_baltop_name_money_6}_{zessentials_economy_baltop_formatted_amount_money_6}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 8 - text: ' #00f986#7 &f%zessentials_center_{zessentials_economy_baltop_name_money_7}&7_{zessentials_economy_baltop_formatted_amount_money_7}_120%' + text: ' #7 %zessentials_center_{zessentials_economy_baltop_name_money_7}_{zessentials_economy_baltop_formatted_amount_money_7}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 9 - text: ' #00f986#8 &f%zessentials_center_{zessentials_economy_baltop_name_money_8}&7_{zessentials_economy_baltop_formatted_amount_money_8}_120%' + text: ' #8 %zessentials_center_{zessentials_economy_baltop_name_money_8}_{zessentials_economy_baltop_formatted_amount_money_8}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 10 - text: ' #00f986#9 &f%zessentials_center_{zessentials_economy_baltop_name_money_9}&7_{zessentials_economy_baltop_formatted_amount_money_9}_120%' + text: ' #9 %zessentials_center_{zessentials_economy_baltop_name_money_9}_{zessentials_economy_baltop_formatted_amount_money_9}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 11 - text: '#00f986#10 &f%zessentials_center_{zessentials_economy_baltop_name_money_10}&7_{zessentials_economy_baltop_formatted_amount_money_10}_120%' + text: '#10 %zessentials_center_{zessentials_economy_baltop_name_money_10}_{zessentials_economy_baltop_formatted_amount_money_10}_120%' event: fr.maxlego08.essentials.api.event.events.economy.EconomyBaltopUpdateEvent - line: 12 text: '' - line: 13 - text: '#00f986#%zessentials_user_position_money% &f%player_name%: %zessentials_user_formatted_balance_money%' + text: '#%zessentials_user_position_money% %player_name%: %zessentials_user_formatted_balance_money%' event: fr.maxlego08.essentials.api.event.events.user.UserEconomyPostUpdateEvent diff --git a/src/main/resources/modules/home/home_delete.yml b/src/main/resources/modules/home/home_delete.yml index ee4efe9a..8531a59b 100644 --- a/src/main/resources/modules/home/home_delete.yml +++ b/src/main/resources/modules/home/home_delete.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fᴄᴏɴғɪʀᴍ ᴅᴇʟᴇᴛᴇ' +name: "ᴄᴏɴғɪʀᴍ ᴅᴇʟᴇᴛᴇ" size: 27 items: @@ -6,7 +6,7 @@ items: slot: 13 item: material: BLUE_DYE - name: '#00a4fcʜᴏᴍᴇ %zessentials_home_delete%' + name: "ʜᴏᴍᴇ %zessentials_home_delete%" cancel: type: inventory @@ -15,9 +15,9 @@ items: slot: 11 item: material: RED_STAINED_GLASS_PANE - name: '#ff0000ᴄᴀɴᴄᴇʟ' + name: "ᴄᴀɴᴄᴇʟ" lore: - - '#fcfcfcClick to cancel' + - 'Click to cancel' confirm: slot: 15 @@ -26,6 +26,6 @@ items: closeInventory: true item: material: GREEN_STAINED_GLASS_PANE - name: '#00fc00ᴄᴏɴғɪʀᴍ' + name: "ᴄᴏɴғɪʀᴍ" lore: - - '#fcfcfcClick to delete' \ No newline at end of file + - 'Click to delete' \ No newline at end of file diff --git a/src/main/resources/modules/home/homes.yml b/src/main/resources/modules/home/homes.yml index 54208b5a..5840f34a 100644 --- a/src/main/resources/modules/home/homes.yml +++ b/src/main/resources/modules/home/homes.yml @@ -1,10 +1,10 @@ -name: '#3f3f3fʜᴏᴍᴇs' +name: "ʜᴏᴍᴇs" size: 54 items: decorations: item: material: GRAY_STAINED_GLASS_PANE - name: '&e' + name: "" slots: - 9-17 homes: @@ -13,33 +13,33 @@ items: - 18-53 item: material: '%material%' - name: '&f%name%' + name: "%name%" lore: - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7World#3f3f3f: #4cd5ff%world%' - - '#3f3f3f• &7Environment#3f3f3f: #4cd5ff%environment%' + - "ℹ Informations:" + - "• World: %world%" + - "• Environment: %environment%" - '' - - '&f➥ &nLeft Click&r&7 to teleport' - - '&f➨ &nDrop key&r&7 to edit material' - - '&f➦ &nRight Click&r&7 to delete' + - "➥ Left Click to teleport" + - "➨ Drop key to edit material" + - "➦ Right Click to delete" else: slots: - 31 item: material: RED_STAINED_GLASS_PANE - name: "#ff0000✗ ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ʜᴏᴍᴇs" + name: "✗ ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ʜᴏᴍᴇs" lore: - - '&7To create a home use the command:' + - "To create a home use the command:" - '' - - '#3f3f3f• #4cd5ff/sethome &7' + - "• /sethome " informations: slot: 4 item: playerHead: "%player%" - name: '&fʜᴏᴍᴇs' + name: "ʜᴏᴍᴇs" lore: - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Homes#3f3f3f: #4cd5ff%zessentials_home_count%' - - '#3f3f3f• &7Max homes#3f3f3f: #4cd5ff%zessentials_home_max%' + - "ℹ Informations:" + - "• Homes: %zessentials_home_count%" + - "• Max homes: %zessentials_home_max%" - '' - - '#3f3f3f• &7Command#3f3f3f: #4cd5ff/sethome &7' + - "• Command: /sethome " diff --git a/src/main/resources/modules/home/homes_donut.yml b/src/main/resources/modules/home/homes_donut.yml index 3227bef9..09f3192d 100644 --- a/src/main/resources/modules/home/homes_donut.yml +++ b/src/main/resources/modules/home/homes_donut.yml @@ -1,5 +1,5 @@ -name: '#3f3f3fʜᴏᴍᴇs' +name: "ʜᴏᴍᴇs" size: 36 items: diff --git a/src/main/resources/modules/home/public_homes.yml b/src/main/resources/modules/home/public_homes.yml index 05d5bc99..85de0274 100644 --- a/src/main/resources/modules/home/public_homes.yml +++ b/src/main/resources/modules/home/public_homes.yml @@ -1,10 +1,10 @@ -name: '#3f3f3fᴘᴜʙʟɪᴄ ʜᴏᴍᴇs' +name: "ᴘᴜʙʟɪᴄ ʜᴏᴍᴇs" size: 54 items: decorations: item: material: GRAY_STAINED_GLASS_PANE - name: '&e' + name: "" slots: - 0-8 public-homes: @@ -13,20 +13,20 @@ items: - 9-53 item: material: '%material%' - name: '&f%name%' + name: "%name%" lore: - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Owner#3f3f3f: #4cd5ff%player%' - - '#3f3f3f• &7Category#3f3f3f: #4cd5ff%category%' + - "ℹ Informations:" + - "• Owner: %player%" + - "• Category: %category%" - '' - - '&f➥ &nLeft Click&r&7 to teleport' + - "➥ Left Click to teleport" informations: slot: 4 item: material: NETHER_STAR - name: '&fᴘᴜʙʟɪᴄ ʜᴏᴍᴇs' + name: "ᴘᴜʙʟɪᴄ ʜᴏᴍᴇs" lore: - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Browse and teleport to public homes.' + - "ℹ Informations:" + - "• Browse and teleport to public homes." - '' - - '#3f3f3f• &7Command#3f3f3f: #4cd5ff/publichomes &7[player]' + - "• Command: /publichomes [player]" diff --git a/src/main/resources/modules/kits/kit_preview.yml b/src/main/resources/modules/kits/kit_preview.yml index 3cd8b8e3..2a29911e 100644 --- a/src/main/resources/modules/kits/kit_preview.yml +++ b/src/main/resources/modules/kits/kit_preview.yml @@ -1,4 +1,4 @@ -name: "#3f3f3fᴋɪᴛs" +name: "ᴋɪᴛs" size: 54 items: items: @@ -12,4 +12,4 @@ items: inventory: "kits" item: material: BARRIER - name: '&f➥ &nClick&r&7 to go back' \ No newline at end of file + name: "➥ Click to go back" \ No newline at end of file diff --git a/src/main/resources/modules/kits/kits.yml b/src/main/resources/modules/kits/kits.yml index 1d169569..91bfabef 100644 --- a/src/main/resources/modules/kits/kits.yml +++ b/src/main/resources/modules/kits/kits.yml @@ -1,4 +1,4 @@ -name: "#3f3f3fᴋɪᴛs" +name: "ᴋɪᴛs" size: 27 items: tools: @@ -9,39 +9,39 @@ items: refreshOnClick: true item: material: IRON_PICKAXE - name: '&fᴋɪᴛ&8: #c1c1c3ɪʀᴏɴ ᴛᴏᴏʟs' + name: "ᴋɪᴛ: ɪʀᴏɴ ᴛᴏᴏʟs" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #4cd5ff%cooldown%' + - "ℹ Informations:" + - "• Cooldown: %cooldown%" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: type: ZESSENTIALS_KIT_GET kit: "tools" closeInventory: true item: material: IRON_PICKAXE - name: '&fᴋɪᴛ&8: #c1c1c3ɪʀᴏɴ ᴛᴏᴏʟs' + name: "ᴋɪᴛ: ɪʀᴏɴ ᴛᴏᴏʟs" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #43ff15Available !' + - "ℹ Informations:" + - "• Cooldown: Available !" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: item: material: IRON_PICKAXE - name: '&fᴋɪᴛ&8: #c1c1c3ɪʀᴏɴ ᴛᴏᴏʟs' + name: "ᴋɪᴛ: ɪʀᴏɴ ᴛᴏᴏʟs" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - "#3f3f3f• #ff0000You don't have permission" + - "ℹ Informations:" + - "• You don't have permission" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" food: slot: 13 @@ -51,39 +51,39 @@ items: refreshOnClick: true item: material: COOKED_BEEF - name: '&fᴋɪᴛ&8: #c1c1c3ғᴏᴏᴅ' + name: "ᴋɪᴛ: ғᴏᴏᴅ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #4cd5ff%cooldown%' + - "ℹ Informations:" + - "• Cooldown: %cooldown%" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: type: ZESSENTIALS_KIT_GET kit: "food" closeInventory: true item: material: COOKED_BEEF - name: '&fᴋɪᴛ&8: #c1c1c3ғᴏᴏᴅ' + name: "ᴋɪᴛ: ғᴏᴏᴅ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #43ff15Available !' + - "ℹ Informations:" + - "• Cooldown: Available !" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: item: material: COOKED_BEEF - name: '&fᴋɪᴛ&8: #c1c1c3ғᴏᴏᴅ' + name: "ᴋɪᴛ: ғᴏᴏᴅ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - "#3f3f3f• #ff0000You don't have permission" + - "ℹ Informations:" + - "• You don't have permission" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" fight: slot: 15 @@ -93,36 +93,36 @@ items: refreshOnClick: true item: material: DIAMOND_SWORD - name: '&fᴋɪᴛ&8: #c1c1c3ғɪɢʜᴛ' + name: "ᴋɪᴛ: ғɪɢʜᴛ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #4cd5ff%cooldown%' + - "ℹ Informations:" + - "• Cooldown: %cooldown%" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: type: ZESSENTIALS_KIT_GET kit: "fight" closeInventory: true item: material: DIAMOND_SWORD - name: '&fᴋɪᴛ&8: #c1c1c3ғɪɢʜᴛ' + name: "ᴋɪᴛ: ғɪɢʜᴛ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Cooldown#3f3f3f: #43ff15Available !' + - "ℹ Informations:" + - "• Cooldown: Available !" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" else: item: material: DIAMOND_SWORD - name: '&fᴋɪᴛ&8: #c1c1c3ғɪɢʜᴛ' + name: "ᴋɪᴛ: ғɪɢʜᴛ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - "#3f3f3f• #ff0000You don't have permission" + - "ℹ Informations:" + - "• You don't have permission" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' - - '&f➦ &nRight Click&r&7 to view the contents' \ No newline at end of file + - "➥ Left Click to get the kit" + - "➦ Right Click to view the contents" \ No newline at end of file diff --git a/src/main/resources/modules/kits/kits/basic_tools.yml b/src/main/resources/modules/kits/kits/basic_tools.yml index 6bd99a9d..dac68913 100644 --- a/src/main/resources/modules/kits/kits/basic_tools.yml +++ b/src/main/resources/modules/kits/kits/basic_tools.yml @@ -1,5 +1,5 @@ name: basic_tools -display-name: "&aStarter Tools" +display-name: "Starter Tools" category: "Tools" sub-category: "Beginner" cooldown: 3600 diff --git a/src/main/resources/modules/kits/kits/iron_tools_advanced.yml b/src/main/resources/modules/kits/kits/iron_tools_advanced.yml index 8b05d50e..bbda9ba4 100644 --- a/src/main/resources/modules/kits/kits/iron_tools_advanced.yml +++ b/src/main/resources/modules/kits/kits/iron_tools_advanced.yml @@ -1,5 +1,5 @@ name: iron_tools_advanced -display-name: "&b&lAdvanced Iron Tools" +display-name: "Advanced Iron Tools" category: "Tools" sub-category: "Advanced" cooldown: 14400 diff --git a/src/main/resources/modules/kits/kits/pvp.yml b/src/main/resources/modules/kits/kits/pvp.yml index a83312ee..42f8a02c 100644 --- a/src/main/resources/modules/kits/kits/pvp.yml +++ b/src/main/resources/modules/kits/kits/pvp.yml @@ -1,5 +1,5 @@ name: pvp -display-name: "&4&lPvP Master" +display-name: "PvP Master" category: "Combat" cooldown: 172800 permission: 'essentials.kits.pvp' diff --git a/src/main/resources/modules/kits/kits/starter_food.yml b/src/main/resources/modules/kits/kits/starter_food.yml index 4144f715..aeecba6b 100644 --- a/src/main/resources/modules/kits/kits/starter_food.yml +++ b/src/main/resources/modules/kits/kits/starter_food.yml @@ -1,5 +1,5 @@ name: starter_food -display-name: "&e&lStarter Food" +display-name: "Starter Food" category: "Food" cooldown: 1800 items: diff --git a/src/main/resources/modules/kits/kits_categories.yml b/src/main/resources/modules/kits/kits_categories.yml index 750c2893..6b985b1a 100644 --- a/src/main/resources/modules/kits/kits_categories.yml +++ b/src/main/resources/modules/kits/kits_categories.yml @@ -15,7 +15,7 @@ size: 54 # Inventory size open-permission: null # Menu title with gradient effect -title: "&8&l« &e&lKit Categories &8&l»" +title: "« Kit Categories »" # Fill all empty slots with black glass fillItem: @@ -45,12 +45,12 @@ items: title-star: slot: 4 material: NETHER_STAR - name: "&e&l✦ &6&lKIT SYSTEM &e&l✦" + name: "✦ KIT SYSTEM ✦" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Welcome to the kit selection menu!" - - "&7Choose a category to browse available kits." - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Welcome to the kit selection menu!" + - "Choose a category to browse available kits." + - "━━━━━━━━━━━━━━━━━━━" top-deco-5: slot: 5 @@ -109,19 +109,19 @@ items: type: zessentials_kit_category_selector category: "Tools" material: IRON_PICKAXE - name: "&e&l⛏ TOOLS" + name: "⛏ TOOLS" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &7Category: &e&lTools" - - " &7Available Kits: &f%kit_count%" + - " Category: Tools" + - " Available Kits: %kit_count%" - " " - - " &8▪ &7Basic mining tools" - - " &8▪ &7Advanced equipment" - - " &8▪ &7Building materials" + - " ▪ Basic mining tools" + - " ▪ Advanced equipment" + - " ▪ Building materials" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a▶ &7Click to browse tools" + - "━━━━━━━━━━━━━━━━━━━" + - "▶ Click to browse tools" actions: - type: open inventory inventory: 'kits_category_default' @@ -137,19 +137,19 @@ items: type: zessentials_kit_category_selector category: "Combat" material: DIAMOND_SWORD - name: "&c&l⚔ COMBAT" + name: "⚔ COMBAT" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &7Category: &c&lCombat" - - " &7Available Kits: &f%kit_count%" + - " Category: Combat" + - " Available Kits: %kit_count%" - " " - - " &8▪ &7Weapons & armor" - - " &8▪ &7PvP equipment" - - " &8▪ &7Combat potions" + - " ▪ Weapons & armor" + - " ▪ PvP equipment" + - " ▪ Combat potions" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a▶ &7Click to browse combat kits" + - "━━━━━━━━━━━━━━━━━━━" + - "▶ Click to browse combat kits" actions: - type: open inventory inventory: 'kits_category_combat' @@ -165,19 +165,19 @@ items: type: zessentials_kit_category_selector category: "Food" material: GOLDEN_APPLE - name: "&6&l🍖 FOOD" + name: "🍖 FOOD" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &7Category: &6&lFood" - - " &7Available Kits: &f%kit_count%" + - " Category: Food" + - " Available Kits: %kit_count%" - " " - - " &8▪ &7Food supplies" - - " &8▪ &7Golden foods" - - " &8▪ &7Consumables" + - " ▪ Food supplies" + - " ▪ Golden foods" + - " ▪ Consumables" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a▶ &7Click to browse food kits" + - "━━━━━━━━━━━━━━━━━━━" + - "▶ Click to browse food kits" actions: - type: open inventory inventory: 'kits_category_food' @@ -191,39 +191,39 @@ items: info-book: slot: 11 material: BOOK - name: "&e&lInformation" + name: "Information" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&e&l► &7Left Click: &fOpen category" - - "&e&l► &7Categories: &f3 available" - - "&e&l► &7Permission: &fBased on kit" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "► Left Click: Open category" + - "► Categories: 3 available" + - "► Permission: Based on kit" + - "━━━━━━━━━━━━━━━━━━━" cooldown-info: slot: 15 material: CLOCK - name: "&b&lKit Cooldowns" + name: "Kit Cooldowns" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Each kit has its own cooldown" - - "&7Check kit info for details" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Each kit has its own cooldown" + - "Check kit info for details" + - "━━━━━━━━━━━━━━━━━━━" # Bottom navigation close-button: slot: 45 material: BARRIER - name: "&c&l✖ CLOSE" + name: "✖ CLOSE" lore: - - "&7Close this menu" + - "Close this menu" closeInventory: true back-button: slot: 46 material: DARK_OAK_DOOR - name: "&c&l← BACK" + name: "← BACK" lore: - - "&7Return to kits menu" + - "Return to kits menu" actions: - type: open inventory inventory: 'kits' @@ -240,9 +240,9 @@ items: refresh-button: slot: 49 material: EMERALD - name: "&a&l↻ REFRESH" + name: "↻ REFRESH" lore: - - "&7Refresh kit categories" + - "Refresh kit categories" refreshOnClick: true bottom-deco-3: @@ -261,10 +261,10 @@ items: all-kits-button: slot: 53 material: CHEST - name: "&6&l📦 ALL KITS" + name: "📦 ALL KITS" lore: - - "&7View all kits without" - - "&7category filtering" + - "View all kits without" + - "category filtering" actions: - type: open inventory inventory: 'kits' \ No newline at end of file diff --git a/src/main/resources/modules/kits/kits_category_combat.yml b/src/main/resources/modules/kits/kits_category_combat.yml index 7ec06243..4a512390 100644 --- a/src/main/resources/modules/kits/kits_category_combat.yml +++ b/src/main/resources/modules/kits/kits_category_combat.yml @@ -15,7 +15,7 @@ size: 54 # Inventory size open-permission: null # Menu title with professional styling -title: "&4&l⚔ &c&lCOMBAT KITS &4&l⚔" +title: "⚔ COMBAT KITS ⚔" # Fill empty slots fillItem: @@ -45,12 +45,12 @@ items: title-sword: slot: 4 material: DIAMOND_SWORD - name: "&c&l⚔ COMBAT KITS ⚔" + name: "⚔ COMBAT KITS ⚔" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Browse all combat kits" - - "&7Total kits: &f%kit_count%" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Browse all combat kits" + - "Total kits: %kit_count%" + - "━━━━━━━━━━━━━━━━━━━" top-border-5: slot: 5 @@ -87,38 +87,38 @@ items: type: zessentials_kit_category category: "Combat" material: DIAMOND_SWORD - name: "&c&l⚔ %kit_display_name%" + name: "⚔ %kit_display_name%" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &7Kit Name: &f%kit_name%" - - " &7Cooldown: &b%cooldown%" + - " Kit Name: %kit_name%" + - " Cooldown: %cooldown%" - " " - - " &c⚔ &7Combat equipment kit" + - " ⚔ Combat equipment kit" - " " - - " &7Status: %available|&a✔ Available|&c✖ On cooldown%" - - " &7Time left: &e%time_remaining%" + - " Status: %available|✔ Available|✖ On cooldown%" + - " Time left: %time_remaining%" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a▶ &7Left-click to &fget kit" - - "&e▶ &7Right-click to &fpreview" + - "━━━━━━━━━━━━━━━━━━━" + - "▶ Left-click to get kit" + - "▶ Right-click to preview" # Bottom navigation previous-page: slot: 45 material: SPECTRAL_ARROW - name: "&e&l« PREVIOUS PAGE" + name: "« PREVIOUS PAGE" lore: - - "&7Go to previous page" + - "Go to previous page" actions: - type: previous page back-button: slots: [46, 47, 48] material: DARK_OAK_DOOR - name: "&c&l⬅ BACK" + name: "⬅ BACK" lore: - - "&7Return to categories" + - "Return to categories" actions: - type: open inventory inventory: 'kits_categories' @@ -126,21 +126,21 @@ items: refresh-button: slots: [49, 50, 51] material: EMERALD - name: "&a&l↻ REFRESH" + name: "↻ REFRESH" lore: - - "&7Refresh available kits" + - "Refresh available kits" refreshOnClick: true next-page: slot: 53 material: SPECTRAL_ARROW - name: "&e&lNEXT PAGE »" + name: "NEXT PAGE »" lore: - - "&7Go to next page" + - "Go to next page" actions: - type: next page page-info: slot: 52 material: PAPER - name: "&7Page &e%page% &7of &e%maxPage%" \ No newline at end of file + name: "Page %page% of %maxPage%" \ No newline at end of file diff --git a/src/main/resources/modules/kits/kits_category_default.yml b/src/main/resources/modules/kits/kits_category_default.yml index 22960312..bccfac43 100644 --- a/src/main/resources/modules/kits/kits_category_default.yml +++ b/src/main/resources/modules/kits/kits_category_default.yml @@ -15,7 +15,7 @@ size: 54 # Inventory size open-permission: null # Menu title with professional styling -title: "&6&l⛏ &e&lTOOLS CATEGORY &6&l⛏" +title: "⛏ TOOLS CATEGORY ⛏" # Fill empty slots fillItem: @@ -38,32 +38,32 @@ items: tools-overview: slot: 10 material: CRAFTING_TABLE - name: "&e&l⚒ TOOLS OVERVIEW" + name: "⚒ TOOLS OVERVIEW" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Select a subcategory below" - - "&7to browse specific tool kits" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Select a subcategory below" + - "to browse specific tool kits" + - "━━━━━━━━━━━━━━━━━━━" info-panel: slot: 13 material: COMPASS - name: "&b&lℹ INFORMATION" + name: "ℹ INFORMATION" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Total Categories: &f2" - - "&7Total Tool Kits: &f%kit_count%" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Total Categories: 2" + - "Total Tool Kits: %kit_count%" + - "━━━━━━━━━━━━━━━━━━━" categories-list: slot: 16 material: ANVIL - name: "&d&l⚙ CATEGORIES" + name: "⚙ CATEGORIES" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a▪ &7Beginner Tools" - - "&b▪ &7Advanced Tools" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "▪ Beginner Tools" + - "▪ Advanced Tools" + - "━━━━━━━━━━━━━━━━━━━" # Subcategory: Beginner beginner-tools: @@ -72,23 +72,23 @@ items: category: "Tools" subcategory: "Beginner" material: WOODEN_PICKAXE - name: "&a&l☘ BEGINNER TOOLS" + name: "☘ BEGINNER TOOLS" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &8▶ &7Level: &a&lBeginner" - - " &8▶ &7Kits Available: &f%kit_count%" + - " ▶ Level: Beginner" + - " ▶ Kits Available: %kit_count%" - " " - - " &7Perfect for new players!" - - " &7Includes basic tools and" - - " &7materials to get started." + - " Perfect for new players!" + - " Includes basic tools and" + - " materials to get started." - " " - - " &8• &7Wooden tools" - - " &8• &7Stone tools" - - " &8• &7Basic materials" + - " • Wooden tools" + - " • Stone tools" + - " • Basic materials" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&a&l➤ CLICK TO BROWSE" + - "━━━━━━━━━━━━━━━━━━━" + - "➤ CLICK TO BROWSE" actions: - type: open inventory inventory: 'kits_subcategory_default_beginner' @@ -104,23 +104,23 @@ items: category: "Tools" subcategory: "Advanced" material: NETHERITE_PICKAXE - name: "&b&l⚡ ADVANCED TOOLS" + name: "⚡ ADVANCED TOOLS" lore: - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" - " " - - " &8▶ &7Level: &b&lAdvanced" - - " &8▶ &7Kits Available: &f%kit_count%" + - " ▶ Level: Advanced" + - " ▶ Kits Available: %kit_count%" - " " - - " &7For experienced players!" - - " &7High-tier tools with" - - " &7powerful enchantments." + - " For experienced players!" + - " High-tier tools with" + - " powerful enchantments." - " " - - " &8• &7Diamond tools" - - " &8• &7Netherite tools" - - " &8• &7Enchanted gear" + - " • Diamond tools" + - " • Netherite tools" + - " • Enchanted gear" - " " - - "&8━━━━━━━━━━━━━━━━━━━" - - "&b&l➤ CLICK TO BROWSE" + - "━━━━━━━━━━━━━━━━━━━" + - "➤ CLICK TO BROWSE" actions: - type: open inventory inventory: 'kits_subcategory_default_advanced' @@ -139,20 +139,20 @@ items: quick-tip: slot: 31 material: EXPERIENCE_BOTTLE - name: "&a&l✨ QUICK TIP" + name: "✨ QUICK TIP" lore: - - "&8━━━━━━━━━━━━━━━━━━━" - - "&7Choose the category that" - - "&7matches your experience level!" - - "&8━━━━━━━━━━━━━━━━━━━" + - "━━━━━━━━━━━━━━━━━━━" + - "Choose the category that" + - "matches your experience level!" + - "━━━━━━━━━━━━━━━━━━━" # Bottom navigation back-button: slots: [46, 47, 48] material: DARK_OAK_DOOR - name: "&c&l⬅ BACK" + name: "⬅ BACK" lore: - - "&7Return to categories" + - "Return to categories" actions: - type: open inventory inventory: 'kits_categories' @@ -160,10 +160,10 @@ items: all-tools: slots: [49, 50, 51] material: CHEST - name: "&6&l📦 ALL TOOLS" + name: "📦 ALL TOOLS" lore: - - "&7View all tool kits" - - "&7without category filter" + - "View all tool kits" + - "without category filter" type: zessentials_kit_category category: "Tools" @@ -171,4 +171,4 @@ items: bottom-deco: slots: [45, 52, 53] material: IRON_BLOCK - name: "&7&l✦" \ No newline at end of file + name: "✦" \ No newline at end of file diff --git a/src/main/resources/modules/mailbox/mailbox.yml b/src/main/resources/modules/mailbox/mailbox.yml index 60ce828b..877aa28e 100644 --- a/src/main/resources/modules/mailbox/mailbox.yml +++ b/src/main/resources/modules/mailbox/mailbox.yml @@ -1,4 +1,4 @@ -name: "#3f3f3fᴍᴀɪʟʙᴏx" +name: "ᴍᴀɪʟʙᴏx" size: 54 items: items: @@ -7,7 +7,7 @@ items: item: lore: - '' - - '&f➥ &nLeft Click&r&7 to get the kit' + - "➥ Left Click to get the kit" slots: - 0-44 else: @@ -15,18 +15,18 @@ items: - 22 item: material: BARRIER - name: '&c&nNo Items Found' + name: "No Items Found" info: isPermanent: true slot: 49 item: material: BELL - name: '&fᴍᴀɪʟʙᴏx' + name: "ᴍᴀɪʟʙᴏx" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7The mailbox allows you to store items' - - '#3f3f3f• &7 so that you can recover them later' + - "ℹ Informations:" + - "• The mailbox allows you to store items" + - "• so that you can recover them later" - '' previous: @@ -35,7 +35,7 @@ items: slot: 45 item: url: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjllYTFkODYyNDdmNGFmMzUxZWQxODY2YmNhNmEzMDQwYTA2YzY4MTc3Yzc4ZTQyMzE2YTEwOThlNjBmYjdkMyJ9fX0=" - name: "#92bed8ᴘʀᴇᴠɪᴏᴜs ᴘᴀɢᴇ" + name: "ᴘʀᴇᴠɪᴏᴜs ᴘᴀɢᴇ" next: isPermanent: true @@ -43,4 +43,4 @@ items: slot: 53 item: url: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODI3MWE0NzEwNDQ5NWUzNTdjM2U4ZTgwZjUxMWE5ZjEwMmIwNzAwY2E5Yjg4ZTg4Yjc5NWQzM2ZmMjAxMDVlYiJ9fX0=" - name: "#92bed8ɴᴇxᴛ ᴘᴀɢᴇ" + name: "ɴᴇxᴛ ᴘᴀɢᴇ" diff --git a/src/main/resources/modules/mailbox/mailbox_admin.yml b/src/main/resources/modules/mailbox/mailbox_admin.yml index 539eaa19..b56e84d7 100644 --- a/src/main/resources/modules/mailbox/mailbox_admin.yml +++ b/src/main/resources/modules/mailbox/mailbox_admin.yml @@ -1,4 +1,4 @@ -name: "#3f3f3fᴍᴀɪʟʙᴏx" +name: "ᴍᴀɪʟʙᴏx" size: 54 items: items: @@ -7,10 +7,10 @@ items: item: lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Expires in#3f3f3f: #4cd5ff%expiration%' + - "ℹ Informations:" + - "• Expires in: %expiration%" - '' - - '&f➥ &nLeft Click&r&7 to get the kit' + - "➥ Left Click to get the kit" slots: - 0-44 else: @@ -18,18 +18,18 @@ items: - 22 item: material: BARRIER - name: '&c&nNo Items Found' + name: "No Items Found" info: isPermanent: true slot: 49 item: material: BELL - name: '&fᴍᴀɪʟʙᴏx' + name: "ᴍᴀɪʟʙᴏx" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7The mailbox allows you to store items' - - '#3f3f3f• &7 so that you can recover them later' + - "ℹ Informations:" + - "• The mailbox allows you to store items" + - "• so that you can recover them later" - '' previous: @@ -38,7 +38,7 @@ items: slot: 45 item: url: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjllYTFkODYyNDdmNGFmMzUxZWQxODY2YmNhNmEzMDQwYTA2YzY4MTc3Yzc4ZTQyMzE2YTEwOThlNjBmYjdkMyJ9fX0=" - name: "#92bed8ᴘʀᴇᴠɪᴏᴜs ᴘᴀɢᴇ" + name: "ᴘʀᴇᴠɪᴏᴜs ᴘᴀɢᴇ" next: isPermanent: true @@ -46,4 +46,4 @@ items: slot: 53 item: url: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODI3MWE0NzEwNDQ5NWUzNTdjM2U4ZTgwZjUxMWE5ZjEwMmIwNzAwY2E5Yjg4ZTg4Yjc5NWQzM2ZmMjAxMDVlYiJ9fX0=" - name: "#92bed8ɴᴇxᴛ ᴘᴀɢᴇ" + name: "ɴᴇxᴛ ᴘᴀɢᴇ" diff --git a/src/main/resources/modules/rules/rules.yml b/src/main/resources/modules/rules/rules.yml index d9a7073c..94c1c510 100644 --- a/src/main/resources/modules/rules/rules.yml +++ b/src/main/resources/modules/rules/rules.yml @@ -1,30 +1,30 @@ -name: "#3f3f3fʀᴜʟᴇs" +name: "ʀᴜʟᴇs" size: 27 items: info: slot: 12 item: material: RED_BANNER - name: "#ff0000ʀᴜʟᴇs ɪɴғᴏʀᴍᴀᴛɪᴏɴs" + name: "ʀᴜʟᴇs ɪɴғᴏʀᴍᴀᴛɪᴏɴs" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Following the rules ensures' - - '#3f3f3f• &7a fair and &aenjoyable &7experience' - - '#3f3f3f• &7for everyone, fostering a &apositive' - - '#3f3f3f• &7community atmophere !' + - "ℹ Informations:" + - "• Following the rules ensures" + - "• a fair and enjoyable experience" + - "• for everyone, fostering a positive" + - "• community atmophere !" - '' r1: slot: 14 item: material: RED_DYE - name: "#ff0000sᴇʀᴠᴇʀ ʀᴜʟᴇs #1" + name: "sᴇʀᴠᴇʀ ʀᴜʟᴇs #1" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Respect all players and staff.' - - '#3f3f3f• &7No grieging or stealing.' - - '#3f3f3f• &7No cheating or hacking.' - - '#3f3f3f• &7Keep chat clean and respectful.' - - '#3f3f3f• &7No spamming or advertising.' + - "ℹ Informations:" + - "• Respect all players and staff." + - "• No grieging or stealing." + - "• No cheating or hacking." + - "• Keep chat clean and respectful." + - "• No spamming or advertising." - '' \ No newline at end of file diff --git a/src/main/resources/modules/sanction/sanction.yml b/src/main/resources/modules/sanction/sanction.yml index c43c049a..574eea6d 100644 --- a/src/main/resources/modules/sanction/sanction.yml +++ b/src/main/resources/modules/sanction/sanction.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fSanction %zessentials_user_target_player_name%' +name: "Sanction %zessentials_user_target_player_name%" size: 27 items: player: @@ -6,15 +6,15 @@ items: slot: 13 item: material: PLAYER_HEAD - name: '&f%target%' + name: "%target%" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Is Banned#3f3f3f: #4cd5ff%is_ban%' - - '#3f3f3f• &7Is Muted#3f3f3f: #4cd5ff%is_mute%' + - "ℹ Informations:" + - "• Is Banned: %is_ban%" + - "• Is Muted: %is_mute%" - '' - - '&f➥ &nLeft Click&r&7 to sanction the player' - - '&f➦ &nRight Click&r&7 to see the history of sanctions' + - "➥ Left Click to sanction the player" + - "➦ Right Click to see the history of sanctions" ban: type: ZESSENTIALS_SANCTION slot: 15 @@ -24,10 +24,10 @@ items: sanction: UNBAN item: material: RED_DYE - name: '&cThe player is banned' + name: "The player is banned" lore: - '' - - '&f➥ &nClick&r&7 to unban the player' + - "➥ Click to unban the player" mute: type: ZESSENTIALS_SANCTION slot: 11 @@ -37,7 +37,7 @@ items: sanction: UNMUTE item: material: RED_DYE - name: '&cThe player is muted' + name: "The player is muted" lore: - '' - - '&f➥ &nClick&r&7 to unmute the player' + - "➥ Click to unmute the player" diff --git a/src/main/resources/modules/sanction/sanction_history.yml b/src/main/resources/modules/sanction/sanction_history.yml index c780d4cb..325b2275 100644 --- a/src/main/resources/modules/sanction/sanction_history.yml +++ b/src/main/resources/modules/sanction/sanction_history.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fSanctions History %zessentials_user_target_player_name%' +name: "Sanctions History %zessentials_user_target_player_name%" size: 54 items: back: @@ -7,7 +7,7 @@ items: slot: 49 item: material: BARRIER - name: "&cGo Back" + name: "Go Back" next: type: NEXT @@ -15,7 +15,7 @@ items: slot: 50 item: material: ARROW - name: "&fNext" + name: "Next" previous: type: PREVIOUS @@ -23,7 +23,7 @@ items: slot: 48 item: material: ARROW - name: "&fPrevious" + name: "Previous" sanctions: type: ZESSENTIALS_SANCTIONS @@ -32,14 +32,14 @@ items: - 0-44 item: material: '%material%' - name: '&fType&8: &b%type%' + name: "Type: %type%" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Reason#3f3f3f: #4cd5ff%reason%' - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff%duration%' - - '#3f3f3f• &7Remaining#3f3f3f: #4cd5ff%remaining%' - - '#3f3f3f• &7Created At#3f3f3f: #4cd5ff%created_at%' - - '#3f3f3f• &7Expired At#3f3f3f: #4cd5ff%expired_at%' - - '#3f3f3f• &7By#3f3f3f: #4cd5ff%sender%' + - "ℹ Informations:" + - "• Reason: %reason%" + - "• Duration: %duration%" + - "• Remaining: %remaining%" + - "• Created At: %created_at%" + - "• Expired At: %expired_at%" + - "• By: %sender%" - '' diff --git a/src/main/resources/modules/sanction/sanctions.yml b/src/main/resources/modules/sanction/sanctions.yml index 14bdd04d..d64c5461 100644 --- a/src/main/resources/modules/sanction/sanctions.yml +++ b/src/main/resources/modules/sanction/sanctions.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fSanctions of %zessentials_user_target_player_name%' +name: "Sanctions of %zessentials_user_target_player_name%" size: 54 items: back: @@ -6,61 +6,61 @@ items: slot: 49 item: material: BARRIER - name: "&cGo Back" + name: "Go Back" btn-0: slot: 0 item: material: FISHING_ROD - name: '&fProvocations' + name: "Provocations" btn-1: slot: 1 item: material: WOODEN_SWORD - name: '&fSpam/Flood' + name: "Spam/Flood" btn-2: slot: 2 item: material: STONE_SWORD - name: '&fHarassment' + name: "Harassment" btn-3: slot: 3 item: material: GOLDEN_SWORD - name: '&f' + name: "" btn-4: slot: 4 item: material: IRON_SWORD - name: '&f' + name: "" btn-5: slot: 5 item: material: DIAMOND_SWORD - name: '&f' + name: "" btn-6: slot: 6 item: material: NETHERITE_SWORD - name: '&f' + name: "" btn-7: slot: 7 item: material: TRIDENT - name: '&f' + name: "" btn-8: slot: 8 item: material: SHIELD - name: '&f' + name: "" btn-9: slot: 9 @@ -70,11 +70,11 @@ items: reason: "Provocation" item: material: GREEN_STAINED_GLASS_PANE - name: '&fProvocations' + name: "Provocations" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff1 hour' + - "• Duration: 1 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-18: slot: 18 type: ZESSENTIALS_SANCTION @@ -83,11 +83,11 @@ items: reason: "Provocation" item: material: YELLOW_STAINED_GLASS_PANE - name: '&fProvocations' + name: "Provocations" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff2 hours' + - "• Duration: 2 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-27: slot: 27 type: ZESSENTIALS_SANCTION @@ -96,11 +96,11 @@ items: reason: "Provocation" item: material: ORANGE_STAINED_GLASS_PANE - name: '&fProvocations' + name: "Provocations" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff4 hours' + - "• Duration: 4 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-36: slot: 36 type: ZESSENTIALS_SANCTION @@ -109,11 +109,11 @@ items: reason: "Provocation" item: material: RED_STAINED_GLASS_PANE - name: '&fProvocations' + name: "Provocations" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff24 hours' + - "• Duration: 24 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-10: slot: 10 @@ -123,11 +123,11 @@ items: reason: "Spam/Flood" item: material: GREEN_STAINED_GLASS_PANE - name: '&fMute 1h' + name: "Mute 1h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff1 hour' + - "• Duration: 1 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-19: slot: 19 @@ -137,11 +137,11 @@ items: reason: "Spam/Flood" item: material: YELLOW_STAINED_GLASS_PANE - name: '&fMute 2h' + name: "Mute 2h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff2 hours' + - "• Duration: 2 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-28: slot: 28 @@ -151,11 +151,11 @@ items: reason: "Spam/Flood" item: material: ORANGE_STAINED_GLASS_PANE - name: '&fMute 4h' + name: "Mute 4h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff4 hours' + - "• Duration: 4 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-37: slot: 37 @@ -165,11 +165,11 @@ items: reason: "Spam/Flood" item: material: RED_STAINED_GLASS_PANE - name: '&fMute 24h' + name: "Mute 24h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff24 hours' + - "• Duration: 24 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-11: slot: 11 @@ -179,11 +179,11 @@ items: reason: "Harassment" item: material: GREEN_STAINED_GLASS_PANE - name: '&fMute 24h' + name: "Mute 24h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff24 hours' + - "• Duration: 24 hours" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-20: slot: 20 @@ -193,11 +193,11 @@ items: reason: "Harassment" item: material: YELLOW_STAINED_GLASS_PANE - name: '&fBan 7d' + name: "Ban 7d" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff7 days' + - "• Duration: 7 days" - '' - - '&f➥ &nClick&r&7 to ban the player' + - "➥ Click to ban the player" btn-29: slot: 29 @@ -207,11 +207,11 @@ items: reason: "Harassment" item: material: ORANGE_STAINED_GLASS_PANE - name: '&fBan 15d' + name: "Ban 15d" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff15 days' + - "• Duration: 15 days" - '' - - '&f➥ &nClick&r&7 to ban the player' + - "➥ Click to ban the player" btn-38: slot: 38 @@ -221,11 +221,11 @@ items: reason: "Harassment" item: material: RED_STAINED_GLASS_PANE - name: '&fBan 30d' + name: "Ban 30d" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff30 days' + - "• Duration: 30 days" - '' - - '&f➥ &nClick&r&7 to ban the player' + - "➥ Click to ban the player" btn-12: slot: 12 @@ -235,11 +235,11 @@ items: reason: "Advertising" item: material: GREEN_STAINED_GLASS_PANE - name: '&fMute 1h' + name: "Mute 1h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff1 hour' + - "• Duration: 1 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-21: slot: 21 @@ -249,11 +249,11 @@ items: reason: "Advertising" item: material: YELLOW_STAINED_GLASS_PANE - name: '&fMute 2h' + name: "Mute 2h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff2 hour' + - "• Duration: 2 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-30: slot: 30 @@ -263,11 +263,11 @@ items: reason: "Advertising" item: material: ORANGE_STAINED_GLASS_PANE - name: '&fMute 4h' + name: "Mute 4h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff4 hour' + - "• Duration: 4 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" btn-39: slot: 39 @@ -277,8 +277,8 @@ items: reason: "Advertising" item: material: RED_STAINED_GLASS_PANE - name: '&fMute 24h' + name: "Mute 24h" lore: - - '#3f3f3f• &7Duration#3f3f3f: #4cd5ff24 hour' + - "• Duration: 24 hour" - '' - - '&f➥ &nClick&r&7 to mute the player' + - "➥ Click to mute the player" diff --git a/src/main/resources/modules/scoreboard/config.yml b/src/main/resources/modules/scoreboard/config.yml index bc86f991..6831f1e8 100644 --- a/src/main/resources/modules/scoreboard/config.yml +++ b/src/main/resources/modules/scoreboard/config.yml @@ -45,15 +45,15 @@ task-conditions: scoreboards: default: default: true - title: "#53edd6zEssentials" + title: "zEssentials" lines: - line: 1 text: "" - line: 2 - text: "&7Balance: &a%zessentials_user_formatted_balance_money%" + text: "Balance: %zessentials_user_formatted_balance_money%" event: "fr.maxlego08.essentials.api.event.events.user.UserEconomyPostUpdateEvent" - line: 3 - text: "&7Coins: &a%zessentials_user_formatted_balance_coins%" + text: "Coins: %zessentials_user_formatted_balance_coins%" event: "fr.maxlego08.essentials.api.event.events.user.UserEconomyPostUpdateEvent" - line: 4 text: "" @@ -66,18 +66,18 @@ scoreboards: delayBetween: 5000 # in milliseconds animationSpeed: 30 # in milliseconds admin: - title: "#53edd6zEssentials" + title: "zEssentials" lines: - line: 1 text: "" - line: 2 - text: "&7Balance: &a%zessentials_user_formatted_balance_money%" + text: "Balance: %zessentials_user_formatted_balance_money%" event: "fr.maxlego08.essentials.api.event.events.user.UserEconomyPostUpdateEvent" - line: 3 - text: "&7Coins: &a%zessentials_user_formatted_balance_coins%" + text: "Coins: %zessentials_user_formatted_balance_coins%" event: "fr.maxlego08.essentials.api.event.events.user.UserEconomyPostUpdateEvent" - line: 4 - text: "&7Rank: &cAdmin" + text: "Rank: Admin" - line: 5 text: "" - line: 6 diff --git a/src/main/resources/modules/teleportation/confirm_request_here_inventory.yml b/src/main/resources/modules/teleportation/confirm_request_here_inventory.yml index 1d445ff4..b8886ffd 100644 --- a/src/main/resources/modules/teleportation/confirm_request_here_inventory.yml +++ b/src/main/resources/modules/teleportation/confirm_request_here_inventory.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fᴄᴏɴꜰɪʀᴍ ʀᴇǫᴜᴇѕᴛ' +name: "ᴄᴏɴꜰɪʀᴍ ʀᴇǫᴜᴇѕᴛ" size: 27 items: cancel: @@ -6,15 +6,15 @@ items: closeInventory: true item: material: RED_STAINED_GLASS_PANE - name: '#ff0000ᴄᴀɴᴄᴇʟ' + name: "ᴄᴀɴᴄᴇʟ" lore: - - '&7Click to cancel the teleport request' + - "Click to cancel the teleport request" head: slot: 13 item: playerHead: '%zessentials_user_target_player_name%' - name: '#99E0FF%zessentials_user_target_player_name%' + name: "%zessentials_user_target_player_name%" confirm: type: ZESSENTIALS_TELEPORTATION_CONFIRM_HERE @@ -22,6 +22,6 @@ items: closeInventory: true item: material: GREEN_STAINED_GLASS_PANE - name: '#00ff00ᴄᴏɴғɪʀᴍ' + name: "ᴄᴏɴғɪʀᴍ" lore: - - '&7Click to send &n%zessentials_user_target_player_name%&r &7a tpa here request' \ No newline at end of file + - "Click to send %zessentials_user_target_player_name% a tpa here request" \ No newline at end of file diff --git a/src/main/resources/modules/teleportation/confirm_request_inventory.yml b/src/main/resources/modules/teleportation/confirm_request_inventory.yml index 1cf5bd51..61ab8137 100644 --- a/src/main/resources/modules/teleportation/confirm_request_inventory.yml +++ b/src/main/resources/modules/teleportation/confirm_request_inventory.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fᴄᴏɴꜰɪʀᴍ ʀᴇǫᴜᴇѕᴛ' +name: "ᴄᴏɴꜰɪʀᴍ ʀᴇǫᴜᴇѕᴛ" size: 27 items: cancel: @@ -6,15 +6,15 @@ items: closeInventory: true item: material: RED_STAINED_GLASS_PANE - name: '#ff0000ᴄᴀɴᴄᴇʟ' + name: "ᴄᴀɴᴄᴇʟ" lore: - - '&7Click to cancel the teleport request' + - "Click to cancel the teleport request" head: slot: 13 item: playerHead: '%zessentials_user_target_player_name%' - name: '#99E0FF%zessentials_user_target_player_name%' + name: "%zessentials_user_target_player_name%" confirm: type: ZESSENTIALS_TELEPORTATION_CONFIRM @@ -22,6 +22,6 @@ items: closeInventory: true item: material: GREEN_STAINED_GLASS_PANE - name: '#00ff00ᴄᴏɴғɪʀᴍ' + name: "ᴄᴏɴғɪʀᴍ" lore: - - '&7Click to send &n%zessentials_user_target_player_name%&r &7a tpa request' \ No newline at end of file + - "Click to send %zessentials_user_target_player_name% a tpa request" \ No newline at end of file diff --git a/src/main/resources/modules/vault/config.yml b/src/main/resources/modules/vault/config.yml index e60428bb..e1072e0e 100644 --- a/src/main/resources/modules/vault/config.yml +++ b/src/main/resources/modules/vault/config.yml @@ -16,7 +16,7 @@ enable: true # The maximum number of vaults that a player can have max-vaults: 7 -default-vault-name: "<#353535>Vault-%vault-id%" +default-vault-name: "Vault-%vault-id%" # Item that will be displayed when a vault is opened icon-open: "MINECART" diff --git a/src/main/resources/modules/vault/vault-admin.yml b/src/main/resources/modules/vault/vault-admin.yml index a9be7a3a..6f4a1339 100644 --- a/src/main/resources/modules/vault/vault-admin.yml +++ b/src/main/resources/modules/vault/vault-admin.yml @@ -1,4 +1,4 @@ -name: "&f%player% - %vault-name%" +name: "%player% - %vault-name%" size: 54 items: disableSlots: @@ -8,7 +8,7 @@ items: - 0-44 item: material: STRUCTURE_VOID - name: "ʏᴏᴜ ᴅᴏɴ’ᴛ ʜᴀᴠᴇ ᴛʜɪs sʟᴏᴛ" + name: "ʏᴏᴜ ᴅᴏɴ’ᴛ ʜᴀᴠᴇ ᴛʜɪs sʟᴏᴛ" slots: isPermanent: true type: ZESSENTIALS_VAULT_SLOTS_ITEMS @@ -25,7 +25,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 1 @@ -34,9 +34,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault2: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 2 @@ -46,7 +46,7 @@ items: name: "%vault-name%" amount: 5 lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 2 @@ -55,9 +55,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault3: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 3 @@ -67,7 +67,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 3 @@ -76,9 +76,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault4: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 4 @@ -88,7 +88,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 4 @@ -97,9 +97,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault5: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 5 @@ -109,7 +109,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 5 @@ -118,9 +118,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault6: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 6 @@ -130,7 +130,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 6 @@ -139,9 +139,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault7: type: ZESSENTIALS_VAULT_OPEN_ADMIN vault: 7 @@ -151,7 +151,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION_ADMIN vault: 7 @@ -160,6 +160,6 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" diff --git a/src/main/resources/modules/vault/vault-configuration.yml b/src/main/resources/modules/vault/vault-configuration.yml index 5b20cbf1..eb78a186 100644 --- a/src/main/resources/modules/vault/vault-configuration.yml +++ b/src/main/resources/modules/vault/vault-configuration.yml @@ -1,4 +1,4 @@ -name: '&8ᴄᴏɴғɪɢᴜʀᴀᴛɪᴏɴ' +name: "ᴄᴏɴғɪɢᴜʀᴀᴛɪᴏɴ" size: 36 items: rename: @@ -6,22 +6,22 @@ items: slot: 11 item: material: PAPER - name: '&eʀᴇɴᴀᴍᴇ' + name: "ʀᴇɴᴀᴍᴇ" lore: - - '#fc99f8Left Click &7to change the name' - - '#fc99f8Right Click &7to remove the name' + - "Left Click to change the name" + - "Right Click to remove the name" icon: type: ZESSENTIALS_VAULT_CHANGE_ICON slot: 15 item: material: '%vault-icon%' - name: '&eᴄʜᴀɴɢᴇ ɪᴄᴏɴ' + name: "ᴄʜᴀɴɢᴇ ɪᴄᴏɴ" lore: - - '#fc99f8Left Click &7to change the icon' - - '#fc99f8Right Click &7to remove the icon' + - "Left Click to change the icon" + - "Right Click to remove the icon" back: type: BACK slot: 31 item: material: BARRIER - name: '&cʙᴀᴄᴋ' + name: "ʙᴀᴄᴋ" diff --git a/src/main/resources/modules/vault/vault.yml b/src/main/resources/modules/vault/vault.yml index 7345aca1..5470b2fd 100644 --- a/src/main/resources/modules/vault/vault.yml +++ b/src/main/resources/modules/vault/vault.yml @@ -1,4 +1,4 @@ -name: "&f%vault-name%" +name: "%vault-name%" size: 54 items: disableSlots: @@ -8,7 +8,7 @@ items: - 0-44 item: material: STRUCTURE_VOID - name: "ʏᴏᴜ ᴅᴏɴ’ᴛ ʜᴀᴠᴇ ᴛʜɪs sʟᴏᴛ" + name: "ʏᴏᴜ ᴅᴏɴ’ᴛ ʜᴀᴠᴇ ᴛʜɪs sʟᴏᴛ" slots: isPermanent: true type: ZESSENTIALS_VAULT_SLOTS_ITEMS @@ -25,7 +25,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 1 @@ -34,9 +34,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault2: type: ZESSENTIALS_VAULT_OPEN vault: 2 @@ -46,7 +46,7 @@ items: name: "%vault-name%" amount: 5 lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 2 @@ -55,9 +55,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault3: type: ZESSENTIALS_VAULT_OPEN vault: 3 @@ -67,7 +67,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 3 @@ -76,9 +76,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault4: type: ZESSENTIALS_VAULT_OPEN vault: 4 @@ -88,7 +88,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 4 @@ -97,9 +97,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault5: type: ZESSENTIALS_VAULT_OPEN vault: 5 @@ -109,7 +109,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 5 @@ -118,9 +118,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault6: type: ZESSENTIALS_VAULT_OPEN vault: 6 @@ -130,7 +130,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 6 @@ -139,9 +139,9 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" vault7: type: ZESSENTIALS_VAULT_OPEN vault: 7 @@ -151,7 +151,7 @@ items: name: "%vault-name%" amount: "%vault-id%" lore: - - "&8Click to open the vault %vault-id%" + - "Click to open the vault %vault-id%" else: type: ZESSENTIALS_VAULT_NO_PERMISSION vault: 7 @@ -160,6 +160,6 @@ items: name: "%vault-name%" lore: - "" - - "✘ You do not have access to se vault" + - "✘ You do not have access to se vault" - "" - - "&7Get slots on the shop!" + - "Get slots on the shop!" diff --git a/src/main/resources/modules/vote/config.yml b/src/main/resources/modules/vote/config.yml index 10dc58a2..10d933da 100644 --- a/src/main/resources/modules/vote/config.yml +++ b/src/main/resources/modules/vote/config.yml @@ -70,8 +70,8 @@ sites: enable-offline-vote-message: true # Value for the placeholder: %zessentials_vote_site_cooldown_% -placeholder-available: "Available ✔" -placeholder-cooldown: "%cooldown% ✘" +placeholder-available: "Available ✔" +placeholder-cooldown: "%cooldown% ✘" # Date to reset the votes of the players, the default setting reset the votes on the first day of the month at 0h0 reset-configuration: diff --git a/src/main/resources/modules/vote/vote.yml b/src/main/resources/modules/vote/vote.yml index aae6509f..aaf79dbb 100644 --- a/src/main/resources/modules/vote/vote.yml +++ b/src/main/resources/modules/vote/vote.yml @@ -1,45 +1,45 @@ -name: "#3f3f3fᴠᴏᴛᴇ" +name: "ᴠᴏᴛᴇ" size: 54 items: voteparty: slot: 13 item: material: BELL - name: "#fc07f3&lᴄᴏᴍᴍᴜɴɪᴛʏ ᴀᴅᴠᴀɴᴄᴇᴍᴇɴᴛ" + name: "ᴄᴏᴍᴍᴜɴɪᴛʏ ᴀᴅᴠᴀɴᴄᴇᴍᴇɴᴛ" lore: - - "&8VoteParty" + - "VoteParty" - "" - - "&7By voting you will make progress" - - "&7VoteParty. To unlock a reward" - - "&7it is necessary to vote &f%zessentials_voteparty_objective% times" + - "By voting you will make progress" + - "VoteParty. To unlock a reward" + - "it is necessary to vote %zessentials_voteparty_objective% times" - "" - "" - - "&f&lᴘʀᴏɢʀᴇss" - - "&8[#fc99f8%zessentials_voteparty_amount% %zessentials_progressbar_{zessentials_voteparty_amount}_{zessentials_voteparty_objective}_20_|_#fc99f8_&7% #fc99f8%zessentials_voteparty_objective%&8]" + - "ᴘʀᴏɢʀᴇss" + - "[%zessentials_voteparty_amount% %zessentials_progressbar_{zessentials_voteparty_amount}_{zessentials_voteparty_objective}_20_|__% %zessentials_voteparty_objective%]" - "" - - "&f&lʀᴇᴡᴀʀᴅs" - - " #f8b175• #e5c2625.000$ &8(Double if VIP #fcd955✭&8)" + - "ʀᴇᴡᴀʀᴅs" + - " • 5.000$ (Double if VIP ✭)" information: update: true slot: 31 item: material: BOOK - name: "#e4cc00ᴠᴏᴛᴇ ɴᴏᴡ" + name: "ᴠᴏᴛᴇ ɴᴏᴡ" lore: - "" - - " #f8b175• &7Site 1 %zessentials_vote_site_cooldown_ServeurMinecraftVote%" - - " #f8b175• &7Site 2 %zessentials_vote_site_cooldown_ServeurPrive%" - - " #f8b175• &7Site 3 %zessentials_vote_site_cooldown_ServeursMinecraft%" - - " #f8b175• &7Site 4 %zessentials_vote_site_cooldown_TopServeurs%" + - " • Site 1 %zessentials_vote_site_cooldown_ServeurMinecraftVote%" + - " • Site 2 %zessentials_vote_site_cooldown_ServeurPrive%" + - " • Site 3 %zessentials_vote_site_cooldown_ServeursMinecraft%" + - " • Site 4 %zessentials_vote_site_cooldown_TopServeurs%" - "" - - "&fClick to vote !" + - "Click to vote !" actions: - type: book author: "zEssentials" - title: "#e4cc00ᴠᴏᴛᴇ ɴᴏᴡ" + title: "ᴠᴏᴛᴇ ɴᴏᴡ" lines: # Book pages 1: # First page - - ' #e4cc00ᴠᴏᴛᴇ ɴᴏᴡ' + - " ᴠᴏᴛᴇ ɴᴏᴡ" - '' - '' - - '#f0af24Open URL' + - "Open Serveur Minecraft Vote !\">Open URL" diff --git a/src/main/resources/modules/warp/warps.yml b/src/main/resources/modules/warp/warps.yml index 94e011ce..c3c81fe7 100644 --- a/src/main/resources/modules/warp/warps.yml +++ b/src/main/resources/modules/warp/warps.yml @@ -1,4 +1,4 @@ -name: '#3f3f3fᴡᴀʀᴘѕ' +name: "ᴡᴀʀᴘѕ" size: 27 items: example: @@ -7,10 +7,10 @@ items: slot: 13 item: material: GRASS_BLOCK - name: "&fᴡᴀʀᴘ ᴇxᴀᴍᴘʟᴇ" + name: "ᴡᴀʀᴘ ᴇxᴀᴍᴘʟᴇ" lore: - - "&8Click to teleport to the warp" + - "Click to teleport to the warp" else: item: material: BARRIER - name: "#ff0000ʏᴏᴜ ᴅᴏ ɴᴏᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴ ᴛᴏ ᴜsᴇ sᴇ ᴡᴀʀᴘ" + name: "ʏᴏᴜ ᴅᴏ ɴᴏᴛ ʜᴀᴠᴇ ᴘᴇʀᴍɪssɪᴏɴ ᴛᴏ ᴜsᴇ sᴇ ᴡᴀʀᴘ" diff --git a/src/main/resources/modules/worldedit/config.yml b/src/main/resources/modules/worldedit/config.yml index 29a5b8ba..b27db82d 100644 --- a/src/main/resources/modules/worldedit/config.yml +++ b/src/main/resources/modules/worldedit/config.yml @@ -20,16 +20,16 @@ items: price-multiplier: 1.2 item: material: BLAZE_ROD - name: "#eb5021ᴡᴏʀʟᴅᴇᴅɪᴛ" + name: "ᴡᴏʀʟᴅᴇᴅɪᴛ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Select two positions for' - - '#3f3f3f• &7place or destroy blocks' + - "ℹ Informations:" + - "• Select two positions for" + - "• place or destroy blocks" - '' - - '#3f3f3f• &7Max Blocks#3f3f3f: #4cd5ff500' - - '#3f3f3f• &7Max Distance#3f3f3f: #4cd5ff20' - - '#3f3f3f• &7Use#3f3f3f: #4cd5ff%use%#3f3f3f/#4cf8ff50' + - "• Max Blocks: 500" + - "• Max Distance: 20" + - "• Use: %use%/50" - '' - name: admin-Wand display-name: "Admin Wand" @@ -37,16 +37,16 @@ items: price-multiplier: 0 item: material: BLAZE_ROD - name: "#eb5021ᴡᴏʀʟᴅᴇᴅɪᴛ" + name: "ᴡᴏʀʟᴅᴇᴅɪᴛ" lore: - '' - - '#ffd353ℹ Informations#3f3f3f:' - - '#3f3f3f• &7Select two positions for' - - '#3f3f3f• &7place or destroy blocks' + - "ℹ Informations:" + - "• Select two positions for" + - "• place or destroy blocks" - '' - - '#3f3f3f• &7Max Blocks#3f3f3f: #4cd5ff∞' - - '#3f3f3f• &7Max Distance#3f3f3f: #4cd5ff∞' - - '#3f3f3f• &7Use#3f3f3f: #4cd5ff%use%#3f3f3f/#4cf8ff∞' + - "• Max Blocks: ∞" + - "• Max Distance: ∞" + - "• Use: %use%/∞" - '' blacklist-blocks: diff --git a/src/main/resources/modules/worldedit/pw-help.yml b/src/main/resources/modules/worldedit/pw-help.yml index d52c2196..8dedbf4b 100644 --- a/src/main/resources/modules/worldedit/pw-help.yml +++ b/src/main/resources/modules/worldedit/pw-help.yml @@ -1,181 +1,181 @@ -name: "&8Help Player Warp" +name: "Help Player Warp" size: 54 items: pw-set: slot: 11 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw set " + - "● /pw set " - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to place blocks in your selection" + - "Description" + - "● Allows you to place blocks in your selection" - "" - - "#edacfExample" - - "&7● &f/pw set stone" + - "xample" + - "● /pw set stone" pw-fill: slot: 12 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw fill " + - "● /pw fill " - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to fill your selection with blocks" - - "&7● &7This command will only take into account" - - "&7● &7the air blocks" + - "Description" + - "● Allows you to fill your selection with blocks" + - "● This command will only take into account" + - "● the air blocks" - "" - - "#edacfExample" - - "&7● &f/pw fill stone" + - "xample" + - "● /pw fill stone" pw-walls: slot: 13 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw walls " + - "● /pw walls " - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to create walls around your selection" + - "Description" + - "● Allows you to create walls around your selection" - "" - - "#edacfExample" - - "&7● &f/pw walls stone" + - "xample" + - "● /pw walls stone" pw-cyl: slot: 14 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw cyl []" + - "● /pw cyl []" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to create a cylinder from the first position" - - "&7● &fselected (pos1 or left click)" - - "&7● &7To define if the cylinder is filled or not," - - "&7● &7you must enter true or false" + - "Description" + - "● Allows you to create a cylinder from the first position" + - "● selected (pos1 or left click)" + - "● To define if the cylinder is filled or not," + - "● you must enter true or false" - "" - - "#edacfExample" - - "&7● &f/pw cyl stone 5 5 true" + - "xample" + - "● /pw cyl stone 5 5 true" pw-cut: slot: 15 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw cut" + - "● /pw cut" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to remove the blocks in your selection" + - "Description" + - "● Allows you to remove the blocks in your selection" - "" - - "#edacfExample" - - "&7● &f/pw cut" + - "xample" + - "● /pw cut" pw-confirm: slot: 20 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw confirm" + - "● /pw confirm" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to confirm the action" - - "&7● &7You must execute this command" - - "&7● &7after defining your action &8(/pw set, /pw fill etc)" + - "Description" + - "● Allows you to confirm the action" + - "● You must execute this command" + - "● after defining your action (/pw set, /pw fill etc)" - "" - - "#edacfExample" - - "&7● &f/pw confirm" + - "xample" + - "● /pw confirm" pw-pos1: slot: 21 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw pos1" + - "● /pw pos1" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to define the first position" - - "&7● &f of your selection" + - "Description" + - "● Allows you to define the first position" + - "● of your selection" - "" - - "#edacfExample" - - "&7● &f/pw pos1" + - "xample" + - "● /pw pos1" pw-pos2: slot: 22 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw pos2" + - "● /pw pos2" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to define the second position" - - "&7● &f of your selection" + - "Description" + - "● Allows you to define the second position" + - "● of your selection" - "" - - "#edacfExample" - - "&7● &f/pw pos2" + - "xample" + - "● /pw pos2" pw-cancel: slot: 23 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw cancel" + - "● /pw cancel" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to cancel the current selection" + - "Description" + - "● Allows you to cancel the current selection" - "" - - "#edacfExample" - - "&7● &f/pw cancel" + - "xample" + - "● /pw cancel" pw-stop: slot: 24 item: material: PAPER - name: "#8cc0ccCommand" + name: "Command" lore: - - "&7● &f/pw stop" + - "● /pw stop" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to stop the current editing" - - "&7● &7Only the blocks not placed will be refunded" + - "Description" + - "● Allows you to stop the current editing" + - "● Only the blocks not placed will be refunded" - "" - - "#edacfExample" - - "&7● &f/pw stop" + - "xample" + - "● /pw stop" info1: slot: 42 item: material: PAPER - name: "#8cc0ccAdd multiple materials" + name: "Add multiple materials" lore: - - "&7● &fYou can define multiple materials" - - "&7● &fIn the same command, you must add a comma" - - "&7● &fbetween each material" + - "● You can define multiple materials" + - "● In the same command, you must add a comma" + - "● between each material" - "" - - "#edacfExample" - - "&7● &f/pw set #ff94d7stone#77ff77,#ff94d7dirt#77ff77,#ff94d7grass_block" + - "xample" + - "● /pw set stone,dirt,grass_block" info2: slot: 43 item: material: PAPER - name: "#8cc0ccModify the percentage" + name: "Modify the percentage" lore: - - "&7● &fYou can define the percentage to apply" - - "&7● &fTo a material, you must add a : and the number" - - "&7● &fbetween 1 and 100" + - "● You can define the percentage to apply" + - "● To a material, you must add a : and the number" + - "● between 1 and 100" - "" - - "#edacfExample" - - "&7● &f/pw set #ff94d7stone,dirt#77ff77:5#ff94d7,grass_block#77ff77:10" + - "xample" + - "● /pw set stone,dirt:5,grass_block:10" info3: slot: 40 item: material: PAPER - name: "#8cc0ccGet a baguette" + name: "Get a baguette" lore: - "" - - "&7● &fYou can get a #ff94d7baguette" - - "&7● &fIn voting &8(/vote)&f, in the store &8(/store&8)" - - "&7● &fOr in the island store &8(/isq&8)" + - "● You can get a baguette" + - "● In voting (/vote), in the store (/store)" + - "● Or in the island store (/isq)" - "" option-inventory: @@ -191,14 +191,14 @@ items: delay: 2 item: material: PAPER - name: "#8cc0ccOption&8: #ff94d7Inventory" + name: "Option: Inventory" lore: - "" - - "&7● #8cc0ccState&8: #77ff77Active" + - "● State: Active" - "" - - "#8cc0ccDescription" - - "&7● &fUses the blocks in your inventory" - - "&7● &fin addition to those in your /sac" + - "Description" + - "● Uses the blocks in your inventory" + - "● in addition to those in your /sac" else: actions: - type: player_command @@ -208,14 +208,14 @@ items: delay: 2 item: material: PAPER - name: "#8cc0ccOption&8: #ff94d7Inventory" + name: "Option: Inventory" lore: - "" - - "&7● #8cc0ccState&8: #ff3535Inactive" + - "● State: Inactive" - "" - - "#8cc0ccDescription" - - "&7● &fUses the blocks in your inventory" - - "&7● &fin addition to those in your /sac" + - "Description" + - "● Uses the blocks in your inventory" + - "● in addition to those in your /sac" option-bossbar: slot: 38 @@ -230,14 +230,14 @@ items: delay: 2 item: material: PAPER - name: "#8cc0ccOption&8: #ff94d7Progress bar" + name: "Option: Progress bar" lore: - "" - - "&7● #8cc0ccState&8: #77ff77Active" + - "● State: Active" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to display a progress bar" - - "&7● &fat the top of your screen" + - "Description" + - "● Allows you to display a progress bar" + - "● at the top of your screen" else: actions: - type: player_command @@ -247,11 +247,11 @@ items: delay: 2 item: material: PAPER - name: "#8cc0ccOption&8: #ff94d7Progress bar" + name: "Option: Progress bar" lore: - "" - - "&7● #8cc0ccState&8: #ff3535Inactive" + - "● State: Inactive" - "" - - "#8cc0ccDescription" - - "&7● &fAllows you to display a progress bar" - - "&7● &fat the top of your screen" \ No newline at end of file + - "Description" + - "● Allows you to display a progress bar" + - "● at the top of your screen" \ No newline at end of file diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index af8f4655..7f03caa5 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -7,7 +7,7 @@ description: Provides an essential, core set of commands. Requires Paper. website: https://groupez.dev/resources/zessentials.325/ authors: [ Maxlego08 ] contributors: [ Louis_Dew, Traqueur, JavaToastDev, Melon-Oof, alwyn974, Mapacheee, NeiiZun, groundbreakingmc, Noltox ] -api-version: '1.20' +api-version: '1.21.4' dependencies: server: diff --git a/src/main/resources/patterns/home_down.yml b/src/main/resources/patterns/home_down.yml index 04bc2a97..b2fd95df 100644 --- a/src/main/resources/patterns/home_down.yml +++ b/src/main/resources/patterns/home_down.yml @@ -10,9 +10,9 @@ button: action: LOWER item: material: RED_DYE - name: '#ff0000ɴᴏ ᴘᴇʀᴍɪssɪᴏɴ' + name: "ɴᴏ ᴘᴇʀᴍɪssɪᴏɴ" lore: - - '#fcfcfcYou need a higher rank for this home' + - "You need a higher rank for this home" else: view_requirement: @@ -28,9 +28,9 @@ button: item: material: GRAY_DYE - name: '#cfcfcfɴᴏ ʜᴏᴍᴇ sᴇᴛ' + name: "ɴᴏ ʜᴏᴍᴇ sᴇᴛ" lore: - - '#fcfcfcClick to create a home' + - 'Click to create a home' else: @@ -40,6 +40,6 @@ button: item: material: BLUE_DYE - name: '#00a4fcʜᴏᴍᴇ %home%' + name: "ʜᴏᴍᴇ %home%" lore: - - '#fcfcfcClick to delete this home' \ No newline at end of file + - 'Click to delete this home' \ No newline at end of file diff --git a/src/main/resources/patterns/home_up.yml b/src/main/resources/patterns/home_up.yml index 9963e295..5e9e106d 100644 --- a/src/main/resources/patterns/home_up.yml +++ b/src/main/resources/patterns/home_up.yml @@ -10,9 +10,9 @@ button: action: LOWER item: material: RED_BED - name: '#ff0000ɴᴏ ᴘᴇʀᴍɪssɪᴏɴ' + name: "ɴᴏ ᴘᴇʀᴍɪssɪᴏɴ" lore: - - '#fcfcfcYou need a higher rank for this home' + - "You need a higher rank for this home" else: view_requirement: @@ -28,9 +28,9 @@ button: item: material: LIGHT_GRAY_BED - name: '#cfcfcfɴᴏ ʜᴏᴍᴇ sᴇᴛ' + name: "ɴᴏ ʜᴏᴍᴇ sᴇᴛ" lore: - - '#fcfcfc- Click to create a home' + - "- Click to create a home" else: closeInventory: true @@ -38,6 +38,6 @@ button: - 'home home_%remove_one_home%' item: material: LIGHT_BLUE_BED - name: '#00a4fcʜᴏᴍᴇ %home%' + name: "ʜᴏᴍᴇ %home%" lore: - - '#fcfcfcClick to teleport to your home' \ No newline at end of file + - 'Click to teleport to your home' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 84bfe8fa..2f794e67 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,7 +6,7 @@ description: Provides an essential, core set of commands. Requires Paper; inacti website: https://groupez.dev/resources/zessentials.325/ authors: [ Maxlego08 ] contributors: [ Louis_Dew, Traqueur, JavaToastDev, Melon-Oof, alwyn974, Mapacheee, NeiiZun, groundbreakingmc, Noltox ] -api-version: '1.20' +api-version: '1.21.4' permissions: zessentials.paper.warning: