| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package me.lethunderhawk.world.command;
- import me.lethunderhawk.fluxapi.FluxService;
- import me.lethunderhawk.fluxapi.util.command.CommandNode;
- import me.lethunderhawk.fluxapi.util.command.CustomCommand;
- import me.lethunderhawk.fluxapi.util.interfaces.BazaarFluxModule;
- import me.lethunderhawk.main.BazaarFlux;
- import me.lethunderhawk.world.manager.NestedWorldStorageManager;
- import net.kyori.adventure.text.Component;
- import net.kyori.adventure.text.format.NamedTextColor;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.World;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.function.BiConsumer;
- public class WorldCommand extends CustomCommand {
- private Map<String, Location> locations = new HashMap<>();
- public WorldCommand(BazaarFluxModule module) {
- super(new CommandNode("world", "Hop between worlds!", null), module);
- populateLocationMap();
- }
- private void populateLocationMap() {
- locations.clear();
- initMatchingWorldLocationFromSpawn("hub", "world");
- }
- private void initMatchingWorldLocationFromSpawn(String... worldNames){
- for(String worldName : worldNames){
- initMatchingWorldLocationFromSpawn(worldName);
- }
- }
- private void initMatchingWorldLocationFromSpawn(String worldName) {
- World world = Bukkit.getWorld(worldName);
- if(world == null){
- FluxService.get(BazaarFlux.class).getLogger().warning("World not found: " + worldName);
- return;
- }
- Location worldLoc = world.getBlockAt(0,100,0).getLocation();
- locations.put(worldName, worldLoc);
- }
- @Override
- public void createCommands() {
- registerCommand("island", "Warp to your island", this::warpToIsland);
- registerCommand("overworld", "Warp to the overworld", this::warpOverworld);
- registerCommand("reload", "Reload this module", this::reload);
- registerCommand("deleteIslands", "delete all worlds in island folder", this::deleteAllIslands);
- registerAllDefaultWorldCommands();
- }
- private void deleteAllIslands(CommandSender sender, String[] strings) {
- NestedWorldStorageManager manager = FluxService.get(NestedWorldStorageManager.class);
- for(String worldFolder : manager.listWorlds("islands")){
- manager.deleteWorld("islands", worldFolder);
- }
- }
- private void reload(CommandSender sender, String[] strings) {
- module.reload(sender, strings);
- }
- private void registerAllDefaultWorldCommands() {
- if(locations == null || locations.isEmpty()) return;
- for(Map.Entry<String, Location> entry : locations.entrySet()){
- String locationName = entry.getKey();
- registerCommand(locationName, "Warp to " + locationName, warpToLocation(entry.getValue()));
- }
- }
- private BiConsumer<CommandSender, String[]> warpToLocation(Location value) {
- return (sender, args) -> {
- warptoLocation(sender, args, value);
- };
- }
- private void warptoLocation(CommandSender sender, String[] strings, Location location) {
- if(!(sender instanceof Player p)) return;
- p.teleport(location);
- }
- private void warpOverworld(CommandSender sender, String[] strings) {
- if(!(sender instanceof Player player)) return;
- FluxService.get(NestedWorldStorageManager.class).warpToWorld(player,"world");
- }
- private void warpToIsland(CommandSender sender, String[] args) {
- if (!(sender instanceof Player player)) return;
- NestedWorldStorageManager manager = FluxService.get(NestedWorldStorageManager.class);
- String worldName = "island_" + player.getName();
- World world = manager.loadIfExists("islands", worldName);
- if (world == null) {
- module.sendText(player, Component.text("You are new here! Let us create an island first...", NamedTextColor.GREEN));
- world = manager.createIslandWorld(worldName);
- }
- module.sendText(player, Component.text("Warping to island...", NamedTextColor.GREEN));
- player.teleportAsync(world.getSpawnLocation());
- }
- }
|