Skip to content

Commit 5374994

Browse files
committed
Better formatting for purchase cost #143
1 parent 6e51f1e commit 5374994

File tree

5 files changed

+54
-33
lines changed

5 files changed

+54
-33
lines changed

src/main/java/world/bentobox/magiccobblestonegenerator/managers/StoneGeneratorManager.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package world.bentobox.magiccobblestonegenerator.managers;
22

3+
import java.text.NumberFormat;
34
import java.util.ArrayList;
45
import java.util.Collections;
56
import java.util.Comparator;
67
import java.util.HashMap;
78
import java.util.HashSet;
89
import java.util.Iterator;
910
import java.util.List;
11+
import java.util.Locale;
1012
import java.util.Map;
1113
import java.util.Objects;
1214
import java.util.Optional;
@@ -1142,6 +1144,7 @@ public boolean canPurchaseGenerator(@NotNull User user, @NotNull Island island,
11421144
@NotNull GeneratorDataObject generatorData, @NotNull GeneratorTierObject generatorTier) {
11431145

11441146
final User owner = island.isSpawn() || island.getOwner() == null ? null : User.getInstance(island.getOwner());
1147+
NumberFormat numberFormat = NumberFormat.getNumberInstance(owner.getLocale());
11451148

11461149
if (generatorData.getPurchasedTiers().contains(generatorTier.getUniqueId())) {
11471150
// Generator is not unlocked. Return false.
@@ -1157,7 +1160,7 @@ public boolean canPurchaseGenerator(@NotNull User user, @NotNull Island island,
11571160
Utils.sendMessage(user,
11581161
user.getTranslation(Constants.MESSAGES + "island-level-not-reached", Constants.GENERATOR,
11591162
generatorTier.getFriendlyName(), TextVariables.NUMBER,
1160-
String.valueOf(generatorTier.getRequiredMinIslandLevel())));
1163+
numberFormat.format(generatorTier.getRequiredMinIslandLevel())));
11611164
return false;
11621165
} else if (!generatorTier.getRequiredPermissions().isEmpty() && (owner == null || !owner.isPlayer()
11631166
|| !generatorTier.getRequiredPermissions().stream().allMatch(owner::hasPermission))) {
@@ -1178,8 +1181,9 @@ public boolean canPurchaseGenerator(@NotNull User user, @NotNull Island island,
11781181
// Return true only if user has enough money.
11791182
return true;
11801183
} else {
1184+
11811185
Utils.sendMessage(user, user.getTranslation(Constants.MESSAGES + "no-credits-buy-bank",
1182-
TextVariables.NUMBER, String.valueOf(generatorTier.getGeneratorTierCost())));
1186+
TextVariables.NUMBER, numberFormat.format(generatorTier.getGeneratorTierCost())));
11831187
return false;
11841188
}
11851189
} else {
@@ -1188,7 +1192,7 @@ public boolean canPurchaseGenerator(@NotNull User user, @NotNull Island island,
11881192
return true;
11891193
} else {
11901194
Utils.sendMessage(user, user.getTranslation(Constants.MESSAGES + "no-credits-buy",
1191-
TextVariables.NUMBER, String.valueOf(generatorTier.getGeneratorTierCost())));
1195+
TextVariables.NUMBER, numberFormat.format(generatorTier.getGeneratorTierCost())));
11921196
return false;
11931197
}
11941198
}

src/main/java/world/bentobox/magiccobblestonegenerator/panels/CommonPanel.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -554,32 +554,33 @@ private String generateStatusDescription(GeneratorTierObject generator,
554554
final String reference = Constants.DESCRIPTIONS + "generator.status.";
555555

556556
StringBuilder status = new StringBuilder();
557+
NumberFormat numberFormat = NumberFormat.getNumberInstance(user.getLocale());
557558

558559
if (!isPurchased && this.addon.isVaultProvided() && generator.getGeneratorTierCost() > 0)
559560
{
560561
status.append(this.user.getTranslationOrNothing(reference + "purchase-cost",
561-
Constants.NUMBER, String.valueOf(generator.getGeneratorTierCost())));
562+
Constants.NUMBER, numberFormat.format(generator.getGeneratorTierCost())));
562563
}
563564

