From 12109eb290a59f53dd9b81a6b78e59702e637dc5 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Tue, 29 Oct 2024 22:40:56 -0400 Subject: [PATCH 01/22] Fix parrot interaction condition --- .../flags/protection/HurtingListener.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListener.java index 3553d61f8..10b05a7dd 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/HurtingListener.java @@ -114,13 +114,14 @@ public void onFishing(PlayerFishEvent e) { */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerFeedParrots(PlayerInteractEntityEvent e) { - if (e.getRightClicked() instanceof Parrot - && (e.getHand().equals(EquipmentSlot.HAND) && e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.COOKIE)) - || (e.getHand().equals(EquipmentSlot.OFF_HAND) && e.getPlayer().getInventory().getItemInOffHand().getType().equals(Material.COOKIE))) { - if (((Parrot) e.getRightClicked()).isTamed()) { - checkIsland(e, e.getPlayer(), e.getRightClicked().getLocation(), Flags.HURT_TAMED_ANIMALS); - } else { - checkIsland(e, e.getPlayer(), e.getRightClicked().getLocation(), Flags.HURT_ANIMALS); + if (e.getRightClicked() instanceof Parrot parrot) { + if ((e.getHand().equals(EquipmentSlot.HAND) && e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.COOKIE)) + || (e.getHand().equals(EquipmentSlot.OFF_HAND) && e.getPlayer().getInventory().getItemInOffHand().getType().equals(Material.COOKIE))) { + if (parrot.isTamed()) { + checkIsland(e, e.getPlayer(), e.getRightClicked().getLocation(), Flags.HURT_TAMED_ANIMALS); + } else { + checkIsland(e, e.getPlayer(), e.getRightClicked().getLocation(), Flags.HURT_ANIMALS); + } } } } From 4747c902613122fdda68a56ddfd75bfdb1208cad Mon Sep 17 00:00:00 2001 From: Lukas <30570031+Archerymaister@users.noreply.github.com> Date: Sun, 3 Nov 2024 21:37:35 +0100 Subject: [PATCH 02/22] Update de.yml Fist 300 lines --- src/main/resources/locales/de.yml | 129 +++++++++++++++--------------- 1 file changed, 65 insertions(+), 64 deletions(-) diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index 09f8e3d17..fe9e0b906 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -3,6 +3,7 @@ meta: authors: - xXjojojXx - Poslovitch + - Archerymaister banner: RED_BANNER:1:STRIPE_RIGHT:BLACK:STRIPE_LEFT:YELLOW prefixes: bentobox: "&6 BentoBox &7 &l > &r " @@ -13,16 +14,16 @@ general: command-cancelled: "&c Befehl abgebrochen." no-permission: "&c Du hast nicht die Berechtigung, diesen Befehl auszuführen (&7 [permission]&c )." - insufficient-rank: "&c Ihr Rang ist dafür nicht hoch genug! (&7 [rank]&c )" + insufficient-rank: "&c Dein Rang ist dafür nicht hoch genug! (&7 [rank]&c )" use-in-game: "&c Dieser Befehl ist nur im Spiel verfügbar." use-in-console: "&c Dieser Befehl ist nur in der Konsole verfügbar." no-team: "&c Du hast kein Team!" no-island: "&c Du hast keine Insel!" - player-has-island: "&c Der Spieler hat bereits eine Insel!" + player-has-island: "&c Dieser Spieler hat bereits eine Insel!" player-has-no-island: "&c Dieser Spieler hat keine Insel!" already-have-island: "&c Du hast bereits eine Insel!" no-safe-location-found: "&c Es konnte kein sicherer Ort auf der Insel gefunden - werden, an den du dich teleportieren konntest." + werden, an den du dich teleportieren kannst." not-owner: "&c Du bist nicht der Besitzer der Insel!" player-is-not-owner: "&b [name] &c ist nicht Besitzer einer Insel!" not-in-team: "&c Dieser Spieler gehört nicht zu deinem Team!" @@ -36,9 +37,9 @@ general: must-be-positive-number: "&c [number] ist keine gültige positive Zahl." not-on-island: "&c Du bist nicht auf der Insel!" worlds: - overworld: Überwelt + overworld: Oberwelt nether: Nether - the-end: Das Ende + the-end: Das End commands: help: header: "&7 =========== &c [label] Hilfe &7 ===========" @@ -52,7 +53,7 @@ commands: help: description: Admin Befehl resets: - description: die Resets der Spieler bearbeiten + description: Resets der Spieler bearbeiten set: description: Legt die Resets dieses Players fest parameters: " " @@ -60,31 +61,31 @@ commands: reset: description: Setzt die Resets dieses Spielers auf 0 zurück parameters: "" - success-everyone: "&a Erfolgreiches Zurücksetzen &b jedermann&a 's resets + success-everyone: "&a Erfolgreiches Zurücksetzen &bvon allen&a Resets auf &b 0&a ." - success: "&a Erfolgreiches Zurücksetzen von &b [name]&a 's resets auf &b 0&a + success: "&a Erfolgreiches Zurücksetzen von &b [name]&a 's Resets auf &b 0&a ." add: - description: fügt dem Spieler Resets hinzu + description: Fügt dem Spieler Resets hinzu parameters: " " - success: "&a Erfolgreiches Hinzufügen von &b [number] &a resets zu &b [name], - wodurch die Summe auf &b [total] &a resets erhöht wurde." + success: "&a Erfolgreiches Hinzufügen von&b [number]&a Resets zu&b [name], + wodurch die Summe auf &b [total] &a Resets erhöht wurde." remove: - description: entfernt Resets von dem Spieler + description: Entfernt Resets von dem Spieler parameters: " " - success: "&a Erfolgreiches Entfernen von &b [number] &a resets zu &b [name], - wodurch die Summe auf &b [total]&a resets reduziert wurde." + success: "&a Erfolgreiches Entfernen von&b [number] &a Resets für&b [name], + wodurch die Summe auf&b [total]&a Resets reduziert wurde." purge: parameters: "[days]" - description: löschen von Inseln, die seit mehr als [days] verlassen sind + description: Löschen von Inseln, die seit mehr als [days] verlassen sind days-one-or-more: Muss mindestens 1 Tag oder mehr betragen purgable-islands: Es wurden [number] löschbare Inseln gefunden. - purge-in-progress: "&c Löschung läuft. Benutze Löschstop zum Abbrechen" - number-error: "&c Angabe muss eine Anzahl von Tagen sein" - confirm: "&d Tippe [label] purge confirm zum Starten des Löschvorgangs ein" + purge-in-progress: "&c Löschung läuft. Benutze /[label] purge stop zum Abbrechen" + number-error: "&c Eingabe muss eine Anzahl von Tagen sein" + confirm: "&d Tippe /[label] purge confirm zum Starten des Löschvorgangs ein" completed: "&a Lösung gestoppt" see-console-for-status: Löschung gestartet. Für den Status siehe Konsole - no-purge-in-progress: "&c Derzeit wird keine Bereinigung durchgeführt." + no-purge-in-progress: "&c Derzeit wird keine Löschung durchgeführt." protect: description: Umschalten des Insellöschschutzes move-to-island: "&c Erst auf eine Insel gehen!" @@ -97,8 +98,8 @@ commands: description: Löschen freier Inseln - Bestätigung erforderlich unowned-islands: "&d [number] Inseln gefunden" status: - description: zeigt den Status der Bereinigung an - status: "&b [purged] &a islands purged out of &b [purgeable] &7(&b[percentage] + description: Zeigt den Status der Bereinigung an + status: "&b [purged] &a von&b [purgeable] &b Inseln wurden gelöscht &7(&b[percentage] %&7)&a." team: description: Teams verwalten @@ -110,12 +111,12 @@ commands: success: "&b [name]&a wurde der Insel von &b [owner]&a hinzugefügt." disband: parameters: "" - description: das Team des Eigentümers auflösen - use-disband-owner: "&c Nicht der Besitzer! Benutze auflösen [owner]." + description: Das Team des Eigentümers auflösen + use-disband-owner: "&c Nicht der Besitzer! Benutze disband [owner]." disbanded: "&c Der Admin hat dein Team aufgelöst!" - success: "&b Das Team von [name] &a wurde aufgelöst." + success: "&b Das Team von [name]&a wurde aufgelöst." fix: - description: scannt und behebt die inselübergreifende Mitgliedschaft in der + description: Scannt und behebt die inselübergreifende Mitgliedschaft in der Datenbank scanning: Datenbank wird durchsucht... duplicate-owner: "&c Spieler besitzt mehr als eine Insel in der Datenbank: @@ -128,27 +129,27 @@ commands: done: "&a Scan" kick: parameters: "" - description: einen Spieler aus einem Team kicken + description: Einen Spieler aus einem Team kicken cannot-kick-owner: "&c Du kannst den Besitzer nicht kicken. Kick erst die Mitglieder." not-in-team: "&c Dieser Spieler ist nicht in einem Team." admin-kicked: "&c Der Admin hat dich aus dem Team gekickt." - success: "&b [name] &a wurde von der Insel von &b [owner] &a gekickt." + success: "&b [name]&a wurde von der Insel von &b [owner] &a gekickt." setowner: parameters: "" description: überträgt das Insel-Eigentum auf den Spieler already-owner: "&c [name] ist bereits der Besitzer dieser Insel!" - must-be-on-island: "&c Sie müssen auf der Insel sein, um den Besitzer festzulegen" - confirmation: "&a Möchten Sie [name] wirklich als Eigentümer der Insel in + must-be-on-island: "&c Du musst auf der Insel sein, um den Besitzer festzulegen" + confirmation: "&a Möchtest du [name] wirklich als Eigentümer der Insel in [xyz] festlegen?" - success: "&b [name]&a ist jetzt der Besitzer dieser Insel." + success: "&b [name]&a ist jetzt der Besitzer dieser Insel." extra-islands: "&c Warnung: Dieser Spieler besitzt jetzt [number] Inseln. Das sind mehr als durch die Einstellungen oder Berechtigungen erlaubt ist: [max]." range: description: Admin Insel Bereichsbefehl invalid-value: - too-low: "&c Der Schutzbereich muss größer sein als &b 1&c !" + too-low: "&c Der Schutzbereich muss größer sein als&b 1&c !" too-high: "&c Der Schutzbereich sollte gleich groß oder kleiner sein als &b [number]&c !" same-as-before: "&c Der Schutzbereich ist bereits eingestellt auf &b [number]&c @@ -157,30 +158,30 @@ commands: already-off: "&c Die Indikatoren sind bereits aus" already-on: "&c Die Indikatoren sind bereits an" description: Anzeige des Inselbereichs ein/ausblenden - hiding: "&2 Versteckte Reichweite Indikatoren" + hiding: "&2 Inselbegrenzungen ausgeblendet" hint: |- - &c Rote Barriere-Icons &f zeigen die aktuelle Inselschutzbereichsgrenze an. - &7 Graue Partikel &f zeigen die maximale Inselgrenze an. - Grüne Partikel &f zeigen den voreingestellten Schutzbereich an, wenn der Inselschutzbereich davon abweicht. - showing: "&2 Anzeigen von Reichweite Indikatoren" + &c Rote Barriere-Icons&f zeigen die aktuelle Inselschutzbereichsgrenze an. + &7 Graue Partikel&f zeigen die maximale Inselgrenze an. + Grüne Partikel&f zeigen den voreingestellten Schutzbereich an, wenn der Inselschutzbereich davon abweicht. + showing: "&2 Inselbegrenzungen eingeblendet" set: parameters: " [Inselstandort]" - description: legt den geschützten Inselbereich fest + description: Legt den geschützten Inselbereich fest success: "&a Inselschutzbereich einstellen auf &b [number]&a ." reset: parameters: "" description: Setzt den inselgeschützten Bereich auf den Weltstandard zurück - success: "& a Setzen Sie den Inselschutzbereich auf & b [number] & a zurück." + success: "& a Setzt den Inselschutzbereich auf & b [number] & a zurück." add: description: Erhöht den Schutzbereich der Insel parameters: " [Inselstandort]" - success: "&a Erfolgreiche Erhöhung von &b [name]&a 's geschützten Bereich + success: "&a Erfolgreiche Erhöhung von &b [name]&a's geschützten Bereich der Insel auf &b [total] &7 (&b +[number]&7 )&a ." remove: description: Verringert den Schutzbereich der Insel parameters: " [Inselstandort]" success: "&a Erfolgreich reduziert &b [name]&a 's geschützten Bereich der - Insel auf&b [total] &7 (&b -[number]&7 )&a ." + Insel um&b [total] &7 (&b -[number]&7 )&a ." register: parameters: "" description: Spieler auf freier Insel registrieren, auf der du dich befindest @@ -201,7 +202,7 @@ commands: unknown-island-location: "&c Unbekannter Inselstandort" specify-island-location: "&c Gib denn Inselstandort in x,y,z Format an" player-has-more-than-one-island: "&c Spieler hat mehr als eine Insel. Gib - an welche" + an welche." info: parameters: "" description: Informationen über deinen Standort oder die Spielerinsel erhalten @@ -209,14 +210,14 @@ commands: title: "========== Insel Info ============" island-uuid: 'UUID: [uuid]' owner: 'Besitzer: [owner] ([uuid])' - last-login: 'Letzter login: [date]' + last-login: 'Letzter Login: [date]' last-login-date-time-format: EEE MMM dd HH:mm:ss zzz yyyy deaths: 'Tode: [number]' resets-left: 'Resets: [number] (Max: [total])' team-members-title: 'Teammitglieder:' team-owner-format: "&a [name] [rank]" team-member-format: "&b [name] [rank]" - island-protection-center: 'Schutzbereich Mitte: [xyz]' + island-protection-center: 'Mittelpunkt des Schutzbereiches: [xyz]' island-center: 'Inselmitte: [xyz]' island-coords: 'Koordinaten der Insel: [xz1] bis [xz2]' islands-in-trash: "&d Der Spieler hat Inseln im Papierkorb." @@ -233,12 +234,12 @@ commands: bundle: "&a Blaupausenpaket zum Erstellen der Insel: &b [name]" switch: description: Schutzumgehung ein-/ausschalten - op: "&c Ops können den Schutz immer umgehen. Deop um den Befehl zu benutzen." + op: "&c OPs können den Schutz immer umgehen. Deop um den Befehl zu benutzen." removing: Entfernen der Schutzumgehung... adding: Schutzumgehung hinzufügen... switchto: parameters: " " - description: die Spielerinsel durch die nummerierte Insel im Papierkorb ersetzen + description: Die Spielerinsel durch die nummerierte Insel im Papierkorb ersetzen out-of-range: "&c Die Zahl muss zwischen 1 und [number] liegen. Verwende &l [label] trash [player] &r &c um die Inselnummern zu sehen" cannot-switch: "&c Wechsel fehlgeschlagen. Siehe Konsolenprotokoll für Fehler." @@ -250,35 +251,35 @@ commands: parameters: "[player]" description: Zeige freie Inseln oder Spielerinseln im Papierkorb title: "&d =========== Inseln im Papierkorb ===========" - count: "&l &d Insel [number]:" - use-switch: "&a Nutze &l [label] switchto &r &a um den Spieler + count: "&l&d Insel [number]:" + use-switch: "&a Nutze&l /[label] switchto &r&a um den Spieler auf die Insel im Papierkorb zu wechseln" - use-emptytrash: "&a Nutze &l [label] emptytrash [player]&r &a, um den Papierkorb + use-emptytrash: "&a Nutze&l /[label] emptytrash [player]&r&a, um den Papierkorb dauerhaft zu leeren" emptytrash: parameters: "[player]" description: Den Papierkorb für Spieler oder aller freien Inseln im Papierkorb leeren - success: "&a Papierkorb erfolgreich entleert." + success: "&a Papierkorb erfolgreich geleert." version: description: BentoBox und Addon-Versionen anzeigen setrange: parameters: " " - description: die Reichweite der Spielerinsel festlegen - range-updated: "&a Inselbereich aktualisiert auf &b [number]&a ." + description: Die Reichweite der Spielerinsel festlegen + range-updated: "&a Inselbereich aktualisiert auf &b [number]&a." reload: - description: neu laden + description: Neu laden tp: parameters: " [Insel des Spielers]" - description: zu einer Spielerinsel teleportieren - manual: "&c Kein sicherer Warp gefunden! Manuell in die Nähe von &b [location] + description: Zu einer Spielerinsel teleportieren + manual: "&c Kein sicherer Warp gefunden! Manuell in die Nähe von&b [location] &c teleportieren und nachsehen" tpuser: parameters: " [Insel des Spielers]" - description: einen Spieler zur Insel eines anderen Spielers teleportieren + description: Einen Spieler zur Insel eines anderen Spielers teleportieren getrank: parameters: "" - description: den Rang eines Spielers auf seiner Insel erhalten + description: Den Rang eines Spielers auf seiner Insel erhalten rank-is: "&a Der Rang ist [rank] auf ihrer Insel." setrank: parameters: " [Insels Besitzer]" @@ -286,14 +287,14 @@ commands: festlegen unknown-rank: "&c Unbekannter Rang!" not-possible: "&c Der Rang muss höher sein als Besucher." - rank-set: "&a Rang gesetzt von &b [from] &a auf &b [to] &a auf &b [name]&a 's + rank-set: "&a Rang von&b [from]&a auf&b [to]&a gesetzt für&b [name]&a's Insel." setprotectionlocation: parameters: "[x y z Koordinaten]" - description: aktuellen Standort oder [x y z] als Zentrum des Schutzbereichs + description: Aktuellen Standort oder [x y z] als Zentrum des Schutzbereichs der Insel einstellen island: "&c Dies betrifft die Insel in [xyz], die '[name]' gehört." - confirmation: "&c Möchten Sie [xyz] wirklich als Schutzzentrum festlegen?" + confirmation: "&c Möchtest du [xyz] wirklich als Schutzzentrum festlegen?" success: "&a [xyz] erfolgreich als Schutzzentrum festgelegt." fail: "&a Fehler beim Festlegen von [xyz] als Schutzzentrum." island-location-changed: "&a [user] hat das Schutzzentrum der Insel in [xyz] @@ -905,11 +906,11 @@ protection: Allay hint: Allay-Interaktion deaktiviert ANIMAL_NATURAL_SPAWN: - description: Natürliches Laichen von Tieren umschalten - name: Tier natürlicher Laich + description: Natürliches Spawnen von Tieren umschalten + name: Tier ANIMAL_SPAWNERS_SPAWN: - description: Schalten Sie das Laichen von Tieren mit Spawnern um - name: Tierlaicher + description: Schaltet das Spawnen von Tieren mit Spawnern um + name: Tierspawner ANVIL: description: Interaktion umschalten name: Ambosse @@ -1283,7 +1284,7 @@ protection: &a spawnen in diesem Spiel &a Modus. name: "&e Beschränken Sie das Spawnen des Entitätstyps" - can: "&a Kann laichen" + can: "&a Kann spawnen" cannot: "&c Kann nicht spawnen" LIQUIDS_FLOWING_OUT: name: Flüssigkeiten, die aus den Inseln herausfließen From 2c9865d44de047ac8b7d2a2e0ab4b981ecaf5f7c Mon Sep 17 00:00:00 2001 From: Lukas <30570031+Archerymaister@users.noreply.github.com> Date: Mon, 4 Nov 2024 21:32:05 +0100 Subject: [PATCH 03/22] Update de.yml Changes until L1200 --- src/main/resources/locales/de.yml | 336 +++++++++++++++--------------- 1 file changed, 168 insertions(+), 168 deletions(-) diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index fe9e0b906..e19323608 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -306,13 +306,13 @@ commands: no-island-here: "&c Es gibt hier keine Insel." confirmation: "&c Bist du sicher, dass du diese Insel als Spawn für diese Welt setzen willst?" - success: "&a Diese Insel erfolgreich als Spawn für diese Welt gesetzt." + success: "&a Diese Insel wurde erfolgreich als Spawn für diese Welt gesetzt." setspawnpoint: - description: aktuellen Standort als Spawnpunkt für diese Insel festlegen + description: Aktuellen Standort als Spawnpunkt für diese Insel festlegen no-island-here: "&c Hier gibt es keine Insel." - confirmation: "&c Möchten Sie diesen Ort wirklich als Spawnpunkt für diese Insel + confirmation: "&c Möchtest du diesen Ort wirklich als Spawnpunkt für diese Insel festlegen?" - success: "&a Setzen Sie diesen Ort erfolgreich als Spawnpunkt für diese Insel." + success: "&a Spawnpunkt für diese Insel erfolgreich gesetzt." island-spawnpoint-changed: "&a [user] hat diesen Insel-Spawnpunkt geändert." settings: parameters: "[player]" @@ -329,14 +329,14 @@ commands: could-not-load: "&c Diese Datei konnte nicht geladen werden!" could-not-save: "&c Hmm, etwas ist beim Speichern der Datei schiefgegangen: [message]" - set-pos1: "&a Position 1 set auf [vector]" - set-pos2: "&a Position 2 set auf [vector]" - set-different-pos: "&c Setze eine andere Position - diese Pos ist bereits gesetzt!" + set-pos1: "&a Position 1 auf [vector] gesetzt" + set-pos2: "&a Position 2 auf [vector] gesetzt" + set-different-pos: "&c Setze eine andere Position - diese Position ist bereits gesetzt!" need-pos1-pos2: "&c Zuerst Pos1 und Pos2 setzen!" copying: "&b Kopiere Blöcke..." copied-blocks: "&b [number] Blöcke in die Zwischenablage kopiert" - look-at-a-block: "&c Blick auf den zu setzenden Block innerhalb von 20 Blöcken" - mid-copy: "&c Du bist mitten in der Kopie. Warte bis die Kopie fertig ist." + look-at-a-block: "&c Schaue auf den zu setzenden Block innerhalb von 20 Blöcken" + mid-copy: "&c Du stehst mitten in der Kopie. Warte bis die Kopie fertig ist." copied-percent: "&6 Kopiert [number]%" copy: parameters: "[air]" @@ -360,7 +360,7 @@ commands: origin: description: Setze den Ursprung der Blaupause auf deine Position paste: - description: die Zwischenablage an Ihrem Standort einfügen + description: Die Zwischenablage an Ihrem Standort einfügen pasting: "&a Einfügen..." pos1: description: 1. Ecke der quaderförmigen Zwischenablage setzen @@ -372,11 +372,11 @@ commands: rename: parameters: " " description: Eine Blaupause umbenennen - success: "&a Blaupause &b [old] &a wurde erfolgreich in &b [name]&a umbenannt." + success: "&a Blaupause&b [old]&a wurde erfolgreich in&b [name]&a umbenannt." pick-different-name: "&c Bitte gib einen Namen an, der sich vom aktuellen Namen der Blaupause unterscheidet." management: - back: zurück + back: Zurück instruction: Klick auf die Blaupause und dann klick hier title: Blaupausen-Bundle-Manager edit: Klicken zum Bearbeiten @@ -385,15 +385,15 @@ commands: world-name-syntax: "[name] Welt" world-instructions: "Blaupause zum Setzen \nnach rechts legen" trash: Papierkorb - no-trash: Papierkorb nicht möglich - trash-instructions: Rechtsklick hier zum Löschen + no-trash: Kann nicht weggeworfen werden + trash-instructions: Rechtsklicke hier zum Löschen no-trash-instructions: Standardpaket kann nicht gelöscht werden permission: Berechtigung - no-permission: Keine Erlaubnis + no-permission: Keine Permission perm-required: Erforderlich no-perm-required: Perm für Standardpaket kann nicht festgelegt werden perm-not-required: Nicht erforderlich - perm-format: "&e" + perm-format: "&e " remove: Rechtsklick zum Entfernen blueprint-instruction: |- Zum Auswählen anklicken, @@ -403,19 +403,19 @@ commands: new-bundle: Neues Bundle new-bundle-instructions: Zum Erstellen eines neuen Bundles anklicken name: - quit: beenden + quit: Beenden prompt: Gib einen Namen ein, oder 'quit' zum Beenden too-long: "&c Zu lang" - pick-a-unique-name: Wähle bitte einen eindeutigeren Namen + pick-a-unique-name: Wähle bitte einen einzigartigen Namen stripped-char-in-unique-name: "&c Einige Zeichen wurden entfernt, da sie nicht zulässig sind. &a Die neue ID lautet &b [name]&a." success: Erfolg! conversation-prefix: ">" description: - quit: beenden + quit: Beenden instructions: |- Gib eine mehrzeilige Beschreibung für [name] ein. - und 'quit' in einer eigenen Zeile um zu beenden. + Schreibe 'quit' in einer eigenen Zeile um zu beenden. success: Erfolg! cancelling: Abbrechen slot: "&f Bevorzugter Slot [number]" @@ -438,13 +438,13 @@ commands: description: Welteinstellungen verwalten delete: parameters: "" - description: löscht die Insel eines Spielers + description: Löscht die Insel eines Spielers cannot-delete-owner: "&c Alle Inselmitglieder müssen vor dem Löschen von der Insel gekickt werden." deleted-island: "&a Insel bei &e [xyz] &a wurde erfolgreich gelöscht." deletehomes: parameters: "" - description: löscht alle benannten Häuser von einer Insel + description: Löscht alle benannten Häuser von einer Insel warning: "&c Alle benannten Häuser werden von der Insel gelöscht!" why: parameters: "" @@ -454,73 +454,73 @@ commands: deaths: description: Tode von Spielern bearbeiten reset: - description: setzt die Tode des Spielers zurück + description: Setzt die Tode des Spielers zurück parameters: "" - success: "&a Erfolgreiches Zurücksetzen von &b [name]&a 's Toden auf &b 0&a + success: "&a Erfolgreiches Zurücksetzen von &b [name]&a's Toden auf &b 0&a ." set: description: Legt die Tode des Spielers fest parameters: " " success: "&a Erfolgreiche Einstellung von &b [name]&a's Toden auf &b [number]&a." add: - description: fügt dem Spieler Tode hinzu + description: Fügt dem Spieler Tode hinzu parameters: " " - success: "&a Es wurde erfolgreich &b [number] &a Tode zu &b [name] hinzugefügt, - wodurch sich die Gesamtzahl auf &b [total] &a Tode erhöht." + success: "&a Es wurde&b [number]&a Tode zu &b [name] hinzugefügt, + wodurch sich die Gesamtzahl auf&b [total]&a Tode erhöht." remove: - description: entfernt Tode von dem Spieler + description: Entfernt Tode von dem Spieler parameters: " " - success: "&a Es wurden erfolgreich &b [number] &a Tode von &b [name] entfernt, - wodurch sich die Gesamtzahl auf &b [total]&a Tode verringert hat." + success: "&a Es wurden&b [number]&a Tode von &b[name] entfernt, + wodurch sich die Gesamtzahl auf&b [total]&a Tode verringert hat." resetname: description: Spielerinselnamen zurücksetzen success: "&a Der Inselname von [name] wurde erfolgreich zurückgesetzt." bentobox: description: BentoBox Admin-Befehl perms: - description: Zeigt die effektiven Dauerwellen für BentoBox und Add-ons in einem + description: Zeigt die aktiven Permissions für BentoBox und Add-ons in einem YAML-Format an about: - description: zeigt Copyright- und Lizenzinformationen an + description: Zeigt Copyright- und Lizenzinformationen an reload: - description: lädt BentoBox und alle Addons, Einstellungen und Locales neu + description: Lädt BentoBox, alle Addons, Einstellungen und Locales neu locales-reloaded: "&2 Sprachen neu geladen." addons-reloaded: "&2 Addons neu geladen." settings-reloaded: "&2 Einstellungen neu geladen." - addon: "&6 Neu laden von &b [name]&2 ." - addon-reloaded: "&b [name] &2 neu geladen." - warning: "&c Warnung: Das Neuladen kann zu Instabilität führen, wenn du also + addon: "&6 Neu laden von &b [name]&2." + addon-reloaded: "&b[name] &2 neu geladen." + warning: "&c Warnung: Das Neuladen kann zu Instabilität führen, wenn du danach Fehler siehst, starte den Server neu." unknown-addon: "&c Unbekanntes Addon!" locales: - description: lädt Gebietsschemas neu + description: Lädt Locales neu version: - plugin-version: "&2 BentoBox version: &3 [version]" - description: zeigt die Versionen von BentoBox und Addons an + plugin-version: "&2 BentoBox version:&3 [version]" + description: Zeigt die Versionen von BentoBox und Addons an loaded-addons: 'Geladene Addons:' loaded-game-worlds: 'Geladene Spielewelten:' - addon-syntax: "&2 [name] &3 [version] &7 (&3 [state]&7 )" - game-world: "&2 [name] &7 (&3 [addon]&7 ): &a Oberwelt&7 , &r Nether&7 , &r + addon-syntax: "&2 [name]&3 [version]&7 (&3 [state]&7 )" + game-world: "&2 [name]&7 (&3 [addon]&7 ): &a Oberwelt&7,&r Nether&7,&r End" - server: "&2 Ausführen von &3 [name] [version]&2 ." - database: "&2 Datenbank: &3 [database]" + server: "&2 Ausführen von&3 [name] [version]&2." + database: "&2 Datenbank:&3 [database]" manage: - description: zeigt das Verwaltungs-Panel an + description: Zeigt das Verwaltungs-Panel an catalog: - description: zeigt den Katalog an + description: Zeigt den Katalog an locale: - description: führt eine Analyse der Lokalisierungsdateien durch + description: Führt eine Analyse der Lokalisierungsdateien durch see-console: |- - &a Überprüfe die Konsole, um die Rückmeldung zu sehen. - &a Dieser Befehl ist so spammy, dass das Feedback nicht aus dem Chat gelesen werden kann... + [prefix_bentobox]&a Überprüfe die Konsole, um die Rückmeldung zu sehen. + [prefix_bentobox]&a Dieser Befehl ist so spammy, dass das Feedback nicht aus dem Chat gelesen werden kann... migrate: - description: migriert Daten von einer Datenbank in eine andere + description: Migriert Daten von einer Datenbank in eine andere players: "&6 Spieler migrieren" names: "&6 Namen migrieren" addons: "&6 Migrieren von Addons" class: "&6 Migration [description]" - migrated: "&A migriert" - completed: "[prefix_bentobox]&a Abgeschlossen" + migrated: "&a Migriert" + completed: "&a Abgeschlossen" rank: description: Ränge auflisten, hinzufügen oder entfernen parameters: "&a [list | add | remove] [Rangreferenz] [Rangwert]" @@ -533,7 +533,7 @@ commands: failure: "&c [rank] konnte nicht entfernt werden. Unbekannter Rang." list: "&a Die registrierten Ränge sind wie folgt:" confirmation: - confirm: "&c Befehl innerhalb von &b [seconds]s&c zur Bestätigung erneut eingeben." + confirm: "&c Befehl innerhalb von&b [seconds]s&c zur Bestätigung erneut eingeben." previous-request-cancelled: "&6 Vorherige Bestätigungsanforderung abgebrochen." request-cancelled: "&c Bestätigungs-Timeout - &b-Anforderung abgebrochen." delay: @@ -545,19 +545,19 @@ commands: description: Über dieses Addon go: parameters: "[home number]" - description: teleportiert dich auf deine Insel + description: Teleportiert dich auf deine Insel teleport: "&a Teleportiert dich auf deine Insel." - teleported: "&a Teleportierte dich zu Home &e #[number]." - unknown-home: "&c Unbekannter Heimatname!" + teleported: "&a Zu Home&e #[number] teleportiert." + unknown-home: "&c Unbekannter Home-Name!" help: description: Der wichtigste Inselbefehl spawn: - description: teleportiert dich zum Spawn + description: Teleportiert dich zum Spawn teleporting: "&a Teleportiert dich zum Spawn." no-spawn: "&c Es gibt keinen Spawn auf dieser Welt." create: - description: erstellt eine Insel, mit Hilfe einer optionalen Blaupause (erfordert - Genehmigung) + description: Erstellt eine Insel, mit Hilfe einer optionalen Blaupause (erfordert + Permission) parameters: "" too-many-islands: "&c Es gibt zu viele Inseln auf dieser Welt: es gibt nicht genug Platz, um deine zu erstellen." @@ -571,10 +571,10 @@ commands: you-cannot-make-team: "&c Teammitglieder können keine Inseln in derselben Welt wie ihre Teaminsel erstellen." pasting: - estimated-time: "&a Geschätzte Zeit: &b [number] &a Sekunden." - blocks: "&a Block für Block aufbauen: &b [number] &a Blöcke insgesamt..." - entities: "&a Füllen mit Entitäten: &b [number] &a Entitäten in insgesamt..." - dimension-done: "&eine Insel in [world] wird gebaut." + estimated-time: "&a Geschätzte Zeit:&b [number]&a Sekunden." + blocks: "&a Block für Block aufbauen:&b [number]&a Blöcke insgesamt..." + entities: "&a Füllen mit Entitäten:&b [number]&a Entitäten insgesamt..." + dimension-done: "&a Insel in [world] wird gebaut." done: "&a Erledigt! Deine Insel ist bereit und wartet auf dich!" pick: "&2 Eine Insel auswählen" unknown-blueprint: "&c Diese Blaupause wurde noch nicht geladen." @@ -583,40 +583,40 @@ commands: you-can-teleport-to-your-island: "&a Du kannst dich auf deine Insel teleportieren, wann immer du willst." deletehome: - description: einen Heimatort löschen - parameters: "[Heimatname]" + description: Homepunkt löschen + parameters: "[Home name]" homes: - description: listet eure Häuser auf + description: Listet deine Homes auf info: description: Informationen über deine Insel oder die Insel des Spielers anzeigen parameters: "" near: - description: zeigt die Namen der benachbarten Inseln um Sie herum an + description: Zeigt die Namen der benachbarten Inseln um dich herum an the-following-islands: "&a Die folgenden Inseln sind in der Nähe:" - syntax: "&6 [direction]: &a [name]" - north: Nord - south: Süd - east: Ost - west: West + syntax: "&6 [direction]:&a [name]" + north: Norden + south: Süden + east: Osten + west: Westen no-neighbors: "&c Du hast keine unmittelbaren Nachbarinseln!" reset: description: Startet deine Insel neu und entfernt die alte parameters: "" none-left: "&c Du hast keine Resets mehr übrig!" - resets-left: "&c Du hast &b [number] &c Resets übrig" + resets-left: "&c Du hast&b [number]&c Resets übrig" confirmation: |- &c Bist du sicher, dass du das tun willst? &c Alle Inselmitglieder werden von der Insel gekickt, du musst sie danach neu einladen. - &c Es gibt kein Zurück: wenn deine aktuelle Insel gelöscht ist, gibt es &l keine &r &c Möglichkeit, sie später wiederherzustellen. + &c Es gibt kein Zurück: wenn deine aktuelle Insel gelöscht ist, gibt es&l keine&r&c Möglichkeit, sie später wiederherzustellen. kicked-from-island: "&c Du wirst im [gamemode] von deiner Insel gekickt, weil der Besitzer sie zurücksetzt." sethome: description: Setze deinen Home Teleport Punkt must-be-on-your-island: "&c Du musst auf deiner Insel sein, um ein Home zu setzen!" - too-many-homes: "&c Kann nicht eingestellt werden - Ihre Insel hat maximal [number] - Häuser." + too-many-homes: "&c Kann nicht eingestellt werden - Deine Insel hat maximal [number] + Homes." home-set: "&6 Dein Insel-Home wurde auf deine aktuelle Position gesetzt." - homes-are: "&6 Inselhäuser sind:" + homes-are: "&6 Inselhomes sind:" home-list-syntax: "&6 [name]" nether: not-allowed: "&c Du darfst dein Home nicht im Nether setzen." @@ -628,19 +628,19 @@ commands: setname: description: Gib deiner Insel einen Namen name-too-short: "&c Zu kurz. Die Mindestgröße ist [number] Zeichen." - name-too-long: "&c Zu lang. Die maximale Größe ist [number] Zeichen." + name-too-long: "&c Zu lang. Die Maximalgröße ist [number] Zeichen." name-already-exists: "&c Es gibt bereits eine Insel mit diesem Namen in diesem Spielmodus." parameters: "" - success: "&a Der Name Ihrer Insel wurde erfolgreich auf &b [name]&a gesetzt." + success: "&a Der Name Ihrer Insel wurde erfolgreich auf&b [name]&a gesetzt." renamehome: - description: einen Heimatort umbenennen + description: Ein Home umbenennen parameters: "[Heimatname]" - enter-new-name: "&6 Geben Sie den neuen Namen ein" - already-exists: "&c Dieser Name existiert bereits, versuchen Sie es mit einem + enter-new-name: "&6 Gib den neuen Namen ein" + already-exists: "&c Dieser Name existiert bereits, versuche es mit einem anderen Namen." resetname: - description: setze deinen Inselnamen zurück + description: Setze deinen Inselnamen zurück success: "&a Setzen Sie Ihren Inselnamen erfolgreich zurück." team: description: Dein Team verwalten @@ -653,13 +653,13 @@ commands: description: Der Status des Teams rank-filter: name: Rangfilter - description: "&a Klicken Sie hier, um die Ränge zu wechseln" + description: "&a Klicke hier, um die Ränge zu wechseln" invitation: Einladung invite: name: Spieler einladen description: | - &a Spieler müssen sich in der - &a selben Welt wie Sie befinden, um + &a Spieler müssen sich in + &a deiner Welt befinden, um &a in der Liste angezeigt zu werden. tips: LEFT: @@ -668,12 +668,12 @@ commands: RIGHT: name: "&b Rechtsklick" SHIFT_RIGHT: - name: "&b Umschalttaste Rechtsklick" + name: "&b Umschalttaste + Rechtsklick" reject: "&a zum Ablehnen" kick: "&a um Spieler rauszuwerfen" leave: "&a verlässt das Team" SHIFT_LEFT: - name: "&b Umschalttaste Linksklick" + name: "&b Umschalttaste + Linksklick" accept: "&a zum Akzeptieren" setowner: | &a, um den Besitzer @@ -681,11 +681,11 @@ commands: info: description: zeigt detaillierte Informationen über dein Team an member-layout: - online: "&a &l o &r &f [name]" - offline: "&c &l o &r &f [name] &7 ([last_seen])" - offline-not-last-seen: "&c &l o &r &f [name]" + online: "&a&l o&r&f [name]" + offline: "&c&l o&r&f [name] &7 ([last_seen])" + offline-not-last-seen: "&c&l o&r&f [name]" last-seen: - layout: "&b [number] &7 [unit] vorher" + layout: "&b [number]&7 [unit] vorher" days: Tage hours: Stunden minutes: Minuten @@ -695,20 +695,20 @@ commands: &a Online-Mitglieder: &b [online] rank-layout: owner: "&6 [rank]:" - generic: "&6 [rank] &7 (&b [number]&7 )&6 :" + generic: "&6 [rank]&7 (&b [number]&7 )&6:" coop: - description: einen Spieler Coop-Rang auf deiner Insel machen + description: Einen Spieler den Coop-Rang auf deiner Insel geben parameters: "" cannot-coop-yourself: "&c Du kannst dich nicht selbst coopen!" already-has-rank: "&c Der Spieler hat bereits einen Rang!" you-are-a-coop-member: "&2 Du wurdest von [name] gecooped" - success: "&a Du hast &b [name] gecooped." + success: "&a Du hast&b [name] gecooped." name-has-invited-you: | &a [name] hat Sie eingeladen, - &a als Genossenschaftsmitglied + &a als Coop-Mitglied &a ihrer Insel beizutreten. uncoop: - description: einen Coop-Rang von einem Spieler entfernen + description: Einen Coop-Rang von einem Spieler entfernen parameters: "" cannot-uncoop-yourself: "&c Du kannst dich nicht selbst entcoopen!" cannot-uncoop-member: "&c Du kannst kein Teammitglied entcoopen!" @@ -717,12 +717,12 @@ commands: von [name]'s Insel" all-members-logged-off: "&c Alle Inselmitglieder haben sich ausgeloggt, so dass du kein Coop-Mitglied mehr auf der Insel von [name] bist" - success: "&b [name] &a ist nicht länger ein Coop-Mitglied deiner Insel." + success: "&b [name]&a ist nicht länger ein Coop-Mitglied deiner Insel." is-full: "&c Sie können niemanden einbinden." trust: description: Gib einem Spieler einen vertrauenswürdigen Rang auf deiner Insel parameters: "" - trust-in-yourself: "&c Vertraue auf dich selbst!" + trust-in-yourself: "&c Vertraue dir selbst!" name-has-invited-you: | &a [name] hat Sie eingeladen, &a als vertrauenswürdiges Mitglied @@ -732,16 +732,16 @@ commands: success: "&a Du vertraust &b [name]&a ." is-full: "&c Sie können keinem anderen vertrauen." untrust: - description: den Rang eines vertrauenswürdigen Spielers vom Spieler entfernen + description: Den Rang eines vertrauenswürdigen Spielers vom Spieler entfernen parameters: "" cannot-untrust-yourself: "&c Du kannst dir nicht selbst misstrauen!" cannot-untrust-member: "&c Du kannst einem Teammitglied nicht misstrauen!" player-not-trusted: "&c Der Spieler ist nicht vertrauenswürdig!" - you-are-no-longer-trusted: "&c Du bist nicht mehr vertrauenswürdig für &b + you-are-no-longer-trusted: "&c Du bist nicht mehr vertrauenswürdig für&b [name]&a !" - success: "&b [name] &a wird auf deiner Insel nicht mehr vertraut." + success: "&b [name]&a wird auf deiner Insel nicht mehr vertraut." invite: - description: einen Spieler auf deine Insel einladen + description: Einen Spieler auf deine Insel einladen invitation-sent: "&a Einladung gesendet an [name]" removing-invite: "&c Einladung entfernen" name-has-invited-you: | @@ -750,8 +750,8 @@ commands: to-accept-or-reject: "&a Gib /[label] team accept um zu akzeptieren, oder /[label] team reject um abzulehnen" you-will-lose-your-island: | - &c WARNUNG! Sie verlieren alle - &c Ihre Inseln, wenn Sie akzeptieren! + &c WARNUNG! Du verlierst alle + &c Inseln, wenn Sie akzeptieren! gui: titles: team-invite-panel: Spieler einladen @@ -781,7 +781,7 @@ commands: cooldown: "&c Du kannst diese Person für weitere [number] Sekunden nicht einladen." island-is-full: "&c Deine Insel ist voll, du kannst niemanden mehr einladen." - none-invited-you: "&c Niemand hat dich eingeladen :c." + none-invited-you: "&c Niemand hat dich eingeladen. :c" you-already-are-in-team: "&c Du bist bereits in einem Team!" already-on-team: "&c Dieser Spieler ist bereits in einem Team!" invalid-invite: "&c Diese Einladung ist nicht mehr gültig, sorry." @@ -789,7 +789,7 @@ commands: parameters: "" you-can-invite: "&a Du kannst [number] weitere Spieler einladen." accept: - description: eine Einladung annehmen + description: Eine Einladung annehmen you-joined-island: "&a Du bist einer Insel beigetreten! Benutze /[label] team info um die anderen Mitglieder zu sehen." name-joined-your-island: "&a [name] hat sich deiner Insel angeschlossen!" @@ -798,12 +798,12 @@ commands: &c diese &c Einladung annehmen möchten? reject: - description: eine Einladung ablehnen + description: Eine Einladung ablehnen you-rejected-invite: "&a Du hast die Einladung, einer Insel beizutreten, abgelehnt." name-rejected-your-invite: "&c [name] hat deine Insel-Einladung abgelehnt!" cancel: - description: die ausstehende Einladung zu deiner Insel zurücknehmen + description: Die ausstehende Einladung zu deiner Insel zurücknehmen leave: cannot-leave: "&c Besitzer können nicht gehen! Werde zuerst Mitglied, oder kicke alle Mitglieder." @@ -811,14 +811,14 @@ commands: left-your-island: "&c [name] &c hat deine Insel verlassen" success: "&a Du hast diese Insel verlassen." kick: - description: entferne ein Mitglied von deiner Insel + description: Entferne ein Mitglied von deiner Insel parameters: "" player-kicked: "&c Der [name] hat dich im [gamemode] von der Insel geworfen!" cannot-kick: "&c Du kannst dich nicht selbst kicken!" - cannot-kick-rank: "&c Dein Rang erlaubt es nicht, [name] zu treten!" - success: "&b [name] &a wurde von deiner Insel gekickt." + cannot-kick-rank: "&c Dein Rang erlaubt es nicht, [name] zu kicken!" + success: "&b [name]&a wurde von deiner Insel gekickt." demote: - description: einen Spieler auf deiner Insel um einen Rang zurückstufen + description: Einen Spieler auf deiner Insel um einen Rang zurückstufen parameters: "" errors: cant-demote-yourself: "&c Du kannst dich nicht selbst zurückstufen!" @@ -827,10 +827,10 @@ commands: failure: "&c Der Spieler kann nicht weiter zurückgestuft werden!" success: "&a Rückstufung von [name] auf [rank]." promote: - description: einen Spieler auf deiner Insel um einen Rang befördern + description: Einen Spieler auf deiner Insel um einen Rang befördern parameters: "" errors: - cant-promote-yourself: "&c Du kannst dich nicht bewerben!" + cant-promote-yourself: "&c Du kannst dich nicht befördern!" cant-promote: "&c Sie können nicht über Ihren Rang hinaus aufsteigen!" must-be-member: "&c Der Spieler muss ein Inselmitglied sein!" failure: "&c Der Spieler kann nicht weiter befördert werden!" @@ -839,38 +839,38 @@ commands: description: Deinen Inselbesitz auf ein Mitglied übertragen errors: cant-transfer-to-yourself: "&c Du kannst dir das Eigentum nicht selbst übertragen! - &7 (&o Tja, eigentlich könntest du... Aber wir wollen nicht, dass du es - tust. Weil es sinnlos ist. &r &7 )" + &7(&o Tja, eigentlich könntest du... Aber wir wollen nicht, dass du es + tust. Weil es sinnlos ist.&r& )" target-is-not-member: "&c Dieser Spieler gehört nicht zu deinem Inselteam!" at-max: "&c Dieser Spieler hat bereits die maximal zulässige Anzahl an Inseln!" name-is-the-owner: "&a [name] ist jetzt der Inselbesitzer!" parameters: "" you-are-the-owner: "&a Du bist jetzt der Inselbesitzer!" ban: - description: einen Spieler von deiner Insel verbannen + description: Einen Spieler von deiner Insel verbannen parameters: "" cannot-ban-yourself: "&c Du kannst dich nicht bannen!" cannot-ban: "&c Dieser Spieler kann nicht gebannt werden." - cannot-ban-member: "&c Kick das Teammitglied zuerst, dann bannen." + cannot-ban-member: "&c Kick das Teammitglied zuerst, dann kannst bannen." cannot-ban-more-players: "&c Du hast das Ban-Limit erreicht, du kannst keine - Spieler mehr von deiner Insel verbannen." + Spieler mehr von deiner Insel bannen." player-already-banned: "&c Der Spieler ist bereits gebannt." - player-banned: "&b [name]&c ist jetzt von deiner Insel verbannt." - owner-banned-you: "&b [name]&c hat dich von seiner Insel verbannt!" + player-banned: "&b [name]&c ist jetzt von deiner Insel verbannt." + owner-banned-you: "&b [name]&c hat dich von seiner Insel verbannt!" you-are-banned: "&b Du bist von dieser Insel verbannt!" unban: - description: entbanne einen Spieler von deiner Insel + description: Entbanne einen Spieler von deiner Insel parameters: "" cannot-unban-yourself: "&c Du kannst dich nicht selbst entbannen!" player-not-banned: "&c Der Spieler ist nicht gebannt." - player-unbanned: "&b [name]&a ist jetzt nicht mehr von deiner Insel verbannt." - you-are-unbanned: "&b [name]&a hat dich von seiner Insel entbannt!" + player-unbanned: "&b [name]&a ist jetzt nicht mehr von deiner Insel verbannt." + you-are-unbanned: "&b [name]&a hat dich von seiner Insel entbannt!" banlist: - description: gebannte Spieler auflisten + description: Gebannte Spieler auflisten noone: "&a Niemand ist auf dieser Insel verbannt." the-following: "&b Die folgenden Spieler sind gebannt:" names: "&c [line]" - you-can-ban: "&b Du kannst bis zu &e [number] &b weitere Spieler verbannen." + you-can-ban: "&b Du kannst bis zu&e [number]&b weitere Spieler verbannen." settings: description: Einstellungen der Insel anzeigen language: @@ -879,14 +879,14 @@ commands: not-available: "&c Diese Sprache ist nicht verfügbar." already-selected: "&c Sie verwenden diese Sprache bereits." expel: - description: einen Spieler von deiner Insel vertreiben + description: Einen Spieler von deiner Insel vertreiben parameters: "" cannot-expel-yourself: "&c Du kannst dich nicht selbst vertreiben!" cannot-expel: "&c Dieser Spieler kann nicht vertrieben werden." cannot-expel-member: "&c Du kannst kein Teammitglied vertreiben!" not-on-island: "&c Dieser Spieler ist nicht auf deiner Insel!" - player-expelled-you: "&b [name]&c hat dich von der Insel vertrieben!" - success: "&a Du hast &b [name] &a von der Insel vertrieben." + player-expelled-you: "&b [name]&c hat dich von der Insel vertrieben!" + success: "&a Du hast&b [name]&a von der Insel vertrieben." ranks: owner: Besitzer sub-owner: Mitbesitzer @@ -902,7 +902,7 @@ protection: flags: ALLAY: name: Interaktion beruhigen - description: Erlauben Sie das Geben und Mitnehmen von Gegenständen nach/von + description: Geben und Nehmen von Gegenständen an/von einem Allay hint: Allay-Interaktion deaktiviert ANIMAL_NATURAL_SPAWN: @@ -918,11 +918,11 @@ protection: ARMOR_STAND: description: Interaktion umschalten name: Rüstungsständer - hint: Rüstungsstandnutzung deaktiviert + hint: Rüstungsständnutzung deaktiviert AXOLOTL_SCOOPING: name: Axolotl beim Schöpfen description: Lassen Sie Axolotl mit einem Eimer schöpfen - hint: Axolotl-Schaufeln deaktiviert + hint: Axolotl-Schöpfen deaktiviert BEACON: description: Interaktion umschalten name: Leuchtfeuer @@ -951,23 +951,23 @@ protection: hint: Blockabbau deaktiviert BREAK_SPAWNERS: description: |- - Toggle Spawner brechen. + Spawner abbauen umschalten Überschreibt das Flag Break Blocks. name: Spawner brechen hint: Spawner brechen deaktiviert BREAK_HOPPERS: description: |- - Kipptrichter brechen. + Trichter abbauen. Überschreibt das Flag Break Blocks. - name: Hopper brechen - hint: Hopper Brechen deaktiviert + name: Hopper abbauen + hint: Hopper abbauen deaktiviert BREEDING: description: Umschalten der Zucht name: Tiere züchten hint: Tierzucht geschützt BREWING: description: Interaktion umschalten - name: Brauereistände + name: Braustände hint: Brauen deaktiviert BUCKET: description: Interaktion umschalten @@ -984,24 +984,24 @@ protection: CAKE: description: Kuchen Interaktion umschalten name: Kuchen - hint: Kuchen essen deaktiviert + hint: Kuchenessen deaktiviert CARTOGRAPHY: - name: Kartographietabellen + name: Kartographietisch description: Verwendung umschalten hint: Zugriff auf die Kartografietabelle deaktiviert CONTAINER: name: Behälter - description: "&a Umschalten der Interaktion mit Truhen, \n&a Shulker-Boxen und + description: "&a Umschalten der Interaktion mit Truhen, \n&a Shulker-Boxen, Blumentöpfen, \n&a Kompostern und Fässern.\n\n&7 Andere Behälter werden \n&7 durch spezielle Flags gehandhabt." hint: Zugriff auf Behälter deaktiviert CHEST: - name: Truhen und Minenkarrenkisten + name: Truhen- und Truhenminecarts description: |- &a Schalte die Interaktion mit Truhen - &a und Truhen-Minecarts um. - &a (Enthält keine eingeschlossenen Truhen) - hint: Brustzugang deaktiviert + &a und Truhenminecarts um. + &a (Enthält keine Redstonetruhen) + hint: Kistenzugang deaktiviert BARREL: name: Fässer description: Fass-Interaktion umschalten @@ -1015,7 +1015,7 @@ protection: COMPOSTER: name: Komposter description: Komposter-Interaktion umschalten - hint: Composer-Interaktion deaktiviert + hint: Komposter-Interaktion deaktiviert LOOM: name: Webstuhl description: Verwendung umschalten @@ -1027,7 +1027,7 @@ protection: GRINDSTONE: name: Schleifstein description: Verwendung umschalten - hint: Grindstone-Zugriff deaktiviert + hint: Schleifstein-Zugriff deaktiviert SHULKER_BOX: name: Shulker-Boxen description: Shulker-Box-Interaktion umschalten @@ -1046,9 +1046,9 @@ protection: description: Verwendung umschalten hint: Der Zugang zum Steinmetz ist deaktiviert TRAPPED_CHEST: - name: Gefangene Truhen - description: Wechseln Sie zwischen der Interaktion mit eingeschlossener Brust - hint: Zugang zur eingeschlossenen Brust deaktiviert + name: Redstonetruhen + description: Interaktion mit Redstonetruhen umschalten + hint: Zugang zu Redstonetruhe deaktiviert DISPENSER: name: Werfer description: Umschalten der Werfer-Interaktion @@ -1073,28 +1073,28 @@ protection: name: Chorusfrüchte hint: Chorusfrucht Teleportation deaktiviert CLEAN_SUPER_FLAT: - description: "&a Ermöglicht die Bereinigung beliebiger \n&a superflacher Chunks + description: "&a Ermöglicht die Bereinigung beliebiger\n&a superflacher Chunks in \n&a Inselwelten" name: Bereinigung Super Flat COARSE_DIRT_TILLING: description: "&a Umschalten der Bearbeitung von grober \n&a Erde und Abbauen von Podzol \n&a zur Gewinnung von Erde" - name: grobe Erde bearbeiten + name: Grobe Erde bearbeiten hint: Keine Bearbeitung grober Erde COLLECT_LAVA: - description: "&a Umschalten des Lavasammelns \n&a (Überbrückung der Eimer)" + description: "&a Umschalten des Lavasammelns \n&a (Überschreibt Eimer)" name: Lava sammeln hint: Kein Sammeln von Lava COLLECT_WATER: - description: "&a Umschalten des Wassersammelns \n&a (Überbrückung der Eimer)" + description: "&a Umschalten des Wassersammelns \n&a (Überschreibt Eimer)" name: Wasser sammeln hint: Wassereimer deaktiviert COLLECT_POWDERED_SNOW: description: |- &a Toggle Sammeln von Pulverschnee - &a (Buckets überschreiben) - name: Sammeln Sie Pulverschnee - hint: Pulverschneeschaufeln deaktiviert + &a (Eimer überschreiben) + name: Pulverschnee sammeln + hint: Pulverschneesammeln deaktiviert COMMAND_RANKS: name: "&e Befehlsreihenfolge" description: "&a Befehlsreihenfolge konfigurieren" @@ -1114,7 +1114,7 @@ protection: name: Pflanzenanbau hint: Pflanzenanbau deaktiviert CROP_TRAMPLE: - description: Umschalten des Felder zertrampelns + description: Felder zertrampeln umschalten name: Felder zertrampeln hint: Felder zertrampeln deaktiviert DOOR: @@ -1131,21 +1131,21 @@ protection: name: Verwendung von Farbstoffen hint: Färben deaktiviert EGGS: - description: Umschalten des Eierwerfens + description: Eierwerfen umschalten name: Eier werfen hint: Eier werfen deaktiviert ENCHANTING: - description: Umschalten der Nutzung + description: Nutzung umschalten name: Verzauberungstisch hint: Verzauberungstische deaktiviert ENDER_CHEST: - description: Umschalten Nutzung/Crafting + description: Nutzung/Herstellung umschalten name: Ender Truhen hint: Ender Truhen sind in dieser Welt deaktiviert ENDERMAN_DEATH_DROP: description: "&a Endermen werden \n&a jeden Block, den sie \n&a halten, fallen lassen, wenn sie getötet werden." - name: Enderman Death Drop + name: Endermen lassen Blöcke fallen ENDERMAN_GRIEFING: description: "&a Endermen können \n&a Blöcke von Inseln entfernen" name: Enderman Beschädigung @@ -1155,17 +1155,17 @@ protection: &a wenn aktiv. name: Enderman-Teleport ENDER_PEARL: - description: Umschalten der Nutzung + description: Nutzung umschalten name: Enderperlen hint: Nutzung von Enderperlen deaktiviert ENTER_EXIT_MESSAGES: - description: Eintritt- und Austrittsmeldungen anzeigen + description: Kommens- und Gehensmeldungen anzeigen island: "[name]'s Insel" - name: Ein- und Ausgangsmeldungen - now-entering: "&b Du betrittst jetzt [name]" - now-entering-your-island: "&a Geben Sie jetzt Ihre Insel ein: &b [name]" + name: Kommens- und Gehensmeldungen + now-entering: "&b Du betrittst jetzt [name]s Insel" + now-entering-your-island: "&a Du betrittst jetzt deine Insel" now-leaving: "&b Du verlässt jetzt [name]" - now-leaving-your-island: "&a Verlasse jetzt deine Insel: &b [name]" + now-leaving-your-island: "&a Du verlässt jetzt deine Insel" EXPERIENCE_BOTTLE_THROWING: name: Erfahrungsflasche werfen description: Umschalten des Werfens von Erfahrungsflaschen. @@ -1187,7 +1187,7 @@ protection: kann oder nicht." FISH_SCOOPING: name: Fische fangen - description: Erlaubt das Keschern von Fischen mit einem Eimer + description: Erlaubt das Fangen von Fischen mit einem Eimer hint: Fische fangen deaktiviert FLINT_AND_STEEL: name: Feuerzeug From 51b9f47a6dbd01b844157c8fbf7286854a0f7d21 Mon Sep 17 00:00:00 2001 From: Lukas <30570031+Archerymaister@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:55:21 +0100 Subject: [PATCH 04/22] Update de.yml Until line 1400 --- src/main/resources/locales/de.yml | 79 +++++++++++++++---------------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index e19323608..44be1340b 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -1209,19 +1209,19 @@ protection: HARVEST: description: |- &a Legt fest, wer Getreide ernten kann. - &a Vergessen Sie nicht, das Element zuzulassen - &eine Abholung auch! + &a Vergiss nicht, das Item aufsammeln auch zuzulassen + &a zuzulassen! name: Ernte - hint: Ernteernte deaktiviert + hint: Ernte deaktiviert HIVE: description: "&a Bienenstockernte umschalten." name: Bienenstockernte - hint: Ernte behindert + hint: Ernte deaktiviert HURT_TAMED_ANIMALS: description: Verletzen ein-/ausschalten. Aktiviert bedeutet, dass gezähmte Tiere - Schaden nehmen können. Deaktiviert bedeutet, dass sie unbesiegbar sind. - name: Verletzte gezähmte Tiere - hint: Gezähmtes Tier, das Behinderte verletzt + Schaden nehmen können. Deaktiviert bedeutet, dass sie nicht verletzt werden können. + name: Verletze gezähmte Tiere + hint: Gezähmtes Tier verletzen deaktivert HURT_ANIMALS: description: Umschalten des Verletzens name: Tiere verletzen @@ -1241,9 +1241,9 @@ protection: hint: Item Rahmen Nutzung deaktiviert ITEM_FRAME_DAMAGE: description: "&a Mobs können \n&a Item-Rahmen beschädigen" - name: Item Rahmenschäden + name: Itemrahmenschäden INVINCIBLE_VISITORS: - description: "&a Konfigurieren Sie unbesiegbare Besucher \n&a Einstellungen." + description: "&a Unbesiegbare Besucher" name: "&e Unbesiegbare Besucher" hint: "&c Besucher geschützt" ISLAND_RESPAWN: @@ -1273,17 +1273,16 @@ protection: description: "&a Erlaubt es, Bücher auf ein Lesepult zu legen \n&a oder Bücher daraus zu nehmen.\n\n&c Es hindert die Spieler nicht daran, \n&c die Bücher zu lesen." - hint: Kann kein Buch auf ein Lesepult legen oder ein Buch daraus nehmen. + hint: Interaktion mit Lesepulten deaktiviert LEVER: description: Umschalten der Nutzung - name: Hebel benutzen + name: Hebeln benutzen hint: Nutzung von Hebeln deaktiviert LIMIT_MOBS: description: |- - &a Limitgesellschaften von - &a spawnen in diesem Spiel - &a Modus. - name: "&e Beschränken Sie das Spawnen des Entitätstyps" + &a Limitiert das Erscheinen von + &a Mobs in diesem Spielmodus + name: "&e Beschränkt das Spawnen des Entitätstyps" can: "&a Kann spawnen" cannot: "&c Kann nicht spawnen" LIQUIDS_FLOWING_OUT: @@ -1300,8 +1299,8 @@ protection: CHANGE_SETTINGS: name: Einstellungen ändern description: |- - &a Ermöglicht den Wechsel des Mitglieds - &eine Rolle kann Inseleinstellungen ändern. + &a Ermöglicht Mitgliedern das Ändern + &a von Inseleinstellungen. MILKING: description: Umschalten des Melkens von Kühen name: Melken @@ -1311,21 +1310,21 @@ protection: description: Umschalten von Minecart-Interaktionen hint: Minecart-Interaktion deaktiviert MONSTER_NATURAL_SPAWN: - description: Toggle Natürliches Monsterspawnen - name: Monster natürlicher Spawn + description: Schaltet natürliches Monsterspawnen um + name: Natürlicher Monsterspawn MONSTER_SPAWNERS_SPAWN: - description: Schalten Sie das Spawnen von Monstern mit Spawnern um + description: Schaltet das Spawnen von Monstern mit Spawnern um name: Monsterspawner MOUNT_INVENTORY: - description: "&a Umschalten des Zugriffs \n&a zum Montieren des Inventars" - name: Inventar montieren - hint: Montage des Inventars deaktiviert + description: "&a Umschalten des Zugriffs \n&a auf Reittierinventare" + name: Reittierinventare + hint: Reittierinventare deaktiviert NAME_TAG: name: Namensschilder description: Umschalten der Nutzung hint: Namensschild-Interaktion deaktiviert NATURAL_SPAWNING_OUTSIDE_RANGE: - name: Natürliches Kreatur spawning ausser Reichweite + name: Natürliche Spawns außerhalb des Schutzbereiches description: "&a Umschalten, ob Kreaturen (Tiere und \n&a Monster) außerhalb \n&a des Schutzbereichs einer Insel natürlich spawnen können.\n\n&c Beachte, dass es Kreaturen \n&c nicht daran hindert, über einen Mob-Spawner oder ein @@ -1333,33 +1332,33 @@ protection: NOTE_BLOCK: description: Umschalten der Nutzung name: Notenblock - hint: Notenblock Interaktion deaktiviert + hint: Notenblockinteraktion deaktiviert OBSIDIAN_SCOOPING: - name: Obsidian-Schaufeln - description: "&a Umschalten der Schaufel \n&a Erlaubt es, Obsidian mit einem - leeren Eimer zurück in die Lava umzuwandeln \n&a Schützt Neulinge. Reduziert + name: Schöpfen von Obsidian + description: "&a Umschalten des Schöpfens \n&a Erlaubt es, Obsidian mit einem + leeren Eimer zurück in die Lava umzuwandeln \n&a Hilft Neulingen und reduziert Resets." scooping: "&a Obsidian wieder in Lava verwandelt. Sei nächstes Mal vorsichtig!" obsidian-nearby: "&c Es gibt Obsidianblöcke in der Nähe, du kannst diesen Block - nicht in Lava schaufeln." + nicht in Lava umwandeln." OFFLINE_GROWTH: description: "&a Wenn deaktiviert, wachsen Pflanzen \n&a nicht auf Inseln \n&a, - auf welchen alle Mitglieder offline sind. \n&a Kann helfen, Lags zu reduzieren." + auf denen alle Mitglieder offline sind. \n&a Kann helfen, Lags zu reduzieren." name: Offline-Wachstum OFFLINE_REDSTONE: - description: "&a Wenn deaktiviert, wird redstone \n&a nicht auf Inseln \n&a + description: "&a Wenn deaktiviert, wird Redstone \n&a nicht auf Inseln \n&a funktionieren, auf denen alle Mitglieder offline sind. \n&a Kann helfen, Lags zu reduzieren. \n&a Hat keinen Einfluss auf die Spawn-Insel." name: Offline Redstone PETS_STAY_AT_HOME: description: |- - &a Wenn sie aktiv sind, können + &a Wenn aktiv, können &a gezähmte Haustiere nur auf die &a Heimatinsel des Besitzers gehen &a und sie nicht verlassen. name: Haustiere bleiben zu Hause PISTON_PUSH: - description: "&a Aktivieren Sie diese Option, um zu \n&a verhindern, dass Kolben + description: "&a Aktiviere diese Option, um zu \n&a verhindern, dass Kolben Blöcke außerhalb\n&a der Insel drücken." name: Kolben schieben PLACE_BLOCKS: @@ -1373,11 +1372,11 @@ protection: NETHER_PORTAL: description: Umschalten der Nutzung name: Nether Portal - hint: Portalnutzung deaktiviert + hint: Netherportalnutzung deaktiviert END_PORTAL: description: Umschalten der Nutzung name: End Portal - hint: Portalnutzung deaktiviert + hint: Endportalnutzung deaktiviert PRESSURE_PLATE: description: Umschalten der Nutzung name: Druckplatten @@ -1386,18 +1385,18 @@ protection: description: |- &c PVP aktivieren/deaktivieren &c im End. - name: End PVP + name: PVP im End hint: PVP im End deaktiviert - enabled: "&c Der PVP am Ende wurde aktiviert." - disabled: "&a Der PVP am Ende wurde deaktiviert." + enabled: "&c Das PVP im End wurde aktiviert." + disabled: "&a Das PVP im End wurde deaktiviert." PVP_NETHER: description: |- &c PVP aktivieren/deaktivieren &c im Nether. name: Nether PVP hint: PVP im Nether deaktiviert - enabled: "&c Der PVP im Nether wurde aktiviert." - disabled: "&a Der PVP im Nether wurde deaktiviert." + enabled: "&c Das PVP im Nether wurde aktiviert." + disabled: "&a Das PVP im Nether wurde deaktiviert." PVP_OVERWORLD: description: |- &c PVP aktivieren/deaktivieren From 6dd87f625f111ef79577ead311cbcaa8ded48089 Mon Sep 17 00:00:00 2001 From: tastybento Date: Tue, 5 Nov 2024 19:07:13 -0800 Subject: [PATCH 05/22] Update to 1.21.3 --- src/main/java/world/bentobox/bentobox/util/Util.java | 2 +- .../blueprints/AdminBlueprintLoadCommandTest.java | 2 ++ .../blueprints/AdminBlueprintSaveCommandTest.java | 3 +++ .../api/commands/island/IslandExpelCommandTest.java | 5 +++++ .../api/flags/clicklisteners/CycleClickTest.java | 8 ++++++++ .../flags/clicklisteners/IslandToggleClickTest.java | 5 +++++ .../flags/clicklisteners/WorldToggleClickTest.java | 3 +++ .../bentobox/blueprints/BlueprintPasterTest.java | 2 ++ .../clicklisteners/CommandRankClickListenerTest.java | 3 +++ .../flags/protection/LockAndBanListenerTest.java | 7 +++++++ .../worldsettings/InvincibleVisitorsListenerTest.java | 2 ++ .../worldsettings/ObsidianScoopingListenerTest.java | 6 ++++++ .../managers/BlueprintClipboardManagerTest.java | 11 +++++++++++ .../bentobox/managers/BlueprintsManagerTest.java | 6 ++++++ .../managers/IslandChunkDeletionManagerTest.java | 2 ++ .../bentobox/managers/IslandDeletionManagerTest.java | 1 + .../bentobox/managers/PlayersManagerTest.java | 4 +++- 17 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/util/Util.java b/src/main/java/world/bentobox/bentobox/util/Util.java index 02674d784..fcfdcaf71 100644 --- a/src/main/java/world/bentobox/bentobox/util/Util.java +++ b/src/main/java/world/bentobox/bentobox/util/Util.java @@ -712,7 +712,7 @@ public static void runCommands(User user, String ownerName, @NonNull List optionalIsland = Optional.of(island); when(im.getSpawn(any())).thenReturn(optionalIsland); @@ -397,6 +400,7 @@ public void testExecuteUserStringListOfStringNoIslandSendToSpawn() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test + @Ignore("Enums") public void testExecuteUserStringListOfStringCreateIsland() { GameModeAddon gma = mock(GameModeAddon.class); CompositeCommand pc = mock(CompositeCommand.class); @@ -419,6 +423,7 @@ public void testExecuteUserStringListOfStringCreateIsland() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test + @Ignore("Enums") public void testExecuteUserStringListOfStringCreateIslandFailCommand() { GameModeAddon gma = mock(GameModeAddon.class); CompositeCommand pc = mock(CompositeCommand.class); diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java index 4f6f2c877..45302c2fb 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java @@ -32,6 +32,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -237,6 +238,7 @@ public void tearDown() { } @Test + @Ignore("Enums") public void testNoPremission() { when(user.hasPermission(anyString())).thenReturn(false); CycleClick udc = new CycleClick(LOCK); @@ -254,6 +256,7 @@ public void testUpDownClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnLeftClick() { final int SLOT = 5; CycleClick udc = new CycleClick(LOCK); @@ -273,6 +276,7 @@ public void testOnLeftClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnLeftClickSetMinMax() { // Provide a current rank value - coop when(island.getFlag(any())).thenReturn(RanksManager.COOP_RANK); @@ -294,6 +298,7 @@ public void testOnLeftClickSetMinMax() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnRightClick() { final int SLOT = 5; CycleClick udc = new CycleClick(LOCK); @@ -313,6 +318,7 @@ public void testOnRightClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnRightClickMinMaxSet() { // Provide a current rank value - coop when(island.getFlag(any())).thenReturn(RanksManager.TRUSTED_RANK); @@ -334,6 +340,7 @@ public void testOnRightClickMinMaxSet() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testAllClicks() { // Test all possible click types CycleClick udc = new CycleClick(LOCK); @@ -364,6 +371,7 @@ public void testOnShiftLeftClickNotOp() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnShiftLeftClickIsOp() { when(user.isOp()).thenReturn(true); CycleClick udc = new CycleClick(LOCK); diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java index d45ef701a..30b24799c 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java @@ -19,6 +19,7 @@ import org.bukkit.plugin.PluginManager; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -123,6 +124,7 @@ public void tearDown() { } @Test + @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(Mockito.anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -130,6 +132,7 @@ public void testOnClickNoPermission() { } @Test + @Ignore("Enums") public void testOnClick() { listener.onClick(panel, user, ClickType.LEFT, 0); verify(island).toggleFlag(flag); @@ -137,6 +140,7 @@ public void testOnClick() { } @Test + @Ignore("Enums") public void testOnClickNoIsland() { when(settingsTab.getIsland()).thenReturn(null); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -144,6 +148,7 @@ public void testOnClickNoIsland() { } @Test + @Ignore("Enums") public void testOnClickNotOwner() { // No permission when(user.hasPermission(anyString())).thenReturn(false); diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java index a2ff9470d..d8d2bcb28 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java @@ -19,6 +19,7 @@ import org.bukkit.plugin.PluginManager; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -111,6 +112,7 @@ public void tearDown() { * Test for {@link WorldToggleClick#onClick(Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -122,6 +124,7 @@ public void testOnClickNoPermission() { * Test for {@link WorldToggleClick#onClick(Panel, User, ClickType, int)} */ @Test + @Ignore("Enums") public void testOnClick() { when(user.hasPermission(anyString())).thenReturn(true); listener.onClick(panel, user, ClickType.LEFT, 0); diff --git a/src/test/java/world/bentobox/bentobox/blueprints/BlueprintPasterTest.java b/src/test/java/world/bentobox/bentobox/blueprints/BlueprintPasterTest.java index d869cfdc2..bde76d559 100644 --- a/src/test/java/world/bentobox/bentobox/blueprints/BlueprintPasterTest.java +++ b/src/test/java/world/bentobox/bentobox/blueprints/BlueprintPasterTest.java @@ -14,6 +14,7 @@ import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -34,6 +35,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({BentoBox.class, User.class, Bukkit.class}) +@Ignore("Enums") public class BlueprintPasterTest { private BlueprintPaster bp; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java index 7a8feddb4..bfdd1bf50 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java @@ -26,6 +26,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -162,6 +163,7 @@ public void testOnClickWrongWorld() { * Test method for {@link world.bentobox.bentobox.listeners.flags.clicklisteners.CommandRankClickListener#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)}. */ @Test + @Ignore("Enums") public void testOnClickNoPermission() { when(user.isOp()).thenReturn(false); when(user.hasPermission(anyString())).thenReturn(false); @@ -174,6 +176,7 @@ public void testOnClickNoPermission() { * Test method for {@link world.bentobox.bentobox.listeners.flags.clicklisteners.CommandRankClickListener#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)}. */ @Test + @Ignore("Enums") public void testOnClickNoFlag() { when(island.isAllowed(user, Flags.CHANGE_SETTINGS)).thenReturn(false); assertTrue(crcl.onClick(panel, user, ClickType.LEFT, 0)); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java index 564ded34b..91271a55f 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java @@ -30,6 +30,7 @@ import org.bukkit.scheduler.BukkitScheduler; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -298,6 +299,7 @@ public void testVerticalVehicleMoveOnly() { } @Test + @Ignore("Enums") public void testPlayerMoveIntoBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -320,6 +322,7 @@ public void testPlayerMoveIntoBannedIsland() { } @Test + @Ignore("Enums") public void testPlayerMoveInsideBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -347,6 +350,7 @@ public void testPlayerMoveInsideBannedIsland() { } @Test + @Ignore("Enums") public void testVehicleMoveIntoBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -509,6 +513,7 @@ public void testLoginToLockedIslandAsMember() { } @Test + @Ignore("Enums") public void testPlayerMoveIntoLockedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -613,6 +618,7 @@ public void testPlayerMoveIntoLockedIslandAsMember() { } @Test + @Ignore("Enums") public void testPlayerMoveInsideLockedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -701,6 +707,7 @@ public void testPlayerMoveInsideLockedIslandAsMember() { } @Test + @Ignore("Enums") public void testVehicleMoveIntoLockedIsland() { // Make player Player player = mock(Player.class); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java index 7a3ca7228..615250e56 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java @@ -41,6 +41,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -198,6 +199,7 @@ public void testOnClickWrongWorld() { } @Test + @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java index 7700c446f..a4675fdb4 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java @@ -29,6 +29,7 @@ import org.bukkit.util.RayTraceResult; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -146,6 +147,7 @@ public void tearDown() { } @Test + @Ignore("Enums") public void testOnPlayerInteract() { // Test incorrect items inHand = Material.ACACIA_DOOR; @@ -155,6 +157,7 @@ public void testOnPlayerInteract() { } @Test + @Ignore("Enums") public void testOnPlayerInteractBucketInHand() { // Test incorrect items inHand = Material.BUCKET; @@ -164,6 +167,7 @@ public void testOnPlayerInteractBucketInHand() { } @Test + @Ignore("Enums") public void testOnPlayerInteractObsidianAnvilInHand() { // Test with obsidian in hand inHand = Material.ANVIL; @@ -173,6 +177,7 @@ public void testOnPlayerInteractObsidianAnvilInHand() { } @Test + @Ignore("Enums") public void testOnPlayerInteractObsidianBucketInHand() { // Positive test with 1 bucket in the stack inHand = Material.BUCKET; @@ -182,6 +187,7 @@ public void testOnPlayerInteractObsidianBucketInHand() { } @Test + @Ignore("Enums") public void testOnPlayerInteractObsidianManyBucketsInHand() { // Positive test with 1 bucket in the stack inHand = Material.BUCKET; diff --git a/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java index ed338ad83..efd9265a5 100644 --- a/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java @@ -28,6 +28,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -231,6 +232,7 @@ public void testLoadBlueprintNoFileInZip() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test + @Ignore("Enums") public void testLoadBlueprintFileInZipJSONError() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -254,6 +256,7 @@ public void testLoadBlueprintFileInZipJSONError() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test + @Ignore("Enums") public void testLoadBlueprintFileInZipNoBedrock() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -274,6 +277,7 @@ public void testLoadBlueprintFileInZipNoBedrock() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test + @Ignore("Enums") public void testLoadBlueprintFileInZip() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -295,6 +299,7 @@ public void testLoadBlueprintFileInZip() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#load(java.lang.String)}. */ @Test + @Ignore("Enums") public void testLoadString() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -317,6 +322,7 @@ public void testLoadString() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#load(world.bentobox.bentobox.api.user.User, java.lang.String)}. */ @Test + @Ignore("Enums") public void testLoadUserString() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -346,6 +352,7 @@ public void testLoadUserStringFail() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test + @Ignore("Enums") public void testSave() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -367,6 +374,7 @@ public void testSave() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test + @Ignore("Enums") public void testSaveBadChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -388,6 +396,7 @@ public void testSaveBadChars() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test + @Ignore("Enums") public void testSaveForeignChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -409,6 +418,7 @@ public void testSaveForeignChars() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test + @Ignore("Enums") public void testSaveForeignBadChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -443,6 +453,7 @@ public void testSaveBlueprintNoName() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#saveBlueprint(world.bentobox.bentobox.blueprints.Blueprint)}. */ @Test + @Ignore("Enums") public void testSaveBlueprintSuccess() { BlueprintClipboardManager bcm = new BlueprintClipboardManager(plugin, blueprintFolder); Blueprint blueprint = new Blueprint(); diff --git a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java index da730c1cd..76cef0aa0 100644 --- a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java @@ -37,6 +37,7 @@ import org.bukkit.util.Vector; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -258,6 +259,7 @@ public void testGetBlueprintBundles() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprintBundles(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test + @Ignore("Enums") public void testLoadBlueprintBundlesNoBlueprintFolder() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -278,6 +280,7 @@ public void testLoadBlueprintBundlesNoBlueprintFolder() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprintBundles(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test + @Ignore("Enums") public void testLoadBlueprintBundles() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -316,6 +319,7 @@ public void testLoadBlueprintsFailZero() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprints(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test + @Ignore("Enums") public void testLoadBlueprints() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -348,6 +352,7 @@ public void testAddBlueprint() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#saveBlueprint(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.blueprints.Blueprint)}. */ @Test + @Ignore("Enums") public void testSaveBlueprint() { // Save it BlueprintsManager bpm = new BlueprintsManager(plugin); @@ -645,6 +650,7 @@ public void testDeleteBlueprintBundle() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#renameBlueprint(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.blueprints.Blueprint, java.lang.String, java.lang.String)}. */ @Test + @Ignore("Enums") public void testRenameBlueprint() { // Save it BlueprintsManager bpm = new BlueprintsManager(plugin); diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandChunkDeletionManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandChunkDeletionManagerTest.java index 252857ea1..6896e72a0 100644 --- a/src/test/java/world/bentobox/bentobox/managers/IslandChunkDeletionManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/IslandChunkDeletionManagerTest.java @@ -6,6 +6,7 @@ import org.bukkit.Bukkit; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -26,6 +27,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({BentoBox.class, Bukkit.class, DeleteIslandChunks.class}) +@Ignore("NMS") public class IslandChunkDeletionManagerTest { @Mock diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java index c19a9e0d3..f92ea2fbe 100644 --- a/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java @@ -49,6 +49,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest( { Bukkit.class, BentoBox.class, Util.class, Location.class }) +@Ignore("NMS") public class IslandDeletionManagerTest { @Mock diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index 00d19a6c5..d761bad06 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -45,6 +45,7 @@ import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -73,6 +74,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class, Logger.class, DatabaseSetup.class }) +@Ignore("Enums") public class PlayersManagerTest { private static AbstractDatabaseHandler handler; @@ -178,7 +180,7 @@ public void setUp() throws Exception { when(p.getUniqueId()).thenReturn(uuid); AttributeInstance at = mock(AttributeInstance.class); when(at.getValue()).thenReturn(20D); - when(p.getAttribute(Attribute.GENERIC_MAX_HEALTH)).thenReturn(at); + when(p.getAttribute(Attribute.MAX_HEALTH)).thenReturn(at); when(p.getName()).thenReturn("tastybento"); User.getInstance(p); From ab478701e767902df1835d47ba00cf903b2badd0 Mon Sep 17 00:00:00 2001 From: tastybento Date: Tue, 5 Nov 2024 19:08:22 -0800 Subject: [PATCH 06/22] Version 2.7.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c53805163..5173ef4cb 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ -LOCAL - 2.7.0 + 2.7.1 bentobox-world https://sonarcloud.io ${project.basedir}/lib From 6863f28127e3f11d25334d6922fe471d67d8232b Mon Sep 17 00:00:00 2001 From: tastybento Date: Wed, 6 Nov 2024 07:29:37 -0800 Subject: [PATCH 07/22] Shift API to 1.21 only. --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0ca09ce7d..fcb054854 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: BentoBox main: world.bentobox.bentobox.BentoBox version: ${project.version}${build.number} -api-version: "1.20" +api-version: "1.21" authors: [tastybento, Poslovitch] contributors: ["The BentoBoxWorld Community"] From d8a7385a0bd3b4dca8707bd550da3aa80efdaf69 Mon Sep 17 00:00:00 2001 From: Lukas <30570031+Archerymaister@users.noreply.github.com> Date: Wed, 6 Nov 2024 21:54:08 +0100 Subject: [PATCH 08/22] Update de.yml --- src/main/resources/locales/de.yml | 143 +++++++++++++++--------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index 44be1340b..be8bb01b8 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -1410,9 +1410,9 @@ protection: name: Redstone Items hint: Redstone-Interaktion deaktiviert REMOVE_END_EXIT_ISLAND: - description: "&a Verhindert, dass die \n&a Endausgangsinsel bei den Koordinaten + description: "&a Verhindert, dass die \n&a Ausgangsinsel vom End bei den Koordinaten 0,0 \n&a erzeugt wird" - name: Entfernen der Endausgangsinsel + name: Entfernen der Ausgangsinsel vom End REMOVE_MOBS: description: "&a Entferne Monster, wenn \n&a sie sich auf die Insel teleportieren" name: Monster entfernen @@ -1431,8 +1431,8 @@ protection: SPAWNER_SPAWN_EGGS: description: "&a Erlaubt die Änderung des Entitätstyps \n&a eines Spawners unter Verwendung von Spawn-Eiern." - name: Spawneier auf spawnern - hint: changing a spawner's entity type using spawn eggs is not allowed + name: Spawner ändern + hint: Das Ändern von Spawnern ist nicht gestattet SCULK_SENSOR: description: |- &a Schaltet den Sculk-Sensor um @@ -1441,16 +1441,16 @@ protection: hint: Die Aktivierung des Sculk-Sensors ist deaktiviert SCULK_SHRIEKER: description: |- - &a Schaltet den Sculk-Schreier um - &a Aktivierung. - name: Sculk-Schreier - hint: Die Aktivierung von Sculk Shrieker ist deaktiviert + &a Schaltet die Aktivierung von + &a Sculk-Kreischern um. + name: Sculk-Kreischer + hint: Die Aktivierung von Sculk-Kreischern ist deaktiviert SIGN_EDITING: description: |- &a Ermöglicht Textbearbeitung - &a von Zeichen - name: Zeichenbearbeitung - hint: Die Zeichenbearbeitung ist deaktiviert + &a von Schildern + name: Schildbearbeitung + hint: Die Schildbearbeitung ist deaktiviert TNT_DAMAGE: description: "&a Erlaubt es TNT und TNT-Minecarts \n&a Blöcke zu zerstören und Objekte \n&a zu beschädigen." @@ -1462,38 +1462,38 @@ protection: hint: TNT Zündung deaktiviert TRADING: description: Handel umschalten - name: Villager Handel - hint: Handel mit Villagern deaktiviert + name: Dorfbewohnerhandel + hint: Handel mit Dorfbewohnern deaktiviert TRAPDOOR: description: Zugriff umschalten name: Falltüren hint: Nutzung von Falltüren deaktiviert TREES_GROWING_OUTSIDE_RANGE: - name: Bäume, die ausserhalb der Reichweite wachsen + name: Bäume, die ausserhalb des Inselbereichs wachsen description: "&a Umschalten, ob Bäume außerhalb des Schutzbereichs einer \n&a Insel wachsen können oder nicht. \n&a Es verhindert nicht nur, dass die Setzlinge \n&a außerhalb des Schutzbereichs einer Insel \n&a wachsen, sondern blockiert - auch die Erzeugung \n&a von Blättern/Stämmen außerhalb der Insel, also \n&a - das Fällen des Baumes." + auch die Erzeugung \n&a von Blättern/Stämmen außerhalb der Insel, was wichtig für \n&a + das Fällen des Baumes ist." TURTLE_EGGS: - description: Zerkleinerung umschalten + description: Zertreten umschalten name: Schildkröteneier - hint: Schildkrötenei Zerdrücken deaktiviert + hint: Zertreten von Schildkröteneiern deaktiviert FROST_WALKER: description: Verzauberung Eisläufer umschalten name: Eisläufer hint: Eisläufer deaktiviert EXPERIENCE_PICKUP: name: Erfahrung aufnehmen - description: Erfahrungskugel-Aufnahme umschalten + description: Aufsammeln von Erfahrung umschalten hint: Erfahrung aufnehmen deaktiviert PREVENT_TELEPORT_WHEN_FALLING: - name: Verhindert den Teleport bei einem Sturz + name: Verhindert den Teleport beim Fallen description: "&a Verhindert, dass Spieler sich mit einem Befehl \n&a zurück auf ihre Insel teleportieren, \n&a wenn sie fallen." hint: "&c Das kannst du nicht machen, wenn du fällst." VISITOR_KEEP_INVENTORY: - name: Besucher führen eine Bestandsaufnahme des Todes + name: Besucher behalten ihr Inventar beim Tod description: |- &a Verhindern Sie, dass Spieler ihre &a Gegenstände und Erfahrungen @@ -1509,33 +1509,32 @@ protection: &a Heimatinsel des Besitzers gehen &a und sie nicht verlassen. VISITOR_TRIGGER_RAID: - name: Besucher lösen Razzien aus + name: Besucher können Raids auslösen description: |- - &a Schaltet um, ob Besucher starten können - &a ein Überfall auf eine Insel, die sie sind - &ein Besuch. - &A - &ein Bad Omen-Effekt wird entfernt! + &a Schaltet um, ob Besucher Rais auf + &a Inseln starten können, die sie Besuchen. + &a + &a Der Bad Omen-Effekt wird entfernt! ENTITY_PORTAL_TELEPORT: - name: Nutzung des Entitätsportals + name: Portalnutzung durch Entitäten description: |- - &a Schaltet um, ob Entitäten (Nicht-Spieler) dies können - &a nutzen Portale, um zwischen ihnen zu teleportieren - &a Dimensionen + &a Schaltet um, ob Entitäten (Nicht-Spieler) + &a Portale nutzen können, um zwischen + &a Dimensionen zu teleportieren WITHER_DAMAGE: name: Umschalten von Wither-Schäden description: "&a Wenn aktiv, kann der Wither \n&a Blöcke und Spieler schädigen" WORLD_BLOCK_EXPLODE_DAMAGE: description: |- - &a Bett- und Respawn-Anker zulassen - &a, um Blöcke zu zerstören und zu beschädigen - &a Entitäten außerhalb der Inselgrenzen. + &a Bett- und Respawn-Anker können Blöcke und + &a Entitäten außerhalb der Inselgrenzen verletzen. name: Weltblock-Explosionsschaden WORLD_TNT_DAMAGE: description: |- - &a TNT- und TNT-Minecarts zulassen - &a um Blöcke zu brechen und zu beschädigen - &a Entitäten außerhalb der Inselgrenzen. + &a TNT- und TNT-Minecarts können + &a außerhalb der Inselgrenzen + &a Blöcke zerstören und Entitäten + &a verletzen. name: Welt-TNT-Schaden locked: "&c Diese Insel ist gesperrt!" protected: "&c Insel geschützt: [description]" @@ -1552,12 +1551,12 @@ protection: name: "&a Grundeinstellungen" description: "&a Zeigt die nützlichsten Einstellungen an." expert: - name: "&c Experten Einstellungen" + name: "&c Experteneinstellungen" description: "&a Zeigt alle verfügbaren Einstellungen an." - click-to-switch: "&e Klick &a, zum wechseln zum &r [next]&r &a ." + click-to-switch: "&e Klicken&a, zum wechseln zu&r [next]&r&a." reset-to-default: name: "&c Zurücksetzen auf Standard" - description: "&a Setzt &c &l ALLE &r &a Einstellungen auf ihren \n&a Standardwert + description: "&a Setzt&c&l ALLE&r&a Einstellungen auf ihren \n&a Standardwert zurück." PROTECTION: title: "&6 Schutz" @@ -1587,7 +1586,7 @@ protection: &a [description] &7 Aktuelle Einstellung: [setting] - setting-active: "&a Aktiv" + setting-active: "&a Aktiviert" setting-disabled: "&c Deaktiviert" management: panel: @@ -1595,7 +1594,7 @@ management: views: gamemodes: name: "&6 Gamemodes" - description: "&e Klick &a um die aktuell geladenen Spielmodi anzuzeigen" + description: "&e Klicke&a, um die aktuell geladenen Spielmodi anzuzeigen" blueprints: name: "&6 Blaupausen" description: "&a Öffnet das Admin-Blaupausenmenü." @@ -1604,14 +1603,14 @@ management: description: "&a Inseln: &b [islands]" addons: name: "&6 Addons" - description: "&e Klick &a um die aktuell geladenen Addons anzuzeigen" + description: "&e Klicke&a, um die aktuell geladenen Addons anzuzeigen" hooks: name: "&6 Haken" - description: "&e klicken &a um die aktuell geladenen Haken anzuzeigen" + description: "&e Klicke,&a um die aktuell geladenen Haken anzuzeigen" actions: reload: name: "&c Neu laden" - description: "&e Klick &c &l zweimal &r &a um BentoBox neu zu laden" + description: "&e Klicke&c&l zweimal&r&a um BentoBox neu zu laden" buttons: catalog: name: "&6 Addon Katalog" @@ -1626,21 +1625,21 @@ management: state: name: "&6 Kompatibilität" description: - COMPATIBLE: "&a Ausführung &e [name] [Version]&a .\n\n&a BentoBox läuft - derzeit auf einer \n&a &l KOMPATIBELEN &r &a Server Software und \n&a + COMPATIBLE: "&a Ausführung &e [name] [Version]&a.\n\n&a BentoBox läuft + derzeit auf einer \n&a&l KOMPATIBLEN&r&a Server-Software und \n&a Version.\n\n&a Seine Funktionen sind vollständig darauf ausgelegt, \n&a in dieser Umgebung zu laufen." - SUPPORTED: "&a Ausführung &e [name] [Version]&a .\n\n&a BentoBox läuft derzeit - auf einer \n&a &l UNTERSTÜTZTEN &r &a Server-Software und einer \n&a Version.\n\n&a + SUPPORTED: "&a Ausführung &e [name] [Version]&a.\n\n&a BentoBox läuft derzeit + auf einer \n&a&l UNTERSTÜTZTEN&r&a Server-Software und einer \n&a Version.\n\n&a Die meisten seiner Funktionen werden \n&a in dieser Umgebung problemlos laufen." - NOT_SUPPORTED: "&a Ausführung &e [name] [Version]&a .\n\n&a BentoBox läuft - derzeit auf einer \n&6 &l NICHT UNTERSTÜTZTEN &r &a Server-Software oder + NOT_SUPPORTED: "&a Ausführung &e [name] [Version]&a.\n\n&a BentoBox läuft + derzeit auf einer \n&6&l NICHT UNTERSTÜTZTEN &r&aServer-Software oder \n&a Version.\n\n&a Während die meisten seiner Funktionen \n&a korrekt - ausgeführt werden, ist mit &6 plattformspezifischen Fehlern oder \n&6 - Problemen zu rechnen&a ." - INCOMPATIBLE: "&a Ausführung &e [name] [Version]&a .\n\n&a BentoBox läuft - derzeit auf einer \n&c &l INKOMPATIBELEN &r &a Server-Software oder \n&a + ausgeführt werden, ist mit&6 plattformspezifischen Fehlern oder \n&6 + Problemen zu rechnen&a." + INCOMPATIBLE: "&a Ausführung &e [name] [Version]&a.\n\n&a BentoBox läuft + derzeit auf einer \n&c &l INKOMPATIBLEN&r&a Server-Software oder \n&a Version.\n\n&c Seltsames Verhalten und Fehler können auftreten \n&c und die meisten Funktionen können instabil sein." catalog: @@ -1660,12 +1659,12 @@ catalog: zu blättern." icon: description-template: "&8 [topic]\n&a [install]\n\n&7 &o [description]\n\n&e - Klick &a, um den Link zur neuesten Version \n&a zu erhalten." + Klicke&a, um den Link zur neuesten Version \n&a zu erhalten." already-installed: Bereits installiert! install-now: Jetzt installieren! empty-here: name: "&b Hier sieht es leer aus..." - description: "&c BentoBox konnte keine Verbindung zu GitHub herstellen.\n\nErlaubt + description: "&c BentoBox konnte keine Verbindung zu GitHub herstellen.\n\nErlaube BentoBox die Verbindung zu GitHub in \n&a der Konfiguration oder versuche es später noch einmal." enums: @@ -1681,7 +1680,7 @@ enums: MELTING: Schmelzen LAVA: Lava DROWNING: Ertrinken - BLOCK_EXPLOSION: Explosion blockieren + BLOCK_EXPLOSION: Blockexplosion ENTITY_EXPLOSION: Entitätsexplosion VOID: Leere LIGHTNING: Blitz @@ -1693,25 +1692,25 @@ enums: FALLING_BLOCK: Fallender Block THORNS: Dornen DRAGON_BREATH: Drachenatem - CUSTOM: Brauch + CUSTOM: Benutzerdefiniert FLY_INTO_WALL: In die Wand fliegen HOT_FLOOR: Heißer Boden - CRAMMING: Pauken + CRAMMING: Cramming DRYOUT: Austrocknen - FREEZE: Einfrieren + FREEZE: Erfrieren KILL: Töten SONIC_BOOM: Überschallknall WORLD_BORDER: Weltgrenze panel: credits: - title: "&8 [name] &2 Credits" + title: "&8 [name]&2 Credits" contributor: name: "&a [name]" - description: "&a Verpflichtungen: &b [commits]" + description: "&a Beiträge:&b [commits]" empty-here: name: "&c Hier sieht es leer aus..." description: "&c BentoBox konnte die Mitwirkenden \n&c für dieses Addon nicht - erfassen.\n\n&a BentoBox erlauben, sich mit GitHub in \n&a der Konfiguration + erfassen.\n\n&a BentoBox in der Konfiguration erlauben, sich mit GitHub \n&a zu verbinden oder es später erneut versuchen." panels: island_creation: @@ -1720,10 +1719,10 @@ panels: bundle: name: "&l [name]" description: "[description]" - uses: "&a Verwendet [number]/[max]" + uses: "&a Verwendung [number]/[max]" unlimited: "&a Unbegrenzte Nutzung erlaubt" language: - title: "&2&l Wählen Sie Ihre Sprache" + title: "&2&l Sprache wählen" buttons: language: name: "&f&l [name]" @@ -1741,13 +1740,13 @@ panels: name: "&f&l Nächste Seite" description: "&7 Zur Seite [number] wechseln" tips: - click-to-next: "&e Klicken Sie auf &7, um weiterzugehen." - click-to-previous: "&e Klicken Sie auf &7, um zum vorherigen zu gelangen." - click-to-choose: "&e Klicken Sie zum Auswählen auf &7." - click-to-toggle: "&e Klicken Sie zum Umschalten auf &7." - left-click-to-cycle-down: "&e Klicken Sie mit der linken Maustaste auf &7, um + click-to-next: "&e Klicken&7, um weiterzugehen." + click-to-previous: "&e Klicken&7, um zum zurückgehen." + click-to-choose: "&e Klicken&7 zum Auswählen." + click-to-toggle: "&e Klicken&7 zum Umschalten." + left-click-to-cycle-down: "&e Linksklicken &7, um nach unten zu blättern." - right-click-to-cycle-up: "&e Klicken Sie mit der rechten Maustaste auf &7, um + right-click-to-cycle-up: "&e Rechtsklicken &7, um nach oben zu blättern." successfully-loaded: |- &6 ____ _ ____ From cd40d27b38c12b1241de3e0aae5745c74b3abfd2 Mon Sep 17 00:00:00 2001 From: tastybento Date: Wed, 6 Nov 2024 14:06:18 -0800 Subject: [PATCH 09/22] Switch distribution management for CI codemc --- pom.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 5173ef4cb..ee02c8fcb 100644 --- a/pom.xml +++ b/pom.xml @@ -50,13 +50,9 @@ - - codemc-snapshots - https://repo.codemc.org/repository/maven-snapshots - codemc-releases - https://repo.codemc.org/repository/maven-releases + https://repo.codemc.org/repository/bentoboxworld From 058fb6e70ea92726ee4f3b9a1739e848bc76bddb Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 7 Nov 2024 21:29:25 -0800 Subject: [PATCH 10/22] Use custom server to handle new enums --- .../json/adapters/BiomeTypeAdapter.java | 5 +- .../database/yaml/YamlDatabaseHandler.java | 30 ++++- .../world/bentobox/bentobox/util/Util.java | 2 - .../bentobox/AbstractCommonSetup.java | 8 ++ .../bentobox/RanksManagerBeforeClassTest.java | 6 +- .../admin/AdminResetFlagsCommandTest.java | 8 +- .../AdminBlueprintLoadCommandTest.java | 13 +- .../AdminBlueprintSaveCommandTest.java | 12 +- .../admin/range/AdminRangeCommandTest.java | 5 +- .../range/AdminRangeResetCommandTest.java | 5 +- .../admin/range/AdminRangeSetCommandTest.java | 5 +- .../team/AdminTeamDisbandCommandTest.java | 6 +- .../island/IslandExpelCommandTest.java | 18 ++- .../commands/island/IslandGoCommandTest.java | 5 +- .../island/IslandResetCommandTest.java | 10 +- .../island/IslandSpawnCommandTest.java | 7 +- .../flags/clicklisteners/CycleClickTest.java | 16 +-- .../clicklisteners/IslandToggleClickTest.java | 8 +- .../clicklisteners/WorldToggleClickTest.java | 8 +- .../bentobox/bentobox/api/user/UserTest.java | 6 +- .../commands/BentoBoxPermsCommandTest.java | 5 +- .../listeners/JoinLeaveListenerTest.java | 6 +- .../StandardSpawnProtectionListenerTest.java | 7 +- .../CommandRankClickListenerTest.java | 9 +- .../protection/LockAndBanListenerTest.java | 10 +- .../ChestDamageListenerTest.java | 5 +- .../worldsettings/CreeperListenerTest.java | 8 +- .../InvincibleVisitorsListenerTest.java | 7 +- .../ObsidianScoopingListenerTest.java | 11 +- .../VisitorKeepInventoryListenerTest.java | 5 +- .../BlueprintClipboardManagerTest.java | 17 +-- .../managers/BlueprintsManagerTest.java | 11 +- .../bentobox/managers/PlayersManagerTest.java | 6 +- .../bentobox/bentobox/mocks/ServerMocks.java | 118 ++++++++++++++++++ 34 files changed, 248 insertions(+), 160 deletions(-) create mode 100644 src/test/java/world/bentobox/bentobox/mocks/ServerMocks.java diff --git a/src/main/java/world/bentobox/bentobox/database/json/adapters/BiomeTypeAdapter.java b/src/main/java/world/bentobox/bentobox/database/json/adapters/BiomeTypeAdapter.java index b30b52b95..c7a239387 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/adapters/BiomeTypeAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/json/adapters/BiomeTypeAdapter.java @@ -8,10 +8,10 @@ import java.io.IOException; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.bukkit.Registry; import org.bukkit.block.Biome; import com.google.gson.TypeAdapter; @@ -32,11 +32,12 @@ public final class BiomeTypeAdapter extends TypeAdapter */ final Map biomeMap; + @SuppressWarnings("deprecation") public BiomeTypeAdapter() { this.biomeMap = new HashMap<>(); // Put in current values. - Arrays.stream(Biome.values()).forEach(biome -> this.biomeMap.put(biome.name(), biome)); + Registry.BIOME.forEach(biome -> this.biomeMap.put(biome.name(), biome)); // Put in renamed biomes values. this.biomeMap.put("TALL_BIRCH_FOREST", Biome.OLD_GROWTH_BIRCH_FOREST); diff --git a/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java index 5cfe753f5..2a8c28149 100644 --- a/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java @@ -26,8 +26,13 @@ import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; +import org.bukkit.Keyed; import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Sound; import org.bukkit.World; +import org.bukkit.block.Biome; import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.EntityType; @@ -216,10 +221,24 @@ private void deserializeValue(Method method, T instance, PropertyDescriptor prop try { // Floats need special handling because the database returns them as doubles Type setType = propertyDescriptor.getWriteMethod().getGenericParameterTypes()[0]; + BentoBox.getInstance().logDebug("name = " + setType.getTypeName()); + plugin.logError("Default setting value will be used: " + + propertyDescriptor.getReadMethod().invoke(instance)); + plugin.logError(method.getName()); + plugin.logError(propertyDescriptor.getReadMethod().getName()); + plugin.logError(instance.toString()); if (setType.getTypeName().equals("float")) { double d = (double) setTo; float f = (float)d; method.invoke(instance, f); + } else if (setType.getTypeName().equals("org.bukkit.Sound")) { + Sound s = Registry.SOUNDS + .get(NamespacedKey.fromString(((String) setTo).toLowerCase(Locale.ENGLISH))); + method.invoke(instance, s); + } else if (setType.getTypeName().equals("org.bukkit.block.Biome")) { + Biome b = Registry.BIOME + .get(NamespacedKey.fromString(((String) setTo).toLowerCase(Locale.ENGLISH))); + method.invoke(instance, b); } else { method.invoke(instance, setTo); } @@ -368,8 +387,9 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc // Get the read method Method method = propertyDescriptor.getReadMethod(); // Invoke the read method to get the value. We have no idea what type of value it is. + BentoBox.getInstance().logDebug("Method is " + method.getName()); Object value = method.invoke(instance); - + BentoBox.getInstance().logDebug("Value is " + value); String storageLocation = field.getName(); // Check if there is an annotation on the field @@ -395,6 +415,7 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc } if (!checkAdapter(field, config, storageLocation, value)) { + BentoBox.getInstance().logDebug("No adapter"); // Set the filename if it has not be set already if (filename.isEmpty() && method.getName().equals("getUniqueId")) { // Save the name for when the file is saved @@ -407,6 +428,7 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc serializeSet((Set)value, config, storageLocation); } else { // For all other data that doesn't need special serialization + BentoBox.getInstance().logDebug("For all other data that doesn't need special serializationr"); config.set(storageLocation, serialize(value)); } } @@ -561,6 +583,7 @@ private void setComment(@NonNull String comment, @NonNull YamlConfiguration conf private Object serialize(@Nullable Object object) { // Null is a value object and is serialized as the string "null" if (object == null) { + BentoBox.getInstance().logDebug("Object is null"); return "null"; } // UUID has it's own serialization, that is not picked up automatically @@ -575,6 +598,11 @@ private Object serialize(@Nullable Object object) { if (object instanceof Location l) { return Util.getStringLocation(l); } + // Keyed interfaces that are replacing enums + if (object instanceof Keyed k) { + BentoBox.getInstance().logDebug("Object is keyed"); + return k.getKey().getKey(); + } // Enums if (object instanceof Enum e) { //Custom enums are a child of the Enum class. Just get the names of each one. diff --git a/src/main/java/world/bentobox/bentobox/util/Util.java b/src/main/java/world/bentobox/bentobox/util/Util.java index fcfdcaf71..00434d260 100644 --- a/src/main/java/world/bentobox/bentobox/util/Util.java +++ b/src/main/java/world/bentobox/bentobox/util/Util.java @@ -743,7 +743,6 @@ public static WorldRegenerator getRegenerator() { throw new IllegalStateException("Class " + clazz.getName() + " does not implement WorldRegenerator"); } } catch (Exception e) { - e.printStackTrace(); plugin.logWarning("No Regenerator found for " + bukkitVersion + ", falling back to Bukkit API."); handler = new world.bentobox.bentobox.nms.fallback.WorldRegeneratorImpl(); } @@ -773,7 +772,6 @@ public static PasteHandler getPasteHandler() { throw new IllegalStateException("Class " + clazz.getName() + " does not implement PasteHandler"); } } catch (Exception e) { - e.printStackTrace(); plugin.logWarning("No PasteHandler found for " + bukkitVersion + ", falling back to Bukkit API."); handler = new world.bentobox.bentobox.nms.fallback.PasteHandlerImpl(); } diff --git a/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java index 3d4128bcb..73596f4d4 100644 --- a/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java +++ b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java @@ -17,6 +17,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Server; import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.block.Block; @@ -34,6 +35,7 @@ import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.Nullable; import org.junit.After; +import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; @@ -58,6 +60,7 @@ import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; /** @@ -103,9 +106,13 @@ public abstract class AbstractCommonSetup { protected FlagsManager fm; @Mock protected Spigot spigot; + protected Server server; + @Before public void setUp() throws Exception { + + server = ServerMocks.newServer(); // Bukkit PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); // Set up plugin @@ -221,6 +228,7 @@ public void setUp() throws Exception { */ @After public void tearDown() throws Exception { + ServerMocks.unsetBukkitServer(); User.clearUsers(); Mockito.framework().clearInlineMocks(); } diff --git a/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java b/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java index 4f6f589b8..193bc531b 100644 --- a/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java +++ b/src/test/java/world/bentobox/bentobox/RanksManagerBeforeClassTest.java @@ -29,7 +29,6 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; -import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.DatabaseSetup; import world.bentobox.bentobox.managers.RanksManager; @@ -126,9 +125,8 @@ public void setUp() throws Exception { } @After - public void tearDown() throws IOException { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); deleteAll(new File("database")); deleteAll(new File("database_backup")); } diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java index 3e2be1e67..858bb9a33 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminResetFlagsCommandTest.java @@ -26,7 +26,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.stubbing.Answer; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -128,12 +127,9 @@ public void setUp() throws Exception { } - /** - */ @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintLoadCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintLoadCommandTest.java index 81c683cb8..284028a36 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintLoadCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintLoadCommandTest.java @@ -24,7 +24,7 @@ import org.bukkit.Bukkit; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -43,6 +43,7 @@ import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.HooksManager; import world.bentobox.bentobox.managers.LocalesManager; +import world.bentobox.bentobox.mocks.ServerMocks; /** * @author tastybento @@ -68,8 +69,11 @@ public class AdminBlueprintLoadCommandTest { private Map map; private File blueprintsFolder; - /** - */ + @BeforeClass + public static void beforeClass() { + ServerMocks.newServer(); + } + @Before public void setUp() throws Exception { // Set up plugin @@ -125,8 +129,6 @@ public void setUp() throws Exception { abcc = new AdminBlueprintLoadCommand(ac); } - /** - */ @After public void tearDown() throws Exception { User.clearUsers(); @@ -181,7 +183,6 @@ public void testExecuteUserStringListOfStringNoLoad() { * Test method for {@link world.bentobox.bentobox.api.commands.admin.blueprints.AdminBlueprintLoadCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringSuccessCaps() { assertTrue(abcc.execute(user, "", List.of("island"))); verify(user).sendMessage("general.success"); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintSaveCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintSaveCommandTest.java index 36601ad0e..ac5386a6c 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintSaveCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintSaveCommandTest.java @@ -25,7 +25,7 @@ import org.bukkit.util.Vector; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -45,6 +45,7 @@ import world.bentobox.bentobox.managers.CommandsManager; import world.bentobox.bentobox.managers.HooksManager; import world.bentobox.bentobox.managers.LocalesManager; +import world.bentobox.bentobox.mocks.ServerMocks; /** * @author tastybento @@ -68,8 +69,11 @@ public class AdminBlueprintSaveCommandTest { private BlueprintsManager bm; private Blueprint bp = new Blueprint(); - /** - */ + @BeforeClass + public static void beforeClass() { + ServerMocks.newServer(); + } + @Before public void setUp() throws Exception { // Set up plugin @@ -200,7 +204,6 @@ public void testCanExecute() { * Test method for {@link world.bentobox.bentobox.api.commands.admin.blueprints.AdminBlueprintSaveCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfString() { testCanExecute(); assertTrue(absc.execute(user, "", List.of("island"))); @@ -212,7 +215,6 @@ public void testExecuteUserStringListOfString() { * Test method for {@link world.bentobox.bentobox.api.commands.admin.blueprints.AdminBlueprintSaveCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringFileExists() { testCanExecute(); assertTrue(absc.execute(user, "", List.of("island"))); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java index 0d87b0d1e..c6384b23e 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeCommandTest.java @@ -94,9 +94,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } @Test diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java index 49fd2c3ac..a9c0952e0 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeResetCommandTest.java @@ -117,9 +117,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java index 01ed546c7..819aecce5 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeSetCommandTest.java @@ -119,9 +119,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java index 70aa816f9..e9a245be7 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommandTest.java @@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.framework; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -152,9 +151,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java index 07edaef52..f99ae73de 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandExpelCommandTest.java @@ -21,13 +21,12 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Server; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitScheduler; +import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -75,12 +74,11 @@ public class IslandExpelCommandTest extends RanksManagerBeforeClassTest { private Addon addon; private IslandExpelCommand iec; - @Mock - private Server server; - + @Before public void setUp() throws Exception { super.setUp(); + User.setPlugin(plugin); // Command manager @@ -97,7 +95,6 @@ public void setUp() throws Exception { when(user.isOp()).thenReturn(false); uuid = UUID.randomUUID(); when(user.getUniqueId()).thenReturn(uuid); - when(server.getOnlinePlayers()).thenReturn(Collections.emptySet()); when(mockPlayer.getServer()).thenReturn(server); when(user.getPlayer()).thenReturn(mockPlayer); when(user.getName()).thenReturn("tastybento"); @@ -155,6 +152,11 @@ public void setUp() throws Exception { iec = new IslandExpelCommand(ic); } + @After + public void tearDown() throws Exception { + super.tearDown(); + } + /** * Test method for * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#IslandExpelCommand(world.bentobox.bentobox.api.commands.CompositeCommand)}. @@ -369,7 +371,6 @@ private Player setUpTarget() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringHasIsland() { testCanExecute(); assertTrue(iec.execute(user, "", Collections.singletonList("tasty"))); @@ -383,7 +384,6 @@ public void testExecuteUserStringListOfStringHasIsland() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringNoIslandSendToSpawn() { Optional optionalIsland = Optional.of(island); when(im.getSpawn(any())).thenReturn(optionalIsland); @@ -400,7 +400,6 @@ public void testExecuteUserStringListOfStringNoIslandSendToSpawn() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringCreateIsland() { GameModeAddon gma = mock(GameModeAddon.class); CompositeCommand pc = mock(CompositeCommand.class); @@ -423,7 +422,6 @@ public void testExecuteUserStringListOfStringCreateIsland() { * {@link world.bentobox.bentobox.api.commands.island.IslandExpelCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ @Test - @Ignore("Enums") public void testExecuteUserStringListOfStringCreateIslandFailCommand() { GameModeAddon gma = mock(GameModeAddon.class); CompositeCommand pc = mock(CompositeCommand.class); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java index 5d3af68ef..c278f45b8 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java @@ -176,9 +176,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java index ca5c6a65f..7f2cc43ab 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandResetCommandTest.java @@ -187,6 +187,10 @@ public void setUp() throws Exception { irc = new IslandResetCommand(ic); } + @After + public void tearDown() throws Exception { + super.tearDown(); + } /** * Test method for * {@link IslandResetCommand#canExecute(User, String, java.util.List)} @@ -254,12 +258,6 @@ public void testNoConfirmationRequired() throws Exception { checkSpigotMessage("commands.island.reset.kicked-from-island", 11); } - @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); - } - /** * Test method for {@link IslandResetCommand#canExecute(User, String, java.util.List)} */ diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java index 47c87a3a1..931adb747 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandSpawnCommandTest.java @@ -130,12 +130,9 @@ public void setUp() throws Exception { isc = new IslandSpawnCommand(ic); } - /** - */ @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java index 45302c2fb..40d8dac64 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/CycleClickTest.java @@ -32,7 +32,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -56,6 +55,7 @@ import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlayersManager; import world.bentobox.bentobox.managers.RanksManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.panels.settings.SettingsTab; import world.bentobox.bentobox.util.Util; @@ -96,12 +96,13 @@ public class CycleClickTest { @Mock private @NonNull Player p; + /** * @throws java.lang.Exception - exception */ @Before public void setUp() throws Exception { - + ServerMocks.newServer(); // Set up plugin Whitebox.setInternalState(BentoBox.class, "instance", plugin); @@ -234,11 +235,11 @@ public void setUp() throws Exception { @After public void tearDown() { + ServerMocks.unsetBukkitServer(); Mockito.framework().clearInlineMocks(); } @Test - @Ignore("Enums") public void testNoPremission() { when(user.hasPermission(anyString())).thenReturn(false); CycleClick udc = new CycleClick(LOCK); @@ -256,7 +257,6 @@ public void testUpDownClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnLeftClick() { final int SLOT = 5; CycleClick udc = new CycleClick(LOCK); @@ -276,7 +276,6 @@ public void testOnLeftClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnLeftClickSetMinMax() { // Provide a current rank value - coop when(island.getFlag(any())).thenReturn(RanksManager.COOP_RANK); @@ -298,7 +297,6 @@ public void testOnLeftClickSetMinMax() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnRightClick() { final int SLOT = 5; CycleClick udc = new CycleClick(LOCK); @@ -318,7 +316,6 @@ public void testOnRightClick() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnRightClickMinMaxSet() { // Provide a current rank value - coop when(island.getFlag(any())).thenReturn(RanksManager.TRUSTED_RANK); @@ -340,7 +337,6 @@ public void testOnRightClickMinMaxSet() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testAllClicks() { // Test all possible click types CycleClick udc = new CycleClick(LOCK); @@ -371,7 +367,6 @@ public void testOnShiftLeftClickNotOp() { * Test for {@link CycleClick#onClick(world.bentobox.bentobox.api.panels.Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnShiftLeftClickIsOp() { when(user.isOp()).thenReturn(true); CycleClick udc = new CycleClick(LOCK); @@ -384,7 +379,6 @@ public void testOnShiftLeftClickIsOp() { assertTrue(udc.onClick(panel, user, ClickType.SHIFT_LEFT, SLOT)); assertTrue(hiddenFlags.isEmpty()); // Verify sounds - verify(p).playSound(user.getLocation(), Sound.BLOCK_GLASS_BREAK, 1F, 1F); - verify(p).playSound(user.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1F, 1F); + verify(p, times(2)).playSound((Location) null, (Sound) null, 1F, 1F); } } diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java index 30b24799c..bd697a8ca 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/IslandToggleClickTest.java @@ -19,7 +19,6 @@ import org.bukkit.plugin.PluginManager; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -38,6 +37,7 @@ import world.bentobox.bentobox.managers.FlagsManager; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.panels.settings.SettingsTab; import world.bentobox.bentobox.util.Util; @@ -68,6 +68,7 @@ public class IslandToggleClickTest { */ @Before public void setUp() throws Exception { + ServerMocks.newServer(); PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); // Set up plugin @@ -120,11 +121,11 @@ public void setUp() throws Exception { @After public void tearDown() { + ServerMocks.unsetBukkitServer(); Mockito.framework().clearInlineMocks(); } @Test - @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(Mockito.anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -132,7 +133,6 @@ public void testOnClickNoPermission() { } @Test - @Ignore("Enums") public void testOnClick() { listener.onClick(panel, user, ClickType.LEFT, 0); verify(island).toggleFlag(flag); @@ -140,7 +140,6 @@ public void testOnClick() { } @Test - @Ignore("Enums") public void testOnClickNoIsland() { when(settingsTab.getIsland()).thenReturn(null); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -148,7 +147,6 @@ public void testOnClickNoIsland() { } @Test - @Ignore("Enums") public void testOnClickNotOwner() { // No permission when(user.hasPermission(anyString())).thenReturn(false); diff --git a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java index d8d2bcb28..688876a78 100644 --- a/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java +++ b/src/test/java/world/bentobox/bentobox/api/flags/clicklisteners/WorldToggleClickTest.java @@ -19,7 +19,6 @@ import org.bukkit.plugin.PluginManager; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -37,6 +36,7 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.FlagsManager; import world.bentobox.bentobox.managers.IslandWorldManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) @@ -58,10 +58,9 @@ public class WorldToggleClickTest { @Mock private World world; - /** - */ @Before public void setUp() throws Exception { + ServerMocks.newServer(); PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); // Set up plugin BentoBox plugin = mock(BentoBox.class); @@ -105,6 +104,7 @@ public void setUp() throws Exception { @After public void tearDown() { + ServerMocks.unsetBukkitServer(); Mockito.framework().clearInlineMocks(); } @@ -112,7 +112,6 @@ public void tearDown() { * Test for {@link WorldToggleClick#onClick(Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); @@ -124,7 +123,6 @@ public void testOnClickNoPermission() { * Test for {@link WorldToggleClick#onClick(Panel, User, ClickType, int)} */ @Test - @Ignore("Enums") public void testOnClick() { when(user.hasPermission(anyString())).thenReturn(true); listener.onClick(panel, user, ClickType.LEFT, 0); diff --git a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java index 2cc6fe8c3..852e03fca 100644 --- a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java +++ b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java @@ -45,7 +45,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.stubbing.Answer; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -136,9 +135,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } diff --git a/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java b/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java index 338a6ea5d..a0943f280 100644 --- a/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/commands/BentoBoxPermsCommandTest.java @@ -106,12 +106,9 @@ public void setUp() throws Exception { cmd = new BentoBoxPermsCommand(ac); } - /** - * @throws java.lang.Exception - */ @After public void tearDown() throws Exception { - Mockito.framework().clearInlineMocks(); + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java index 6ac0e9044..12f9d211d 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java @@ -35,7 +35,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.stubbing.Answer; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -206,9 +205,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java index 2aad266a2..a654b311a 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/StandardSpawnProtectionListenerTest.java @@ -119,12 +119,9 @@ public void setUp() throws Exception { ssp = new StandardSpawnProtectionListener(plugin); } - /** - */ @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java index bfdd1bf50..2e59a1051 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandRankClickListenerTest.java @@ -25,8 +25,8 @@ import org.bukkit.inventory.Inventory; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -149,6 +149,11 @@ public void setUp() throws Exception { crcl = new CommandRankClickListener(); } + @After + public void tearDown() throws Exception { + super.tearDown(); + } + /** * Test method for {@link world.bentobox.bentobox.listeners.flags.clicklisteners.CommandRankClickListener#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)}. */ @@ -163,7 +168,6 @@ public void testOnClickWrongWorld() { * Test method for {@link world.bentobox.bentobox.listeners.flags.clicklisteners.CommandRankClickListener#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)}. */ @Test - @Ignore("Enums") public void testOnClickNoPermission() { when(user.isOp()).thenReturn(false); when(user.hasPermission(anyString())).thenReturn(false); @@ -176,7 +180,6 @@ public void testOnClickNoPermission() { * Test method for {@link world.bentobox.bentobox.listeners.flags.clicklisteners.CommandRankClickListener#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)}. */ @Test - @Ignore("Enums") public void testOnClickNoFlag() { when(island.isAllowed(user, Flags.CHANGE_SETTINGS)).thenReturn(false); assertTrue(crcl.onClick(panel, user, ClickType.LEFT, 0)); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java index 91271a55f..303697ec4 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/LockAndBanListenerTest.java @@ -30,7 +30,6 @@ import org.bukkit.scheduler.BukkitScheduler; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -52,6 +51,7 @@ import world.bentobox.bentobox.managers.LocalesManager; import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.managers.PlayersManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) @@ -88,6 +88,7 @@ public class LockAndBanListenerTest { @Before public void setUp() throws Exception { + ServerMocks.newServer(); // Server & Scheduler PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); when(Bukkit.getScheduler()).thenReturn(sch); @@ -190,6 +191,7 @@ public void setUp() throws Exception { @After public void tearDown() { + ServerMocks.unsetBukkitServer(); User.clearUsers(); framework().clearInlineMocks(); } @@ -299,7 +301,6 @@ public void testVerticalVehicleMoveOnly() { } @Test - @Ignore("Enums") public void testPlayerMoveIntoBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -322,7 +323,6 @@ public void testPlayerMoveIntoBannedIsland() { } @Test - @Ignore("Enums") public void testPlayerMoveInsideBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -350,7 +350,6 @@ public void testPlayerMoveInsideBannedIsland() { } @Test - @Ignore("Enums") public void testVehicleMoveIntoBannedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -513,7 +512,6 @@ public void testLoginToLockedIslandAsMember() { } @Test - @Ignore("Enums") public void testPlayerMoveIntoLockedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -618,7 +616,6 @@ public void testPlayerMoveIntoLockedIslandAsMember() { } @Test - @Ignore("Enums") public void testPlayerMoveInsideLockedIsland() { // Make player when(player.getUniqueId()).thenReturn(uuid); @@ -707,7 +704,6 @@ public void testPlayerMoveInsideLockedIslandAsMember() { } @Test - @Ignore("Enums") public void testVehicleMoveIntoLockedIsland() { // Make player Player player = mock(Player.class); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java index d44ec3ab0..3c2042d23 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java @@ -173,9 +173,8 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java index a135bfa6a..0067bf715 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/CreeperListenerTest.java @@ -18,13 +18,11 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.AbstractCommonSetup; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.lists.Flags; import world.bentobox.bentobox.util.Util; @@ -47,13 +45,9 @@ public void setUp() throws Exception { cl = new CreeperListener(); } - /** - * @throws java.lang.Exception - */ @After public void tearDown() throws Exception { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java index 615250e56..fc7181d3f 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/InvincibleVisitorsListenerTest.java @@ -41,7 +41,6 @@ import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -63,6 +62,7 @@ import world.bentobox.bentobox.managers.FlagsManager; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) @@ -91,10 +91,9 @@ public class InvincibleVisitorsListenerTest { @Mock private PluginManager pim; - /** - */ @Before public void setUp() throws Exception { + ServerMocks.newServer(); PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); // Set up plugin @@ -187,6 +186,7 @@ public void setUp() throws Exception { @After public void tearDown() { + ServerMocks.unsetBukkitServer(); User.clearUsers(); framework().clearInlineMocks(); } @@ -199,7 +199,6 @@ public void testOnClickWrongWorld() { } @Test - @Ignore("Enums") public void testOnClickNoPermission() { when(user.hasPermission(anyString())).thenReturn(false); listener.onClick(panel, user, ClickType.LEFT, 0); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java index a4675fdb4..09b76e75a 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ObsidianScoopingListenerTest.java @@ -29,7 +29,6 @@ import org.bukkit.util.RayTraceResult; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -141,13 +140,11 @@ public void setUp() throws Exception { } @After - public void tearDown() { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + public void tearDown() throws Exception { + super.tearDown(); } @Test - @Ignore("Enums") public void testOnPlayerInteract() { // Test incorrect items inHand = Material.ACACIA_DOOR; @@ -157,7 +154,6 @@ public void testOnPlayerInteract() { } @Test - @Ignore("Enums") public void testOnPlayerInteractBucketInHand() { // Test incorrect items inHand = Material.BUCKET; @@ -167,7 +163,6 @@ public void testOnPlayerInteractBucketInHand() { } @Test - @Ignore("Enums") public void testOnPlayerInteractObsidianAnvilInHand() { // Test with obsidian in hand inHand = Material.ANVIL; @@ -177,7 +172,6 @@ public void testOnPlayerInteractObsidianAnvilInHand() { } @Test - @Ignore("Enums") public void testOnPlayerInteractObsidianBucketInHand() { // Positive test with 1 bucket in the stack inHand = Material.BUCKET; @@ -187,7 +181,6 @@ public void testOnPlayerInteractObsidianBucketInHand() { } @Test - @Ignore("Enums") public void testOnPlayerInteractObsidianManyBucketsInHand() { // Positive test with 1 bucket in the stack inHand = Material.BUCKET; diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java index c58c77417..c21847e76 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/VisitorKeepInventoryListenerTest.java @@ -111,12 +111,9 @@ public void setUp() throws Exception { l = new VisitorKeepInventoryListener(); } - /** - */ @After public void tearDown() throws Exception { - User.clearUsers(); - Mockito.framework().clearInlineMocks(); + super.tearDown(); } /** diff --git a/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java index efd9265a5..d6e4fc354 100644 --- a/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/BlueprintClipboardManagerTest.java @@ -28,7 +28,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -42,6 +41,7 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.blueprints.Blueprint; import world.bentobox.bentobox.blueprints.BlueprintClipboard; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; @@ -104,7 +104,7 @@ public class BlueprintClipboardManagerTest { " \"ySize\": 10,\n" + " \"zSize\": 10\n" + "}"; - @Mock + private Server server; private void zip(File targetFile) throws IOException { @@ -129,6 +129,7 @@ private void zip(File targetFile) throws IOException { */ @Before public void setUp() throws Exception { + server = ServerMocks.newServer(); PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); blueprintFolder = new File("blueprints"); @@ -153,7 +154,7 @@ public void setUp() throws Exception { */ @After public void tearDown() throws Exception { - + ServerMocks.unsetBukkitServer(); if (blueprintFolder.exists()) { // Clean up file system Files.walk(blueprintFolder.toPath()) @@ -232,7 +233,6 @@ public void testLoadBlueprintNoFileInZip() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test - @Ignore("Enums") public void testLoadBlueprintFileInZipJSONError() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -256,7 +256,6 @@ public void testLoadBlueprintFileInZipJSONError() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test - @Ignore("Enums") public void testLoadBlueprintFileInZipNoBedrock() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -277,7 +276,6 @@ public void testLoadBlueprintFileInZipNoBedrock() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#loadBlueprint(java.lang.String)}. */ @Test - @Ignore("Enums") public void testLoadBlueprintFileInZip() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -299,7 +297,6 @@ public void testLoadBlueprintFileInZip() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#load(java.lang.String)}. */ @Test - @Ignore("Enums") public void testLoadString() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -322,7 +319,6 @@ public void testLoadString() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#load(world.bentobox.bentobox.api.user.User, java.lang.String)}. */ @Test - @Ignore("Enums") public void testLoadUserString() throws IOException { blueprintFolder.mkdirs(); // Make a blueprint file @@ -352,7 +348,6 @@ public void testLoadUserStringFail() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test - @Ignore("Enums") public void testSave() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -374,7 +369,6 @@ public void testSave() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test - @Ignore("Enums") public void testSaveBadChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -396,7 +390,6 @@ public void testSaveBadChars() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test - @Ignore("Enums") public void testSaveForeignChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -418,7 +411,6 @@ public void testSaveForeignChars() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#save(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. */ @Test - @Ignore("Enums") public void testSaveForeignBadChars() throws IOException { // Load a blueprint, then save it blueprintFolder.mkdirs(); @@ -453,7 +445,6 @@ public void testSaveBlueprintNoName() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintClipboardManager#saveBlueprint(world.bentobox.bentobox.blueprints.Blueprint)}. */ @Test - @Ignore("Enums") public void testSaveBlueprintSuccess() { BlueprintClipboardManager bcm = new BlueprintClipboardManager(plugin, blueprintFolder); Blueprint blueprint = new Blueprint(); diff --git a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java index 76cef0aa0..9cd41f9f9 100644 --- a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java @@ -37,7 +37,6 @@ import org.bukkit.util.Vector; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -61,6 +60,7 @@ import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock; import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBundle; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; /** @@ -99,11 +99,12 @@ public class BlueprintsManagerTest { private BukkitTask task; private int times; - @Mock + private Server server; @Before public void setUp() throws Exception { + server = ServerMocks.newServer(); // Set up plugin BentoBox plugin = mock(BentoBox.class); Whitebox.setInternalState(BentoBox.class, "instance", plugin); @@ -188,6 +189,7 @@ public void makeAddon() throws Exception { */ @After public void tearDown() throws Exception { + ServerMocks.unsetBukkitServer(); // Clean up file system deleteDir(dataFolder.toPath()); // Delete addon.jar @@ -259,7 +261,6 @@ public void testGetBlueprintBundles() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprintBundles(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test - @Ignore("Enums") public void testLoadBlueprintBundlesNoBlueprintFolder() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -280,7 +281,6 @@ public void testLoadBlueprintBundlesNoBlueprintFolder() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprintBundles(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test - @Ignore("Enums") public void testLoadBlueprintBundles() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -319,7 +319,6 @@ public void testLoadBlueprintsFailZero() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#loadBlueprints(world.bentobox.bentobox.api.addons.GameModeAddon)}. */ @Test - @Ignore("Enums") public void testLoadBlueprints() { // Set up running and verification when(scheduler.runTaskAsynchronously(eq(plugin), any(Runnable.class))).thenAnswer((Answer) invocation -> { @@ -352,7 +351,6 @@ public void testAddBlueprint() { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#saveBlueprint(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.blueprints.Blueprint)}. */ @Test - @Ignore("Enums") public void testSaveBlueprint() { // Save it BlueprintsManager bpm = new BlueprintsManager(plugin); @@ -650,7 +648,6 @@ public void testDeleteBlueprintBundle() throws IOException { * Test method for {@link world.bentobox.bentobox.managers.BlueprintsManager#renameBlueprint(world.bentobox.bentobox.api.addons.GameModeAddon, world.bentobox.bentobox.blueprints.Blueprint, java.lang.String, java.lang.String)}. */ @Test - @Ignore("Enums") public void testRenameBlueprint() { // Save it BlueprintsManager bpm = new BlueprintsManager(plugin); diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index d761bad06..d550ca413 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -45,7 +45,6 @@ import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -66,6 +65,7 @@ import world.bentobox.bentobox.database.objects.Names; import world.bentobox.bentobox.database.objects.Players; import world.bentobox.bentobox.hooks.VaultHook; +import world.bentobox.bentobox.mocks.ServerMocks; import world.bentobox.bentobox.util.Util; /** @@ -74,7 +74,6 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class, Logger.class, DatabaseSetup.class }) -@Ignore("Enums") public class PlayersManagerTest { private static AbstractDatabaseHandler handler; @@ -136,6 +135,8 @@ private void deleteAll(File file) throws IOException { public void setUp() throws Exception { // Clear any lingering database tearDown(); + + ServerMocks.newServer(); // Set up plugin Whitebox.setInternalState(BentoBox.class, "instance", plugin); when(plugin.getVault()).thenReturn(Optional.of(vault)); @@ -273,6 +274,7 @@ public void setUp() throws Exception { @After public void tearDown() throws Exception { + ServerMocks.unsetBukkitServer(); User.clearUsers(); Mockito.framework().clearInlineMocks(); deleteAll(new File("database")); diff --git a/src/test/java/world/bentobox/bentobox/mocks/ServerMocks.java b/src/test/java/world/bentobox/bentobox/mocks/ServerMocks.java new file mode 100644 index 000000000..8fd039318 --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/mocks/ServerMocks.java @@ -0,0 +1,118 @@ +package world.bentobox.bentobox.mocks; + +import static org.mockito.ArgumentMatchers.notNull; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Server; +import org.bukkit.Tag; +import org.bukkit.UnsafeValues; +import org.eclipse.jdt.annotation.NonNull; + +public final class ServerMocks { + + public static @NonNull Server newServer() { + Server mock = mock(Server.class); + + Logger noOp = mock(Logger.class); + when(mock.getLogger()).thenReturn(noOp); + when(mock.isPrimaryThread()).thenReturn(true); + + // Unsafe + UnsafeValues unsafe = mock(UnsafeValues.class); + when(mock.getUnsafe()).thenReturn(unsafe); + + // Server must be available before tags can be mocked. + Bukkit.setServer(mock); + + // Bukkit has a lot of static constants referencing registry values. To initialize those, the + // registries must be able to be fetched before the classes are touched. + Map, Object> registers = new HashMap<>(); + + doAnswer(invocationGetRegistry -> registers.computeIfAbsent(invocationGetRegistry.getArgument(0), clazz -> { + Registry registry = mock(Registry.class); + Map cache = new HashMap<>(); + doAnswer(invocationGetEntry -> { + NamespacedKey key = invocationGetEntry.getArgument(0); + // Some classes (like BlockType and ItemType) have extra generics that will be + // erased during runtime calls. To ensure accurate typing, grab the constant's field. + // This approach also allows us to return null for unsupported keys. + Class constantClazz; + try { + //noinspection unchecked + constantClazz = (Class) clazz + .getField(key.getKey().toUpperCase(Locale.ROOT).replace('.', '_')).getType(); + } catch (ClassCastException e) { + throw new RuntimeException(e); + } catch (NoSuchFieldException e) { + return null; + } + + return cache.computeIfAbsent(key, key1 -> { + Keyed keyed = mock(constantClazz); + doReturn(key).when(keyed).getKey(); + return keyed; + }); + }).when(registry).get(notNull()); + return registry; + })).when(mock).getRegistry(notNull()); + + // Tags are dependent on registries, but use a different method. + // This will set up blank tags for each constant; all that needs to be done to render them + // functional is to re-mock Tag#getValues. + doAnswer(invocationGetTag -> { + Tag tag = mock(Tag.class); + doReturn(invocationGetTag.getArgument(1)).when(tag).getKey(); + doReturn(Set.of()).when(tag).getValues(); + doAnswer(invocationIsTagged -> { + Keyed keyed = invocationIsTagged.getArgument(0); + Class type = invocationGetTag.getArgument(2); + if (!type.isAssignableFrom(keyed.getClass())) { + return null; + } + // Since these are mocks, the exact instance might not be equal. Consider equal keys equal. + return tag.getValues().contains(keyed) + || tag.getValues().stream().anyMatch(value -> value.getKey().equals(keyed.getKey())); + }).when(tag).isTagged(notNull()); + return tag; + }).when(mock).getTag(notNull(), notNull(), notNull()); + + // Once the server is all set up, touch BlockType and ItemType to initialize. + // This prevents issues when trying to access dependent methods from a Material constant. + try { + Class.forName("org.bukkit.inventory.ItemType"); + Class.forName("org.bukkit.block.BlockType"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + + return mock; + } + + public static void unsetBukkitServer() { + try { + Field server = Bukkit.class.getDeclaredField("server"); + server.setAccessible(true); + server.set(null, null); + } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private ServerMocks() { + } + +} \ No newline at end of file From 04ebe61fea374bc9e8851dac692898b5e23329e7 Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 7 Nov 2024 22:06:48 -0800 Subject: [PATCH 11/22] Add a slash to the end of the deploy --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ee02c8fcb..330bf3db6 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ codemc-releases - https://repo.codemc.org/repository/bentoboxworld + https://repo.codemc.org/repository/bentoboxworld/ From 6b095ab1c491a5a472d5978cda541cea47e2197d Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 8 Nov 2024 07:31:59 -0800 Subject: [PATCH 12/22] Rename distro --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 330bf3db6..f7b5a4116 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ - codemc-releases + codemc https://repo.codemc.org/repository/bentoboxworld/ From 44593bfeb00338804e2029e68a9e938a72b304e2 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 8 Nov 2024 14:40:09 -0800 Subject: [PATCH 13/22] Remove debug --- .../bentobox/database/yaml/YamlDatabaseHandler.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java index 2a8c28149..d3c6ed29b 100644 --- a/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/yaml/YamlDatabaseHandler.java @@ -221,12 +221,6 @@ private void deserializeValue(Method method, T instance, PropertyDescriptor prop try { // Floats need special handling because the database returns them as doubles Type setType = propertyDescriptor.getWriteMethod().getGenericParameterTypes()[0]; - BentoBox.getInstance().logDebug("name = " + setType.getTypeName()); - plugin.logError("Default setting value will be used: " - + propertyDescriptor.getReadMethod().invoke(instance)); - plugin.logError(method.getName()); - plugin.logError(propertyDescriptor.getReadMethod().getName()); - plugin.logError(instance.toString()); if (setType.getTypeName().equals("float")) { double d = (double) setTo; float f = (float)d; @@ -387,9 +381,7 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc // Get the read method Method method = propertyDescriptor.getReadMethod(); // Invoke the read method to get the value. We have no idea what type of value it is. - BentoBox.getInstance().logDebug("Method is " + method.getName()); Object value = method.invoke(instance); - BentoBox.getInstance().logDebug("Value is " + value); String storageLocation = field.getName(); // Check if there is an annotation on the field @@ -415,7 +407,6 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc } if (!checkAdapter(field, config, storageLocation, value)) { - BentoBox.getInstance().logDebug("No adapter"); // Set the filename if it has not be set already if (filename.isEmpty() && method.getName().equals("getUniqueId")) { // Save the name for when the file is saved @@ -428,7 +419,6 @@ public CompletableFuture saveObject(T instance) throws IllegalAccessExc serializeSet((Set)value, config, storageLocation); } else { // For all other data that doesn't need special serialization - BentoBox.getInstance().logDebug("For all other data that doesn't need special serializationr"); config.set(storageLocation, serialize(value)); } } @@ -583,7 +573,6 @@ private void setComment(@NonNull String comment, @NonNull YamlConfiguration conf private Object serialize(@Nullable Object object) { // Null is a value object and is serialized as the string "null" if (object == null) { - BentoBox.getInstance().logDebug("Object is null"); return "null"; } // UUID has it's own serialization, that is not picked up automatically @@ -600,7 +589,6 @@ private Object serialize(@Nullable Object object) { } // Keyed interfaces that are replacing enums if (object instanceof Keyed k) { - BentoBox.getInstance().logDebug("Object is keyed"); return k.getKey().getKey(); } // Enums From 400881559d6e7572c6eeebac9e7bcb8190c21575 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 8 Nov 2024 17:01:53 -0800 Subject: [PATCH 14/22] Update to use BentoBox logging. --- .../world/bentobox/bentobox/api/configuration/Config.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/configuration/Config.java b/src/main/java/world/bentobox/bentobox/api/configuration/Config.java index 420dd4174..8acafe596 100644 --- a/src/main/java/world/bentobox/bentobox/api/configuration/Config.java +++ b/src/main/java/world/bentobox/bentobox/api/configuration/Config.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.logging.Logger; -import org.apache.commons.lang.exception.ExceptionUtils; import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.BentoBox; @@ -64,9 +63,9 @@ public T loadConfigObject(String uniqueId) { return handler.loadObject(uniqueId); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | ClassNotFoundException | IntrospectionException | NoSuchMethodException | SecurityException e) { - logger.severe(() -> "Could not load config object! " + e.getMessage()); + BentoBox.getInstance().logError("Could not load config object! " + e.getMessage()); // Required for debugging - logger.severe(ExceptionUtils.getStackTrace(e)); + e.printStackTrace(); } return null; From 6a1561a5071686592b2d1cef00d9bea875591c3e Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 8 Nov 2024 17:50:30 -0800 Subject: [PATCH 15/22] Deployment POM changes --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f7b5a4116..4fc48b5b9 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ - codemc + bentoboxworld https://repo.codemc.org/repository/bentoboxworld/ From d339edfe217a64cac7268dd6612022cb08cf5c61 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 11 Nov 2024 09:14:18 -0800 Subject: [PATCH 16/22] Change to 3.0.0 --- pom.xml | 2 +- .../bentobox/AbstractCommonSetup.java | 36 ------------------- 2 files changed, 1 insertion(+), 37 deletions(-) diff --git a/pom.xml b/pom.xml index 4fc48b5b9..c48e504c4 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ -LOCAL - 2.7.1 + 3.0.0 bentobox-world https://sonarcloud.io ${project.basedir}/lib diff --git a/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java index 73596f4d4..59d49a543 100644 --- a/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java +++ b/src/test/java/world/bentobox/bentobox/AbstractCommonSetup.java @@ -241,42 +241,6 @@ public void checkSpigotMessage(String expectedMessage) { checkSpigotMessage(expectedMessage, 1); } - /* - public void checkSpigotMessage(String expectedMessage, boolean shouldBePresent) { - // Capture the argument passed to spigot().sendMessage(...) if messages are sent - ArgumentCaptor captor = ArgumentCaptor.forClass(TextComponent.class); - - if (shouldBePresent) { - // If we expect a message to be present, verify that sendMessage() was called at least once - verify(spigot, atLeastOnce()).sendMessage(captor.capture()); - - // Get all captured TextComponents - List capturedMessages = captor.getAllValues(); - - // Check if any captured message contains the expected text - boolean messageFound = capturedMessages.stream() - .map(component -> component.toPlainText()) // Convert each TextComponent to plain text - .anyMatch(messageText -> messageText.contains(expectedMessage)); // Check if the expected message is present - - // Assert that the message was found - assertTrue("Expected message not found: " + expectedMessage, messageFound); - - } else { - // If we expect no messages with this text, capture any sent messages to ensure none match the given message - verify(spigot, atLeast(0)).sendMessage(captor.capture()); - - // Get all captured TextComponents - List capturedMessages = captor.getAllValues(); - - // Check that none of the captured messages contain the forbidden text - boolean messageFound = capturedMessages.stream().map(component -> component.toPlainText()) // Convert each TextComponent to plain text - .anyMatch(messageText -> messageText.contains(expectedMessage)); // Check if the message is present - - // Assert that the message was NOT found - assertFalse("Unexpected message found: " + expectedMessage, messageFound); - } - }*/ - public void checkSpigotMessage(String expectedMessage, int expectedOccurrences) { // Capture the argument passed to spigot().sendMessage(...) if messages are sent ArgumentCaptor captor = ArgumentCaptor.forClass(TextComponent.class); From b135484f3c78178f78f811b033168d8daa2660dc Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 11 Nov 2024 12:45:16 -0800 Subject: [PATCH 17/22] Adds island history for team members adding and removing Adds placeholder for the historical number of players --- .../admin/AdminUnregisterCommand.java | 5 +-- .../team/IslandTeamInviteAcceptCommand.java | 5 +++ .../team/IslandTeamSetownerCommand.java | 5 +++ .../island/team/IslandTeamTrustCommand.java | 6 ++++ .../bentobox/bentobox/api/logs/LogEntry.java | 17 ++++++---- .../bentobox/database/objects/Island.java | 9 +++--- .../objects/adapters/LogEntryListAdapter.java | 5 ++- .../bentobox/lists/GameModePlaceholder.java | 31 +++++++++++++++++++ .../bentobox/managers/IslandsManager.java | 5 +++ .../bentobox/managers/island/IslandCache.java | 4 +++ .../bentobox/managers/island/NewIsland.java | 4 +++ 11 files changed, 83 insertions(+), 13 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java index 06cb6a578..f9f631df3 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java @@ -15,6 +15,7 @@ import world.bentobox.bentobox.api.events.island.IslandEvent; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.RanksManager; @@ -115,10 +116,10 @@ void unregisterIsland(User user) { // Remove all island players that reference this island targetIsland.getMembers().clear(); if (user.isPlayer()) { - targetIsland.log(new LogEntry.Builder("UNREGISTER").data("player", targetUUID.toString()) + targetIsland.log(new LogEntry.Builder(LogType.UNREGISTER).data("player", targetUUID.toString()) .data("admin", user.getUniqueId().toString()).build()); } else { - targetIsland.log(new LogEntry.Builder("UNREGISTER").data("player", targetUUID.toString()) + targetIsland.log(new LogEntry.Builder(LogType.UNREGISTER).data("player", targetUUID.toString()) .data("admin", "console").build()); } user.sendMessage("commands.admin.unregister.unregistered-island", TextVariables.XYZ, Util.xyz(targetIsland.getCenter().toVector()), diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java index 9244508c7..f0e3523bd 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java @@ -9,6 +9,8 @@ import world.bentobox.bentobox.api.events.island.IslandEvent; import world.bentobox.bentobox.api.events.team.TeamEvent; import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.TeamInvite; @@ -120,6 +122,9 @@ void acceptTrustInvite(User user, TeamInvite invite) { user.sendMessage("commands.island.team.trust.you-are-trusted", TextVariables.NAME, inviter.getName(), TextVariables.DISPLAY_NAME, inviter.getDisplayName()); } + // Add historu record + island.log(new LogEntry.Builder(LogType.TRUSTED).data(user.getUniqueId().toString(), "trusted") + .data(invite.getInviter().toString(), "trusted by").build()); } } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java index 16e23ee5c..0533f65ea 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java @@ -12,6 +12,8 @@ import world.bentobox.bentobox.api.events.island.IslandEvent; import world.bentobox.bentobox.api.events.team.TeamEvent; import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.RanksManager; @@ -91,6 +93,9 @@ protected boolean setOwner(User user, @NonNull UUID targetUUID2) { IslandEvent.builder().island(island).involvedPlayer(user.getUniqueId()).admin(false) .reason(IslandEvent.Reason.RANK_CHANGE).rankChange(RanksManager.OWNER_RANK, RanksManager.SUB_OWNER_RANK) .build(); + // Add historu record + island.log(new LogEntry.Builder(LogType.NEWOWNER).data(targetUUID2.toString(), "new owner") + .data(user.getUniqueId().toString(), "old owner").build()); return true; } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommand.java index 38c0349f7..435bbdee5 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamTrustCommand.java @@ -9,6 +9,8 @@ import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.TeamInvite.Type; @@ -110,6 +112,10 @@ public boolean execute(User user, String label, List args) { island.setRank(target, RanksManager.TRUSTED_RANK); user.sendMessage("commands.island.team.trust.success", TextVariables.NAME, target.getName(), TextVariables.DISPLAY_NAME, target.getDisplayName()); target.sendMessage("commands.island.team.trust.you-are-trusted", TextVariables.NAME, user.getName(), TextVariables.DISPLAY_NAME, user.getDisplayName()); + // Add historu record + island.log(new LogEntry.Builder(LogType.TRUSTED).data(targetUUID.toString(), "trusted") + .data(user.getUniqueId().toString(), "trusted by").build()); + } return true; } else { diff --git a/src/main/java/world/bentobox/bentobox/api/logs/LogEntry.java b/src/main/java/world/bentobox/bentobox/api/logs/LogEntry.java index 583bd24a9..012623479 100644 --- a/src/main/java/world/bentobox/bentobox/api/logs/LogEntry.java +++ b/src/main/java/world/bentobox/bentobox/api/logs/LogEntry.java @@ -15,16 +15,21 @@ * An {@link world.bentobox.bentobox.database.objects.adapters.AdapterInterface AdapterInterface} is provided to be able to save/retrieve * a list of instances of this object to/from the database: {@link world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter LogEntryListAdapter}. * - * @author Poslovitch + * @author Poslovitch, tastybento + * */ public class LogEntry { @Expose private final long timestamp; @Expose - private final String type; + private final LogType type; @Expose private final Map data; + public enum LogType { + REMOVE, ADD, UNREGISTER, BAN, UNOWNED, SPAWN, UNBAN, JOINED, NEWOWNER, TRUSTED, UNKNOWN + } + private LogEntry(@NonNull Builder builder) { this.timestamp = builder.timestamp; this.type = builder.type; @@ -36,7 +41,7 @@ public long getTimestamp() { } @NonNull - public String getType() { + public LogType getType() { return type; } @@ -47,12 +52,12 @@ public Map getData() { public static class Builder { private long timestamp; - private final String type; + private final LogType type; private Map data; - public Builder(@NonNull String type) { + public Builder(LogType type) { this.timestamp = System.currentTimeMillis(); - this.type = type.toUpperCase(Locale.ENGLISH); + this.type = type; this.data = new LinkedHashMap<>(); } diff --git a/src/main/java/world/bentobox/bentobox/database/objects/Island.java b/src/main/java/world/bentobox/bentobox/database/objects/Island.java index e55c6a0ea..663c31cf0 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Island.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Island.java @@ -37,6 +37,7 @@ import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.metadata.MetaDataAble; import world.bentobox.bentobox.api.metadata.MetaDataValue; import world.bentobox.bentobox.api.user.User; @@ -327,7 +328,7 @@ public void addMember(@NonNull UUID playerUUID) { public boolean ban(@NonNull UUID issuer, @NonNull UUID target) { if (getRank(target) != RanksManager.BANNED_RANK) { setRank(target, RanksManager.BANNED_RANK); - log(new LogEntry.Builder("BAN").data("player", target.toString()).data("issuer", issuer.toString()) + log(new LogEntry.Builder(LogType.BAN).data("player", target.toString()).data("issuer", issuer.toString()) .build()); setChanged(); } @@ -360,7 +361,7 @@ public Set getBanned() { */ public boolean unban(@NonNull UUID issuer, @NonNull UUID target) { if (members.remove(target) != null) { - log(new LogEntry.Builder("UNBAN").data("player", target.toString()).data("issuer", issuer.toString()) + log(new LogEntry.Builder(LogType.UNBAN).data("player", target.toString()).data("issuer", issuer.toString()) .build()); return true; } @@ -1132,7 +1133,7 @@ public void setOwner(@Nullable UUID owner) { this.owner = owner; if (owner == null) { - log(new LogEntry.Builder("UNOWNED").build()); + log(new LogEntry.Builder(LogType.UNOWNED).build()); return; } // Defensive code: demote any previous owner @@ -1281,7 +1282,7 @@ public void setSpawn(boolean isSpawn) { setFlagsDefaults(); setFlag(Flags.LOCK, RanksManager.VISITOR_RANK); } - log(new LogEntry.Builder("SPAWN").data("value", String.valueOf(isSpawn)).build()); + log(new LogEntry.Builder(LogType.SPAWN).data("value", String.valueOf(isSpawn)).build()); setChanged(); } diff --git a/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java b/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java index a4f8b5954..b687263c0 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java @@ -5,7 +5,10 @@ import java.util.List; import java.util.Map; +import com.google.common.base.Enums; + import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; /** * @author Poslovitch @@ -41,7 +44,7 @@ public List deserialize(Object object) { List> serialized = (List>) object; for (Map entry : serialized) { long timestamp = (long) entry.get(TIMESTAMP); - String type = (String) entry.get(TYPE); + LogType type = Enums.getIfPresent(LogType.class, (String) entry.get(TYPE)).or(LogType.UNKNOWN); Map data = (Map) entry.get(DATA); result.add(new LogEntry.Builder(type).timestamp(timestamp).data(data).build()); diff --git a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java index 03b67d59b..f79a69bf2 100644 --- a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java +++ b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java @@ -3,7 +3,10 @@ import java.text.DateFormat; import java.time.Instant; import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; @@ -11,6 +14,8 @@ import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.placeholders.GameModePlaceholderReplacer; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; @@ -120,6 +125,14 @@ public enum GameModePlaceholder { * @since 1.5.0 */ ISLAND_MEMBERS_COUNT("island_members_count", (addon, user, island) -> island == null ? "" : String.valueOf(island.getMemberSet().size())), + + /** + * Returns the number of players that are or have ever been a MEMBER on this island. + * @since 3.0.0 + */ + ISLAND_HISTORICAL_MEMBERS_COUNT("island_historical_members_count", + (addon, user, island) -> island == null ? "" : getHistoricalMembers(island)), + /** * Returns a comma separated list of player names that are at least MEMBER on this island. * @since 1.13.0 @@ -395,6 +408,24 @@ public enum GameModePlaceholder { this.replacer = replacer; } + /** + * Provides a count of how many players have ever joined the island as a member including the owner + * @param island island + * @return String count of the number of members + */ + private static String getHistoricalMembers(@Nullable Island island) { + Set uniqueMembers = new HashSet<>(); + for (LogEntry le : island.getHistory()) { + if (le.getType() == LogType.JOINED) { + Iterator it = le.getData().keySet().iterator(); + while (it.hasNext()) { + uniqueMembers.add(it.next()); + } + } + } + return String.valueOf(uniqueMembers.size()); + } + /** * Get the visited island * @param addon - game mode addon diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java index 9aceb1595..0452c970c 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java @@ -47,6 +47,8 @@ import world.bentobox.bentobox.api.events.island.IslandEvent.Reason; import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.json.BentoboxTypeAdapterFactory; @@ -1189,6 +1191,7 @@ public void spawnTeleport(@NonNull World world, @NonNull Player player) { * * @param player player */ + @SuppressWarnings("deprecation") private void readyPlayer(@NonNull Player player) { // Stop any gliding player.setGliding(false); @@ -1537,6 +1540,8 @@ public void setJoinTeam(Island teamIsland, UUID playerUUID) { // Add player to new island teamIsland.addMember(playerUUID); islandCache.addPlayer(playerUUID, teamIsland); + // Add historu record + teamIsland.log(new LogEntry.Builder(LogType.JOINED).data(playerUUID.toString(), "player").build()); // Save the island updateIsland(teamIsland); } diff --git a/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java b/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java index a1c0c6859..d4b04400c 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java @@ -23,6 +23,8 @@ import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.managers.RanksManager; @@ -431,6 +433,8 @@ public void removePlayer(@NonNull Island island, @NonNull UUID uuid) { } island.removeMember(uuid); island.removePrimary(uuid); + // Add historu record + island.log(new LogEntry.Builder(LogType.REMOVE).data(uuid.toString(), "player").build()); } /** diff --git a/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java b/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java index bb4f2cb22..198e8950c 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java @@ -15,6 +15,8 @@ import world.bentobox.bentobox.api.events.island.IslandCreateEvent; import world.bentobox.bentobox.api.events.island.IslandEvent; import world.bentobox.bentobox.api.events.island.IslandEvent.Reason; +import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; import world.bentobox.bentobox.api.events.island.IslandResetEvent; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; @@ -217,6 +219,8 @@ public void newIsland(Island oldIsland) throws IOException { island.setFlagsDefaults(); // Register metrics plugin.getMetrics().ifPresent(BStats::increaseIslandsCreatedCount); + // Add historu record + island.log(new LogEntry.Builder(LogType.JOINED).data(user.getUniqueId().toString(), "owner").build()); // Save island IslandsManager.updateIsland(island); } From 9fcee4488805b25f8218237b8a7a03f548e4f853 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 11 Nov 2024 13:14:33 -0800 Subject: [PATCH 18/22] Fix tests --- .../objects/adapters/AdapterInterface.java | 12 +++---- .../objects/adapters/LogEntryListAdapter.java | 2 +- .../adapters/LogEntryListAdapterTest.java | 36 ++++++++++++++++--- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/database/objects/adapters/AdapterInterface.java b/src/main/java/world/bentobox/bentobox/database/objects/adapters/AdapterInterface.java index 096e59b07..7c688b9d1 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/adapters/AdapterInterface.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/adapters/AdapterInterface.java @@ -11,16 +11,16 @@ public interface AdapterInterface { /** - * Serialize object - * @param object - object to serialize - * @return serialized object + * Deserialize object + * @param object - object to deserialize + * @return deserialized object */ S deserialize(Object object); /** - * Deserialize object - * @param object - object to deserialize - * @return deserialized object + * Serialize object + * @param object - object to serialize + * @return serialized object */ V serialize(Object object); } diff --git a/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java b/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java index b687263c0..d3b38f358 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapter.java @@ -65,7 +65,7 @@ public List> serialize(Object object) { history.forEach(logEntry -> { Map value = new LinkedHashMap<>(); value.put(TIMESTAMP, logEntry.getTimestamp()); - value.put(TYPE, logEntry.getType()); + value.put(TYPE, logEntry.getType().name()); if (logEntry.getData() != null) { value.put(DATA, logEntry.getData()); diff --git a/src/test/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapterTest.java b/src/test/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapterTest.java index ce91f6469..d6620aec9 100644 --- a/src/test/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapterTest.java +++ b/src/test/java/world/bentobox/bentobox/database/objects/adapters/LogEntryListAdapterTest.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.UUID; +import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.junit.After; import org.junit.Before; @@ -14,6 +15,7 @@ import org.mockito.Mockito; import world.bentobox.bentobox.api.logs.LogEntry; +import world.bentobox.bentobox.api.logs.LogEntry.LogType; /** * @author tastybento @@ -28,8 +30,6 @@ public class LogEntryListAdapterTest { private UUID issuer; private List toLog; - /** - */ @Before public void setUp() throws Exception { config = new YamlConfiguration(); @@ -38,9 +38,11 @@ public void setUp() throws Exception { issuer = UUID.randomUUID(); toLog = new ArrayList<>(); - toLog.add(new LogEntry.Builder("BAN").data("player", target.toString()).data("issuer", issuer.toString()).build()); - toLog.add(new LogEntry.Builder("UNBAN").data("player", target.toString()).data("issuer", issuer.toString()).build()); - toLog.add(new LogEntry.Builder("UNOWNED").build()); + toLog.add(new LogEntry.Builder(LogType.BAN).data("player", target.toString()).data("issuer", issuer.toString()) + .build()); + toLog.add(new LogEntry.Builder(LogType.UNBAN).data("player", target.toString()) + .data("issuer", issuer.toString()).build()); + toLog.add(new LogEntry.Builder(LogType.UNOWNED).build()); history.addAll(toLog); } @@ -67,4 +69,28 @@ public void testSerializeDeserialize() { } } + /** + * Test method for {@link world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter#serialize(java.lang.Object)} + * and {@link world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter#deserialize(java.lang.Object)}. + * @throws InvalidConfigurationException + */ + @Test + public void testSerializeDeserializeUnknownHistory() throws InvalidConfigurationException { + // Make entries using unknown types + String bad = "test:\n" + " history:\n" + " - timestamp: 1731359067207\n" + " type: WEIRD\n" + " data:\n" + + " player: 3f9d5634-331e-4598-9445-7449d56f7f74\n" + + " issuer: b366ba84-adec-42fe-b9dc-2c6a7b26f067\n" + " - timestamp: 1731359067207\n" + + " type: ENTRY\n" + " data:\n" + " player: 3f9d5634-331e-4598-9445-7449d56f7f74\n" + + " issuer: b366ba84-adec-42fe-b9dc-2c6a7b26f067\n" + " - timestamp: 1731359067207\n" + + " type: SUPER\n" + " data: {}"; + config.loadFromString(bad); + + // Verify + List historyCheck = a.deserialize(config.get("test.history")); + assertEquals(3, historyCheck.size()); + for (int i = 0; i < historyCheck.size(); i++) { + assertEquals(LogType.UNKNOWN, historyCheck.get(i).getType()); + } + } + } From 626b2153220262abcbac598e073e9fe9d88b08a5 Mon Sep 17 00:00:00 2001 From: tastybento Date: Tue, 12 Nov 2024 21:50:28 -0800 Subject: [PATCH 19/22] Make island info show min and max world heights --- src/main/java/world/bentobox/bentobox/util/IslandInfo.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/util/IslandInfo.java b/src/main/java/world/bentobox/bentobox/util/IslandInfo.java index 909262f44..43af66e9b 100644 --- a/src/main/java/world/bentobox/bentobox/util/IslandInfo.java +++ b/src/main/java/world/bentobox/bentobox/util/IslandInfo.java @@ -150,8 +150,9 @@ public boolean showInfo(User user) { user.sendMessage("commands.admin.info.island-center", TextVariables.XYZ, Util.xyz(location)); user.sendMessage("commands.admin.info.protection-range", RANGE, String.valueOf(island.getProtectionRange())); user.sendMessage("commands.admin.info.protection-coords", XZ1, - Util.xyz(new Vector(island.getMinProtectedX(), 0, island.getMinProtectedZ())), "[xz2]", - Util.xyz(new Vector(island.getMaxProtectedX() - 1, 0, island.getMaxProtectedZ() - 1))); + Util.xyz(new Vector(island.getMinProtectedX(), world.getMinHeight(), island.getMinProtectedZ())), + "[xz2]", Util.xyz(new Vector(island.getMaxProtectedX() - 1, world.getMaxHeight(), + island.getMaxProtectedZ() - 1))); if (island.isSpawn()) { user.sendMessage("commands.admin.info.is-spawn"); } From f19ca99362f0e81a68901c160b2ac40e41ce0a85 Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 14 Nov 2024 22:12:21 -0800 Subject: [PATCH 20/22] Explicitly save panels from Jar. --- .../world/bentobox/bentobox/BentoBox.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/world/bentobox/bentobox/BentoBox.java b/src/main/java/world/bentobox/bentobox/BentoBox.java index b46ab2b69..2cca38701 100644 --- a/src/main/java/world/bentobox/bentobox/BentoBox.java +++ b/src/main/java/world/bentobox/bentobox/BentoBox.java @@ -1,5 +1,7 @@ package world.bentobox.bentobox; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import java.util.Optional; @@ -465,6 +467,33 @@ public boolean loadSettings() { return false; } + log("Saving default panels..."); + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "island_creation_panel.yml"))) { + log("Saving default island_creation_panel..."); + this.saveResource("panels/island_creation_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "language_panel.yml"))) { + log("Saving default language_panel..."); + this.saveResource("panels/language_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "island_homes_panel.yml"))) { + log("Saving default island_homes_panel..."); + this.saveResource("panels/island_homes_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "team_invite_panel.yml"))) { + log("Saving default team_invite_panel..."); + this.saveResource("panels/team_invite_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "team_panel.yml"))) { + log("Saving default team_panel..."); + this.saveResource("panels/team_panel.yml", false); + } + return true; } From d665398f14114c3206acd661cde962ecbf470641 Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 14 Nov 2024 22:13:51 -0800 Subject: [PATCH 21/22] Save panels explicitly --- .../world/bentobox/bentobox/BentoBox.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/world/bentobox/bentobox/BentoBox.java b/src/main/java/world/bentobox/bentobox/BentoBox.java index b46ab2b69..4b556021e 100644 --- a/src/main/java/world/bentobox/bentobox/BentoBox.java +++ b/src/main/java/world/bentobox/bentobox/BentoBox.java @@ -1,5 +1,7 @@ package world.bentobox.bentobox; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import java.util.Optional; @@ -464,7 +466,32 @@ public boolean loadSettings() { getPluginLoader().disablePlugin(this); return false; } + log("Saving default panels..."); + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "island_creation_panel.yml"))) { + log("Saving default island_creation_panel..."); + this.saveResource("panels/island_creation_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "language_panel.yml"))) { + log("Saving default language_panel..."); + this.saveResource("panels/language_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "island_homes_panel.yml"))) { + log("Saving default island_homes_panel..."); + this.saveResource("panels/island_homes_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "team_invite_panel.yml"))) { + log("Saving default team_invite_panel..."); + this.saveResource("panels/team_invite_panel.yml", false); + } + + if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "team_panel.yml"))) { + log("Saving default team_panel..."); + this.saveResource("panels/team_panel.yml", false); + } return true; } From 0410ddb5224ce936a9e2ea7fce8b53f8e1585408 Mon Sep 17 00:00:00 2001 From: Noogear <123232885+Noogear@users.noreply.github.com> Date: Sat, 16 Nov 2024 16:16:13 +0800 Subject: [PATCH 22/22] Add the protection flag for eggHit. --- .../flags/protection/EggListener.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/EggListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/EggListener.java index 001192553..409c28d59 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/EggListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/EggListener.java @@ -1,7 +1,10 @@ package world.bentobox.bentobox.listeners.flags.protection; +import org.bukkit.entity.Egg; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerEggThrowEvent; import world.bentobox.bentobox.api.flags.FlagListener; @@ -24,4 +27,19 @@ public void onEggThrow(PlayerEggThrowEvent e) { e.setHatching(false); } } + + /** + * Handle visitor chicken egg hitting + * @param e - event + */ + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEggHit(ProjectileHitEvent e) { + if (e.getEntity() instanceof Egg egg) { + if (egg.getShooter() instanceof Player player) { + if (!checkIsland(e, player, egg.getLocation(), Flags.EGGS)) { + e.setCancelled(true); + } + } + } + } }