Merge pull request #358 from BentoBoxWorld/develop

Updated release
This commit is contained in:
tastybento 2024-11-16 19:37:02 -08:00 committed by GitHub
commit a92df39a30
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 1368 additions and 770 deletions

View File

@ -14,11 +14,11 @@ jobs:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with: with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
distribution: 'adopt' distribution: 'adopt'
java-version: 17 java-version: 21
- name: Cache SonarCloud packages - name: Cache SonarCloud packages
uses: actions/cache@v3 uses: actions/cache@v3
with: with:

32
pom.xml
View File

@ -28,23 +28,30 @@
<system>GitHub</system> <system>GitHub</system>
<url>https://github.com/BentoBoxWorld/Challenges/issues</url> <url>https://github.com/BentoBoxWorld/Challenges/issues</url>
</issueManagement> </issueManagement>
<distributionManagement>
<repository>
<id>bentoboxworld</id>
<url>https://repo.codemc.org/repository/bentoboxworld/</url>
</repository>
</distributionManagement>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version> <java.version>21</java.version>
<powermock.version>2.0.9</powermock.version> <powermock.version>2.0.9</powermock.version>
<!-- More visible way how to change dependency versions --> <!-- More visible way how to change dependency versions -->
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version> <spigot.version>1.21.3-R0.1-SNAPSHOT</spigot.version>
<spigot-annotations.version>1.2.3-SNAPSHOT</spigot-annotations.version> <spigot-annotations.version>1.2.3-SNAPSHOT</spigot-annotations.version>
<bentobox.version>2.1.0</bentobox.version> <bentobox.version>2.7.1-SNAPSHOT</bentobox.version>
<level.version>2.6.3</level.version> <level.version>2.6.3</level.version>
<vault.version>1.7</vault.version> <vault.version>1.7</vault.version>
<panelutils.version>1.2.0</panelutils.version> <panelutils.version>1.2.0</panelutils.version>
<!-- Revision variable removes warning about dynamic version --> <!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision> <revision>${build.version}-SNAPSHOT</revision>
<!-- This allows to change between versions and snapshots. --> <!-- This allows to change between versions and snapshots. -->
<build.version>1.3.1</build.version> <build.version>1.4.0</build.version>
<build.number>-LOCAL</build.number> <build.number>-LOCAL</build.number>
<!-- Sonar Cloud --> <!-- Sonar Cloud -->
<sonar.projectKey>BentoBoxWorld_Challenges</sonar.projectKey> <sonar.projectKey>BentoBoxWorld_Challenges</sonar.projectKey>
@ -83,17 +90,6 @@
</profile> </profile>
</profiles> </profiles>
<distributionManagement>
<snapshotRepository>
<id>codemc-snapshots</id>
<url>https://repo.codemc.org/repository/maven-snapshots</url>
</snapshotRepository>
<repository>
<id>codemc-releases</id>
<url>https://repo.codemc.org/repository/maven-releases</url>
</repository>
</distributionManagement>
<pluginRepositories> <pluginRepositories>
<pluginRepository> <pluginRepository>
<id>apache.snapshots</id> <id>apache.snapshots</id>
@ -108,6 +104,10 @@
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots</url> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots</url>
</repository> </repository>
<!-- CodeMC Repo for BentoBox --> <!-- CodeMC Repo for BentoBox -->
<repository>
<id>bentoboxworld</id>
<url>https://repo.codemc.io/repository/bentoboxworld/</url>
</repository>
<repository> <repository>
<id>codemc-repo</id> <id>codemc-repo</id>
<url>https://repo.codemc.io/repository/maven-public</url> <url>https://repo.codemc.io/repository/maven-public</url>
@ -231,7 +231,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>3.3.1-SNAPSHOT</version> <version>3.6.0</version>
<configuration> <configuration>
<minimizeJar>true</minimizeJar> <minimizeJar>true</minimizeJar>
<artifactSet> <artifactSet>

View File

@ -63,6 +63,7 @@ public class ChallengesAdminCommand extends CompositeCommand
return true; return true;
} }
this.showHelp(this, user);
return false; return false;
} }
} }

View File

@ -153,6 +153,9 @@ public class ChallengeLevel implements DataObject, Comparable<ChallengeLevel>
*/ */
public ItemStack getIcon() public ItemStack getIcon()
{ {
if (icon == null) {
icon = new ItemStack(Material.PAPER);
}
return icon.clone(); return icon.clone();
} }

View File

@ -113,32 +113,36 @@ public class ChallengesManager
* This comparator orders challenges by their level, order and name. * This comparator orders challenges by their level, order and name.
*/ */
private final Comparator<Challenge> challengeComparator = (o1, o2) -> { private final Comparator<Challenge> challengeComparator = (o1, o2) -> {
// Get the levels
ChallengeLevel o1Level = this.getLevel(o1.getLevel()); ChallengeLevel o1Level = this.getLevel(o1.getLevel());
ChallengeLevel o2Level = this.getLevel(o2.getLevel()); ChallengeLevel o2Level = this.getLevel(o2.getLevel());
if (o1Level == null && o2Level == null) // Handle null levels consistently
{ if (o1Level == null && o2Level == null) {
// Both levels are null, compare by order
return Integer.compare(o1.getOrder(), o2.getOrder()); return Integer.compare(o1.getOrder(), o2.getOrder());
} } else if (o1Level == null) {
else if (o1Level == null) // If o1 level is null, it should be ordered lower
{
return -1; return -1;
} } else if (o2Level == null) {
else if (o2Level == null) // If o2 level is null, it should be ordered lower
{
return 1; return 1;
} }
else if (o1Level.equals(o2Level))
{ // If both levels are non-null, compare their orders
int levelComparison = Integer.compare(o1Level.getOrder(), o2Level.getOrder());
// If levels are the same, compare by challenge order
if (levelComparison == 0) {
return Integer.compare(o1.getOrder(), o2.getOrder()); return Integer.compare(o1.getOrder(), o2.getOrder());
} }
else
{ // Return the level comparison result
return Integer.compare(o1Level.getOrder(), o2Level.getOrder()); return levelComparison;
}
}; };
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// Section: Constructor // Section: Constructor
// --------------------------------------------------------------------- // ---------------------------------------------------------------------

View File

@ -119,6 +119,9 @@ public class ConversationUtils
withFirstPrompt(confirmationPrompt). withFirstPrompt(confirmationPrompt).
withLocalEcho(false). withLocalEcho(false).
withTimeout(90). withTimeout(90).
// Use null value in consumer to detect if user has abandoned conversation.
addConversationAbandonedListener(ConversationUtils.getAbandonListener(consumer, user))
.
buildConversation(user.getPlayer()). buildConversation(user.getPlayer()).
begin(); begin();
} }

View File

@ -151,6 +151,11 @@ public class WebManager
if (this.plugin.getSettings().isLogGithubDownloadData()) if (this.plugin.getSettings().isLogGithubDownloadData())
{ {
this.plugin.log("Could not connect to GitHub."); this.plugin.log("Could not connect to GitHub.");
this.plugin.log(
"JSON files can be found at https://github.com/BentoBoxWorld/weblink/tree/master/challenges/library");
user.sendRawMessage("Could not connect to GitHub.");
user.sendRawMessage(
"JSON files can be found at https://github.com/BentoBoxWorld/weblink/tree/master/challenges/library");
} }
} }
catch (Exception e) catch (Exception e)

View File

@ -1,7 +1,7 @@
name: Challenges name: Challenges
main: world.bentobox.challenges.ChallengesAddon main: world.bentobox.challenges.ChallengesAddon
version: ${version}${build.number} version: ${version}${build.number}
api-version: 1.17 api-version: 2.7.1
repository: 'BentoBoxWorld/Challenges' repository: 'BentoBoxWorld/Challenges'
metrics: true metrics: true

File diff suppressed because it is too large Load Diff

View File