564565
if (!isActive && this.addon.isVaultProvided() && generator.getActivationCost() > 0)
565566
{
566567
status.append("\n");
567568
status.append(this.user.getTranslationOrNothing(reference + "activation-cost",
568-
Constants.NUMBER, String.valueOf(generator.getActivationCost())));
569+
Constants.NUMBER, numberFormat.format(generator.getActivationCost())));
569570
}
570571

571572
if (isActive)
572573
{
573574
status.append("\n");
574575
status.append(this.user.getTranslationOrNothing(reference + "active",
575-
Constants.NUMBER, String.valueOf(generator.getGeneratorTierCost())));
576+
Constants.NUMBER, numberFormat.format(generator.getGeneratorTierCost())));
576577
}
577578

578579
if (!isUnlocked)
579580
{
580581
status.append("\n");
581582
status.append(this.user.getTranslationOrNothing(reference + "locked",
582-
Constants.NUMBER, String.valueOf(generator.getGeneratorTierCost())));
583+
Constants.NUMBER, numberFormat.format(generator.getGeneratorTierCost())));
583584
}
584585

585586
if (!generator.isDeployed())

src/main/java/world/bentobox/magiccobblestonegenerator/panels/admin/GeneratorEditPanel.java

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package world.bentobox.magiccobblestonegenerator.panels.admin;
22

33

4+
import java.text.NumberFormat;
45
import java.util.ArrayList;
56
import java.util.Collections;
67
import java.util.HashSet;
78
import java.util.List;
9+
import java.util.Locale;
810
import java.util.Set;
911
import java.util.TreeMap;
1012
import java.util.function.Consumer;
@@ -25,8 +27,8 @@
2527
import world.bentobox.magiccobblestonegenerator.database.objects.GeneratorTierObject;
2628
import world.bentobox.magiccobblestonegenerator.panels.CommonPanel;
2729
import world.bentobox.magiccobblestonegenerator.panels.ConversationUtils;
28-
import world.bentobox.magiccobblestonegenerator.panels.utils.MultiBiomeSelector;
2930
import world.bentobox.magiccobblestonegenerator.panels.utils.GeneratorTypeSelector;
31+
import world.bentobox.magiccobblestonegenerator.panels.utils.MultiBiomeSelector;
3032
import world.bentobox.magiccobblestonegenerator.panels.utils.SingleBlockSelector;
3133
import world.bentobox.magiccobblestonegenerator.utils.Constants;
3234
import world.bentobox.magiccobblestonegenerator.utils.Pair;
@@ -90,7 +92,7 @@ public void build()
9092

