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
with:
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
with:
distribution: 'adopt'
java-version: 17
java-version: 21
- name: Cache SonarCloud packages
uses: actions/cache@v3
with:

32
pom.xml
View File

@ -29,22 +29,29 @@
<url>https://github.com/BentoBoxWorld/Challenges/issues</url>
</issueManagement>
<distributionManagement>
<repository>
<id>bentoboxworld</id>
<url>https://repo.codemc.org/repository/bentoboxworld/</url>
</repository>
</distributionManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<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>
<!-- 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>
<bentobox.version>2.1.0</bentobox.version>
<bentobox.version>2.7.1-SNAPSHOT</bentobox.version>
<level.version>2.6.3</level.version>
<vault.version>1.7</vault.version>
<panelutils.version>1.2.0</panelutils.version>
<!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision>
<!-- 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>
<!-- Sonar Cloud -->
<sonar.projectKey>BentoBoxWorld_Challenges</sonar.projectKey>
@ -83,17 +90,6 @@
</profile>
</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>
<pluginRepository>
<id>apache.snapshots</id>
@ -108,6 +104,10 @@
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots</url>
</repository>
<!-- CodeMC Repo for BentoBox -->
<repository>
<id>bentoboxworld</id>
<url>https://repo.codemc.io/repository/bentoboxworld/</url>
</repository>
<repository>
<id>codemc-repo</id>
<url>https://repo.codemc.io/repository/maven-public</url>
@ -231,7 +231,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.3.1-SNAPSHOT</version>
<version>3.6.0</version>
<configuration>
<minimizeJar>true</minimizeJar>
<artifactSet>

View File

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

View File

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

View File

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

View File

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

View File

@ -151,6 +151,11 @@ public class WebManager
if (this.plugin.getSettings().isLogGithubDownloadData())
{
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)

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -649,6 +649,12 @@ challenges:
visible: Zeigen Sie sichtbare Herausforderungen
hidden: Alle Herausforderungen anzeigen
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:
name: "&f&l Bibliotheken herunterladen"
description: |-
@ -851,7 +857,7 @@ challenges:
environment-single: "&7 Limitiert auf [environment]"
environment-title: "&7 Limitiert auf:"
environment-list: " &7 - &e [environment]"
permission-single: "&c Requires [permissions] permission"
permission-single: "&c Erfordert die Berechtigung [permission]"
permissions-title: "&c Erfordert Berechtigungen:"
permissions-list: " &c - [permission]"
island:
@ -998,9 +1004,9 @@ challenges:
write-reward-commands: "&e Bitte geben Sie pro Zeile im Chat einen neuen Belohnungsbefehl
ein und beenden Sie den Chat in einer eigenen Zeile."
reward-commands-changed: "&a Erfolg, die Belohnungsbefehle wurden aktualisiert."
write-repeat-reward-commands: "&e Bitte geben Sie pro Zeile im Chat einen neuen
Belohnungswiederholungsbefehl ein und beenden Sie den Chat in einer eigenen
Zeile."
write-repeat-reward-commands: "&e Geben Sie bitte pro Zeile im Chat einen neuen
Befehl zur Wiederholung der Belohnung ein und klicken Sie zum Beenden auf „Beenden“
in einer eigenen Zeile."
repeat-reward-commands-changed: "&a Erfolg, die Wiederholungsbelohnungsbefehle
wurden aktualisiert."
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."
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."
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:
flags:
CHALLENGES_ISLAND_PROTECTION:

View File