@ -649,6 +649,12 @@ challenges:
visible: Zeigen Sie sichtbare Herausforderungen visible: Zeigen Sie sichtbare Herausforderungen
hidden: Alle Herausforderungen anzeigen hidden: Alle Herausforderungen anzeigen
toggleable: Umschalten zulassen toggleable: Umschalten zulassen
include_undeployed:
name: "&f&l Nicht bereitgestellte Herausforderungen einschließen"
description: "&7 Gibt an, ob nicht bereitgestellte \n&7 Herausforderungen
\n&7 für den Abschluss von Level \n&7 angerechnet werden sollen."
enabled: "&2 Aktiviert"
disabled: "&c Deaktiviert"
download: download:
name: "&f&l Bibliotheken herunterladen" name: "&f&l Bibliotheken herunterladen"
description: |- description: |-
@ -851,7 +857,7 @@ challenges:
environment-single: "&7 Limitiert auf [environment]" environment-single: "&7 Limitiert auf [environment]"
environment-title: "&7 Limitiert auf:" environment-title: "&7 Limitiert auf:"
environment-list: " &7 - &e [environment]" environment-list: " &7 - &e [environment]"
permission-single: "&c Requires [permissions] permission" permission-single: "&c Erfordert die Berechtigung [permission]"
permissions-title: "&c Erfordert Berechtigungen:" permissions-title: "&c Erfordert Berechtigungen:"
permissions-list: " &c - [permission]" permissions-list: " &c - [permission]"
island: island:
@ -998,9 +1004,9 @@ challenges:
write-reward-commands: "&e Bitte geben Sie pro Zeile im Chat einen neuen Belohnungsbefehl write-reward-commands: "&e Bitte geben Sie pro Zeile im Chat einen neuen Belohnungsbefehl
ein und beenden Sie den Chat in einer eigenen Zeile." ein und beenden Sie den Chat in einer eigenen Zeile."
reward-commands-changed: "&a Erfolg, die Belohnungsbefehle wurden aktualisiert." reward-commands-changed: "&a Erfolg, die Belohnungsbefehle wurden aktualisiert."
write-repeat-reward-commands: "&e Bitte geben Sie pro Zeile im Chat einen neuen write-repeat-reward-commands: "&e Geben Sie bitte pro Zeile im Chat einen neuen
Belohnungswiederholungsbefehl ein und beenden Sie den Chat in einer eigenen Befehl zur Wiederholung der Belohnung ein und klicken Sie zum Beenden auf „Beenden“
Zeile." in einer eigenen Zeile."
repeat-reward-commands-changed: "&a Erfolg, die Wiederholungsbelohnungsbefehle repeat-reward-commands-changed: "&a Erfolg, die Wiederholungsbelohnungsbefehle
wurden aktualisiert." wurden aktualisiert."
challenge-removed: "&a Herausforderungen [challende] für [gamemode] wird aus der challenge-removed: "&a Herausforderungen [challende] für [gamemode] wird aus der
@ -1098,6 +1104,12 @@ challenges:
not-hooked: "&c Challenges Addon konnte keinen GameMode finden." not-hooked: "&c Challenges Addon konnte keinen GameMode finden."
timeout: "&c Diese Abfrage erfordert eine Wartezeit von [timeout] zwischen den timeout: "&c Diese Abfrage erfordert eine Wartezeit von [timeout] zwischen den
Vervollständigungen. Sie müssen [wait-time] warten, bis Sie es erneut abschließen." Vervollständigungen. Sie müssen [wait-time] warten, bis Sie es erneut abschließen."
requirement-not-met: "&c Für diese Herausforderung muss [statistic] [number] haben.
Sie haben nur [value]."
requirement-not-met-entity: "&c Für diese Herausforderung muss [statistic] [entity]
über [number] verfügen. Sie haben nur [value]."
requirement-not-met-material: "&c Diese Herausforderung erfordert, dass [statistic]
[material] [number] hat. Sie haben nur [value]."
protection: protection:
flags: flags:
CHALLENGES_ISLAND_PROTECTION: CHALLENGES_ISLAND_PROTECTION:

View File