9193
switch (this.activeTab) {
9294
case INFO -> {
93-
this.populateInfo(panelBuilder);
95+
this.populateInfo(panelBuilder, user.getLocale());
9496

9597
// Add listener that allows to change icons
9698
panelBuilder.listener(new IconChanger());
@@ -147,54 +149,55 @@ private void populateHeader(PanelBuilder panelBuilder)
147149
* This method populates panel body with info blocks.
148150
*
149151
* @param panelBuilder PanelBuilder that must be created.
152+
* @param locale
150153
*/
151-
private void populateInfo(PanelBuilder panelBuilder)
154+
private void populateInfo(PanelBuilder panelBuilder, Locale locale)
152155
{
153-
panelBuilder.item(10, this.createButton(Button.NAME));
154-
panelBuilder.item(11, this.createButton(Button.ID));
155-
panelBuilder.item(19, this.createButton(Button.ICON));
156-
panelBuilder.item(28, this.createButton(Button.DESCRIPTION));
156+
panelBuilder.item(10, this.createButton(Button.NAME, locale));
157+
panelBuilder.item(11, this.createButton(Button.ID, locale));
158+
panelBuilder.item(19, this.createButton(Button.ICON, locale));
159+
panelBuilder.item(28, this.createButton(Button.DESCRIPTION, locale));
157160

158161
// Add locked icon
159-
panelBuilder.item(20, this.createButton(Button.LOCKED_ICON));
162+
panelBuilder.item(20, this.createButton(Button.LOCKED_ICON, locale));
160163

161164
// Usefull information to know about generators.
162-
panelBuilder.item(12, this.createButton(Button.DEFAULT));
163-
panelBuilder.item(21, this.createButton(Button.PRIORITY));
164-
panelBuilder.item(30, this.createButton(Button.TYPE));
165+
panelBuilder.item(12, this.createButton(Button.DEFAULT, locale));
166+
panelBuilder.item(21, this.createButton(Button.PRIORITY, locale));
167+
panelBuilder.item(30, this.createButton(Button.TYPE, locale));
165168

166169
// Default genertator do not have requirements.
167170
if (!this.generatorTier.isDefaultGenerator())
168171
{
169172
if (this.addon.isLevelProvided())
170173
{
171-
panelBuilder.item(13, this.createButton(Button.REQUIRED_MIN_LEVEL));
174+
panelBuilder.item(13, this.createButton(Button.REQUIRED_MIN_LEVEL, locale));
172175
}
173176

174177
// Display only permissions if they are required.
175-
panelBuilder.item(22, this.createButton(Button.REQUIRED_PERMISSIONS));
178+
panelBuilder.item(22, this.createButton(Button.REQUIRED_PERMISSIONS, locale));
176179

177180
if (this.addon.isVaultProvided())
178181
{
179182
// Display cost only if there exist vault.
180-
panelBuilder.item(31, this.createButton(Button.PURCHASE_COST));
183+
panelBuilder.item(31, this.createButton(Button.PURCHASE_COST, locale));
181184
}
182185
}
183186

184187
// If vault is disabled.
185188
if (this.addon.isVaultProvided())
186189
{
187-
panelBuilder.item(15, this.createButton(Button.ACTIVATION_COST));
190+
panelBuilder.item(15, this.createButton(Button.ACTIVATION_COST, locale));
188191
}
189192

190-
panelBuilder.item(24, this.createButton(Button.BIOMES));
193+
panelBuilder.item(24, this.createButton(Button.BIOMES, locale));
191194

192195
// deployed button.
193-
panelBuilder.item(33, this.createButton(Button.DEPLOYED));
196+
panelBuilder.item(33, this.createButton(Button.DEPLOYED, locale));
194197

195198
// display treasures.
196-
panelBuilder.item(25, this.createButton(Button.TREASURE_CHANCE));
197-
panelBuilder.item(34, this.createButton(Button.TREASURE_AMOUNT));
199+
panelBuilder.item(25, this.createButton(Button.TREASURE_CHANCE, locale));
200+
panelBuilder.item(34, this.createButton(Button.TREASURE_AMOUNT, locale));
198201
}
199202

200203

@@ -323,9 +326,10 @@ else if (this.pageIndex > (this.treasureChanceList.size() / MAX_ELEMENTS))
323326
* This method creates panel item for given button type.
324327
*
325328
* @param button Button type.
329+
* @param locale locale of user requesting the button
326330
* @return Clickable PanelItem button.
327331
*/
328-
private PanelItem createButton(Button button)
332+
private PanelItem createButton(Button button, Locale locale)
329333
{
330334
final String reference = Constants.BUTTON + button.name().toLowerCase();
331335
String name = this.user.getTranslation(reference + ".name");
@@ -623,10 +627,12 @@ private PanelItem createButton(Button button)
623627
}
624628
}
625629
case PURCHASE_COST -> {
630+
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
631+
626632
itemStack = new ItemStack(Material.GOLD_BLOCK);
627633

628634
description.add(this.user.getTranslation(reference + ".value",
629-
Constants.NUMBER, String.valueOf(this.generatorTier.getGeneratorTierCost())));
635+
Constants.NUMBER, numberFormat.format(this.generatorTier.getGeneratorTierCost())));
630636

631637
clickHandler = (panel, user, clickType, i) ->
632638
{
@@ -1317,7 +1323,7 @@ public void onInventoryClick(User user, InventoryClickEvent event)
13171323
GeneratorEditPanel.this.selectedButton = null;
13181324
// Rebuild icon
13191325
event.getInventory().setItem(19,
1320-
GeneratorEditPanel.this.createButton(Button.ICON).getItem());
1326+
GeneratorEditPanel.this.createButton(Button.ICON, user.getLocale()).getItem());
13211327
}
13221328
else
13231329
{
@@ -1327,7 +1333,7 @@ public void onInventoryClick(User user, InventoryClickEvent event)
13271333
GeneratorEditPanel.this.selectedButton = null;
13281334
// Rebuild icon
13291335
event.getInventory().setItem(20,
1330-
GeneratorEditPanel.this.createButton(Button.LOCKED_ICON).getItem());
1336+
GeneratorEditPanel.this.createButton(Button.LOCKED_ICON, user.getLocale()).getItem());
13311337
}
13321338