@ -1,49 +1,43 @@
---
meta:
authors:
- BONne
- BONNE
challenges:
commands:
admin:
main:
description: Comando de administrador principal. Abrir GUI.
reload:
description: |-
description: >-
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.
show:
description: Imprime todos los desafíos en el chat que existen en este mundo.
complete:
description: Completar un desafío para un jugador.
parameters: "<player> <challange_id>"
parameters: <player> <challange_id>
reset:
description: Restablecer un desafío para un jugador. Si "challenge_id" se
establece en "all", restableceran todos los desafíos.
parameters: "<player> <challange_id>"
parameters: <player> <challange_id>
migrate:
description: Migrar los datos actuales de los desafíos del mundo del juego
al 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.
description: Migrar los datos actuales de los desafíos del mundo del juego al
formato de almacenamiento 0.8.0.
user:
main:
description: Abrir GUI de Desafíos.
complete:
description: Completa el desafío.
parameters: "<challenge_id> [count]"
description: Este método abre el GUI de los desafíos.
parameters: <challenge_id> [count]
gui:
titles:
player-gui: "&0&l Menú de desafíos"
gamemode-gui: "&0&l Seleccionar modo de juego"
multiple-gui: "&0&l ¿Cuántas veces?"
admin-gui: "&0&l Menú de administración de desafíos"
edit-challenge: "&0&l Editar [desafío]"
edit-level: "&0&l Editar [nivel]"
edit-challenge: "&0&l Editar [challenge]"
edit-level: "&0&l Editar [level]"
settings: "&0&l Configuración"
choose-challenge: "&0&l Elegir desafío"
choose-level: "&0&l Elegir nivel"
@ -71,20 +65,20 @@ challenges:
&7 o salir de GUI
previous:
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:
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:
name: "&f&l Reducir"
description: "&7 Reducir en &e [número]"
description: "&7 Reducir en &e [number]"
increase:
name: "&f&l Aumento"
description: "&7 Aumentar en &e [número]"
description: "&7 Aumentar en &e [number]"
accept:
name: "&f&l completo"
description: |-
&7 Completa el desafío &e [número]
&7 Completa el desafío &e [number]
&7 veces)
quit:
name: "&f&l Salir"
@ -193,7 +187,7 @@ challenges:
description: |-
&7 Permite cambiar
&7 el nombre para mostrar.
value: "&7 Actualmente: &r [nombre]"
value: "&7 Actualmente: &r [name]"
remove_on_complete:
name: "&f&l Ocultar después de finalizar"
description: |-
@ -225,7 +219,7 @@ challenges:
&7 Objetos con números iguales
&7 serán ordenados por su
&7 nombres de identificación únicos.
value: "&7 Orden actual: &e [número]"
value: "&7 Orden actual: &e [number]"
icon:
name: Icono &f&l
description: |-
@ -243,7 +237,7 @@ challenges:
&7 permisos para esto
&7 desafío para ser completable.
title: "&7 permisos:"
permission: " &8 - [permiso]"
permission: " &8 - [permission]"
none: "&7 Los permisos no están establecidos."
remove_entities:
name: "&f&l Eliminar entidades"
@ -262,7 +256,7 @@ challenges:
&7 entidades para esto
&7 desafío para ser completable.
title: "&7 entidades:"
list: " &8 - [número] x [entidad]"
list: " &8 - [number] x [entity]"
none: "&7 Entidades no se agregan."
remove_blocks:
name: "&f&l Quitar bloques"
@ -281,7 +275,7 @@ challenges:
&7 bloques para esto
&7 desafío para ser completable.
title: "&7 bloques:"
list: " &8 - [número] x [bloque]"
list: " &8 - [number] x [block]"
none: "&7 bloques no se agregan."
search_radius:
name: "&f&l Radio de búsqueda"
@ -290,7 +284,7 @@ challenges:
&7 alrededor del jugador del cual
&7 bloques y/o entidades son
&7 detectado.
value: "&7 Distancia actual: &e [número]"
value: "&7 Distancia actual: &e [number]"
remove_items:
name: "&f&l Eliminar elementos"
description: |-
@ -308,7 +302,7 @@ challenges:
&7 artículos para esto
&7 desafío para ser completable.
title: "&7 artículos:"
list: " &8 - [número] x [elemento]"
list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan."
add_ignored_meta:
name: "&f&l Agregar Ignorar metadatos"
@ -318,7 +312,7 @@ challenges:
&7 cualquier metadato que
Se les asigna &7.
title: "&7 artículos:"
list: " &8 - [número] x [elemento]"
list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan."
remove_ignored_meta:
name: "&f&l Eliminar Ignorar metadatos"
@ -343,14 +337,14 @@ challenges:
&7 Permite cambiar el
&7 experiencia requerida para
&7 el jugador.
value: "&7 Experiencia actual: &e [número]"
value: "&7 Experiencia actual: &e [number]"
required_level:
name: "&f&l Nivel de isla requerido"
description: |-
&7 Permite cambiar el
&7 nivel de isla requerido
&7 para el desafío.
value: "&7 Nivel actual: &e [número]"
value: "&7 Nivel actual: &e [number]"
remove_money:
name: "&f&l Quitar dinero"
description: |-
@ -367,21 +361,21 @@ challenges:
&7 Permite cambiar el
&7 dinero requerido en el jugador
&7 explica el desafío.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
statistic:
name: "&f&l estadística"
description: |-
&7 Permite cambiar el
&7 tipo de estadística que es
&7 marcó este desafío.
value: "&7 Valor actual: &e [estadística]"
value: "&7 Valor actual: &e [statistic]"
statistic_amount:
name: "&f&l Valor objetivo"
description: |-
&7 Permite cambiar el
&7 valor objetivo estadístico
&7 que se debe cumplir.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
remove_statistic:
name: "&f&l Reducir estadística"
description: |-
@ -396,19 +390,19 @@ challenges:
description: |-
&7 Permite cambiar el
&7 bloque objetivo estadístico.
value: "&7 Bloque actual: &e [bloque]"
value: "&7 Bloque actual: &e [block]"
statistic_items:
name: "&f&l Artículo de destino"
description: |-
&7 Permite cambiar el
&7 elemento objetivo estadístico.
value: "&7 Artículo actual: &e [artículo]"
value: "&7 Artículo actual: &e [item]"
statistic_entities:
name: "&f&l entidad objetivo"
description: |-
&7 Permite cambiar el
&7 entidad objetivo estadística.
value: "&7 Entidad actual: &e [entidad]"
value: "&7 Entidad actual: &e [entity]"
reward_text:
name: "&f&l Texto de recompensa"
description: |-
@ -429,7 +423,7 @@ challenges:
&7 Permite cambiar recompensa
&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."
repeat_reward_items:
name: "&f&l Repetir artículos de recompensa"
@ -438,7 +432,7 @@ challenges:
&7 artículos de recompensa por esto
&7 desafío.
title: "&7 artículos:"
list: " &8 - [número] x [elemento]"
list: " &8 - [number] x [item]"
none: "&7 Los artículos no se agregan."
reward_experience:
name: Experiencia de recompensa &f&l
@ -446,27 +440,27 @@ challenges:
&7 Permite cambiar el
&7 experiencia de recompensa para
&7 el jugador.
value: "&7 Experiencia de recompensa: &e [número]"
value: "&7 Experiencia de recompensa: &e [number]"
repeat_reward_experience:
name: "&f&l Repetir experiencia de recompensa"
description: |-
&7 Permite cambiar el
&7 repetir experiencia de recompensa
&7 para el jugador.
value: "&7 Experiencia de recompensa: &e [número]"
value: "&7 Experiencia de recompensa: &e [number]"
reward_money:
name: "&f&l Recompensa en dinero"
description: |-
&7 Permite cambiar el
&7 dinero de recompensa.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
repeat_reward_money:
name: "&f&l repetir dinero de recompensa"
description: |-
&7 Permite cambiar el
&7 repetir dinero de recompensa
&7 para el desafío.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
reward_commands:
name: "&f&l Comandos de recompensa"
description: |-
@ -481,7 +475,7 @@ challenges:
&8 permitirá que el comando sea
&8 ejecutado por el jugador. Tambié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 que completó el desafío.
value: "&7 Comandos actuales:"
@ -500,7 +494,7 @@ challenges:
&8 permitirá que el comando sea
&8 ejecutado por el jugador. Tambié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 que completó el desafío.
value: "&7 Comandos actuales:"
@ -518,7 +512,7 @@ challenges:
&7 Permite cambiar el
&7 número de repeticiones
&7 para el desafío.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
cool_down:
name: "&f&l enfriamiento"
description: |-
@ -527,7 +521,7 @@ challenges:
&7 debe esperarse entre
&7 desafío repetible
&7 finalizaciones.
value: "&7 Valor actual: &e [hora]"
value: "&7 Valor actual: &e [time]"
challenges:
name: Desafíos &f&l
description: |-
@ -540,7 +534,7 @@ challenges:
&7 de desafíos que pueden
&7 quedará sin completar durante
&7 desbloqueando el siguiente nivel.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
add_challenges:
name: "&f&l Agregar desafío(s)"
description: |-
@ -635,13 +629,13 @@ challenges:
&7 en datos de usuario.
&7 0 significa que los datos
&7 no se eliminará.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
title_showtime:
name: "&f&l Título Showtime"
description: |-
&7 Número de ticks de ese título
&7 se mostrará al jugador.
value: "&7 Valor actual: &e [número]"
value: "&7 Valor actual: &e [number]"
active_world_list:
name: "&f&l Mostrar sólo mundo activo"
description: |-
@ -680,10 +674,10 @@ challenges:
enabled: "&2 Con borrado de caché"
disabled: "&c Sin borrar caché"
player:
name: "&f&l [nombre]"
description: "&7 Propietario de la isla: [propietario]"
name: "&f&l [name]"
description: "&7 Propietario de la isla: [owner]"
members: "&7 miembros de la isla:"
member: "&8 - [nombre]"
member: "&8 - [name]"
no-island: |-
&c El jugador no tiene
&c una isla.
@ -731,9 +725,9 @@ challenges:
&7 entidades seleccionadas
&7 de listas.
title: "&7 entidades seleccionadas:"
entity: "&8 - [entidad]"
entity: "&8 - [entity]"
entity:
name: "&f&l [entidad]"
name: "&f&l [entity]"
description: "&7 ID de entidad: [id]"
selected: "&2 seleccionado"
inventory_type:
@ -774,29 +768,25 @@ challenges:
&7 Devuelve elementos seleccionados
&7 y abre la GUI anterior.
title: "&7 seleccionado:"
element: "&8 - [elemento]"
element: "&8 - [element]"
statistic_element:
name: "&f&l [estadística]"
description: "[descripción]"
name: "&f&l [statistic]"
description: "[description]"
environment_element:
name: "&f&l [medio ambiente]"
description: "[descripción]"
name: "&f&l [environment]"
description: "[description]"
search:
name: "&f&l Buscar"
description: |-
&7 Permite buscar un
&7 elemento con entrada
&7 valor de texto.
search: "&b Valor: [valor]"
admin:
backward: Importar desafios 0.3.0
backward-player: Arreglar 0.3.0 PlayerData
search: "&b Valor: [value]"
tips:
click-to-select: "&e Haga clic en &7 para seleccionar."
click-to-choose: "&e Haga clic en &7 para elegir."
click-to-complete: "&e Haga clic en &7 para completar."
right-click-multiple-open: "&e Haga clic derecho en &7 para elegir el recuento
de finalización."
right-click-multiple-open: "&e Haga clic derecho en &7 para elegir el recuento de finalización."
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."
right-click-to-write: "&e Haga clic derecho en &7 para escribir."
@ -840,140 +830,134 @@ challenges:
descriptions:
challenge:
lore: |-
[descripción]
[estado]
[enfriarse]
[requisitos]
[recompensas]
[description]
[status]
[cooldown]
[requirements]
[rewards]
status:
completed: "&2&l completado"
completed-times: "&2 completado &7&l [número] &r&2 vez(-s)"
completed-times-of: "&2 completado &7&l [número] &r&2 de &7&l [máx.] &r&2
veces"
completed-times: "&2 completado &7&l [number] &r&2 vez(-s)"
completed-times-of: "&2 completado &7&l [number] &r&2 de &7&l [max] &r&2 veces"
completed-times-reached: "&2&l Completado todo &7 [max] &2 veces"
cooldown:
lore: |-
[se acabó el tiempo]
[tiempo de espera]
timeout: "&7&l Enfriamiento: &r&7 [tiempo]"
wait-time: "&c&l Disponible después de: &r&c [hora]"
in-days: "[número] d"
in-hours: "[número] h"
in-minutes: "[número] min"
in-seconds: "[número] s"
[timeout]
[wait-time]
timeout: "&7&l Enfriamiento: &r&7 [time]"
wait-time: "&c&l Disponible después de: &r&c [time]"
in-days: "[number] d"
in-hours: "[number] h"
in-minutes: "[number] min"
in-seconds: "[number] s"
requirements:
lore: |-
[ambiente]
[tipo-requisito]
[permisos]
environment-single: "&7 Limitado a [entorno]"
[environment]
[type-requirement]
[permissions]
environment-single: "&7 Limitado a [environment]"
environment-title: "&7 Limitado a:"
environment-list: " &7 - &e [entorno]"
permission-single: "&c Requiere permiso [permiso]"
environment-list: " &7 - &e [environment]"
permission-single: "&c Requiere permiso [permission]"
permissions-title: "&c Requiere permisos:"
permissions-list: " &c - [permiso]"
permissions-list: " &c - [permission]"
island:
lore: |-
[bloques]
[entidades]
[radio de búsqueda]
[bloque de advertencia]
[entidad de advertencia]
[blocks]
[entities]
[search-radius]
[warning-block]
[warning-entity]
blocks-title: "&7&l Bloques requeridos:"
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:"
entity-value: " &7 - &e [entidad]"
entities-value: " &7 - &e [número] x [entidad]"
search-radius: "&7 No más allá de &e [número] &7 metros"
entity-value: " &7 - &e [entity]"
entities-value: " &7 - &e [number] x [entity]"
search-radius: "&7 No más allá de &e [number] &7 metros"
warning-block: "&e Los bloques serán &c eliminados"
warning-entity: "&e Entidades serán &c eliminadas"
inventory:
lore: |-
[elementos]
[advertencia]
[items]
[warning]
item-title: "&7&l Elementos necesarios:"
item-value: " &7 - &e [artículo]"
items-value: " &7 - &e [número] x [elemento]"
item-value: " &7 - &e [item]"
items-value: " &7 - &e [number] x [item]"
warning: "& los artículos serán &c eliminados"
other:
lore: |-
[experiencia]
[experiencia-advertencia]
[dinero]
[advertencia de dinero]
[nivel]
experience: "&7&l Experiencia requerida: &r&e [número]"
[experience]
[experience-warning]
[money]
[money-warning]
[level]
experience: "&7&l Experiencia requerida: &r&e [number]"
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"
level: "&7&l Nivel de isla requerido: &r&e [número]"
level: "&7&l Nivel de isla requerido: &r&e [number]"
statistic:
lore: |-
[estadística]
[advertencia]
multiple-target: "&7&l [estadística]: &r&e [número] x [objetivo]"
single-target: "&7&l [estadística]: &r&e [objetivo]"
statistic: "&7&l [estadística] &r&e [número]"
[statistic]
[warning]
multiple-target: "&7&l [statistic]: &r&e [number] x [target]"
single-target: "&7&l [statistic]: &r&e [target]"
statistic: "&7&l [statistic] &r&e [number]"
warning: "&e Los datos estadísticos serán &c reducidos."
rewards:
lore: |-
&7&l Recompensas:
[texto]
[elementos]
[experiencia]
[dinero]
[comandos]
[text]
[items]
[experience]
[money]
[commands]
item-title: "&7 artículos:"
item-value: " &7 - &e [artículo]"
items-value: " &7 - &e [número] x [elemento]"
experience: "&7 Experiencia: &r&e [número]"
money: "&7 Dinero: &r&e [número]"
item-value: " &7 - &e [item]"
items-value: " &7 - &e [number] x [item]"
experience: "&7 Experiencia: &r&e [number]"
money: "&7 Dinero: &r&e [number]"
commands-title: "&7 comandos:"
command: " &7 - &e [comando]"
command: " &7 - &e [command]"
level:
lore: |-
[texto]
[estado]
[exención]
[recompensas]
[text]
[status]
[waiver]
[rewards]
status:
completed: "&2&l completado"
completed-challenges-of: |-
&2 completado &7&l [número] &r&2 de
&7&l [máx.] &r&2 desafíos.
&2 completado &7&l [number] &r&2 de
&7&l [max] &r&2 desafíos.
locked: "&c&l bloqueado"
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.
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.
rewards:
lore: |-
&7&l Recompensas:
[texto]
[elementos]
[experiencia]
[dinero]
[comandos]
[text]
[items]
[experience]
[money]
[commands]
item-title: "&7 artículos:"
item-value: " &7 - &e [artículo]"
items-value: " &7 - &e [número] x [elemento]"
experience: "&7 Experiencia: &r&e [número]"
money: "&7 Dinero: &r&e [número]"
item-value: " &7 - &e [item]"
items-value: " &7 - &e [number] x [item]"
experience: "&7 Experiencia: &r&e [number]"
money: "&7 Dinero: &r&e [number]"
commands-title: "&7 comandos:"
command: " &7 - &e [comando]"
command: " &7 - &e [command]"
library:
author: "&7 por &e [autor]"
version: "&7 Hecho con desafíos &e [versión]"
lang: "&7 Idioma: &e [idioma]"
gamemode: "&7 Principal para &e [modo de juego]"
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
author: "&7 por &e [author]"
version: "&7 Hecho con desafíos &e [version]"
lang: "&7 Idioma: &e [lang]"
gamemode: "&7 Principal para &e [gamemode]"
conversations:
prefix: "&l&6 [BentoBox]: &r"
confirm-string: verdadero, activado, sí, confirmar, y, válido, correcto
@ -983,32 +967,30 @@ challenges:
cancelled: "&c ¡Conversación cancelada!"
input-number: "&e Por favor ingresa un número 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!"
not-valid-value: "&c El número dado [valor] no es válido. ¡Debe ser mayor que
numeric-only: "&c ¡El [value] dado no es un número!"
not-valid-value: "&c El número dado [value] no es válido. ¡Debe ser mayor que
[min] y menor que [max]!"
user-data-removed: "&a Todos los datos del usuario para [modo de juego] se borran
de la base de datos."
user-data-removed: "&a Todos los datos del usuario para [gamemode] se borran de
la base de datos."
confirm-user-data-deletion: "&e Confirme que desea borrar la base de datos de
usuarios para [modo de juego]."
challenge-data-removed: "&a Todos los datos de los desafíos para [modo de juego]
se borran de la base de datos."
usuarios para [gamemode]."
challenge-data-removed: "&a Todos los datos de los desafíos para [gamemode] se
borran de la base de datos."
confirm-challenge-data-deletion: "&e Confirme que desea borrar la base de datos
de desafíos para [modo de juego]."
all-data-removed: "&a Todos los datos adicionales para [modo de juego] se borran
de la base de datos."
confirm-all-data-deletion: "&e Confirme que desea borrar los datos adicionales
para [modo de juego]."
de desafíos para [gamemode]."
all-data-removed: "&a Todos los datos adicionales para [gamemode] se borran de
la base de datos."
confirm-all-data-deletion: "&e Confirme que desea borrar los datos adicionales para [gamemode]."
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."
invalid-challenge: "&c Desafío [desafío] contiene datos no válidos. ¡No se puede
desplegar!"
invalid-challenge: "&c Desafío [challenge] contiene datos no válidos. ¡No se puede desplegar!"
name-changed: "&a Éxito, se actualizó el nombre."
write-description: '&e Ingrese una nueva descripción en el chat y "salir" en una
línea sola para finalizar.'
description-changed: "&a Éxito, se actualizó la descripción."
write-permissions: '&e Ingrese los permisos requeridos, uno por línea en el chat,
y "salga" en una línea sola para finalizar.'
write-permissions: '&e Ingrese los permisos requeridos, uno por línea en el
chat, y "salga" en una línea sola para finalizar.'
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"
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
el chat y "salga" en una línea sola para finalizar.'
reward-commands-changed: "&a Éxito, se actualizaron los comandos de recompensa."
write-repeat-reward-commands: '&e Ingrese un nuevo comando de recompensa 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
repetida."
challenge-removed: "&a Los desafíos [desafío] para [modo de juego] se eliminan
write-repeat-reward-commands: '&e Ingrese un nuevo comando de recompensa
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 repetida."
challenge-removed: "&a Los desafíos [challenge] para [gamemode] se eliminan de
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."
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."
written-text: "&un texto de entrada:"
confirm-data-replacement: "&e Confirme que desea reemplazar sus desafíos actuales
por uno nuevo."
new-challenges-imported: "&a Éxito, se importaron nuevos desafíos para [modo de
juego]."
confirm-data-replacement: "&e Confirme que desea reemplazar sus desafíos actuales por uno nuevo."
new-challenges-imported: "&a Éxito, se importaron nuevos desafíos para [gamemode]."
exported-file-name: "&e Introduzca un nombre de archivo para el archivo de base
de datos exportado. (escriba 'cancelar' para salir)"
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."
write-search: "&e Por favor escriba un valor de búsqueda. (escriba 'cancelar'
para salir)"
@ -1051,10 +1029,10 @@ challenges:
level-title: Completado con éxito
level-subtitle: "[friendlyName]"
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ó!"
reset: "&2 ¡Reiniciaste el desafío [nombre] para [jugador]!"
reset-all: "&2 ¡Todos los desafíos [de jugador] fueron reiniciados!"
reset: "&2 ¡Reiniciaste el desafío [name] para [player]!"
reset-all: "&2 ¡Todos los desafíos [player] fueron reiniciados!"
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-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."
you-completed-challenge: "&2¡Has completado 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]
veces!"
you-repeated-challenge-multiple: "&2¡Has repetido el &r&2desafío [value] [count] veces!"
you-completed-level: "&2¡Has completado el nivel [value]!"
name-has-completed-challenge: "&5¡[name] ha completado el desafío [value]!"
name-has-completed-level: "&5¡[name] ha completado el nivel [value]!"
load-skipping: '"[value]" ya existe - saltando'
load-overwriting: Sobrescribiendo "[value]"
load-add: 'Añadiendo nuevo objeto: [value]'
load-add: "Añadiendo nuevo objeto: [value]"
errors:
no-name: "&cFalta el nombre del desafío"
unknown-challenge: "&cDesafío desconocido"
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].
not-deployed: "&c¡El desafío no está desplegado!"
not-on-island: "&c¡Debes estar en tu isla para hacer eso!"
challenge-level-not-available: "&cNo has desbloqueado el nivel requerido para
completar este desafío."
challenge-level-not-available: "&cNo has desbloqueado el nivel requerido para completar este desafío."
not-repeatable: "&c¡Este reto no es repetible!"
wrong-environment: "&c¡Estás en el entorno equivocado!"
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]"
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."
not-enough-money: "&cEs necesario tener [value] en tu cuenta para completar el
desafío."
not-enough-money: "&cEs necesario tener [value] en tu cuenta para completar el 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
desafío!"
@ -1097,29 +1072,26 @@ challenges:
load-error: "&cError: No se pudo cargar [value]."
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!"
exist-challenges-or-levels: "&cLos desafíos ya existen en tu mundo. ¡No se puede
proceder!"
exist-challenges-or-levels: "&cLos desafíos ya existen en tu mundo. ¡No se puede proceder!"
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!
¡Usa &5/[command] &cpara agregarlos!"
missing-arguments: "&cFaltan argumentos de comando."
no-multiple-permission: "&cNo tienes permiso para completar este desafío varias
veces a la vez."
invalid-level: "&c El nivel [nivel] contiene datos no válidos. ¡No se cargará
no-multiple-permission: "&cNo tienes permiso para completar este desafío varias veces a la vez."
invalid-level: "&c El nivel [level] contiene datos no válidos. ¡No se cargará
desde la base de datos!"
invalid-challenge: "&c Desafío [desafío] contiene datos no válidos. ¡No se cargará
desde la base de datos!"
no-library-entries: "&c No se pueden encontrar entradas de la biblioteca. Nada
que mostrar."
invalid-challenge: "&c Desafío [challenge] contiene datos no válidos. ¡No se
cargará desde la base de datos!"
no-library-entries: "&c No se pueden encontrar entradas de la biblioteca. Nada que mostrar."
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.
Debes esperar [tiempo de espera] hasta completarlo nuevamente."
requirement-not-met: "&c Este desafío requiere que [estadística] tenga [número].
Solo tienes [valor]."
requirement-not-met-entity: "&c Este desafío requiere que [estadística] [entidad]
tenga [número]. Solo tienes [valor]."
requirement-not-met-material: "&c Este desafío requiere que [estadística] [material]
tenga [número]. Solo tienes [valor]."
timeout: "&c Este desafío requiere esperar [timeout] entre finalizaciones. Debes
esperar [wait-time] hasta completarlo nuevamente."
requirement-not-met: "&c Este desafío requiere que [statistic] tenga [number].
Solo tienes [value]."
requirement-not-met-entity: "&c Este desafío requiere que [statistic] [entity]
tenga [number]. Solo tienes [value]."
requirement-not-met-material: "&c Este desafío requiere que [statistic]
[material] tenga [number]. Solo tienes [value]."
protection:
flags:
CHALLENGES_ISLAND_PROTECTION:
@ -1128,8 +1100,8 @@ protection:
&5&ocompletar desafíos
name: Proteccion de desafios
CHALLENGES_WORLD_PROTECTION:
description: "&5&oHabilitar/deshabilitar &5&orequerimiento para que los jugadores
&5&o esten en su isla para &5&ocompletar un desafío."
description: "&5&oHabilitar/deshabilitar &5&orequerimiento para que los
jugadores &5&o esten en su isla para &5&ocompletar un desafío."
name: Limitaciones 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"
multiple-gui: "&0&l Combien de fois ?"
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]"
settings: "&0&l Paramètres"
choose-challenge: "&0&l Choisir le Challenge"
@ -337,7 +337,7 @@ challenges:
&7 Permet de modifier le
&7 niveau d'îlot requis
&7 pour le défi.
value: "&7 Niveau actuel : &e [numéro]"
value: "&7 Niveau actuel : &e [number]"
remove_money:
name: "&f&l Supprimer de l'argent"
description: |-
@ -354,21 +354,21 @@ challenges:
&7 Permet de modifier le
&7 argent requis sur le joueur
&7 représente le défi.
value: "&7 Valeur actuelle : &e [numéro]"
value: "&7 Valeur actuelle : &e [number]"
statistic:
name: "&f&l Statistique"
description: |-
&7 Permet de modifier le
&7 type de statistique qui est
&7 a vérifié ce défi.
value: "&7 Valeur actuelle : &e [statistique]"
value: "&7 Valeur actuelle : &e [statistic]"
statistic_amount:
name: "&f&l Valeur cible"
description: |-
&7 Permet de modifier le
&7 valeur cible statistique
&7 qui doit être respecté.
value: "&7 Valeur actuelle : &e [numéro]"
value: "&7 Valeur actuelle : &e [number]"
remove_statistic:
name: "&f&l Réduire la statistique"
description: |-
@ -389,13 +389,13 @@ challenges:
description: |-
&7 Permet de modifier le
&7 poste cible statistique.
value: "&7 Poste actuel : &e [poste]"
value: "&7 Poste actuel : &e [item]"
statistic_entities:
name: "&f&l Entité cible"
description: |-
&7 Permet de modifier le
&7 entité cible statistique.
value: "&7 Entité actuelle : &e [entité]"
value: "&7 Entité actuelle : &e [entity]"
reward_text:
name: "&f&l Texte de récompense"
description: |-
@ -446,7 +446,7 @@ challenges:
description: |-
&7 Permet de modifier le
&7 récompense en argent.
value: "&7 Valeur actuelle : &e [numéro]"
value: "&7 Valeur actuelle : &e [number]"
repeat_reward_money:
name: "&f&l Répéter l'argent de la récompense"
description: |-
@ -825,14 +825,14 @@ challenges:
challenge:
lore: |-
[description]
[statut]
[refroidir]
[exigences]
[récompenses]
[status]
[cooldown]
[requirements]
[rewards]
status:
completed: "&2&l Terminé"
completed-times: "&2 Terminé &7&l [numéro] &r&2 fois(-s)"
completed-times-of: "&2 Terminé &7&l [nombre] &r&2 sur &7&l [max] &r&2 fois"
completed-times: "&2 Terminé &7&l [number] &r&2 fois(-s)"
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"
cooldown:
lore: |-
@ -881,16 +881,16 @@ challenges:
warning: "&e Le ou les éléments seront &c supprimés"
other:
lore: |-
[expérience]
[expérience-avertissement]
[argent]
[avertissement d'argent]
[niveau]
[experience]
[experience-warning]
[money]
[money-warning]
[level]
experience: "&7&l Expérience requise : &r&e [number]"
experience-warning: "&e L'expérience sera &c supprimée"
money: "&7&l Argent requis : &r&e [number]"
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:
lore: |-
[statistic]
@ -923,14 +923,14 @@ challenges:
status:
completed: "&2&l Terminé"
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.
locked: "&c&l Verrouillé"
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.
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.
rewards:
lore: |-
@ -961,23 +961,23 @@ challenges:
cancelled: "&c Conversation annulée !"
input-number: "&e Veuillez saisir un numéro 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
supérieure à [min] et inférieure à [max] !"
user-data-removed: "&a Toutes les données utilisateur pour [mode de jeu] sont
effacées de la base de données."
user-data-removed: "&a Toutes les données utilisateur pour [gamemode] sont effacées
de la base de données."
confirm-user-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer
la base de données utilisateur pour [mode de jeu]."
challenge-data-removed: "&a Toutes les données des défis pour [mode de jeu] sont
la base de données utilisateur pour [gamemode]."
challenge-data-removed: "&a Toutes les données des défis pour [gamemode] sont
effacées de la base de données."
confirm-challenge-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer
la base de données des défis pour [mode de jeu]."
all-data-removed: "&a Toutes les données du module complémentaire pour [mode de
jeu] sont effacées de la base de données."
la base de données des défis pour [gamemode]."
all-data-removed: "&a Toutes les données du module complémentaire pour [gamemode]
sont effacées de la base de données."
confirm-all-data-deletion: "&e Veuillez confirmer que vous souhaitez effacer les
données du module complémentaire pour [gamemode]."
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."
invalid-challenge: "&c Challenge [challenge] contient des données non valides.
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
la base de données."
confirm-challenge-deletion: "&e Veuillez confirmer que vous souhaitez supprimer
[défi] pour [mode de jeu] de la base de données."
level-removed: "&a Le niveau [niveau] pour [mode de jeu] est supprimé de la base
de données."
confirm-level-deletion: "&e Veuillez confirmer que vous souhaitez supprimer [niveau]
pour [mode de jeu] de la base de données."
[challenge] pour [gamemode] de la base de données."
level-removed: "&a Le niveau [level] pour [gamemode] est supprimé de la base de
données."
confirm-level-deletion: "&e Veuillez confirmer que vous souhaitez supprimer [level]
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
de défis."
written-text: "&a Saisir du texte :"
confirm-data-replacement: "&e Veuillez confirmer que vous souhaitez remplacer
vos défis actuels par de nouveaux."
new-challenges-imported: "&a Succès, de nouveaux défis pour [mode de jeu] ont
été importés."
new-challenges-imported: "&a Succès, de nouveaux défis pour [gamemode] ont été
importés."
exported-file-name: "&e Veuillez entrer un nom de fichier pour le fichier de base
de données exporté. (écrivez « annuler » pour quitter)"
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."
write-search: "&e Veuillez saisir une valeur de recherche. (écrire 'cancel' pour
quitter)"
@ -1056,7 +1056,7 @@ challenges:
no-name: "&cNom du Challenge manquant"
unknown-challenge: "&cChallenge inconnu"
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].
not-deployed: "&cLe Challenge ne peut pas être réalisé !"
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."
no-multiple-permission: "&cVous n'avez pas la permission d'accomplir ce challenge
plusieurs fois à la fois."
invalid-level: "&c Le niveau [niveau] contient des données non valides. Il ne
sera pas chargé à partir de la base de données !"
invalid-level: "&c Le niveau [level] contient des données non valides. Il ne sera
pas chargé à partir de la base de données !"
invalid-challenge: "&c Challenge [challenge] contient des données non valides.
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
@ -1099,12 +1099,12 @@ challenges:
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
devez attendre [wait-time] pour le terminer à nouveau."
requirement-not-met: "&c Ce défi nécessite que [statistique] ait [nombre]. Vous
n'avez que [valeur]."
requirement-not-met-entity: "&c Ce défi nécessite que [statistique] [entité] ait
[nombre]. Vous n'avez que [valeur]."
requirement-not-met-material: "&c Ce défi nécessite que [statistique] [matériel]
ait [nombre]. Vous n'avez que [valeur]."
requirement-not-met: "&c Ce défi nécessite que [statistic] ait [number]. Vous
n'avez que [value]."
requirement-not-met-entity: "&c Ce défi nécessite que [statistic] [entity] ait
[number]. Vous n'avez que [value]."
requirement-not-met-material: "&c Ce défi nécessite que [statistic] [material]
ait [number]. Vous n'avez que [value]."
protection:
flags:
CHALLENGES_ISLAND_PROTECTION:

View File

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

View File

@ -1,10 +1,12 @@
package world.bentobox.challenges.tasks;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@ -30,6 +32,7 @@ import org.bukkit.World.Environment;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Player.Spigot;
import org.bukkit.inventory.ItemFactory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
@ -41,6 +44,7 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
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.reflect.Whitebox;
import net.md_5.bungee.api.chat.TextComponent;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.AddonDescription;
import world.bentobox.bentobox.api.addons.GameModeAddon;
@ -119,6 +124,8 @@ public class TryToCompleteTest {
@Mock
private BoundingBox bb;
private Set<Player> onlinePlayers;
@Mock
private Spigot spigot;
/**
*/
@ -207,6 +214,7 @@ public class TryToCompleteTest {
when(user.getPlayer()).thenReturn(player);
UUID uniqueId = UUID.randomUUID();
when(player.getUniqueId()).thenReturn(uniqueId);
when(player.spigot()).thenReturn(spigot);
when(user.getUniqueId()).thenReturn(uniqueId);
when(user.getTranslation(anyString()))
.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);
}
}