@ -1,49 +1,43 @@
--- ---
meta: meta:
authors: authors:
- BONne - BONNE
challenges: challenges:
commands: commands:
admin: admin:
main: main:
description: Comando de administrador principal. Abrir GUI. description: Comando de administrador principal. Abrir GUI.
reload: reload:
description: |- description: >-
Recargar desafíos desde la base de datos Recargar desafíos desde la base de datos
El parámetro hard significa que el addon restablecerá la conexión a la base de datos. El parámetro hard significa que el addon restablecerá la conexión a la base de datos.
show: show:
description: Imprime todos los desafíos en el chat que existen en este mundo. description: Imprime todos los desafíos en el chat que existen en este mundo.
complete: complete:
description: Completar un desafío para un jugador. description: Completar un desafío para un jugador.
parameters: "<player> <challange_id>" parameters: <player> <challange_id>
reset: reset:
description: Restablecer un desafío para un jugador. Si "challenge_id" se description: Restablecer un desafío para un jugador. Si "challenge_id" se
establece en "all", restableceran todos los desafíos. establece en "all", restableceran todos los desafíos.
parameters: "<player> <challange_id>" parameters: <player> <challange_id>
migrate: migrate:
description: Migrar los datos actuales de los desafíos del mundo del juego description: Migrar los datos actuales de los desafíos del mundo del juego al
al formato de almacenamiento 0.8.0. formato de almacenamiento 0.8.0.
create:
parameters: "<unique challenge name>"
description: Abre el GUI que permite crear desafío..
surrounding:
parameters: "<challenge name>"
description: Crea un desafío envolvente.
user: user:
main: main:
description: Abrir GUI de Desafíos. description: Abrir GUI de Desafíos.
complete: complete:
description: Completa el desafío. description: Completa el desafío.
parameters: "<challenge_id> [count]" parameters: <challenge_id> [count]
description: Este método abre el GUI de los desafíos.
gui: gui:
titles: titles:
player-gui: "&0&l Menú de desafíos" player-gui: "&0&l Menú de desafíos"
gamemode-gui: "&0&l Seleccionar modo de juego" gamemode-gui: "&0&l Seleccionar modo de juego"
multiple-gui: "&0&l ¿Cuántas veces?" multiple-gui: "&0&l ¿Cuántas veces?"
admin-gui: "&0&l Menú de administración de desafíos" admin-gui: "&0&l Menú de administración de desafíos"
edit-challenge: "&0&l Editar [desafío]" edit-challenge: "&0&l Editar [challenge]"
edit-level: "&0&l Editar [nivel]" edit-level: "&0&l Editar [level]"
settings: "&0&l Configuración" settings: "&0&l Configuración"
choose-challenge: "&0&l Elegir desafío" choose-challenge: "&0&l Elegir desafío"
choose-level: "&0&l Elegir nivel" choose-level: "&0&l Elegir nivel"
@ -71,20 +65,20 @@ challenges:
&7 o salir de GUI &7 o salir de GUI
previous: previous:
name: "&f&l Página anterior" name: "&f&l Página anterior"
description: "&7 Cambiar a &e [número] &7 página" description: "&7 Cambiar a &e [number] &7 página"
next: next:
name: "&f&l Página siguiente" name: "&f&l Página siguiente"
description: "&7 Cambiar a &e [número] &7 página" description: "&7 Cambiar a &e [number] &7 página"
reduce: reduce:
name: "&f&l Reducir" name: "&f&l Reducir"
description: "&7 Reducir en &e [número]" description: "&7 Reducir en &e [number]"
increase: increase:
name: "&f&l Aumento" name: "&f&l Aumento"
description: "&7 Aumentar en &e [número]" description: "&7 Aumentar en &e [number]"
accept: accept:
name: "&f&l completo" name: "&f&l completo"
description: |- description: |-
&7 Completa el desafío &e [número] &7 Completa el desafío &e [number]
&7 veces) &7 veces)
quit: quit:
name: "&f&l Salir" name: "&f&l Salir"
@ -193,7 +187,7 @@ challenges:
description: |- description: |-
&7 Permite cambiar &7 Permite cambiar
&7 el nombre para mostrar. &7 el nombre para mostrar.
value: "&7 Actualmente: &r [nombre]" value: "&7 Actualmente: &r [name]"
remove_on_complete: remove_on_complete:
name: "&f&l Ocultar después de finalizar" name: "&f&l Ocultar después de finalizar"
description: |- description: |-
@ -225,7 +219,7 @@ challenges:
&7 Objetos con números iguales &7 Objetos con números iguales
&7 serán ordenados por su &7 serán ordenados por su
&7 nombres de identificación únicos. &7 nombres de identificación únicos.
value: "&7 Orden actual: &e [número]" value: "&7 Orden actual: &e [number]"
icon: icon:
name: Icono &f&l name: Icono &f&l
description: |- description: |-
@ -243,7 +237,7 @@ challenges:
&7 permisos para esto &7 permisos para esto
&7 desafío para ser completable. &7 desafío para ser completable.
title: "&7 permisos:" title: "&7 permisos:"
permission: " &8 - [permiso]" permission: " &8 - [permission]"
none: "&7 Los permisos no están establecidos." none: "&7 Los permisos no están establecidos."
remove_entities: remove_entities:
name: "&f&l Eliminar entidades" name: "&f&l Eliminar entidades"
@ -262,7 +256,7 @@ challenges:
&7 entidades para esto &7 entidades para esto
&7 desafío para ser completable. &7 desafío para ser completable.
title: "&7 entidades:" title: "&7 entidades:"
list: " &8 - [número] x [entidad]" list: " &8 - [number] x [entity]"
none: "&7 Entidades no se agregan." none: "&7 Entidades no se agregan."
remove_blocks: remove_blocks:
name: "&f&l Quitar bloques" name: "&f&l Quitar bloques"
@ -281,7 +275,7 @@ challenges:
&7 bloques para esto &7 bloques para esto
&7 desafío para ser completable. &7 desafío para ser completable.
title: "&7 bloques:" title: "&7 bloques:"
list: " &8 - [número] x [bloque]" list: " &8 - [number] x [block]"
none: "&7 bloques no se agregan." none: "&7 bloques no se agregan."
search_radius: search_radius:
name: "&f&l Radio de búsqueda" name: "&f&l Radio de búsqueda"
@ -290,7 +284,7 @@ challenges:
&7 alrededor del jugador del cual &7 alrededor del jugador del cual
&7 bloques y/o entidades son &7 bloques y/o entidades son
&7 detectado. &7 detectado.
value: "&7 Distancia actual: &e [número]" value: "&7 Distancia actual: &e [number]"
remove_items: remove_items:
name: "&f&l Eliminar elementos" name: "&f&l Eliminar elementos"
description: |- description: |-
@ -308,7 +302,7 @@ challenges:
&7 artículos para esto &7 artículos para esto
&7 desafío para ser completable. &7 desafío para ser completable.
title: "&7 artículos:" title: "&7 artículos:"
list: " &8 - [número] x [elemento]" list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan." none: "&7 Los artículos no se agregan."
add_ignored_meta: add_ignored_meta:
name: "&f&l Agregar Ignorar metadatos" name: "&f&l Agregar Ignorar metadatos"
@ -318,7 +312,7 @@ challenges:
&7 cualquier metadato que &7 cualquier metadato que
Se les asigna &7. Se les asigna &7.
title: "&7 artículos:" title: "&7 artículos:"
list: " &8 - [número] x [elemento]" list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan." none: "&7 Los artículos no se agregan."
remove_ignored_meta: remove_ignored_meta:
name: "&f&l Eliminar Ignorar metadatos" name: "&f&l Eliminar Ignorar metadatos"
@ -343,14 +337,14 @@ challenges:
&7 Permite cambiar el &7 Permite cambiar el
&7 experiencia requerida para &7 experiencia requerida para
&7 el jugador. &7 el jugador.
value: "&7 Experiencia actual: &e [número]" value: "&7 Experiencia actual: &e [number]"
required_level: required_level:
name: "&f&l Nivel de isla requerido" name: "&f&l Nivel de isla requerido"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 nivel de isla requerido &7 nivel de isla requerido
&7 para el desafío. &7 para el desafío.
value: "&7 Nivel actual: &e [número]" value: "&7 Nivel actual: &e [number]"
remove_money: remove_money:
name: "&f&l Quitar dinero" name: "&f&l Quitar dinero"
description: |- description: |-
@ -367,21 +361,21 @@ challenges:
&7 Permite cambiar el &7 Permite cambiar el
&7 dinero requerido en el jugador &7 dinero requerido en el jugador
&7 explica el desafío. &7 explica el desafío.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
statistic: statistic:
name: "&f&l estadística" name: "&f&l estadística"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 tipo de estadística que es &7 tipo de estadística que es
&7 marcó este desafío. &7 marcó este desafío.
value: "&7 Valor actual: &e [estadística]" value: "&7 Valor actual: &e [statistic]"
statistic_amount: statistic_amount:
name: "&f&l Valor objetivo" name: "&f&l Valor objetivo"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 valor objetivo estadístico &7 valor objetivo estadístico
&7 que se debe cumplir. &7 que se debe cumplir.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
remove_statistic: remove_statistic:
name: "&f&l Reducir estadística" name: "&f&l Reducir estadística"
description: |- description: |-
@ -396,19 +390,19 @@ challenges:
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 bloque objetivo estadístico. &7 bloque objetivo estadístico.
value: "&7 Bloque actual: &e [bloque]" value: "&7 Bloque actual: &e [block]"
statistic_items: statistic_items:
name: "&f&l Artículo de destino" name: "&f&l Artículo de destino"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 elemento objetivo estadístico. &7 elemento objetivo estadístico.
value: "&7 Artículo actual: &e [artículo]" value: "&7 Artículo actual: &e [item]"
statistic_entities: statistic_entities:
name: "&f&l entidad objetivo" name: "&f&l entidad objetivo"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 entidad objetivo estadística. &7 entidad objetivo estadística.
value: "&7 Entidad actual: &e [entidad]" value: "&7 Entidad actual: &e [entity]"
reward_text: reward_text:
name: "&f&l Texto de recompensa" name: "&f&l Texto de recompensa"
description: |- description: |-
@ -429,7 +423,7 @@ challenges:
&7 Permite cambiar recompensa &7 Permite cambiar recompensa
&7 artículos. &7 artículos.
title: "&7 artículos:" title: "&7 artículos:"
list: " &8 - [número] x [elemento]" list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan." none: "&7 Los artículos no se agregan."
repeat_reward_items: repeat_reward_items:
name: "&f&l Repetir artículos de recompensa" name: "&f&l Repetir artículos de recompensa"
@ -438,7 +432,7 @@ challenges:
&7 artículos de recompensa por esto &7 artículos de recompensa por esto
&7 desafío. &7 desafío.
title: "&7 artículos:" title: "&7 artículos:"
list: " &8 - [número] x [elemento]" list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan." none: "&7 Los artículos no se agregan."
reward_experience: reward_experience:
name: Experiencia de recompensa &f&l name: Experiencia de recompensa &f&l
@ -446,27 +440,27 @@ challenges:
&7 Permite cambiar el &7 Permite cambiar el
&7 experiencia de recompensa para &7 experiencia de recompensa para
&7 el jugador. &7 el jugador.
value: "&7 Experiencia de recompensa: &e [número]" value: "&7 Experiencia de recompensa: &e [number]"
repeat_reward_experience: repeat_reward_experience:
name: "&f&l Repetir experiencia de recompensa" name: "&f&l Repetir experiencia de recompensa"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 repetir experiencia de recompensa &7 repetir experiencia de recompensa
&7 para el jugador. &7 para el jugador.
value: "&7 Experiencia de recompensa: &e [número]" value: "&7 Experiencia de recompensa: &e [number]"
reward_money: reward_money:
name: "&f&l Recompensa en dinero" name: "&f&l Recompensa en dinero"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 dinero de recompensa. &7 dinero de recompensa.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
repeat_reward_money: repeat_reward_money:
name: "&f&l repetir dinero de recompensa" name: "&f&l repetir dinero de recompensa"
description: |- description: |-
&7 Permite cambiar el &7 Permite cambiar el
&7 repetir dinero de recompensa &7 repetir dinero de recompensa
&7 para el desafío. &7 para el desafío.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
reward_commands: reward_commands:
name: "&f&l Comandos de recompensa" name: "&f&l Comandos de recompensa"
description: |- description: |-
@ -481,7 +475,7 @@ challenges:
&8 permitirá que el comando sea &8 permitirá que el comando sea
&8 ejecutado por el jugador. También &8 ejecutado por el jugador. También
&8 admite un marcador de posición &8 admite un marcador de posición
&8 `[jugador]` que será &8 `[player]` que será
&8 reemplazado con el nombre de un jugador &8 reemplazado con el nombre de un jugador
&8 que completó el desafío. &8 que completó el desafío.
value: "&7 Comandos actuales:" value: "&7 Comandos actuales:"
@ -500,7 +494,7 @@ challenges:
&8 permitirá que el comando sea &8 permitirá que el comando sea
&8 ejecutado por el jugador. También &8 ejecutado por el jugador. También
&8 admite un marcador de posición &8 admite un marcador de posición
&8 `[jugador]` que será &8 `[player]` que será
&8 reemplazado con el nombre de un jugador &8 reemplazado con el nombre de un jugador
&8 que completó el desafío. &8 que completó el desafío.
value: "&7 Comandos actuales:" value: "&7 Comandos actuales:"
@ -518,7 +512,7 @@ challenges:
&7 Permite cambiar el &7 Permite cambiar el
&7 número de repeticiones &7 número de repeticiones
&7 para el desafío. &7 para el desafío.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
cool_down: cool_down:
name: "&f&l enfriamiento" name: "&f&l enfriamiento"
description: |- description: |-
@ -527,7 +521,7 @@ challenges:
&7 debe esperarse entre &7 debe esperarse entre
&7 desafío repetible &7 desafío repetible
&7 finalizaciones. &7 finalizaciones.
value: "&7 Valor actual: &e [hora]" value: "&7 Valor actual: &e [time]"
challenges: challenges:
name: Desafíos &f&l name: Desafíos &f&l
description: |- description: |-
@ -540,7 +534,7 @@ challenges:
&7 de desafíos que pueden &7 de desafíos que pueden
&7 quedará sin completar durante &7 quedará sin completar durante
&7 desbloqueando el siguiente nivel. &7 desbloqueando el siguiente nivel.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
add_challenges: add_challenges:
name: "&f&l Agregar desafío(s)" name: "&f&l Agregar desafío(s)"
description: |- description: |-
@ -635,13 +629,13 @@ challenges:
&7 en datos de usuario. &7 en datos de usuario.
&7 0 significa que los datos &7 0 significa que los datos
&7 no se eliminará. &7 no se eliminará.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
title_showtime: title_showtime:
name: "&f&l Título Showtime" name: "&f&l Título Showtime"
description: |- description: |-
&7 Número de ticks de ese título &7 Número de ticks de ese título
&7 se mostrará al jugador. &7 se mostrará al jugador.
value: "&7 Valor actual: &e [número]" value: "&7 Valor actual: &e [number]"
active_world_list: active_world_list:
name: "&f&l Mostrar sólo mundo activo" name: "&f&l Mostrar sólo mundo activo"
description: |- description: |-
@ -680,10 +674,10 @@ challenges:
enabled: "&2 Con borrado de caché" enabled: "&2 Con borrado de caché"
disabled: "&c Sin borrar caché" disabled: "&c Sin borrar caché"
player: player:
name: "&f&l [nombre]" name: "&f&l [name]"
description: "&7 Propietario de la isla: [propietario]" description: "&7 Propietario de la isla: [owner]"
members: "&7 miembros de la isla:" members: "&7 miembros de la isla:"
member: "&8 - [nombre]" member: "&8 - [name]"
no-island: |- no-island: |-
&c El jugador no tiene &c El jugador no tiene
&c una isla. &c una isla.
@ -731,9 +725,9 @@ challenges:
&7 entidades seleccionadas &7 entidades seleccionadas
&7 de listas. &7 de listas.
title: "&7 entidades seleccionadas:" title: "&7 entidades seleccionadas:"
entity: "&8 - [entidad]" entity: "&8 - [entity]"
entity: entity:
name: "&f&l [entidad]" name: "&f&l [entity]"
description: "&7 ID de entidad: [id]" description: "&7 ID de entidad: [id]"
selected: "&2 seleccionado" selected: "&2 seleccionado"
inventory_type: inventory_type:
@ -774,29 +768,25 @@ challenges:
&7 Devuelve elementos seleccionados &7 Devuelve elementos seleccionados
&7 y abre la GUI anterior. &7 y abre la GUI anterior.
title: "&7 seleccionado:" title: "&7 seleccionado:"
element: "&8 - [elemento]" element: "&8 - [element]"
statistic_element: statistic_element:
name: "&f&l [estadística]" name: "&f&l [statistic]"
description: "[descripción]" description: "[description]"
environment_element: environment_element:
name: "&f&l [medio ambiente]" name: "&f&l [environment]"
description: "[descripción]" description: "[description]"
search: search:
name: "&f&l Buscar" name: "&f&l Buscar"
description: |- description: |-
&7 Permite buscar un &7 Permite buscar un
&7 elemento con entrada &7 elemento con entrada
&7 valor de texto. &7 valor de texto.
search: "&b Valor: [valor]" search: "&b Valor: [value]"
admin:
backward: Importar desafios 0.3.0
backward-player: Arreglar 0.3.0 PlayerData
tips: tips:
click-to-select: "&e Haga clic en &7 para seleccionar." click-to-select: "&e Haga clic en &7 para seleccionar."
click-to-choose: "&e Haga clic en &7 para elegir." click-to-choose: "&e Haga clic en &7 para elegir."
click-to-complete: "&e Haga clic en &7 para completar." click-to-complete: "&e Haga clic en &7 para completar."
right-click-multiple-open: "&e Haga clic derecho en &7 para elegir el recuento right-click-multiple-open: "&e Haga clic derecho en &7 para elegir el recuento de finalización."
de finalización."
shift-left-click-to-complete-all: "&e Shift Haga clic en &7 para completar todo." shift-left-click-to-complete-all: "&e Shift Haga clic en &7 para completar todo."
left-click-to-accept: "&e Haga clic izquierdo en &7 para completar." left-click-to-accept: "&e Haga clic izquierdo en &7 para completar."
right-click-to-write: "&e Haga clic derecho en &7 para escribir." right-click-to-write: "&e Haga clic derecho en &7 para escribir."
@ -840,140 +830,134 @@ challenges:
descriptions: descriptions:
challenge: challenge:
lore: |- lore: |-
[descripción] [description]
[estado] [status]
[enfriarse] [cooldown]
[requisitos] [requirements]
[recompensas] [rewards]
status: status:
completed: "&2&l completado" completed: "&2&l completado"
completed-times: "&2 completado &7&l [número] &r&2 vez(-s)" completed-times: "&2 completado &7&l [number] &r&2 vez(-s)"
completed-times-of: "&2 completado &7&l [número] &r&2 de &7&l [máx.] &r&2 completed-times-of: "&2 completado &7&l [number] &r&2 de &7&l [max] &r&2 veces"
veces"
completed-times-reached: "&2&l Completado todo &7 [max] &2 veces" completed-times-reached: "&2&l Completado todo &7 [max] &2 veces"
cooldown: cooldown:
lore: |- lore: |-
[se acabó el tiempo] [timeout]
[tiempo de espera] [wait-time]
timeout: "&7&l Enfriamiento: &r&7 [tiempo]" timeout: "&7&l Enfriamiento: &r&7 [time]"
wait-time: "&c&l Disponible después de: &r&c [hora]" wait-time: "&c&l Disponible después de: &r&c [time]"
in-days: "[número] d" in-days: "[number] d"
in-hours: "[número] h" in-hours: "[number] h"
in-minutes: "[número] min" in-minutes: "[number] min"
in-seconds: "[número] s" in-seconds: "[number] s"
requirements: requirements:
lore: |- lore: |-
[ambiente] [environment]
[tipo-requisito] [type-requirement]
[permisos] [permissions]
environment-single: "&7 Limitado a [entorno]" environment-single: "&7 Limitado a [environment]"
environment-title: "&7 Limitado a:" environment-title: "&7 Limitado a:"
environment-list: " &7 - &e [entorno]" environment-list: " &7 - &e [environment]"
permission-single: "&c Requiere permiso [permiso]" permission-single: "&c Requiere permiso [permission]"
permissions-title: "&c Requiere permisos:" permissions-title: "&c Requiere permisos:"
permissions-list: " &c - [permiso]" permissions-list: " &c - [permission]"
island: island:
lore: |- lore: |-
[bloques] [blocks]
[entidades] [entities]
[radio de búsqueda] [search-radius]
[bloque de advertencia] [warning-block]
[entidad de advertencia] [warning-entity]
blocks-title: "&7&l Bloques requeridos:" blocks-title: "&7&l Bloques requeridos:"
block-value: " &7 - &e [material]" block-value: " &7 - &e [material]"
blocks-value: " &7 - &e [número] x [material]" blocks-value: " &7 - &e [number] x [material]"
entities-title: "&7&l Entidades requeridas:" entities-title: "&7&l Entidades requeridas:"
entity-value: " &7 - &e [entidad]" entity-value: " &7 - &e [entity]"
entities-value: " &7 - &e [número] x [entidad]" entities-value: " &7 - &e [number] x [entity]"
search-radius: "&7 No más allá de &e [número] &7 metros" search-radius: "&7 No más allá de &e [number] &7 metros"
warning-block: "&e Los bloques serán &c eliminados" warning-block: "&e Los bloques serán &c eliminados"
warning-entity: "&e Entidades serán &c eliminadas" warning-entity: "&e Entidades serán &c eliminadas"
inventory: inventory:
lore: |- lore: |-
[elementos] [items]
[advertencia] [warning]
item-title: "&7&l Elementos necesarios:" item-title: "&7&l Elementos necesarios:"
item-value: " &7 - &e [artículo]" item-value: " &7 - &e [item]"
items-value: " &7 - &e [número] x [elemento]" items-value: " &7 - &e [number] x [item]"
warning: "& los artículos serán &c eliminados" warning: "& los artículos serán &c eliminados"
other: other:
lore: |- lore: |-
[experiencia] [experience]
[experiencia-advertencia] [experience-warning]
[dinero] [money]
[advertencia de dinero] [money-warning]
[nivel] [level]
experience: "&7&l Experiencia requerida: &r&e [número]" experience: "&7&l Experiencia requerida: &r&e [number]"
experience-warning: "&e experiencia será &c eliminada" experience-warning: "&e experiencia será &c eliminada"
money: "&7&l Dinero requerido: &r&e [número]" money: "&7&l Dinero requerido: &r&e [number]"
money-warning: "&e dinero será &c eliminado" money-warning: "&e dinero será &c eliminado"
level: "&7&l Nivel de isla requerido: &r&e [número]" level: "&7&l Nivel de isla requerido: &r&e [number]"
statistic: statistic:
lore: |- lore: |-
[estadística] [statistic]
[advertencia] [warning]
multiple-target: "&7&l [estadística]: &r&e [número] x [objetivo]" multiple-target: "&7&l [statistic]: &r&e [number] x [target]"
single-target: "&7&l [estadística]: &r&e [objetivo]" single-target: "&7&l [statistic]: &r&e [target]"
statistic: "&7&l [estadística] &r&e [número]" statistic: "&7&l [statistic] &r&e [number]"
warning: "&e Los datos estadísticos serán &c reducidos." warning: "&e Los datos estadísticos serán &c reducidos."
rewards: rewards:
lore: |- lore: |-
&7&l Recompensas: &7&l Recompensas:
[texto] [text]
[elementos] [items]
[experiencia] [experience]
[dinero] [money]
[comandos] [commands]
item-title: "&7 artículos:" item-title: "&7 artículos:"
item-value: " &7 - &e [artículo]" item-value: " &7 - &e [item]"
items-value: " &7 - &e [número] x [elemento]" items-value: " &7 - &e [number] x [item]"
experience: "&7 Experiencia: &r&e [número]" experience: "&7 Experiencia: &r&e [number]"
money: "&7 Dinero: &r&e [número]" money: "&7 Dinero: &r&e [number]"
commands-title: "&7 comandos:" commands-title: "&7 comandos:"
command: " &7 - &e [comando]" command: " &7 - &e [command]"
level: level:
lore: |- lore: |-
[texto] [text]
[estado] [status]
[exención] [waiver]
[recompensas] [rewards]
status: status:
completed: "&2&l completado" completed: "&2&l completado"
completed-challenges-of: |- completed-challenges-of: |-
&2 completado &7&l [número] &r&2 de &2 completado &7&l [number] &r&2 de
&7&l [máx.] &r&2 desafíos. &7&l [max] &r&2 desafíos.
locked: "&c&l bloqueado" locked: "&c&l bloqueado"
missing-challenges: |- missing-challenges: |-
&7 [número] más desafíos deben ser &7 [number] más desafíos deben ser
&7 completado para desbloquear este nivel. &7 completado para desbloquear este nivel.
waiver: |- waiver: |-
&7&l [número] desafío(s) &r&7 puede ser &7&l [number] desafío(s) &r&7 puede ser
&7 se saltó para desbloquear el siguiente nivel. &7 se saltó para desbloquear el siguiente nivel.
rewards: rewards:
lore: |- lore: |-
&7&l Recompensas: &7&l Recompensas:
[texto] [text]
[elementos] [items]
[experiencia] [experience]
[dinero] [money]
[comandos] [commands]
item-title: "&7 artículos:" item-title: "&7 artículos:"
item-value: " &7 - &e [artículo]" item-value: " &7 - &e [item]"
items-value: " &7 - &e [número] x [elemento]" items-value: " &7 - &e [number] x [item]"
experience: "&7 Experiencia: &r&e [número]" experience: "&7 Experiencia: &r&e [number]"
money: "&7 Dinero: &r&e [número]" money: "&7 Dinero: &r&e [number]"
commands-title: "&7 comandos:" commands-title: "&7 comandos:"
command: " &7 - &e [comando]" command: " &7 - &e [command]"
library: library:
author: "&7 por &e [autor]" author: "&7 por &e [author]"
version: "&7 Hecho con desafíos &e [versión]" version: "&7 Hecho con desafíos &e [version]"
lang: "&7 Idioma: &e [idioma]" lang: "&7 Idioma: &e [lang]"
gamemode: "&7 Principal para &e [modo de juego]" gamemode: "&7 Principal para &e [gamemode]"
admin:
backward: Permite importar desafíos desde 0.3.0 y por debajo de la versión
adicional.
backward-player: Permite corregir PlayerData dañado desde la versión 0.3.0|&2ÚSELO
SOLO SI ES NECESARIO|&2PUEDE NO TRABAJAR EN TODAS LAS SITUACIONES
conversations: conversations:
prefix: "&l&6 [BentoBox]: &r" prefix: "&l&6 [BentoBox]: &r"
confirm-string: verdadero, activado, sí, confirmar, y, válido, correcto confirm-string: verdadero, activado, sí, confirmar, y, válido, correcto
@ -983,32 +967,30 @@ challenges:
cancelled: "&c ¡Conversación cancelada!" cancelled: "&c ¡Conversación cancelada!"
input-number: "&e Por favor ingresa un número en el chat." input-number: "&e Por favor ingresa un número en el chat."
input-seconds: "&e Por favor ingrese unos segundos en el chat." input-seconds: "&e Por favor ingrese unos segundos en el chat."
numeric-only: "&c ¡El [valor] dado no es un número!" numeric-only: "&c ¡El [value] dado no es un número!"
not-valid-value: "&c El número dado [valor] no es válido. ¡Debe ser mayor que not-valid-value: "&c El número dado [value] no es válido. ¡Debe ser mayor que
[min] y menor que [max]!" [min] y menor que [max]!"
user-data-removed: "&a Todos los datos del usuario para [modo de juego] se borran user-data-removed: "&a Todos los datos del usuario para [gamemode] se borran de
de la base de datos." la base de datos."
confirm-user-data-deletion: "&e Confirme que desea borrar la base de datos de confirm-user-data-deletion: "&e Confirme que desea borrar la base de datos de
usuarios para [modo de juego]." usuarios para [gamemode]."
challenge-data-removed: "&a Todos los datos de los desafíos para [modo de juego] challenge-data-removed: "&a Todos los datos de los desafíos para [gamemode] se
se borran de la base de datos." borran de la base de datos."
confirm-challenge-data-deletion: "&e Confirme que desea borrar la base de datos confirm-challenge-data-deletion: "&e Confirme que desea borrar la base de datos
de desafíos para [modo de juego]." de desafíos para [gamemode]."
all-data-removed: "&a Todos los datos adicionales para [modo de juego] se borran all-data-removed: "&a Todos los datos adicionales para [gamemode] se borran de
de la base de datos." la base de datos."
confirm-all-data-deletion: "&e Confirme que desea borrar los datos adicionales confirm-all-data-deletion: "&e Confirme que desea borrar los datos adicionales para [gamemode]."
para [modo de juego]."
write-name: "&e Por favor escribe un nombre en el chat." write-name: "&e Por favor escribe un nombre en el chat."
new-object-created: "&Se crea un nuevo objeto para [modo de juego]." new-object-created: "&Se crea un nuevo objeto para [gamemode]."
object-already-exists: "&c El objeto &7 [id] &c ya existe. Elija un nombre diferente." object-already-exists: "&c El objeto &7 [id] &c ya existe. Elija un nombre diferente."
invalid-challenge: "&c Desafío [desafío] contiene datos no válidos. ¡No se puede invalid-challenge: "&c Desafío [challenge] contiene datos no válidos. ¡No se puede desplegar!"
desplegar!"
name-changed: "&a Éxito, se actualizó el nombre." name-changed: "&a Éxito, se actualizó el nombre."
write-description: '&e Ingrese una nueva descripción en el chat y "salir" en una write-description: '&e Ingrese una nueva descripción en el chat y "salir" en una
línea sola para finalizar.' línea sola para finalizar.'
description-changed: "&a Éxito, se actualizó la descripción." description-changed: "&a Éxito, se actualizó la descripción."
write-permissions: '&e Ingrese los permisos requeridos, uno por línea en el chat, write-permissions: '&e Ingrese los permisos requeridos, uno por línea en el
y "salga" en una línea sola para finalizar.' chat, y "salga" en una línea sola para finalizar.'
permissions-changed: "&a Éxito, se actualizaron los permisos de desafío." permissions-changed: "&a Éxito, se actualizaron los permisos de desafío."
write-reward-text: '&e Ingrese un nuevo texto de recompensa en el chat y "salir" write-reward-text: '&e Ingrese un nuevo texto de recompensa en el chat y "salir"
en una línea aparte para finalizar.' en una línea aparte para finalizar.'
@ -1019,28 +1001,24 @@ challenges:
write-reward-commands: '&e Ingrese un nuevo comando de recompensa por línea en write-reward-commands: '&e Ingrese un nuevo comando de recompensa por línea en
el chat y "salga" en una línea sola para finalizar.' el chat y "salga" en una línea sola para finalizar.'
reward-commands-changed: "&a Éxito, se actualizaron los comandos de recompensa." reward-commands-changed: "&a Éxito, se actualizaron los comandos de recompensa."
write-repeat-reward-commands: '&e Ingrese un nuevo comando de recompensa repetida write-repeat-reward-commands: '&e Ingrese un nuevo comando de recompensa
por línea en el chat y "salga" en una línea sola para finalizar.' repetida por línea en el chat y "salga" en una línea sola para finalizar.'
repeat-reward-commands-changed: "&a Éxito, se actualizaron los comandos de recompensa repeat-reward-commands-changed: "&a Éxito, se actualizaron los comandos de recompensa repetida."
repetida." challenge-removed: "&a Los desafíos [challenge] para [gamemode] se eliminan de
challenge-removed: "&a Los desafíos [desafío] para [modo de juego] se eliminan la base de datos."
confirm-challenge-deletion: "&e Confirme que desea eliminar [challenge] para
[gamemode] de la base de datos."
level-removed: "&a Nivel [level] para [gamemode] se elimina de la base de datos."
confirm-level-deletion: "&e Confirme que desea eliminar [level] para [gamemode]
de la base de datos." de la base de datos."
confirm-challenge-deletion: "&e Confirme que desea eliminar [desafío] para [modo
de juego] de la base de datos."
level-removed: "&a Nivel [nivel] para [modo de juego] se elimina de la base de
datos."
confirm-level-deletion: "&e Confirme que desea eliminar [nivel] para [modo de
juego] de la base de datos."
start-downloading: "&a Comenzando a descargar e importar la biblioteca de desafíos." start-downloading: "&a Comenzando a descargar e importar la biblioteca de desafíos."
written-text: "&un texto de entrada:" written-text: "&un texto de entrada:"
confirm-data-replacement: "&e Confirme que desea reemplazar sus desafíos actuales confirm-data-replacement: "&e Confirme que desea reemplazar sus desafíos actuales por uno nuevo."
por uno nuevo." new-challenges-imported: "&a Éxito, se importaron nuevos desafíos para [gamemode]."
new-challenges-imported: "&a Éxito, se importaron nuevos desafíos para [modo de
juego]."
exported-file-name: "&e Introduzca un nombre de archivo para el archivo de base exported-file-name: "&e Introduzca un nombre de archivo para el archivo de base
de datos exportado. (escriba 'cancelar' para salir)" de datos exportado. (escriba 'cancelar' para salir)"
database-export-completed: "&a Éxito, se completó la exportación de la base de database-export-completed: "&a Éxito, se completó la exportación de la base de
datos para [mundo]. Archivo [archivo] generado." datos para [world]. Archivo [file] generado."
file-name-exist: "&c Existe un archivo con el nombre '[id]'. No se puede sobrescribir." file-name-exist: "&c Existe un archivo con el nombre '[id]'. No se puede sobrescribir."
write-search: "&e Por favor escriba un valor de búsqueda. (escriba 'cancelar' write-search: "&e Por favor escriba un valor de búsqueda. (escriba 'cancelar'
para salir)" para salir)"
@ -1051,10 +1029,10 @@ challenges:
level-title: Completado con éxito level-title: Completado con éxito
level-subtitle: "[friendlyName]" level-subtitle: "[friendlyName]"
messages: messages:
completed: "&2 ¡Has completado el desafío [nombre] para [jugador]!" completed: "&2 ¡Has completado el desafío [name] para [player]!"
already-completed: "&2 ¡Este desafío ya se completó!" already-completed: "&2 ¡Este desafío ya se completó!"
reset: "&2 ¡Reiniciaste el desafío [nombre] para [jugador]!" reset: "&2 ¡Reiniciaste el desafío [name] para [player]!"
reset-all: "&2 ¡Todos los desafíos [de jugador] fueron reiniciados!" reset-all: "&2 ¡Todos los desafíos [player] fueron reiniciados!"
not-completed: "&2 ¡Este desafío aún no se ha completado!" not-completed: "&2 ¡Este desafío aún no se ha completado!"
migrate-start: "&2 Comenzar a migrar datos del complemento de desafíos." migrate-start: "&2 Comenzar a migrar datos del complemento de desafíos."
migrate-end: Datos del complemento &2 Challenges actualizados al nuevo formato. migrate-end: Datos del complemento &2 Challenges actualizados al nuevo formato.
@ -1062,24 +1040,22 @@ challenges:
start-downloading: "&5 Comenzando a descargar e importar la biblioteca de desafíos." start-downloading: "&5 Comenzando a descargar e importar la biblioteca de desafíos."
you-completed-challenge: "&2¡Has completado el desafío [value]!" you-completed-challenge: "&2¡Has completado el desafío [value]!"
you-repeated-challenge: "&2¡Has repetido el desafío [value]!" you-repeated-challenge: "&2¡Has repetido el desafío [value]!"
you-repeated-challenge-multiple: "&2¡Has repetido el &r&2desafío [value] [count] you-repeated-challenge-multiple: "&2¡Has repetido el &r&2desafío [value] [count] veces!"
veces!"
you-completed-level: "&2¡Has completado el nivel [value]!" you-completed-level: "&2¡Has completado el nivel [value]!"
name-has-completed-challenge: "&5¡[name] ha completado el desafío [value]!" name-has-completed-challenge: "&5¡[name] ha completado el desafío [value]!"
name-has-completed-level: "&5¡[name] ha completado el nivel [value]!" name-has-completed-level: "&5¡[name] ha completado el nivel [value]!"
load-skipping: '"[value]" ya existe - saltando' load-skipping: '"[value]" ya existe - saltando'
load-overwriting: Sobrescribiendo "[value]" load-overwriting: Sobrescribiendo "[value]"
load-add: 'Añadiendo nuevo objeto: [value]' load-add: "Añadiendo nuevo objeto: [value]"
errors: errors:
no-name: "&cFalta el nombre del desafío" no-name: "&cFalta el nombre del desafío"
unknown-challenge: "&cDesafío desconocido" unknown-challenge: "&cDesafío desconocido"
not-valid-integer: |- not-valid-integer: |-
&c ¡El entero "[valor]" dado no es válido! &c ¡El entero "[value]" dado no es válido!
El valor debe estar entre [min] y [max]. El valor debe estar entre [min] y [max].
not-deployed: "&c¡El desafío no está desplegado!" not-deployed: "&c¡El desafío no está desplegado!"
not-on-island: "&c¡Debes estar en tu isla para hacer eso!" not-on-island: "&c¡Debes estar en tu isla para hacer eso!"
challenge-level-not-available: "&cNo has desbloqueado el nivel requerido para challenge-level-not-available: "&cNo has desbloqueado el nivel requerido para completar este desafío."
completar este desafío."
not-repeatable: "&c¡Este reto no es repetible!" not-repeatable: "&c¡Este reto no es repetible!"
wrong-environment: "&c¡Estás en el entorno equivocado!" wrong-environment: "&c¡Estás en el entorno equivocado!"
not-enough-items: "&c¡No tienes [items] suficientes para completar este desafío!" not-enough-items: "&c¡No tienes [items] suficientes para completar este desafío!"
@ -1088,8 +1064,7 @@ challenges:
you-still-need: "&cTodavía necesitas [amount] x [item]" you-still-need: "&cTodavía necesitas [amount] x [item]"
missing-addon: "&cNo se puede completar el desafío: falta un addon o plugin requerido." missing-addon: "&cNo se puede completar el desafío: falta un addon o plugin requerido."
incorrect: "&cNo se puede completar el desafío: los requisitos son incorrectos." incorrect: "&cNo se puede completar el desafío: los requisitos son incorrectos."
not-enough-money: "&cEs necesario tener [value] en tu cuenta para completar el not-enough-money: "&cEs necesario tener [value] en tu cuenta para completar el desafío."
desafío."
not-enough-experience: "&cEs necesario tener [value] EXP para completar este desafío." not-enough-experience: "&cEs necesario tener [value] EXP para completar este desafío."
island-level: "&c¡Tu isla debe ser de nivel [number] o mayor para completar este island-level: "&c¡Tu isla debe ser de nivel [number] o mayor para completar este
desafío!" desafío!"
@ -1097,29 +1072,26 @@ challenges:
load-error: "&cError: No se pudo cargar [value]." load-error: "&cError: No se pudo cargar [value]."
no-rank: "&cNo tienes un rango lo suficientemente alto como para hacer eso." no-rank: "&cNo tienes un rango lo suficientemente alto como para hacer eso."
cannot-remove-items: "&c¡Algunos items no se pueden eliminar de tu inventario!" cannot-remove-items: "&c¡Algunos items no se pueden eliminar de tu inventario!"
exist-challenges-or-levels: "&cLos desafíos ya existen en tu mundo. ¡No se puede exist-challenges-or-levels: "&cLos desafíos ya existen en tu mundo. ¡No se puede proceder!"
proceder!"
no-challenges: "&c¡Los desafíos aún no se han implementado en este mundo!" no-challenges: "&c¡Los desafíos aún no se han implementado en este mundo!"
no-challenges-admin: "&c¡Los desafíos aún no se han implementado en este mundo! no-challenges-admin: "&c¡Los desafíos aún no se han implementado en este mundo!
¡Usa &5/[command] &cpara agregarlos!" ¡Usa &5/[command] &cpara agregarlos!"
missing-arguments: "&cFaltan argumentos de comando." missing-arguments: "&cFaltan argumentos de comando."
no-multiple-permission: "&cNo tienes permiso para completar este desafío varias no-multiple-permission: "&cNo tienes permiso para completar este desafío varias veces a la vez."
veces a la vez." invalid-level: "&c El nivel [level] contiene datos no válidos. ¡No se cargará
invalid-level: "&c El nivel [nivel] contiene datos no válidos. ¡No se cargará
desde la base de datos!" desde la base de datos!"
invalid-challenge: "&c Desafío [desafío] contiene datos no válidos. ¡No se cargará invalid-challenge: "&c Desafío [challenge] contiene datos no válidos. ¡No se
desde la base de datos!" cargará desde la base de datos!"
no-library-entries: "&c No se pueden encontrar entradas de la biblioteca. Nada no-library-entries: "&c No se pueden encontrar entradas de la biblioteca. Nada que mostrar."
que mostrar."
not-hooked: "&c Challenges Addon no pudo encontrar ningún modo de juego." not-hooked: "&c Challenges Addon no pudo encontrar ningún modo de juego."
timeout: "&c Este desafío requiere esperar [tiempo de espera] entre finalizaciones. timeout: "&c Este desafío requiere esperar [timeout] entre finalizaciones. Debes
Debes esperar [tiempo de espera] hasta completarlo nuevamente." esperar [wait-time] hasta completarlo nuevamente."
requirement-not-met: "&c Este desafío requiere que [estadística] tenga [número]. requirement-not-met: "&c Este desafío requiere que [statistic] tenga [number].
Solo tienes [valor]." Solo tienes [value]."
requirement-not-met-entity: "&c Este desafío requiere que [estadística] [entidad] requirement-not-met-entity: "&c Este desafío requiere que [statistic] [entity]
tenga [número]. Solo tienes [valor]." tenga [number]. Solo tienes [value]."
requirement-not-met-material: "&c Este desafío requiere que [estadística] [material] requirement-not-met-material: "&c Este desafío requiere que [statistic]
tenga [número]. Solo tienes [valor]." [material] tenga [number]. Solo tienes [value]."
protection: protection:
flags: flags:
CHALLENGES_ISLAND_PROTECTION: CHALLENGES_ISLAND_PROTECTION:
@ -1128,8 +1100,8 @@ protection:
&5&ocompletar desafíos &5&ocompletar desafíos
name: Proteccion de desafios name: Proteccion de desafios
CHALLENGES_WORLD_PROTECTION: CHALLENGES_WORLD_PROTECTION:
description: "&5&oHabilitar/deshabilitar &5&orequerimiento para que los jugadores description: "&5&oHabilitar/deshabilitar &5&orequerimiento para que los
&5&o esten en su isla para &5&ocompletar un desafío." jugadores &5&o esten en su isla para &5&ocompletar un desafío."
name: Limitaciones de la isla name: Limitaciones de la isla
hint: No hay desafíos fuera de la isla hint: No hay desafíos fuera de la isla
version: 11 version: 12

