Skip to content

Commit b69a5f7

Browse files
authored
Merge pull request #485 from BentoBoxWorld/copilot/sub-pr-484
Remove custom translate() helper from CheckPhase — let BentoBox handle MiniMessage natively
2 parents 7d14d50 + 976f3af commit b69a5f7

2 files changed

Lines changed: 28 additions & 57 deletions

File tree

src/main/java/world/bentobox/aoneblock/listeners/CheckPhase.java

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.eclipse.jdt.annotation.Nullable;
1111

1212
import net.kyori.adventure.text.Component;
13-
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
1413
import net.kyori.adventure.title.Title;
1514

1615
import world.bentobox.aoneblock.AOneBlock;
@@ -48,20 +47,6 @@ public CheckPhase(AOneBlock addon, BlockListener blockListener) {
4847

4948
}
5049

51-
/**
52-
* Converts a BentoBox translation key into an Adventure {@link Component}.
53-
* BentoBox's {@code getTranslation()} returns strings with § color codes already
54-
* applied, so {@link LegacyComponentSerializer#legacySection()} is used here.
55-
*
56-
* @param user - the user whose locale is used
57-
* @param key - BentoBox translation key
58-
* @param vars - alternating placeholder key/value pairs
59-
* @return the translated, colored Component
60-
*/
61-
private Component translate(User user, String key, String... vars) {
62-
return LegacyComponentSerializer.legacySection().deserialize(user.getTranslation(key, vars));
63-
}
64-
6550
/**
6651
* Runs end phase commands, sets new phase and runs new phase commands
6752
*
@@ -100,9 +85,7 @@ void setNewPhase(@Nullable Player player, @NonNull Island i, @NonNull OneBlockIs
10085
// Set the phase name
10186
is.setPhaseName(newPhaseName);
10287
if (user.isPlayer() && user.isOnline() && addon.inWorld(user.getWorld())) {
103-
// Phase names are raw YAML strings — use legacyAmpersand to parse & color codes.
104-
Component titleComponent = LegacyComponentSerializer.legacyAmpersand().deserialize(newPhaseName);
105-
user.getPlayer().showTitle(Title.title(titleComponent, Component.empty()));
88+
user.getPlayer().showTitle(Title.title(Component.text(newPhaseName), Component.empty()));
10689
}
10790
// Run phase start commands
10891
Util.runCommands(user,
@@ -147,52 +130,55 @@ private boolean checkRequirement(Requirement r, User user, Island i, OneBlockIsl
147130
}
148131

149132
private boolean checkLevelRequirement(Requirement r, User user, Island i, World world) {
133+
// Level checking logic
150134
return addon.getAddonByName("Level").map(l -> {
151135
if (((Level) l).getIslandLevel(world, i.getOwner()) < r.getLevel()) {
152-
user.getPlayer().sendMessage(translate(user, "aoneblock.phase.insufficient-level",
153-
TextVariables.NUMBER, String.valueOf(r.getLevel())));
136+
user.sendMessage("aoneblock.phase.insufficient-level", TextVariables.NUMBER,
137+
String.valueOf(r.getLevel()));
154138
return true;
155139
}
156140
return false;
157141
}).orElse(false);
158142
}
159143

160144
private boolean checkBankRequirement(Requirement r, User user, Island i) {
145+
// Bank checking logic
161146
return addon.getAddonByName("Bank").map(l -> {
162147
if (((Bank) l).getBankManager().getBalance(i).getValue() < r.getBank()) {
163-
user.getPlayer().sendMessage(translate(user, "aoneblock.phase.insufficient-bank-balance",
164-
TextVariables.NUMBER, String.valueOf(r.getBank())));
148+
user.sendMessage("aoneblock.phase.insufficient-bank-balance", TextVariables.NUMBER,
149+
String.valueOf(r.getBank()));
165150
return true;
166151
}
167152
return false;
168153
}).orElse(false);
169154
}
170155

171156
private boolean checkEcoRequirement(Requirement r, User user, World world) {
157+
// Eco checking logic
172158
return addon.getPlugin().getVault().map(vaultHook -> {
173159
if (vaultHook.getBalance(user, world) < r.getEco()) {
174-
user.getPlayer().sendMessage(translate(user, "aoneblock.phase.insufficient-funds",
175-
TextVariables.NUMBER, vaultHook.format(r.getEco())));
160+
user.sendMessage("aoneblock.phase.insufficient-funds", TextVariables.NUMBER,
161+
vaultHook.format(r.getEco()));
176162
return true;
177163
}
178164
return false;
179165
}).orElse(false);
180166
}
181167

182168
private boolean checkPermissionRequirement(Requirement r, User user) {
169+
// Permission checking logic
183170
if (user != null && !user.hasPermission(r.getPermission())) {
184-
user.getPlayer().sendMessage(translate(user, "aoneblock.phase.insufficient-permission",
185-
TextVariables.NAME, r.getPermission()));
171+
user.sendMessage("aoneblock.phase.insufficient-permission", TextVariables.NAME, r.getPermission());
186172
return true;
187173
}
188174
return false;
189175
}
190176

191177
private boolean checkCooldownRequirement(Requirement r, User player, OneBlockIslands is) {
178+
// Cooldown checking logic
192179
long remainingTime = r.getCooldown() - (System.currentTimeMillis() - is.getLastPhaseChangeTime()) / 1000;
193180
if (remainingTime > 0) {
194-
player.getPlayer().sendMessage(translate(player, "aoneblock.phase.cooldown",
195-
TextVariables.NUMBER, String.valueOf(remainingTime)));
181+
player.sendMessage("aoneblock.phase.cooldown", TextVariables.NUMBER, String.valueOf(remainingTime));
196182
return true;
197183
}
198184
return false;

src/test/java/world/bentobox/aoneblock/listeners/InfoListenerTest.java

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
package world.bentobox.aoneblock.listeners;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
43
import static org.junit.jupiter.api.Assertions.assertNotNull;
5-
import static org.mockito.Mockito.atLeast;
4+
import static org.mockito.ArgumentMatchers.any;
5+
import static org.mockito.ArgumentMatchers.eq;
66
import static org.mockito.Mockito.mock;
7+
import static org.mockito.Mockito.never;
78
import static org.mockito.Mockito.verify;
89
import static org.mockito.Mockito.when;
910

10-
import java.util.List;
1111
import java.util.UUID;
1212

1313
import org.bukkit.entity.Player;
14-
import org.bukkit.entity.Player.Spigot;
1514
import org.eclipse.jdt.annotation.NonNull;
1615
import org.junit.jupiter.api.AfterEach;
1716
import org.junit.jupiter.api.BeforeEach;
1817
import org.junit.jupiter.api.Test;
19-
import org.mockito.ArgumentCaptor;
2018
import org.mockito.Mock;
2119

22-
import net.md_5.bungee.api.chat.TextComponent;
2320
import world.bentobox.aoneblock.AOneBlock;
2421
import world.bentobox.aoneblock.CommonTestSetup;
2522
import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
@@ -41,8 +38,6 @@ public class InfoListenerTest extends CommonTestSetup {
4138
private InfoListener il;
4239
@Mock
4340
private @NonNull OneBlockIslands is;
44-
@Mock
45-
private Spigot spigot;
4641

4742
private static final UUID ID = UUID.randomUUID();
4843

@@ -107,30 +102,20 @@ void testInfoListener() {
107102
* Test method for {@link world.bentobox.aoneblock.listeners.InfoListener#onInfo(world.bentobox.bentobox.api.events.island.IslandInfoEvent)}.
108103
*/
109104
@Test
110-
void testOnInfoOtherAddon() {
111-
IslandInfoEvent e = new IslandInfoEvent(island, ID, false, location, mock(Addon.class));
105+
void testOnInfo() {
106+
IslandInfoEvent e = new IslandInfoEvent(island, ID, false, location, addon);
112107
il.onInfo(e);
113-
checkSpigotMessage("aoneblock.commands.info.count", 0);
108+
verify(lm).get(any(User.class), eq("aoneblock.commands.info.count"));
114109
}
115110

116-
public void checkSpigotMessage(String expectedMessage, int expectedOccurrences) {
117-
// Capture the argument passed to spigot().sendMessage(...) if messages are sent
118-
ArgumentCaptor<TextComponent> captor = ArgumentCaptor.forClass(TextComponent.class);
119-
120-
// Verify that sendMessage() was called at least 0 times (capture any sent messages)
121-
verify(spigot, atLeast(0)).sendMessage(captor.capture());
122-
123-
// Get all captured TextComponents
124-
List<TextComponent> capturedMessages = captor.getAllValues();
125-
126-
// Count the number of occurrences of the expectedMessage in the captured messages
127-
long actualOccurrences = capturedMessages.stream().map(component -> component.toLegacyText()) // Convert each TextComponent to plain text
128-
.filter(messageText -> messageText.contains(expectedMessage)) // Check if the message contains the expected text
129-
.count(); // Count how many times the expected message appears
130-
131-
// Assert that the number of occurrences matches the expectedOccurrences
132-
assertEquals(expectedOccurrences,
133-
actualOccurrences, "Expected message occurrence mismatch: " + expectedMessage);
111+
/**
112+
* Test method for {@link world.bentobox.aoneblock.listeners.InfoListener#onInfo(world.bentobox.bentobox.api.events.island.IslandInfoEvent)}.
113+
*/
114+
@Test
115+
void testOnInfoOtherAddon() {
116+
IslandInfoEvent e = new IslandInfoEvent(island, ID, false, location, mock(Addon.class));
117+
il.onInfo(e);
118+
verify(lm, never()).get(any(User.class), eq("aoneblock.commands.info.count"));
134119
}
135120

136121
}

0 commit comments

Comments
 (0)