diff --git a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java index 2596bdf..8a39cae 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java @@ -26,6 +26,7 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI @Getter private ConfigurationContainer messagesConfiguration; @Getter private ConfigurationContainer challengesConfiguration; @Getter private ConfigurationContainer cobblestoneGeneratorConfiguration; + @Getter private ConfigurationContainer worldBorderConfiguration; @Getter private IslandManager islandManager; @Getter private MasterWorldGenerator worldGenerator; @@ -75,6 +76,7 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI messagesConfiguration = ConfigurationContainer.load(logger, path, MessageConfiguration.class, "messages"); challengesConfiguration = ConfigurationContainer.load(logger, path, ChallengesConfiguration.class, "challenges"); cobblestoneGeneratorConfiguration = ConfigurationContainer.load(logger, path, CobblestoneGeneratorConfiguration.class, "coblestonegenerator"); + worldBorderConfiguration = ConfigurationContainer.load(logger, path, WorldBorderConfiguration.class, "worldborder"); } public void loadCommands() { diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java index 46616c7..6693b1f 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java @@ -30,6 +30,13 @@ public class MessageConfiguration implements Configuration { String upgraded = "Your cobblestone generation is now level ."; } + WorldBorder worldBorder = new WorldBorder(); + @ConfigSerializable @Getter + public static class WorldBorder { + String requiredLevel = "You must reach islandlevel before you can expand the worldborder."; + String upgraded = "You have expanded your worldborder by blocks."; + } + Level level = new Level(); @ConfigSerializable @Getter public static class Level { diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/WorldBorderConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/WorldBorderConfiguration.java new file mode 100644 index 0000000..4f4d1e0 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/WorldBorderConfiguration.java @@ -0,0 +1,16 @@ +package com.alttd.cometskyblock.configuration; + +import com.alttd.cometskyblock.island.WorldBorderLevel; +import lombok.Getter; +import org.spongepowered.configurate.objectmapping.ConfigSerializable; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@ConfigSerializable +@SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) +public class WorldBorderConfiguration implements Configuration { + + private List levels = new ArrayList<>(); +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java index de678d6..12d9f04 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java @@ -172,6 +172,15 @@ public class Island extends YamlConfiguration { save(); } + public int worldBorderLevel() { + return getInt("island.worldborder.level", 0); + } + + public void worldBorderLevel(int level) { + set("island.worldborder.level", level); + save(); + } + public void teleport(Player player) { World islandWorld = CometSkyBlockPlugin.instance().worldGenerator().loadIslandWorld(worldName()); if (islandWorld == null) { diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/WorldBorderLevel.java b/plugin/src/main/java/com/alttd/cometskyblock/island/WorldBorderLevel.java new file mode 100644 index 0000000..d621290 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/WorldBorderLevel.java @@ -0,0 +1,15 @@ +package com.alttd.cometskyblock.island; + +import lombok.Getter; +import org.bukkit.Material; +import org.spongepowered.configurate.objectmapping.ConfigSerializable; + +@Getter +@ConfigSerializable +public class WorldBorderLevel { + + private int level; + private int islandLevel; + private int range; + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/gui/UpgradesGUI.java b/plugin/src/main/java/com/alttd/cometskyblock/island/gui/UpgradesGUI.java index 8ee0a2c..44396db 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/gui/UpgradesGUI.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/gui/UpgradesGUI.java @@ -5,6 +5,7 @@ import com.alttd.cometskyblock.configuration.MessageConfiguration; import com.alttd.cometskyblock.gui.GUIInventory; import com.alttd.cometskyblock.island.CobblestoneGeneratorLevel; import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.WorldBorderLevel; import com.alttd.cometskyblock.util.Experience; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; @@ -35,22 +36,34 @@ public class UpgradesGUI extends GUIInventory { MessageConfiguration.Island islandMessages = CometSkyBlockPlugin.instance().messagesConfiguration().get().island(); // Todo - move to handlers, add costs, validation ... // WorldBorder - addButton(10, createMenuButton(Material.GRASS_BLOCK, "Expand The world border", new ArrayList<>(), event -> { - player.sendRichMessage("This feature is not implemented yet - please wait for a future update."); -// World islandWorld = CometSkyBlockPlugin.instance().worldGenerator().loadIslandWorld(island.worldName()); -// if (islandWorld == null) { -// player.sendRichMessage("Could not load islandWorld. Contact an administrator"); -// return; -// } -// WorldBorder worldBorder = islandWorld.getWorldBorder(); -// worldBorder.setSize(worldBorder.getSize() + 250); + addButton(10, createMenuButton(Material.GRASS_BLOCK, "Expand the world border", new ArrayList<>(), event -> { + int requiredIslandLevel = getRequiredIslandWorldBorderLevel(island.worldBorderLevel() + 1); + if (island.level() < requiredIslandLevel) { + player.sendRichMessage(islandMessages.worldBorder().requiredLevel(), Placeholder.parsed("islandlevel", "" + requiredIslandLevel + "")); + return; + } + World islandWorld = CometSkyBlockPlugin.instance().worldGenerator().loadIslandWorld(island.worldName()); + if (islandWorld == null) { + player.sendRichMessage("Could not load islandWorld. Contact an administrator"); + return; + } + WorldBorder worldBorder = islandWorld.getWorldBorder(); + island.worldBorderLevel(island.worldBorderLevel() + 1); + WorldBorderLevel worldBorderLevel = getWorldBorderLevel(island.worldBorderLevel()); + if (worldBorderLevel == null) { + player.sendRichMessage("You can not expand your world border."); + return; + } + worldBorder.setSize(worldBorder.getSize() + worldBorderLevel.range()); + player.sendRichMessage(islandMessages.worldBorder().upgraded(), Placeholder.parsed("range", "" + worldBorderLevel.range() + "")); + decorate(player); })); // Cobble Gen addButton(11, createMenuButton(Material.COBBLESTONE, "Upgrade your cobble stone generator", List.of( "Level: " + island.cobblegenLevel() + "", "Ore tier: " + getOreTier(island.cobblegenLevel()) + "" ), event -> { - int requiredIslandLevel = getRequiredIslandLevel(island.cobblegenLevel() + 1); + int requiredIslandLevel = getRequiredIslandCobbleLevel(island.cobblegenLevel() + 1); if (island.level() < requiredIslandLevel) { player.sendRichMessage(islandMessages.cobbeGen().requiredLevel(), Placeholder.parsed("islandlevel", "" + requiredIslandLevel + "")); return; @@ -82,7 +95,7 @@ public class UpgradesGUI extends GUIInventory { super.decorate(player); } - Integer getRequiredIslandLevel(int generatorLevel) { + Integer getRequiredIslandCobbleLevel(int generatorLevel) { CobblestoneGeneratorLevel level = getLevel(generatorLevel); return level != null ? level.islandLevel() : 0; } @@ -93,7 +106,7 @@ public class UpgradesGUI extends GUIInventory { } CometSkyBlockPlugin plugin = CometSkyBlockPlugin.instance(); if (plugin.cobblestoneGeneratorConfiguration().get().levels().size() < generatorLevel) { - return getLevel(generatorLevel - 1); + return null; } for (CobblestoneGeneratorLevel level : plugin.cobblestoneGeneratorConfiguration().get().levels()) { if (level.level() == generatorLevel) { @@ -107,4 +120,25 @@ public class UpgradesGUI extends GUIInventory { CobblestoneGeneratorLevel level = getLevel(generatorLevel); return level != null ? level.type() : Material.COBBLESTONE; } + + Integer getRequiredIslandWorldBorderLevel(int generatorLevel) { + WorldBorderLevel level = getWorldBorderLevel(generatorLevel); + return level != null ? level.islandLevel() : 0; + } + + WorldBorderLevel getWorldBorderLevel(int generatorLevel) { + if (generatorLevel == 0) { + return null; + } + CometSkyBlockPlugin plugin = CometSkyBlockPlugin.instance(); + if (plugin.worldBorderConfiguration().get().levels().size() < generatorLevel) { + return null; + } + for (WorldBorderLevel level : plugin.worldBorderConfiguration().get().levels()) { + if (level.level() == generatorLevel) { + return level; + } + } + return null; + } }