diff --git a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java index a469de9..e874b91 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java @@ -5,6 +5,8 @@ import com.alttd.cometskyblock.commands.island.IslandCommand; import com.alttd.cometskyblock.configuration.*; import com.alttd.cometskyblock.listeners.PlayerJoinListener; import com.alttd.cometskyblock.managers.IslandManager; +import com.alttd.cometskyblock.managers.PlayerManager; +import com.alttd.cometskyblock.worldgenerator.MasterWorldGenerator; import lombok.Getter; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -22,6 +24,8 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI @Getter private ConfigurationContainer challengesConfiguration; @Getter private IslandManager islandManager; + @Getter private PlayerManager playerManager; + @Getter private MasterWorldGenerator worldGenerator; @Override public void onLoad() { @@ -47,6 +51,8 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI // load worlds & manager islandManager = new IslandManager(this); + playerManager = new PlayerManager(this); + worldGenerator = new MasterWorldGenerator(this); } @Override diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java index 1933311..c677deb 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java @@ -2,6 +2,7 @@ package com.alttd.cometskyblock.commands.island; import com.alttd.cometskyblock.CometSkyBlockPlugin; import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.configuration.MessageConfiguration; import com.alttd.cometskyblock.island.IslandPlayer; import org.bukkit.entity.Player; @@ -13,7 +14,7 @@ public class IslandCommand extends PlayerSubCommand { super(plugin, "island"); this.plugin = plugin; - registerSubCommand(new IslandHelp(plugin)); + registerSubCommand(new IslandGo(plugin)); registerSubCommand(new IslandSethome(plugin)); registerSubCommand(new IslandRestart(plugin)); registerSubCommand(new IslandAccept(plugin)); @@ -31,6 +32,26 @@ public class IslandCommand extends PlayerSubCommand { @Override public boolean execute(Player player, IslandPlayer islandPlayer, String[] args) { - return false; + MessageConfiguration.Commands.Island.Help help = plugin.messagesConfiguration().get().commands().island().help(); + // Todo - builder to check for perm and only add messages with permission + player.sendRichMessage( + help.intro() + "" + + "/island go: " + help.go() + "" + + "/island sethome: " + help.setHome() + "" + + "/island restart: " + help.restart() + "" + + "/island invite: " + help.invite() + "" + + "/island accept: " + help.accept() + "" + + "/island kick: " + help.kick() + "" + + "/island setowner: " + help.setOwner() + "" + + "/island leave: " + help.leave() + "" + + "/island level: " + help.level() + "" + + "/island members: " + help.members() + "" + + "/island options: " + help.options() + "" + + "/island top: " + help.top() + "" + + "/island visit: " + help.visit() + "" + + "/island confirm: " + help.confirm() + "" + + "/island challenges: " + help.challenges() + ); + return true; } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java new file mode 100644 index 0000000..8b11828 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java @@ -0,0 +1,37 @@ +package com.alttd.cometskyblock.commands.island; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.IslandPlayer; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; + +/** + * Teleport to your island & create an island if you do not have one yet + */ +public class IslandGo extends PlayerSubCommand { + + public IslandGo(CometSkyBlockPlugin plugin) { + super(plugin, "go"); + } + + @Override + public boolean execute(Player player, IslandPlayer islandPlayer, String[] args) { + plugin.worldGenerator().createNewIslandWorld(result -> { + World world = Bukkit.getWorld(result); + if (world == null) { + plugin.getLogger().warning("Failed to create world " + result); + return; + } + + Island.IslandBuilder islandBuilder = new Island.IslandBuilder(world.getUID(), world.getName()); + plugin.islandManager().addIsland(player.getWorld().getUID(), islandBuilder.build()); + + player.teleportAsync(world.getSpawnLocation()); + }); + return true; + } + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandHelp.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandHelp.java deleted file mode 100644 index 0bba856..0000000 --- a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandHelp.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.alttd.cometskyblock.commands.island; - -import com.alttd.cometskyblock.CometSkyBlockPlugin; -import com.alttd.cometskyblock.commands.PlayerSubCommand; -import com.alttd.cometskyblock.configuration.MessageConfiguration; -import com.alttd.cometskyblock.island.IslandPlayer; -import org.bukkit.entity.Player; - -public class IslandHelp extends PlayerSubCommand { - - public IslandHelp(CometSkyBlockPlugin plugin) { - super(plugin, "help"); - } - - @Override - public boolean execute(Player player, IslandPlayer islandPlayer, String[] args) { - MessageConfiguration.Commands.Island.Help help = plugin.messagesConfiguration().get().commands().island().help(); - // Todo - builder to check for perm and only add messages with permission - player.sendRichMessage( - help.intro() + "" + - help.island() + "" + - help.setHome() + "" + - help.restart() + "" + - help.invite() + "" + - help.accept() + "" + - help.confirm() + "" + - help.kick() + "" + - help.setOwner() + "" + - help.leave() + "" + - help.level() + "" + - help.members() + "" + - help.options() + "" + - help.top() + "" + - help.visit() + "" + - help.challenges() + "" - ); - return true; - } -} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java index 6c5644a..1568296 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java @@ -1,11 +1,21 @@ package com.alttd.cometskyblock.configuration; +import com.alttd.cometskyblock.island.Island; import lombok.Getter; import org.spongepowered.configurate.objectmapping.ConfigSerializable; +import java.util.List; +import java.util.Map; +import java.util.UUID; + @ConfigSerializable -@Getter @SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) public class IslandConfiguration implements Configuration { + private int id; + @Getter private Map islands; + + public int getAndIncrementId() { + return id = id + 1; + } } 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 f34acf9..009a416 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java @@ -22,22 +22,22 @@ public class MessageConfiguration implements Configuration { private Help help = new Help(); @ConfigSerializable @Getter public static class Help { - String intro = "test"; - String island = ""; - String setHome = ""; - String restart = ""; - String invite = ""; - String accept = ""; - String confirm = ""; - String kick = ""; - String setOwner = ""; - String leave = ""; - String level = ""; - String members = ""; - String options = ""; - String top = ""; - String visit = ""; - String challenges = ""; + String intro = "List of all Skyblock Commands:"; + String go = "Teleports you to your island. Creates a new island if it is not existing."; + String setHome = "Sets the islands spawnpoint to the players location."; + String restart = "Restarts your island."; + String invite = "Invites another player to your island."; + String accept = "Accepts the invite from another player."; + String kick = "Kicks a player from your island."; + String setOwner = "Gives island ownership to another player"; + String leave = "Leave your current island with this command."; + String level = "Calculates and shows the current level of your island."; + String members = "Gives a list of all members on the island."; + String options = "Opens the options menu for your island."; + String top = "Shows the top 5 islands per level."; + String visit = "Lets you visit another island without losing your own."; + String confirm = "Accepts the request of another player to visit your island."; + String challenges = "Opens the challenges menu."; } SetHome setHome = new SetHome(); @@ -118,6 +118,11 @@ public class MessageConfiguration implements Configuration { } + Go go = new Go(); + @ConfigSerializable @Getter + public static class Go { + + } } private Challenges challenges = new Challenges(); 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 9229e29..fe675c9 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java @@ -1,21 +1,23 @@ package com.alttd.cometskyblock.island; import lombok.Getter; +import lombok.Setter; import org.spongepowered.configurate.objectmapping.ConfigSerializable; import java.util.ArrayList; import java.util.List; import java.util.UUID; -@Getter @ConfigSerializable +@Getter public class Island { - private String worldName; - private String islandName; - private int level; - private UUID owner; - private final List members = new ArrayList<>(); + protected UUID worldId; + protected String worldName; + protected String islandName; + @Setter protected int level; + @Setter protected UUID owner; + protected final List members = new ArrayList<>(); public boolean canBuild(UUID uuid) { return owner.equals(uuid) || members.contains(uuid); @@ -29,4 +31,47 @@ public class Island { return this.members.remove(uuid); } + public static class IslandBuilder extends Island { + private final UUID worldUUID; + private final String worldName; + private String islandName; + private int level; + private UUID owner; + private final List members = new ArrayList<>(); + + public IslandBuilder(UUID worldUUID, String worldName) { + this.worldUUID = worldUUID; + this.worldName = worldName; + } + + public IslandBuilder islandName(String islandName) { + this.islandName = islandName; + return this; + } + + public IslandBuilder level(int level) { + this.level = level; + return this; + } + + public IslandBuilder owner(UUID owner) { + this.owner = owner; + return this; + } + public IslandBuilder members(List members) { + this.members.addAll(members); + return this; + } + + public Island build() { + Island island = new Island(); + island.worldId = this.worldUUID; + island.worldName = this.worldName; + island.islandName = this.islandName; + island.level = this.level; + island.owner = this.owner; + island.members.addAll(this.members); + return island; + } + } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/managers/IslandManager.java b/plugin/src/main/java/com/alttd/cometskyblock/managers/IslandManager.java index 5ede505..42342e7 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/managers/IslandManager.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/managers/IslandManager.java @@ -1,9 +1,14 @@ package com.alttd.cometskyblock.managers; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.configuration.ConfigurationContainer; +import com.alttd.cometskyblock.configuration.IslandConfiguration; import com.alttd.cometskyblock.island.Island; import org.bukkit.World; +import org.slf4j.Logger; +import java.io.File; +import java.nio.file.Path; import java.util.HashMap; import java.util.UUID; @@ -11,16 +16,13 @@ public class IslandManager { private final CometSkyBlockPlugin plugin; - private HashMap islands; + ConfigurationContainer islands; public IslandManager(CometSkyBlockPlugin plugin) { this.plugin = plugin; - loadIslands(); - } - - void loadIslands() { - this.islands = new HashMap<>(); + Path path = new File(plugin.getDataFolder(), "IslandData").toPath(); + islands = ConfigurationContainer.load(plugin.getSLF4JLogger(), path, IslandConfiguration.class, "islands"); } public Island getIsland(World world) { @@ -28,9 +30,18 @@ public class IslandManager { } public Island getIsland(UUID uuid) { - return islands.get(uuid); + return islands.get().islands().get(uuid); } + public void addIsland(UUID uuid, Island island) { + islands.get().islands().put(uuid, island); + islands.save(); + } + public int getNextId() { + int id = islands.get().getAndIncrementId(); + islands.save(); + return id; + } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/managers/PlayerManager.java b/plugin/src/main/java/com/alttd/cometskyblock/managers/PlayerManager.java new file mode 100644 index 0000000..56b7048 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/managers/PlayerManager.java @@ -0,0 +1,30 @@ +package com.alttd.cometskyblock.managers; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.island.IslandPlayer; +import lombok.Getter; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +@Getter +public class PlayerManager { + + private final CometSkyBlockPlugin plugin; + protected final Map islandPlayers = new LinkedHashMap<>(); + + public PlayerManager(CometSkyBlockPlugin plugin) { + this.plugin = plugin; + } + + public void addIslandPlayer(UUID uuid, IslandPlayer islandPlayer) { + islandPlayers.putIfAbsent(uuid, islandPlayer); + } + + + public void removeIslandPlayer(UUID uuid) { + islandPlayers.remove(uuid); + } + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/IslandGenerator.java b/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/IslandGenerator.java index 241554e..7a6a17f 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/IslandGenerator.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/IslandGenerator.java @@ -23,7 +23,7 @@ public class IslandGenerator extends BlockPopulator { // Always generate an island at 0 0 and add spread some random in the world if ((x == 0 && z == 0) || random.nextInt(10000) < 1) { // set starting values - int startY = 95; + int startY = 63; int startX = x * 16; int startZ = z * 16; int treeX = Mth.randomBetweenInclusive(random, -3, 3); diff --git a/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/MasterWorldGenerator.java b/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/MasterWorldGenerator.java index 456517a..b132788 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/MasterWorldGenerator.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/worldgenerator/MasterWorldGenerator.java @@ -12,23 +12,26 @@ import org.bukkit.WorldCreator; public class MasterWorldGenerator { CometSkyBlockPlugin plugin; - public static final String WORLD_NAME = "CometSkyBlockMasterWorld"; + public static final String WORLD_NAME = "CometSkyBlockWorld-"; public MasterWorldGenerator(CometSkyBlockPlugin plugin) { this.plugin = plugin; } - public void checkMasterIslandWorld() { + public void checkIslandWorld() { if (plugin.getServer().getWorld(WORLD_NAME) == null) { - createMasterIslandWorld(result -> { + createNewIslandWorld(result -> { plugin.getLogger().info(WORLD_NAME + " has been created"); }); } } - void createMasterIslandWorld(Callback callback) { + public void createNewIslandWorld(Callback callback) { + final int id = plugin.islandManager().getNextId(); plugin.getServer().getScheduler().runTask(plugin, () -> { - WorldCreator worldCreator = new WorldCreator(WORLD_NAME); + WorldCreator worldCreator = new WorldCreator(WORLD_NAME.replace("", + id + "" + )); worldCreator.generator(new CometIslandGenerator()); worldCreator.environment(World.Environment.NORMAL); worldCreator.generateStructures(true); @@ -46,7 +49,7 @@ public class MasterWorldGenerator { // TODO Load a schematic into this world? - Bukkit.getScheduler().runTask(plugin, () -> callback.onQueryDone(WORLD_NAME)); + Bukkit.getScheduler().runTask(plugin, () -> callback.onQueryDone(WORLD_NAME.replace("", id + ""))); }); }