View File

@ -33,7 +33,7 @@ challenges:
gamemode-gui: "&0&l Sélectionner le mode de jeu" gamemode-gui: "&0&l Sélectionner le mode de jeu"
multiple-gui: "&0&l Combien de fois ?" multiple-gui: "&0&l Combien de fois ?"
admin-gui: "&0&l Menu d'administration des Challenges" admin-gui: "&0&l Menu d'administration des Challenges"
edit-challenge: "&0&l Editer [Challenge]" edit-challenge: "&0&l Editer [challenge]"
edit-level: "&0&l Editer [level]" edit-level: "&0&l Editer [level]"
settings: "&0&l Paramètres" settings: "&0&l Paramètres"
choose-challenge: "&0&l Choisir le Challenge" choose-challenge: "&0&l Choisir le Challenge"
@ -337,7 +337,7 @@ challenges:
&7 Permet de modifier le &7 Permet de modifier le
&7 niveau d'îlot requis &7 niveau d'îlot requis
&7 pour le défi. &7 pour le défi.
value: "&7 Niveau actuel : &e [numéro]" value: "&7 Niveau actuel : &e [number]"
remove_money: remove_money:
name: "&f&l Supprimer de l'argent" name: "&f&l Supprimer de l'argent"
description: |- description: |-
@ -354,21 +354,21 @@ challenges:
&7 Permet de modifier le &7 Permet de modifier le
&7 argent requis sur le joueur &7 argent requis sur le joueur
&7 représente le défi. &7 représente le défi.
value: "&7 Valeur actuelle : &e [numéro]" value: "&7 Valeur actuelle : &e [number]"
statistic: statistic:
name: "&f&l Statistique" name: "&f&l Statistique"
description: |- description: |-
&7 Permet de modifier le &7 Permet de modifier le
&7 type de statistique qui est &7 type de statistique qui est
&7 a vérifié ce défi. &7 a vérifié ce défi.
value: "&7 Valeur actuelle : &e [statistique]" value: "&7 Valeur actuelle : &e [statistic]"
statistic_amount: statistic_amount:
name: "&f&l Valeur cible" name: "&f&l Valeur cible"
description: |- description: |-
&7 Permet de modifier le &7 Permet de modifier le
&7 valeur cible statistique &7 valeur cible statistique
&7 qui doit être respecté. &7 qui doit être respecté.
value: "&7 Valeur actuelle : &e [numéro]" value: "&7 Valeur actuelle : &e [number]"
remove_statistic: remove_statistic:
name: "&f&l Réduire la statistique" name: "&f&l Réduire la statistique"
description: |- description: |-
@ -389,13 +389,13 @@ challenges:
description: |- description: |-
&7 Permet de modifier le &7 Permet de modifier le
&7 poste cible statistique. &7 poste cible statistique.
value: "&7 Poste actuel : &e [poste]" value: "&7 Poste actuel : &e [item]"
statistic_entities: statistic_entities:
name: "&f&l Entité cible" name: "&f&l Entité cible"
description: |- description: |-
&7 Permet de modifier le &7 Permet de modifier le
&7 entité cible statistique. &7 entité cible statistique.
value: "&7 Entité actuelle : &e [entité]" value: "&7 Entité actuelle : &e [entity]"
reward_text: reward_text:
name: "&f&l Texte de récompense" name: "&f&l Texte de récompense"
description: |- description: |-
@ -446,7 +446,7 @@ challenges:
description: |- description: |-
&7 Permet de modifier le &7 Permet de modifier le
&7 récompense en argent. &7 récompense en argent.
value: "&7 Valeur actuelle : &e [numéro]" value: "&7 Valeur actuelle : &e [number]"
repeat_reward_money: repeat_reward_money:
name: "&f&l Répéter l'argent de la récompense" name: "&f&l Répéter l'argent de la récompense"
description: |- description: |-
@ -825,14 +825,14 @@ challenges:
challenge: challenge:
lore: |- lore: |-
[description] [description]
[statut] [status]
[refroidir] [cooldown]
[exigences] [requirements]
[récompenses] [rewards]
status: status:
completed: "&2&l Terminé" completed: "&2&l Terminé"
completed-times: "&2 Terminé &7&l [numéro] &r&2 fois(-s)" completed-times: "&2 Terminé &7&l [number] &r&2 fois(-s)"
completed-times-of: "&2 Terminé &7&l [nombre] &r&2 sur &7&l [max] &r&2 fois" completed-times-of: "&2 Terminé &7&l [number] &r&2 sur &7&l [max] &r&2 fois"
completed-times-reached: "&2&l Terminé tout &7 [max] &2 fois" completed-times-reached: "&2&l Terminé tout &7 [max] &2 fois"
cooldown: cooldown:
lore: |- lore: |-
@ -881,16 +881,16 @@ challenges:
warning: "&e Le ou les éléments seront &c supprimés" warning: "&e Le ou les éléments seront &c supprimés"
other: other:
lore: |- lore: |-
[expérience] [experience]
[expérience-avertissement] [experience-warning]
[argent] [money]
[avertissement d'argent] [money-warning]
[niveau] [level]
experience: "&7&l Expérience requise : &r&e [number]" experience: "&7&l Expérience requise : &r&e [number]"
experience-warning: "&e L'expérience sera &c supprimée" experience-warning: "&e L'expérience sera &c supprimée"
money: "&7&l Argent requis : &r&e [number]" money: "&7&l Argent requis : &r&e [number]"
money-warning: "&e L'argent sera &c supprimé" money-warning: "&e L'argent sera &c supprimé"
level: "&7&l Niveau d'îlot requis : &r&e [nombre]" level: "&7&l Niveau d'îlot requis : &r&e [number]"
statistic: statistic:
lore: |- lore: |-
[statistic] [statistic]
@ -923,14 +923,14 @@ challenges:
status: status:
completed: "&2&l Terminé" completed: "&2&l Terminé"
completed-challenges-of: |- completed-challenges-of: |-
&2 Terminé &7&l [numéro] &r&2 sur &2 Terminé &7&l [number] &r&2 sur
&7&l [max] &r&2 défis. &7&l [max] &r&2 défis.
locked: "&c&l Verrouillé" locked: "&c&l Verrouillé"
missing-challenges: |- missing-challenges: |-
&7 [nombre] d'autres défis doivent être relevés &7 [number] d'autres défis doivent être relevés
&7 terminé pour débloquer ce niveau. &7 terminé pour débloquer ce niveau.
waiver: |- waiver: |-
&7&l [numéro] défi(s) &r&7 peut être &7&l [number] défi(s) &r&7 peut être
&7 ignoré pour débloquer le niveau suivant. &7 ignoré pour débloquer le niveau suivant.
rewards: rewards:
lore: |- lore: |-
@ -961,23 +961,23 @@ challenges:
cancelled: "&c Conversation annulée !" cancelled: "&c Conversation annulée !"
input-number: "&e Veuillez saisir un numéro dans le chat." input-number: "&e Veuillez saisir un numéro dans le chat."
input-seconds: "&e Veuillez entrer une seconde dans le chat." input-seconds: "&e Veuillez entrer une seconde dans le chat."
numeric-only: "&c La [valeur] donnée n'est pas un nombre !" numeric-only: "&c La [value] donnée n'est pas un nombre !"
not-valid-value: "&c Le nombre donné [value] n'est pas valide. Elle doit être not-valid-value: "&c Le nombre donné [value] n'est pas valide. Elle doit être
supérieure à [min] et inférieure à [max] !" supérieure à [min] et inférieure à [max] !"
user-data-removed: "&a Toutes les données utilisateur pour [mode de jeu] sont user-data-removed: "&a Toutes les données utilisateur pour [gamemode] sont effacées
effacées de la base de données." de la base de données."
confirm-user-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer confirm-user-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer
la base de données utilisateur pour [mode de jeu]." la base de données utilisateur pour [gamemode]."
challenge-data-removed: "&a Toutes les données des défis pour [mode de jeu] sont challenge-data-removed: "&a Toutes les données des défis pour [gamemode] sont
effacées de la base de données." effacées de la base de données."
confirm-challenge-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer confirm-challenge-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer
la base de données des défis pour [mode de jeu]." la base de données des défis pour [gamemode]."
all-data-removed: "&a Toutes les données du module complémentaire pour [mode de all-data-removed: "&a Toutes les données du module complémentaire pour [gamemode]
jeu] sont effacées de la base de données." sont effacées de la base de données."
confirm-all-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer les confirm-all-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer les
données du module complémentaire pour [gamemode]." données du module complémentaire pour [gamemode]."
write-name: "&e Veuillez écrire un nom dans le chat." write-name: "&e Veuillez écrire un nom dans le chat."
new-object-created: "&a Un nouvel objet pour [mode de jeu] est créé." new-object-created: "&a Un nouvel objet pour [gamemode] est créé."
object-already-exists: "&c L'objet &7 [id] &c existe déjà. Choisissez un nom différent." object-already-exists: "&c L'objet &7 [id] &c existe déjà. Choisissez un nom différent."
invalid-challenge: "&c Challenge [challenge] contient des données non valides. invalid-challenge: "&c Challenge [challenge] contient des données non valides.
Il ne peut pas être déployé !" Il ne peut pas être déployé !"
@ -1006,22 +1006,22 @@ challenges:
challenge-removed: "&a Les défis [challenge] pour [gamemode] sont supprimés de challenge-removed: "&a Les défis [challenge] pour [gamemode] sont supprimés de
la base de données." la base de données."
confirm-challenge-deletion: "&e Veuillez confirmer que vous souhaitez supprimer confirm-challenge-deletion: "&e Veuillez confirmer que vous souhaitez supprimer
[défi] pour [mode de jeu] de la base de données." [challenge] pour [gamemode] de la base de données."
level-removed: "&a Le niveau [niveau] pour [mode de jeu] est supprimé de la base level-removed: "&a Le niveau [level] pour [gamemode] est supprimé de la base de
de données." données."
confirm-level-deletion: "&e Veuillez confirmer que vous souhaitez supprimer [niveau] confirm-level-deletion: "&e Veuillez confirmer que vous souhaitez supprimer [level]
pour [mode de jeu] de la base de données." pour [gamemode] de la base de données."
start-downloading: "&a Début du téléchargement et de l'importation de la bibliothèque start-downloading: "&a Début du téléchargement et de l'importation de la bibliothèque
de défis." de défis."
written-text: "&a Saisir du texte :" written-text: "&a Saisir du texte :"
confirm-data-replacement: "&e Veuillez confirmer que vous souhaitez remplacer confirm-data-replacement: "&e Veuillez confirmer que vous souhaitez remplacer
vos défis actuels par de nouveaux." vos défis actuels par de nouveaux."
new-challenges-imported: "&a Succès, de nouveaux défis pour [mode de jeu] ont new-challenges-imported: "&a Succès, de nouveaux défis pour [gamemode] ont été
été importés." importés."
exported-file-name: "&e Veuillez entrer un nom de fichier pour le fichier de base exported-file-name: "&e Veuillez entrer un nom de fichier pour le fichier de base
de données exporté. (écrivez « annuler » pour quitter)" de données exporté. (écrivez « annuler » pour quitter)"
database-export-completed: "&a Succès, l'exportation de la base de données pour database-export-completed: "&a Succès, l'exportation de la base de données pour
[monde] est terminée. Fichier [fichier] généré." [world] est terminée. Fichier [file] généré."
file-name-exist: "&c Le fichier portant le nom '[id]' existe. Ne peut pas écraser." file-name-exist: "&c Le fichier portant le nom '[id]' existe. Ne peut pas écraser."
write-search: "&e Veuillez saisir une valeur de recherche. (écrire 'cancel' pour write-search: "&e Veuillez saisir une valeur de recherche. (écrire 'cancel' pour
quitter)" quitter)"
@ -1056,7 +1056,7 @@ challenges:
no-name: "&cNom du Challenge manquant" no-name: "&cNom du Challenge manquant"
unknown-challenge: "&cChallenge inconnu" unknown-challenge: "&cChallenge inconnu"
not-valid-integer: |- not-valid-integer: |-
&c L'entier donné "[valeur]" n'est pas valide ! &c L'entier donné "[value]" n'est pas valide !
La valeur doit être comprise entre [min] et [max]. La valeur doit être comprise entre [min] et [max].
not-deployed: "&cLe Challenge ne peut pas être réalisé !" not-deployed: "&cLe Challenge ne peut pas être réalisé !"
not-on-island: "&cVous devez être sur votre île pour faire le Challenge !" not-on-island: "&cVous devez être sur votre île pour faire le Challenge !"
@ -1090,8 +1090,8 @@ challenges:
missing-arguments: "&c La commande n'a pas d'arguments." missing-arguments: "&c La commande n'a pas d'arguments."
no-multiple-permission: "&cVous n'avez pas la permission d'accomplir ce challenge no-multiple-permission: "&cVous n'avez pas la permission d'accomplir ce challenge
plusieurs fois à la fois." plusieurs fois à la fois."
invalid-level: "&c Le niveau [niveau] contient des données non valides. Il ne invalid-level: "&c Le niveau [level] contient des données non valides. Il ne sera
sera pas chargé à partir de la base de données !" pas chargé à partir de la base de données !"
invalid-challenge: "&c Challenge [challenge] contient des données non valides. invalid-challenge: "&c Challenge [challenge] contient des données non valides.
Il ne sera pas chargé à partir de la base de données !" Il ne sera pas chargé à partir de la base de données !"
no-library-entries: "&c Impossible de trouver des entrées de bibliothèque. Rien no-library-entries: "&c Impossible de trouver des entrées de bibliothèque. Rien
@ -1099,12 +1099,12 @@ challenges:
not-hooked: "&c Challenges Addon n'a trouvé aucun GameMode." not-hooked: "&c Challenges Addon n'a trouvé aucun GameMode."
timeout: "&c Ce défi nécessite d'attendre [timeout] entre les achèvements. Vous timeout: "&c Ce défi nécessite d'attendre [timeout] entre les achèvements. Vous
devez attendre [wait-time] pour le terminer à nouveau." devez attendre [wait-time] pour le terminer à nouveau."
requirement-not-met: "&c Ce défi nécessite que [statistique] ait [nombre]. Vous requirement-not-met: "&c Ce défi nécessite que [statistic] ait [number]. Vous
n'avez que [valeur]." n'avez que [value]."
requirement-not-met-entity: "&c Ce défi nécessite que [statistique] [entité] ait requirement-not-met-entity: "&c Ce défi nécessite que [statistic] [entity] ait
[nombre]. Vous n'avez que [valeur]." [number]. Vous n'avez que [value]."
requirement-not-met-material: "&c Ce défi nécessite que [statistique] [matériel] requirement-not-met-material: "&c Ce défi nécessite que [statistic] [material]
ait [nombre]. Vous n'avez que [valeur]." ait [number]. Vous n'avez que [value]."
protection: protection:
flags: flags:
CHALLENGES_ISLAND_PROTECTION: CHALLENGES_ISLAND_PROTECTION:

