Skip to content

Commit

Permalink
Continue to implement environment.
Browse files Browse the repository at this point in the history
- Implement ability to edit it via ingame gui.
- Split biomes by Wiki types in admin biome selection gui.
- Display biomes available for user in his dimension.
- Add a lot of missing locale strings.
- Change biome cost from int to double. (not supported in editing GUI).
  • Loading branch information
BONNe committed Jun 26, 2020
1 parent 4e9cae3 commit 8c3e28c
Show file tree
Hide file tree
Showing 8 changed files with 307 additions and 63 deletions.
45 changes: 14 additions & 31 deletions src/main/java/world/bentobox/biomes/BiomesAddonManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ private void readBiomes(YamlConfiguration config, User user, World world, boolea

ConfigurationSection reader = config.getConfigurationSection("biomes.biomesList");

Map<String, Biome> biomeNameMap = BiomesAddonManager.getBiomeNameMap();
Map<String, Biome> biomeNameMap = Utils.getBiomeNameMap();

for (String biome : reader.getKeys(false))
{
Expand All @@ -294,7 +294,7 @@ private void readBiomes(YamlConfiguration config, User user, World world, boolea
newBiomeObject.setIcon(ItemParser.parse(details.getString("icon") + ":1"));

newBiomeObject.setRequiredLevel(details.getInt("islandLevel", 0));
newBiomeObject.setRequiredCost(details.getInt("cost", 0));
newBiomeObject.setRequiredCost(details.getDouble("cost", 0.0));

String environmentValue = details.getString("environment", "normal").toUpperCase();

Expand Down Expand Up @@ -455,6 +455,7 @@ public BiomesObject createBiome(String uniqueID, String worldName)
// Sets default biome as VOID.
biome.setBiome(Biome.THE_VOID);
biome.setWorld(worldName);
biome.setEnvironment(World.Environment.NORMAL);

this.saveBiome(biome);
this.loadBiomes(biome);
Expand Down Expand Up @@ -506,15 +507,16 @@ public List<BiomesObject> getBiomes(World world, User user, VisibilityMode visib

List<BiomesObject> returnBiomesList = new ArrayList<>(allBiomeList.size());

allBiomeList.forEach(biomesObject -> {
if (biomesObject.isDeployed() &&
(visibilityMode.equals(VisibilityMode.DEPLOYED) ||
biomesObject.getRequiredPermissions().isEmpty() ||
biomesObject.getRequiredPermissions().stream().allMatch(user::hasPermission)))
{
returnBiomesList.add(biomesObject);
}
});
allBiomeList.stream().
// Filter out all biomes that has a different environment then players world.
filter(biomeObject -> user.getWorld().getEnvironment().equals(biomeObject.getEnvironment())).
// Filter out undeployed biomes if visibility mode is set to only deployed
filter(biomesObject -> biomesObject.isDeployed() && (visibilityMode.equals(VisibilityMode.DEPLOYED))).
// Filter out biomes which does user not have permissions
filter(biomesObject ->
biomesObject.getRequiredPermissions().isEmpty() ||
biomesObject.getRequiredPermissions().stream().allMatch(user::hasPermission)).
forEach(returnBiomesList::add);

return returnBiomesList;
}
Expand Down Expand Up @@ -600,25 +602,6 @@ public void removeBiome(BiomesObject biome)
}


/**
* This method returns map that contains biomes name as key and biome as value.
* @return Map that contains relation from biome name to biome.
*/
public static Map<String, Biome> getBiomeNameMap()
{
Biome[] biomes = Biome.values();

Map<String, Biome> returnMap = new HashMap<>(biomes.length);

for (Biome biome : biomes)
{
returnMap.put(biome.name(), biome);
}

return returnMap;
}


/**
* This method returns if in given world biomes are setup.
* @param world World that must be checked.
Expand All @@ -629,7 +612,7 @@ public boolean hasAnyBiome(World world)
String worldName = Util.getWorld(world) == null ? "" : Util.getWorld(world).getName();

return !worldName.isEmpty() &&
this.biomesCacheData.values().stream().anyMatch(biome -> biome.getWorld().equalsIgnoreCase(worldName));
this.biomesCacheData.values().stream().anyMatch(biome -> biome.getWorld().equalsIgnoreCase(worldName));
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public boolean execute(User user, String label, List<String> args)
{
case BIOME:
String newBiomeString = args.get(2);
Biome newBiome = BiomesAddonManager.getBiomeNameMap().getOrDefault(newBiomeString.toUpperCase(), null);
Biome newBiome = Utils.getBiomeNameMap().getOrDefault(newBiomeString.toUpperCase(), null);

if (newBiome == null)
{
Expand Down Expand Up @@ -167,7 +167,7 @@ else if (args.get(2).equalsIgnoreCase("false"))

try
{
biomesObject.setRequiredCost(Integer.parseUnsignedInt(args.get(2)));
biomesObject.setRequiredCost(Double.parseDouble(args.get(2)));
break;
}
catch (Exception e)
Expand Down Expand Up @@ -252,7 +252,7 @@ public Optional<List<String>> tabComplete(User user, String alias, List<String>
switch (CommandParameters.getParameter(args.get(3)))
{
case BIOME:
returnList.addAll(BiomesAddonManager.getBiomeNameMap().keySet());
returnList.addAll(Utils.getBiomeNameMap().keySet());
break;
case FRIENDLY_NAME:
returnList.add("<name>");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public void setRequiredLevel(long requiredLevel)
/**
* @return the cost of changing biome
*/
public int getRequiredCost()
public double getRequiredCost()
{
return this.requiredCost;
}
Expand All @@ -170,7 +170,7 @@ public int getRequiredCost()
/**
* @param requiredCost the reqMoney to set
*/
public void setRequiredCost(int requiredCost)
public void setRequiredCost(double requiredCost)
{
this.requiredCost = requiredCost;
}
Expand Down Expand Up @@ -383,7 +383,7 @@ public int compareTo(BiomesObject object)

@ConfigComment("Cost of changing biome.")
@Expose
private int requiredCost;
private double requiredCost;

@ConfigComment("Set of String permission that is required for this biome to be activated.")
@Expose
Expand Down
67 changes: 64 additions & 3 deletions src/main/java/world/bentobox/biomes/panels/admin/EditBiomeGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import world.bentobox.biomes.panels.util.SelectBiomeGUI;
import world.bentobox.biomes.panels.util.SelectBlocksGUI;
import world.bentobox.biomes.panels.util.StringListGUI;
import world.bentobox.biomes.utils.Utils;


/**
Expand Down Expand Up @@ -82,14 +83,14 @@ public void build()
GuiUtils.fillBorder(panelBuilder, Material.PURPLE_STAINED_GLASS_PANE);

panelBuilder.item(19, this.createButton(Button.BIOME));
panelBuilder.item(28, this.createButton(Button.ENVIRONMENT));

panelBuilder.item(11, this.createButton(Button.NAME));
panelBuilder.item(20, this.createButton(Button.ICON));
panelBuilder.item(29, this.createButton(Button.DESCRIPTION));

panelBuilder.item(21, this.createButton(Button.ORDER));


panelBuilder.item(14, this.createButton(Button.LEVEL));
panelBuilder.item(23, this.createButton(Button.COST));
panelBuilder.item(32, this.createButton(Button.PERMISSION));
Expand Down Expand Up @@ -188,12 +189,13 @@ private PanelItem createButton(Button button)
itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.admin.required-money"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.required-money"));
description.add(this.user.getTranslation(CURRENT_VALUE,
VALUE, Long.toString(this.biome.getRequiredCost())));
VALUE, Double.toString(this.biome.getRequiredCost())));
itemBuilder.description(GuiUtils.stringSplit(description, this.addon.getSettings().getLoreLineLength()));

itemBuilder.icon(this.addon.isEconomyProvided() ? Material.GOLD_INGOT : Material.BARRIER);
itemBuilder.clickHandler((panel, user, clickType, slot) -> {
new NumberGUI(this.user, this.biome.getRequiredCost(), 0, lineLength, (status, value) -> {
// TODO: this must be implemented in gui.
new NumberGUI(this.user, ((int) this.biome.getRequiredCost()), 0, lineLength, (status, value) -> {
if (status)
{
this.biome.setRequiredCost(value);
Expand Down Expand Up @@ -312,6 +314,64 @@ private PanelItem createButton(Button button)
return true;
});
break;
case ENVIRONMENT:
itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.admin.environment"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment"));

switch (this.biome.getEnvironment())
{
case NORMAL:
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-active",
"[value]", "NORMAL"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "NETHER"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "THE_END"));

itemBuilder.icon(Material.GRASS_BLOCK);
break;
case NETHER:
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "NORMAL"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-active",
"[value]", "NETHER"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "THE_END"));

itemBuilder.icon(Material.NETHERRACK);
break;
case THE_END:
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "NORMAL"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-inactive",
"[value]", "NETHER"));
description.add(this.user.getTranslation("biomes.gui.descriptions.admin.environment-active",
"[value]", "THE_END"));

itemBuilder.icon(Material.END_STONE);
break;
}

itemBuilder.description(description);

itemBuilder.clickHandler((panel, user, clickType, slot) -> {

if (clickType.isLeftClick())
{
this.biome.setEnvironment(Utils.getNextValue(World.Environment.values(),
this.biome.getEnvironment()));
}
else
{
this.biome.setEnvironment(Utils.getPreviousValue(World.Environment.values(),
this.biome.getEnvironment()));
}

panel.getItems().put(slot, this.createButton(button));

return true;
});
break;
}

return itemBuilder.build();
Expand Down Expand Up @@ -396,6 +456,7 @@ private enum Button
COST,
LEVEL,
ORDER,
ENVIRONMENT,
DESCRIPTION,
ICON,
NAME,
Expand Down

0 comments on commit 8c3e28c

Please sign in to comment.