diff --git a/pom.xml b/pom.xml
index 1c3c9bb..1b35e9c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
5.11.0
v1.21-SNAPSHOT
- 3.10.0
+ 3.13.0
4.0.10
1.8.0
2.6.2
@@ -66,7 +66,7 @@
-LOCAL
- 1.22.1
+ 1.23.0
BentoBoxWorld_AOneBlock
bentobox-world
diff --git a/src/main/java/world/bentobox/aoneblock/listeners/CheckPhase.java b/src/main/java/world/bentobox/aoneblock/listeners/CheckPhase.java
index 491ed4d..2ffbe45 100644
--- a/src/main/java/world/bentobox/aoneblock/listeners/CheckPhase.java
+++ b/src/main/java/world/bentobox/aoneblock/listeners/CheckPhase.java
@@ -9,6 +9,9 @@
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.title.Title;
+
import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
import world.bentobox.aoneblock.oneblocks.OneBlockPhase;
@@ -82,7 +85,7 @@ void setNewPhase(@Nullable Player player, @NonNull Island i, @NonNull OneBlockIs
// Set the phase name
is.setPhaseName(newPhaseName);
if (user.isPlayer() && user.isOnline() && addon.inWorld(user.getWorld())) {
- user.getPlayer().sendTitle(newPhaseName, null, -1, -1, -1);
+ user.getPlayer().showTitle(Title.title(Component.text(newPhaseName), Component.empty()));
}
// Run phase start commands
Util.runCommands(user,
diff --git a/src/main/java/world/bentobox/aoneblock/oneblocks/OneBlocksManager.java b/src/main/java/world/bentobox/aoneblock/oneblocks/OneBlocksManager.java
index 7f52544..ec20de5 100644
--- a/src/main/java/world/bentobox/aoneblock/oneblocks/OneBlocksManager.java
+++ b/src/main/java/world/bentobox/aoneblock/oneblocks/OneBlocksManager.java
@@ -790,71 +790,98 @@ public double getPercentageDone(@NonNull OneBlockIslands obi) {
}
public void getProbs(OneBlockPhase phase) {
- // Find the phase after this one
Integer blockNum = Integer.valueOf(phase.getBlockNumber());
Integer nextKey = blockProbs.ceilingKey(blockNum + 1);
- if (nextKey != null) {
- // This is the size of the phase in blocks
- int phaseSize = nextKey - blockNum;
- int blockTotal = phase.getBlockTotal();
- int likelyChestTotal = 0;
- double totalBlocks = 0;
- // Now calculate the relative block probability
- for (Entry en : phase.getBlocks().entrySet()) {
- double chance = (double) en.getValue() / blockTotal;
- double likelyNumberGenerated = chance * phaseSize;
- totalBlocks += likelyNumberGenerated;
- String report = en.getKey() + " likely generated = " + Math.round(likelyNumberGenerated) + " = "
- + Math.round(likelyNumberGenerated * 100 / phaseSize) + "%";
- if (likelyNumberGenerated < 1) {
- addon.logWarning(report);
- } else {
- addon.log(report);
- }
- if (en.getKey().equals(Material.CHEST)) {
- likelyChestTotal = (int) Math.round(likelyNumberGenerated);
- }
- }
- addon.log("Total blocks generated = " + totalBlocks);
- // Get the specific chest probability
- if (likelyChestTotal == 0) {
- addon.logWarning("No chests will be generated");
- return;
- }
- addon.log("**** A total of " + likelyChestTotal + " chests will be generated ****");
- // Now calculate chest chances
- double lastChance = 0;
- for (Entry en : OneBlockPhase.CHEST_CHANCES.entrySet()) {
- // Get the number of chests in this rarity group
- int num = phase.getChestsMap().getOrDefault(en.getValue(), Collections.emptyList()).size();
- double likelyNumberGenerated = (en.getKey() - lastChance) * likelyChestTotal;
- lastChance = en.getKey();
- String report = num + " " + en.getValue() + " chests in phase. Likely number generated = "
- + Math.round(likelyNumberGenerated);
- if (num > 0 && likelyNumberGenerated < 1) {
- addon.logWarning(report);
- } else {
- addon.log(report);
- }
+ if (nextKey == null) {
+ return;
+ }
+ int phaseSize = nextKey - blockNum;
+ int likelyChestTotal = logBlockProbs(phase, phaseSize);
+ if (likelyChestTotal == 0) {
+ addon.logWarning("No chests will be generated");
+ return;
+ }
+ addon.log("**** A total of " + likelyChestTotal + " chests will be generated ****");
+ logChestProbs(phase, likelyChestTotal);
+ logMobProbs(phase, phaseSize);
+ }
+ /**
+ * Logs the probability report for each block type in the phase.
+ *
+ * @param phase - the phase to report on
+ * @param phaseSize - total number of blocks in the phase
+ * @return the likely number of CHEST blocks that will be generated
+ */
+ private int logBlockProbs(OneBlockPhase phase, int phaseSize) {
+ int blockTotal = phase.getBlockTotal();
+ int likelyChestTotal = 0;
+ double totalBlocks = 0;
+ for (Entry en : phase.getBlocks().entrySet()) {
+ double likelyNumberGenerated = (double) en.getValue() / blockTotal * phaseSize;
+ totalBlocks += likelyNumberGenerated;
+ logReport(en.getKey() + " likely generated = " + Math.round(likelyNumberGenerated) + " = "
+ + Math.round(likelyNumberGenerated * 100 / phaseSize) + "%", likelyNumberGenerated);
+ if (en.getKey().equals(Material.CHEST)) {
+ likelyChestTotal = (int) Math.round(likelyNumberGenerated);
}
- // Mobs
- addon.log("-=-=-=-= Mobs -=-=-=-=-");
- double totalMobs = 0;
- // Now calculate the relative block probability
- for (Entry en : phase.getMobs().entrySet()) {
- double chance = (double) en.getValue() / phase.getTotal();
- double likelyNumberGenerated = chance * phaseSize;
- totalMobs += likelyNumberGenerated;
- String report = en.getKey() + " likely generated = " + Math.round(likelyNumberGenerated) + " = "
- + Math.round(likelyNumberGenerated * 100 / phaseSize) + "%";
- if (likelyNumberGenerated < 1) {
- addon.logWarning(report);
- } else {
- addon.log(report);
- }
+ }
+ addon.log("Total blocks generated = " + totalBlocks);
+ return likelyChestTotal;
+ }
+
+ /**
+ * Logs the probability report for each chest rarity in the phase.
+ *
+ * @param phase - the phase to report on
+ * @param likelyChestTotal - the likely total number of chests generated
+ */
+ private void logChestProbs(OneBlockPhase phase, int likelyChestTotal) {
+ double lastChance = 0;
+ for (Entry en : OneBlockPhase.CHEST_CHANCES.entrySet()) {
+ int num = phase.getChestsMap().getOrDefault(en.getValue(), Collections.emptyList()).size();
+ double likelyNumberGenerated = (en.getKey() - lastChance) * likelyChestTotal;
+ lastChance = en.getKey();
+ String report = num + " " + en.getValue() + " chests in phase. Likely number generated = "
+ + Math.round(likelyNumberGenerated);
+ if (num > 0 && likelyNumberGenerated < 1) {
+ addon.logWarning(report);
+ } else {
+ addon.log(report);
}
- addon.log("**** A total of " + Math.round(totalMobs) + " mobs will likely be generated ****");
+ }
+ }
+
+ /**
+ * Logs the probability report for each mob type in the phase.
+ *
+ * @param phase - the phase to report on
+ * @param phaseSize - total number of blocks in the phase
+ */
+ private void logMobProbs(OneBlockPhase phase, int phaseSize) {
+ addon.log("-=-=-=-= Mobs -=-=-=-=-");
+ double totalMobs = 0;
+ for (Entry en : phase.getMobs().entrySet()) {
+ double likelyNumberGenerated = (double) en.getValue() / phase.getTotal() * phaseSize;
+ totalMobs += likelyNumberGenerated;
+ logReport(en.getKey() + " likely generated = " + Math.round(likelyNumberGenerated) + " = "
+ + Math.round(likelyNumberGenerated * 100 / phaseSize) + "%", likelyNumberGenerated);
+ }
+ addon.log("**** A total of " + Math.round(totalMobs) + " mobs will likely be generated ****");
+ }
+
+ /**
+ * Logs a report line as a warning if the likely count is below 1, otherwise as
+ * a normal log entry.
+ *
+ * @param report - the message to log
+ * @param likelyNumberGenerated - the computed likelihood
+ */
+ private void logReport(String report, double likelyNumberGenerated) {
+ if (likelyNumberGenerated < 1) {
+ addon.logWarning(report);
+ } else {
+ addon.log(report);
}
}
diff --git a/src/main/java/world/bentobox/aoneblock/panels/PhasesPanel.java b/src/main/java/world/bentobox/aoneblock/panels/PhasesPanel.java
index b126849..5aff1d6 100644
--- a/src/main/java/world/bentobox/aoneblock/panels/PhasesPanel.java
+++ b/src/main/java/world/bentobox/aoneblock/panels/PhasesPanel.java
@@ -337,28 +337,53 @@ private PanelItem createPhaseButton(ItemTemplateRecord template, Map.Entry actions = template.actions().stream()
+ .filter(action -> switch (action.actionType().toUpperCase()) {
+ case "SELECT" -> canApply;
+ case "VIEW" -> true;
+ default -> false;
+ })
+ .toList();
+
+ builder.clickHandler(buildClickHandler(actions, phase));
+
+ List tooltips = collectTooltips(actions);
+ if (!tooltips.isEmpty())
+ {
+ builder.description("");
+ builder.description(tooltips);
+ }
+
+ return builder.build();
+ }
+
+ /**
+ * Applies the icon to the panel item builder from the template or phase data.
+ */
+ private void applyIcon(PanelItemBuilder builder, ItemTemplateRecord template, OneBlockPhase phase)
+ {
if (template.icon() != null)
{
builder.icon(template.icon().clone());
@@ -367,184 +392,191 @@ private PanelItem createPhaseButton(ItemTemplateRecord template, Map.Entry {
switch (requirement.getType())
{
- case ECO -> economyText.append(this.user.getTranslationOrNothing(REFERENCE + "economy",
- TextVariables.NUMBER, String.valueOf(requirement.getEco())));
-
- case BANK -> bankText.append(this.user.getTranslationOrNothing(REFERENCE + "bank",
- TextVariables.NUMBER, String.valueOf(requirement.getBank())));
-
- case LEVEL -> levelText.append(this.user.getTranslationOrNothing(REFERENCE + "level",
- TextVariables.NUMBER, String.valueOf(requirement.getLevel())));
-
- case PERMISSION -> permissionText.append(this.user.getTranslationOrNothing(REFERENCE + "permission",
- PERMISSION, requirement.getPermission()));
- case COOLDOWN -> {
- // do nothing
- }
- default -> throw new IllegalArgumentException("Unexpected value: " + requirement.getType());
-
+ case ECO -> economyText.append(this.user.getTranslationOrNothing(REFERENCE + "economy",
+ TextVariables.NUMBER, String.valueOf(requirement.getEco())));
+ case BANK -> bankText.append(this.user.getTranslationOrNothing(REFERENCE + "bank",
+ TextVariables.NUMBER, String.valueOf(requirement.getBank())));
+ case LEVEL -> levelText.append(this.user.getTranslationOrNothing(REFERENCE + "level",
+ TextVariables.NUMBER, String.valueOf(requirement.getLevel())));
+ case PERMISSION -> permissionText.append(this.user.getTranslationOrNothing(REFERENCE + "permission",
+ PERMISSION, requirement.getPermission()));
+ case COOLDOWN -> { /* do nothing */ }
+ default -> throw new IllegalArgumentException("Unexpected value: " + requirement.getType());
}
});
- // Blocks Text
+ return new RequirementTexts(bankText.toString(), economyText.toString(),
+ levelText.toString(), permissionText.toString());
+ }
+
+ /**
+ * Builds the blocks text with word-wrapped newlines inserted.
+ */
+ private String buildBlocksText(OneBlockPhase phase)
+ {
String blocksText = user.getTranslation(REFERENCE + "blocks-prefix") + phase.getBlocks().keySet().stream()
.map(m -> getMaterialName(user, m))
.map(string -> user.getTranslation(REFERENCE + "blocks", TextVariables.NAME, string))
.collect(Collectors.joining());
- // Removing the last newline character or comma if it exists
blocksText = blocksText.trim();
- if (blocksText.endsWith("\n") || blocksText.endsWith(",")) {
+ if (blocksText.endsWith("\n") || blocksText.endsWith(","))
+ {
blocksText = blocksText.substring(0, blocksText.length() - 1);
}
- // Insert newlines every x characters
- int wrapAt = 50; // Set default value
- try {
- // Attempt to parse the value from getTranslation
- wrapAt = Integer.parseInt(user.getTranslation(REFERENCE + "wrap-at"));
-
- } catch (NumberFormatException e) {
- // If parsing fails, keep default value of 40
- addon.logError("Warning: Unable to parse 'wrap-at' value, using default of 50.");
- }
-
- String formattedText = insertNewlines(blocksText, wrapAt);
+ return insertNewlines(blocksText, parseWrapAt());
+ }
- if (template.description() != null)
+ /**
+ * Parses the wrap-at translation value, defaulting to 50 on parse failure.
+ */
+ private int parseWrapAt()
+ {
+ try
{
- String biomeText = phase.getPhaseBiome() == null ? "" : LangUtilsHook.getBiomeName(phase.getPhaseBiome(), this.user);
-
- descriptionText = this.user.getTranslationOrNothing(template.description(),
- TextVariables.NUMBER, phase.getBlockNumber(),
- BIOME, biomeText,
- BANK, bankText.toString(),
- ECONOMY, economyText.toString(),
- LEVEL, levelText.toString(),
- PERMISSION, permissionText.toString(), BLOCKS, formattedText);
+ return Integer.parseInt(user.getTranslation(REFERENCE + "wrap-at"));
}
- else
+ catch (NumberFormatException e)
{
- // Null description, so we make our own
- String blockText = this.user.getTranslationOrNothing(REFERENCE + "starting-block",
- TextVariables.NUMBER, phase.getBlockNumber());
- String biomeText = phase.getPhaseBiome() == null ? ""
- : this.user.getTranslationOrNothing(REFERENCE + "biome",
- BIOME, LangUtilsHook.getBiomeName(phase.getPhaseBiome(), this.user));
-
- descriptionText = this.user.getTranslationOrNothing(REFERENCE + "description",
- "[starting-block]", biomeText,
- BIOME, blockText,
- BANK, bankText.toString(),
- ECONOMY, economyText.toString(),
- LEVEL, levelText.toString(),
- PERMISSION, permissionText.toString(), BLOCKS, formattedText);
+ addon.logError("Warning: Unable to parse 'wrap-at' value, using default of 50.");
+ return 50;
}
+ }
- // Strip out or replace formating
- descriptionText = descriptionText.replaceAll("(?m)^[ \\t]*\\r?\\n", "").
- replaceAll("(?= this.oneBlockIsland.getLifetime())
{
- canApply = false;
+ return false;
}
+ return !this.phaseRequirementsFail(phase, this.oneBlockIsland);
+ }
- List actions = template.actions().stream().
- filter(action -> switch (action.actionType().toUpperCase()) {
- case "SELECT" -> canApply;
- case "VIEW" -> true;
- default -> false;
- }).
- toList();
-
- builder.glow(this.oneBlockIsland != null && this.oneBlockIsland.getPhaseName().equals(phase.getPhaseName()));
-
- // Add ClickHandler
- builder.clickHandler((panel, user, clickType, i) ->
+ /**
+ * Builds the click handler for a phase button.
+ */
+ private PanelItem.ClickHandler buildClickHandler(List actions,
+ OneBlockPhase phase)
+ {
+ return (panel, user, clickType, i) ->
{
- actions.forEach(action -> {
- if (clickType == action.clickType() || action.clickType() == ClickType.UNKNOWN)
+ actions.forEach(action ->
+ {
+ if ((clickType == action.clickType() || action.clickType() == ClickType.UNKNOWN)
+ && "SELECT".equalsIgnoreCase(action.actionType()))
{
- if ("SELECT".equalsIgnoreCase(action.actionType()))
- {
- this.runCommandCall(this.addon.getSettings().getSetCountCommand().split(" ")[0], phase);
- }
- else
- {
- // TODO: implement view phase panel and command.
- //this.runCommandCall("view", phase);
- }
+ this.runCommandCall(this.addon.getSettings().getSetCountCommand().split(" ")[0], phase);
}
});
-
- // Always return true.
return true;
- });
-
- // Collect tooltips.
- List tooltips = actions.stream().
- filter(action -> action.tooltip() != null).
- map(action -> this.user.getTranslation(this.world, action.tooltip())).
- filter(text -> !text.isBlank()).
- collect(Collectors.toCollection(() -> new ArrayList<>(actions.size())));
-
- // Add tooltips.
- if (!tooltips.isEmpty())
- {
- // Empty line and tooltips.
- builder.description("");
- builder.description(tooltips);
- }
+ };
+ }
- return builder.build();
+ /**
+ * Collects non-blank tooltip strings from a list of action records.
+ */
+ private List collectTooltips(List actions)
+ {
+ return actions.stream()
+ .filter(action -> action.tooltip() != null)
+ .map(action -> this.user.getTranslation(this.world, action.tooltip()))
+ .filter(text -> !text.isBlank())
+ .collect(Collectors.toCollection(() -> new ArrayList<>(actions.size())));
}
private String getMaterialName(User user, Material m) {
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index 7eeb0e7..9dc91ba 100755
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -1,7 +1,7 @@
name: AOneBlock
main: world.bentobox.aoneblock.AOneBlock
version: ${version}${build.number}
-api-version: 2.7.1
+api-version: 3.13.0
metrics: true
icon: "STONE"
repository: "BentoBoxWorld/AOneBlock"
diff --git a/src/test/java/world/bentobox/aoneblock/TestWorldSettings.java b/src/test/java/world/bentobox/aoneblock/TestWorldSettings.java
index b6b3a1a..e0db2b9 100644
--- a/src/test/java/world/bentobox/aoneblock/TestWorldSettings.java
+++ b/src/test/java/world/bentobox/aoneblock/TestWorldSettings.java
@@ -48,7 +48,7 @@ public Difficulty getDifficulty() {
@Override
public void setDifficulty(Difficulty difficulty) {
-
+ // Do nothing
}
diff --git a/src/test/java/world/bentobox/aoneblock/listeners/BlockListenerTest2.java b/src/test/java/world/bentobox/aoneblock/listeners/BlockListenerTest2.java
index fc2a52b..87c8329 100644
--- a/src/test/java/world/bentobox/aoneblock/listeners/BlockListenerTest2.java
+++ b/src/test/java/world/bentobox/aoneblock/listeners/BlockListenerTest2.java
@@ -1,5 +1,6 @@
package world.bentobox.aoneblock.listeners;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -81,7 +82,7 @@
*
* @author tastybento
*/
-public class BlockListenerTest2 extends CommonTestSetup {
+class BlockListenerTest2 extends CommonTestSetup {
// Class under test
private BlockListener bl;
@@ -291,7 +292,7 @@ void testOnPlayerInteractNullBlock() {
PlayerInteractEvent e = makeInteractEvent(Action.RIGHT_CLICK_BLOCK, null, EquipmentSlot.HAND);
// Should not throw NPE
- bl.onPlayerInteract(e);
+ assertDoesNotThrow(() -> bl.onPlayerInteract(e));
}
/**
@@ -819,7 +820,7 @@ void testOnDeletedIslandInWorld() {
mock(world.bentobox.bentobox.api.events.island.IslandDeleteEvent.class);
when(e.getIsland()).thenReturn(toDelete);
- bl.onDeletedIsland(e);
+ assertDoesNotThrow(() -> bl.onDeletedIsland(e));
// Confirm the method completes without exception (cache and DB deletion happened)
}
@@ -840,7 +841,7 @@ void testOnDeletedIslandNotInWorld() {
mock(world.bentobox.bentobox.api.events.island.IslandDeleteEvent.class);
when(e.getIsland()).thenReturn(toDelete);
- bl.onDeletedIsland(e);
+ assertDoesNotThrow(() -> bl.onDeletedIsland(e));
// No exception; nothing to verify beyond the early return
}
diff --git a/src/test/java/world/bentobox/aoneblock/listeners/CheckPhaseTest.java b/src/test/java/world/bentobox/aoneblock/listeners/CheckPhaseTest.java
index e4ae83e..71720df 100644
--- a/src/test/java/world/bentobox/aoneblock/listeners/CheckPhaseTest.java
+++ b/src/test/java/world/bentobox/aoneblock/listeners/CheckPhaseTest.java
@@ -22,6 +22,8 @@
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
+import net.kyori.adventure.title.Title;
+
import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.aoneblock.CommonTestSetup;
import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
@@ -151,7 +153,7 @@ void testSetNewPhase() {
// Verify phase name change
assertEquals("Next Phase", is.getPhaseName());
// Verify title shown
- verify(mockPlayer).sendTitle("Next Phase", null, -1, -1, -1);
+ verify(mockPlayer).showTitle(any(Title.class));
}
@@ -184,7 +186,7 @@ void testSetNewPhaseSecondTime() {
// Verify phase name change
assertEquals("Next Phase", is.getPhaseName());
// Verify title shown
- verify(mockPlayer).sendTitle("Next Phase", null, -1, -1, -1);
+ verify(mockPlayer).showTitle(any(Title.class));
}
@@ -217,7 +219,7 @@ void testSetNewPhaseNullPlayer() {
// Verify phase name change
assertEquals("Next Phase", is.getPhaseName());
// Verify title shown
- verify(mockPlayer).sendTitle("Next Phase", null, -1, -1, -1);
+ verify(mockPlayer).showTitle(any(Title.class));
}
@@ -250,7 +252,7 @@ void testCheckPhaseNPCPlayer() {
// Verify phase name change
assertEquals("Next Phase", is.getPhaseName());
// Verify title shown
- verify(mockPlayer).sendTitle("Next Phase", null, -1, -1, -1);
+ verify(mockPlayer).showTitle(any(Title.class));
}
diff --git a/src/test/java/world/bentobox/aoneblock/listeners/InfoListenerTest.java b/src/test/java/world/bentobox/aoneblock/listeners/InfoListenerTest.java
index 7a6dde6..dc78679 100644
--- a/src/test/java/world/bentobox/aoneblock/listeners/InfoListenerTest.java
+++ b/src/test/java/world/bentobox/aoneblock/listeners/InfoListenerTest.java
@@ -1,25 +1,22 @@
package world.bentobox.aoneblock.listeners;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.Mockito.atLeast;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.util.List;
import java.util.UUID;
import org.bukkit.entity.Player;
-import org.bukkit.entity.Player.Spigot;
import org.eclipse.jdt.annotation.NonNull;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import net.md_5.bungee.api.chat.TextComponent;
import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.aoneblock.CommonTestSetup;
import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
@@ -41,8 +38,6 @@ public class InfoListenerTest extends CommonTestSetup {
private InfoListener il;
@Mock
private @NonNull OneBlockIslands is;
- @Mock
- private Spigot spigot;
private static final UUID ID = UUID.randomUUID();
@@ -110,17 +105,9 @@ void testInfoListener() {
void testOnInfo() {
IslandInfoEvent e = new IslandInfoEvent(island, ID, false, location, addon);
il.onInfo(e);
- checkSpigotMessage("aoneblock.commands.info.count");
+ verify(lm).get(any(User.class), eq("aoneblock.commands.info.count"));
}
- /**
- * Check that spigot sent the message
- * @param message - message to check
- */
- public void checkSpigotMessage(String expectedMessage) {
- checkSpigotMessage(expectedMessage, 1);
- }
-
/**
* Test method for {@link world.bentobox.aoneblock.listeners.InfoListener#onInfo(world.bentobox.bentobox.api.events.island.IslandInfoEvent)}.
*/
@@ -128,27 +115,7 @@ public void checkSpigotMessage(String expectedMessage) {
void testOnInfoOtherAddon() {
IslandInfoEvent e = new IslandInfoEvent(island, ID, false, location, mock(Addon.class));
il.onInfo(e);
- checkSpigotMessage("aoneblock.commands.info.count", 0);
- }
-
- public void checkSpigotMessage(String expectedMessage, int expectedOccurrences) {
- // Capture the argument passed to spigot().sendMessage(...) if messages are sent
- ArgumentCaptor captor = ArgumentCaptor.forClass(TextComponent.class);
-
- // Verify that sendMessage() was called at least 0 times (capture any sent messages)
- verify(spigot, atLeast(0)).sendMessage(captor.capture());
-
- // Get all captured TextComponents
- List capturedMessages = captor.getAllValues();
-
- // Count the number of occurrences of the expectedMessage in the captured messages
- long actualOccurrences = capturedMessages.stream().map(component -> component.toLegacyText()) // Convert each TextComponent to plain text
- .filter(messageText -> messageText.contains(expectedMessage)) // Check if the message contains the expected text
- .count(); // Count how many times the expected message appears
-
- // Assert that the number of occurrences matches the expectedOccurrences
- assertEquals(expectedOccurrences,
- actualOccurrences, "Expected message occurrence mismatch: " + expectedMessage);
+ verify(lm, never()).get(any(User.class), eq("aoneblock.commands.info.count"));
}
}
diff --git a/src/test/java/world/bentobox/aoneblock/listeners/StartSafetyListenerTest.java b/src/test/java/world/bentobox/aoneblock/listeners/StartSafetyListenerTest.java
index d03c683..18b0d55 100644
--- a/src/test/java/world/bentobox/aoneblock/listeners/StartSafetyListenerTest.java
+++ b/src/test/java/world/bentobox/aoneblock/listeners/StartSafetyListenerTest.java
@@ -164,7 +164,7 @@ public Difficulty getDifficulty() {
@Override
public void setDifficulty(Difficulty difficulty) {
-
+ // Do nothing
}
@Override
@@ -432,7 +432,7 @@ public long getResetEpoch() {
@Override
public void setResetEpoch(long timestamp) {
-
+ // Do nothing
}
@Override