13331339
// save change

src/main/java/world/bentobox/magiccobblestonegenerator/utils/Utils.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package world.bentobox.magiccobblestonegenerator.utils;
88

99

10+
import java.text.NumberFormat;
1011
import java.util.ArrayList;
1112
import java.util.Collection;
1213
import java.util.List;
@@ -808,7 +809,7 @@ public static void sendUnlockMessage(UUID uuid,
808809
boolean available)
809810
{
810811
User user = User.getInstance(uuid);
811-
812+
NumberFormat numberFormat = NumberFormat.getNumberInstance(user.getLocale());
812813
WorldSettings settings = addon.getPlugin().getIWM().getWorldSettings(island.getWorld());
813814

814815
if (settings != null && user != null && user.isOnline())
@@ -826,7 +827,7 @@ public static void sendUnlockMessage(UUID uuid,
826827
{
827828
component = new TextComponent(user.getTranslation(Constants.CONVERSATIONS + "click-text-to-purchase",
828829
Constants.GENERATOR, generator.getFriendlyName(),
829-
Constants.NUMBER, String.valueOf(generator.getGeneratorTierCost())));
830+
Constants.NUMBER, numberFormat.format(generator.getGeneratorTierCost())));
830831

831832
commandBuilder.append(addon.getSettings().getPlayerBuyCommand().split(" ")[0]);
832833
}
@@ -837,7 +838,7 @@ public static void sendUnlockMessage(UUID uuid,
837838
component =
838839
new TextComponent(user.getTranslation(Constants.CONVERSATIONS + "click-text-to-activate-vault",
839840
Constants.GENERATOR, generator.getFriendlyName(),
840-
Constants.NUMBER, String.valueOf(generator.getActivationCost())));
841+
Constants.NUMBER, numberFormat.format(generator.getActivationCost())));
841842
}
842843
else
843844
{

src/test/java/world/bentobox/magiccobblestonegenerator/managers/StoneGeneratorManagerTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.nio.file.Files;
2121
import java.nio.file.Path;
2222
import java.util.Comparator;
23+
import java.util.Locale;
2324
import java.util.Optional;
2425
import java.util.UUID;
2526
import java.util.concurrent.CompletableFuture;
@@ -56,6 +57,7 @@
5657
import world.bentobox.bentobox.database.objects.Island;
5758
import world.bentobox.bentobox.managers.IslandWorldManager;
5859
import world.bentobox.bentobox.managers.IslandsManager;
60+
import world.bentobox.bentobox.managers.PlayersManager;
5961
import world.bentobox.bentobox.managers.RanksManager;
6062
import world.bentobox.magiccobblestonegenerator.StoneGeneratorAddon;
6163
import world.bentobox.magiccobblestonegenerator.database.objects.GeneratorBundleObject;
@@ -105,6 +107,8 @@ public class StoneGeneratorManagerTest {
105107
private PluginManager pim;
106108
@Mock
107109
private RanksManager rm;
110+
@Mock
111+
private PlayersManager pm;
108112

109113
@SuppressWarnings("unchecked")
110114
@BeforeClass
@@ -149,6 +153,10 @@ public void setUp() throws Exception {
149153
when(plugin.getLogger()).thenReturn(Logger.getAnonymousLogger());
150154
when(addon.getPlugin()).thenReturn(plugin);
151155

156+
// Players manager & locale
157+
when(pm.getLocale(any())).thenReturn("en-US");
158+
when(plugin.getPlayers()).thenReturn(pm);
159+
152160
// The database type has to be created one line before the thenReturn() to work!
153161
DatabaseType value = DatabaseType.JSON;
154162
when(plugin.getSettings()).thenReturn(settings);
@@ -161,6 +169,7 @@ public void setUp() throws Exception {
161169
when(user.getUniqueId()).thenReturn(uuid);
162170
when(user.getPlayer()).thenReturn(p);
163171
when(user.getName()).thenReturn("tastybento");
172+
when(user.getLocale()).thenReturn(Locale.ENGLISH);
164173
User.setPlugin(plugin);
165174

166175
// Generator Tier

0 commit comments

Comments
 (0)