View File

@ -1,7 +1,7 @@
name: BentoBox-Challenges name: BentoBox-Challenges
main: world.bentobox.challenges.ChallengesPladdon main: world.bentobox.challenges.ChallengesPladdon
version: ${project.version}${build.number} version: ${project.version}${build.number}
api-version: "1.17" api-version: "1.21"
authors: [tastybento, BONNe] authors: [tastybento, BONNe]
contributors: ["The BentoBoxWorld Community"] contributors: ["The BentoBoxWorld Community"]

View File

@ -1,10 +1,12 @@
package world.bentobox.challenges.tasks; package world.bentobox.challenges.tasks;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@ -30,6 +32,7 @@ import org.bukkit.World.Environment;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Player.Spigot;
import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.ItemFactory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
@ -41,6 +44,7 @@ import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
@ -49,6 +53,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox; import org.powermock.reflect.Whitebox;
import net.md_5.bungee.api.chat.TextComponent;
import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.AddonDescription; import world.bentobox.bentobox.api.addons.AddonDescription;
import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.addons.GameModeAddon;
@ -119,6 +124,8 @@ public class TryToCompleteTest {
@Mock @Mock
private BoundingBox bb; private BoundingBox bb;
private Set<Player> onlinePlayers; private Set<Player> onlinePlayers;
@Mock
private Spigot spigot;
/** /**
*/ */
@ -207,6 +214,7 @@ public class TryToCompleteTest {
when(user.getPlayer()).thenReturn(player); when(user.getPlayer()).thenReturn(player);
UUID uniqueId = UUID.randomUUID(); UUID uniqueId = UUID.randomUUID();
when(player.getUniqueId()).thenReturn(uniqueId); when(player.getUniqueId()).thenReturn(uniqueId);
when(player.spigot()).thenReturn(spigot);
when(user.getUniqueId()).thenReturn(uniqueId); when(user.getUniqueId()).thenReturn(uniqueId);
when(user.getTranslation(anyString())) when(user.getTranslation(anyString()))
.thenAnswer((Answer<String>) invocation -> invocation.getArgument(0, String.class)); .thenAnswer((Answer<String>) invocation -> invocation.getArgument(0, String.class));
@ -702,4 +710,32 @@ public class TryToCompleteTest {
} }
/**
* Check that spigot sent the message
* @param message - message to check
*/
public void checkSpigotMessage(String expectedMessage) {
checkSpigotMessage(expectedMessage, 1);
}
public void checkSpigotMessage(String expectedMessage, int expectedOccurrences) {
// Capture the argument passed to spigot().sendMessage(...) if messages are sent
ArgumentCaptor<TextComponent> captor = ArgumentCaptor.forClass(TextComponent.class);
// Verify that sendMessage() was called at least 0 times (capture any sent messages)
verify(spigot, atLeast(0)).sendMessage(captor.capture());
// Get all captured TextComponents
List<TextComponent> capturedMessages = captor.getAllValues();
// Count the number of occurrences of the expectedMessage in the captured messages
long actualOccurrences = capturedMessages.stream().map(component -> component.toLegacyText()) // Convert each TextComponent to plain text
.filter(messageText -> messageText.contains(expectedMessage)) // Check if the message contains the expected text
.count(); // Count how many times the expected message appears
// Assert that the number of occurrences matches the expectedOccurrences
assertEquals("Expected message occurrence mismatch: " + expectedMessage, expectedOccurrences,
actualOccurrences);
}
} }