From fea33e9b6f3e8062ed60c50c7909c417fb344c4f Mon Sep 17 00:00:00 2001 From: kyrptonaught Date: Mon, 8 Apr 2024 02:06:30 -0400 Subject: [PATCH] Add command to convert maps --- .../CustomMapLoaderCommands.java | 29 ++- .../customMapLoader/CustomMapLoaderMod.java | 7 +- .../customMapLoader/converter/Converter.java | 211 ++++++++++++------ 3 files changed, 167 insertions(+), 80 deletions(-) diff --git a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderCommands.java b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderCommands.java index ca2c721..8285763 100644 --- a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderCommands.java +++ b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderCommands.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import eu.pb4.sgui.virtual.book.BookScreenHandler; +import net.kyrptonaught.serverutils.customMapLoader.converter.Converter; import net.kyrptonaught.serverutils.customMapLoader.voting.HostOptions; import net.kyrptonaught.serverutils.customMapLoader.voting.Votebook; import net.kyrptonaught.serverutils.customMapLoader.voting.Voter; @@ -29,7 +30,7 @@ public static void registerCommands(CommandDispatcher dispa cmd.then(CommandManager.literal("voting") .then(CommandManager.literal("openBook") .executes(context -> { - Votebook.generateBookLibrary(CustomMapLoaderMod.getAllBattleMaps()); + //Votebook.generateBookLibrary(CustomMapLoaderMod.getAllBattleMaps()); Votebook.getPage(context.getSource().getPlayer(), "title", null).open(); return 1; })) @@ -55,7 +56,7 @@ public static void registerCommands(CommandDispatcher dispa String[] args = StringArgumentType.getString(context, "arg").split(","); Votebook.getPage(context.getSource().getPlayer(), page, args).open(); - if("index".equals(args[0]) && context.getSource().getPlayer().currentScreenHandler instanceof BookScreenHandler screen) + if ("index".equals(args[0]) && context.getSource().getPlayer().currentScreenHandler instanceof BookScreenHandler screen) screen.getGui().setPage(Integer.parseInt(args[1])); return 1; @@ -68,7 +69,7 @@ public static void registerCommands(CommandDispatcher dispa String[] args = StringArgumentType.getString(context, "arg").split(","); Votebook.getPage(context.getSource().getPlayer(), page, args).open(); - if("index".equals(args[0]) && context.getSource().getPlayer().currentScreenHandler instanceof BookScreenHandler screen) + if ("index".equals(args[0]) && context.getSource().getPlayer().currentScreenHandler instanceof BookScreenHandler screen) screen.getGui().setPage(Integer.parseInt(args[1])); return List.of(); @@ -83,10 +84,10 @@ public static void registerCommands(CommandDispatcher dispa return List.of(); }))))) .then(CommandManager.literal("vote") - .then(CommandManager.argument("map", IdentifierArgumentType.identifier()) + .then(CommandManager.argument("mapName", IdentifierArgumentType.identifier()) .executes(context -> { ServerPlayerEntity player = context.getSource().getPlayer(); - Identifier map = IdentifierArgumentType.getIdentifier(context, "map"); + Identifier map = IdentifierArgumentType.getIdentifier(context, "mapName"); Voter.voteFor(context.getSource().getServer(), player, map); return 1; @@ -276,6 +277,24 @@ public static void registerCommands(CommandDispatcher dispa CustomMapLoaderMod.teleportToLobby(id, players, null); return 1; }))))); + /* + cmd.then(CommandManager.literal("reload") + .executes(context -> { + CustomMapLoaderMod.BATTLE_MAPS.clear(); + CustomMapLoaderMod.LOBBY_MAPS.clear(); + IO.discoverAddons(context.getSource().getServer()); + Votebook.generateBookLibrary(CustomMapLoaderMod.getAllBattleMaps()); + return 1; + })); + + */ + + cmd.then(CommandManager.literal("convert") + .executes(context -> { + Converter.ConvertAll(); + return 1; + })); + dispatcher.register(cmd); } } diff --git a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java index 38b9f92..44a9766 100644 --- a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java +++ b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java @@ -107,7 +107,7 @@ public static void battleLoad(MinecraftServer server, Identifier addon, Identifi }); server.getPlayerManager().broadcast(Text.literal("Loading map: ").append(config.getNameText()), false); - MessageSender.sendGameMessageWMentions(Text.literal("Loading map: ").append(config.getNameText())); + MessageSender.sendGameMessageWMentions(Text.literal("Loading map ").append(config.getNameText())); } private static void battlePrepare(LoadedBattleMapInstance instance, Collection players) { @@ -115,7 +115,10 @@ private static void battlePrepare(LoadedBattleMapInstance instance, Collection files = Files.walk(input, 1)) { + files.forEach(path -> { + try { + if (Files.isDirectory(path)) { + String fileName = path.getFileName().toString(); - BattleMapAddon addon = new BattleMapAddon(); - addon.addon_id = new Identifier("4jstudios", map.map); - addon.addon_type = BattleMapAddon.TYPE; - addon.addon_pack = map.mappack; - addon.addon_pack_key = map.mappackkey; - addon.name_key = "lem.battle.mapdecider.menu.voting.mapname." + map.map; - addon.description_key = "lem.battle.mapdecider.menu.voting.mapdesc." + map.map; - addon.authors = "4J Studios"; - addon.version = "1.0"; + BattleMapData map = null; - addon.required_packs = new ResourcePackList(); - addon.required_packs.packs.add(new DummyPack(map.resourcepack)); + for (BattleMapData battleMapData : battlemaps) { + if (battleMapData.mapName.equals(fileName)) { + map = battleMapData; + break; + } + } - for (MapSize mapSize : MapSize.values()) { - String suffix = (mapSize == MapSize.LARGE ? "" : ("_" + mapSize.fileName)); - Path dir = Path.of(input).resolve(map.map + suffix); + if (map != null) { + Path tempOut = output.resolve(map.mapName); - if (!Files.exists(dir)) continue; + FileHelper.createDir(tempOut); - FileHelper.copyDirectory(dir, tempOut.resolve("world").resolve(mapSize.fileName)); + BattleMapAddon addon = new BattleMapAddon(); + addon.addon_id = new Identifier("4jstudios", map.mapName); + addon.addon_type = BattleMapAddon.TYPE; + addon.addon_pack = map.mappack; + addon.addon_pack_key = map.mappackkey; + addon.name_key = "lem.battle.mapdecider.menu.voting.mapname." + map.mapName; + addon.description_key = "lem.battle.mapdecider.menu.voting.mapdesc." + map.mapName; + addon.authors = "4J Studios"; + addon.version = "1.0"; - HashMap> entities = getEntitesForMap(dir); + addon.required_packs = new ResourcePackList(); + addon.required_packs.packs.add(new DummyPack(map.resourcepack)); - BattleMapAddon.MapSizeConfig config = new BattleMapAddon.MapSizeConfig(); + for (MapSize mapSize : MapSize.values()) { + String suffix = (mapSize == MapSize.LARGE ? "" : ("_" + mapSize.fileName)); + Path dir = input.resolve(map.mapName + suffix); - config.center_coords = entities.get("MapCenter").get(0); - config.world_border_coords_1 = entities.get("BorderEntity").get(0); - config.world_border_coords_2 = entities.get("BorderEntity").get(1); - config.center_spawn_coords = entities.get("CenterTP").toArray(String[]::new); - config.random_spawn_coords = entities.get("RandomTP").toArray(String[]::new); - config.chest_tracker_coords = entities.get("Chest").toArray(String[]::new); + if (!Files.exists(dir)) continue; - addon.setMapDataForSize(mapSize, config); - } + FileHelper.copyDirectory(dir, tempOut.resolve("world").resolve(mapSize.fileName)); + + HashMap> entities = getEntitesForMap(dir); + + BattleMapAddon.MapSizeConfig config = new BattleMapAddon.MapSizeConfig(); + + config.center_coords = entities.get("MapCenter").get(0); + config.world_border_coords_1 = entities.get("BorderEntity").get(0); + config.world_border_coords_2 = entities.get("BorderEntity").get(1); + config.center_spawn_coords = entities.get("CenterTP").toArray(String[]::new); + config.random_spawn_coords = entities.get("RandomTP").toArray(String[]::new); + config.chest_tracker_coords = entities.get("Chest").toArray(String[]::new); + + addon.setMapDataForSize(mapSize, config); + } - FileHelper.copyFile(Path.of(input).resolve("types").resolve(map.map + ".json"), tempOut.resolve("dimension_type.json")); + FileHelper.copyFile(dimensionTypes.resolve(map.mapName + ".json"), tempOut.resolve("dimension_type.json")); - String json = ServerUtilsMod.getGson().toJson(addon); - FileHelper.writeFile(tempOut.resolve("addon.json"), json); + String json = ServerUtilsMod.getGson().toJson(addon); + FileHelper.writeFile(tempOut.resolve("addon.json"), json); - FileHelper.zipDirectory(tempOut, Path.of(output).resolve(map.map + ".lemaddon")); - FileHelper.deleteDir(tempOut); + FileHelper.zipDirectory(tempOut, output.resolve(map.mapName + ".lemaddon")); + FileHelper.deleteDir(tempOut); + System.out.println("Converted: " + map.mapName); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + } catch (Exception e) { + e.printStackTrace(); } } @@ -123,54 +152,85 @@ public static void LobbyConvert() { new LobbyMapData("lobby_old", "lem.base:vanilla", ""), }; - String input = "C:\\Users\\antho\\Desktop\\Minecraft Mod Dev\\LEMAddonConverter\\input"; - String output = "C:\\Users\\antho\\Desktop\\Minecraft Mod Dev\\LEMAddonConverter\\output"; - for (LobbyMapData lobby : lobbyMaps) { - Path tempOut = Path.of(output).resolve(lobby.map); + Path input = FabricLoader.getInstance().getGameDir().resolve("addonconverter").resolve("lobby").resolve("input"); + Path dimensionTypes = FabricLoader.getInstance().getGameDir().resolve("addonconverter").resolve("lobby").resolve("dimension_types"); + Path output = FabricLoader.getInstance().getGameDir().resolve("addonconverter").resolve("lobby").resolve("output"); - FileHelper.createDir(tempOut); + FileHelper.createDir(input); + FileHelper.createDir(dimensionTypes); - LobbyMapAddon addon = new LobbyMapAddon(); - addon.addon_id = new Identifier("4jstudios", lobby.map); - addon.addon_type = LobbyMapAddon.TYPE; - addon.addon_pack = "base"; - addon.name_key = "lem.menu.host.config.update.lobby." + lobby.map; - addon.description_key = "lem.menu.host.config.update.lobby.desc." + lobby.map; - addon.authors = "4J Studios"; - addon.version = "1.0"; + try (Stream files = Files.walk(input, 1)) { + files.forEach(path -> { + try { + if (Files.isDirectory(path)) { + String fileName = path.getFileName().toString(); - addon.required_packs = new ResourcePackList(); - addon.required_packs.packs.add(new DummyPack(lobby.resourcepack)); + LobbyMapData lobby = null; - Path dir = Path.of(input).resolve(lobby.map); + for (LobbyMapData lobbyMapData : lobbyMaps) { + if (lobbyMapData.mapName.equals(fileName)) { + lobby = lobbyMapData; + break; + } + } + + if (lobby != null) { + Path tempOut = output.resolve(lobby.mapName); + + FileHelper.createDir(tempOut); + + LobbyMapAddon addon = new LobbyMapAddon(); + addon.addon_id = new Identifier("4jstudios", lobby.mapName); + addon.addon_type = LobbyMapAddon.TYPE; + addon.addon_pack = "base"; + addon.name_key = "lem.menu.host.config.update.lobby." + lobby.mapName; + addon.description_key = "lem.menu.host.config.update.lobby.desc." + lobby.mapName; + addon.authors = "4J Studios"; + addon.version = "1.0"; - FileHelper.copyDirectory(dir, tempOut.resolve("world").resolve("lobby")); + addon.required_packs = new ResourcePackList(); + addon.required_packs.packs.add(new DummyPack(lobby.resourcepack)); - HashMap> entities = getEntitesForMap(dir); + Path dir = input.resolve(lobby.mapName); - addon.spawn_coords = entities.get("LobbyTP").toArray(String[]::new); - addon.center_coords = entities.get("LobbyCenter").get(0); - addon.world_border_coords_1 = entities.get("BorderEntity").get(0); - addon.world_border_coords_2 = entities.get("BorderEntity").get(1); + FileHelper.copyDirectory(dir, tempOut.resolve("world").resolve("lobby")); - addon.winner_coords = lobby.winnercoords; + HashMap> entities = getEntitesForMap(dir); + + addon.spawn_coords = entities.get("LobbyTP").toArray(String[]::new); + addon.center_coords = entities.get("LobbyCenter").get(0); + addon.world_border_coords_1 = entities.get("BorderEntity").get(0); + addon.world_border_coords_2 = entities.get("BorderEntity").get(1); + + addon.winner_coords = lobby.winnercoords; - FileHelper.copyFile(Path.of(input).resolve("types").resolve(lobby.map + ".json"), tempOut.resolve("dimension_type.json")); + FileHelper.copyFile(dimensionTypes.resolve(lobby.mapName + ".json"), tempOut.resolve("dimension_type.json")); - String json = ServerUtilsMod.getGson().toJson(addon); - FileHelper.writeFile(tempOut.resolve("addon.json"), json); + String json = ServerUtilsMod.getGson().toJson(addon); + FileHelper.writeFile(tempOut.resolve("addon.json"), json); - FileHelper.zipDirectory(tempOut, Path.of(output).resolve(lobby.map + ".lemaddon")); - FileHelper.deleteDir(tempOut); + FileHelper.zipDirectory(tempOut, output.resolve(lobby.mapName + ".lemaddon")); + FileHelper.deleteDir(tempOut); + System.out.println("Converted: " + lobby.mapName); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + } catch (Exception e) { + e.printStackTrace(); } } public static void LEBModsConvert() { - String input = "C:\\Users\\antho\\Desktop\\Minecraft Mod Dev\\LEMAddonConverter\\input\\lebmods"; - String output = "C:\\Users\\antho\\Desktop\\Minecraft Mod Dev\\LEMAddonConverter\\output"; + Path input = FabricLoader.getInstance().getGameDir().resolve("addonconverter").resolve("lebmods").resolve("input"); + Path output = FabricLoader.getInstance().getGameDir().resolve("addonconverter").resolve("lebmods").resolve("output"); + + FileHelper.createDir(input); - try (Stream files = Files.walk(Path.of(input), 2)) { + try (Stream files = Files.walk(input, 2)) { files.forEach(path -> { try { if (!Files.isDirectory(path) && path.getFileName().toString().endsWith("config.json")) { @@ -178,7 +238,7 @@ public static void LEBModsConvert() { JsonObject rawConfig = ServerUtilsMod.getGson().fromJson(configJson, JsonObject.class); String mapname = rawConfig.get("name").getAsString(); - Path tempOut = Path.of(output).resolve(mapname); + Path tempOut = output.resolve(mapname); FileHelper.createDir(tempOut); @@ -206,12 +266,16 @@ public static void LEBModsConvert() { BattleMapAddon.MapSizeConfig config = new BattleMapAddon.MapSizeConfig(); config.center_coords = entities.get("MapCenter").get(0); - config.world_border_coords_1 = entities.get("BorderEntity").get(0); - config.world_border_coords_2 = entities.get("BorderEntity").get(1); config.center_spawn_coords = entities.get("CenterTP").toArray(String[]::new); config.random_spawn_coords = entities.get("RandomTP").toArray(String[]::new); config.chest_tracker_coords = entities.get("Chest").toArray(String[]::new); + List borders = entities.get("BorderEntity"); + if (borders != null && borders.size() >= 2) { + config.world_border_coords_1 = borders.get(0); + config.world_border_coords_2 = borders.get(1); + } + addon.setMapDataForSize(mapSize, config); } FileHelper.copyFile(path.getParent().resolve("world").resolve("dimension_type.json"), tempOut.resolve("dimension_type.json")); @@ -219,8 +283,9 @@ public static void LEBModsConvert() { String json = ServerUtilsMod.getGson().toJson(addon); FileHelper.writeFile(tempOut.resolve("addon.json"), json); - FileHelper.zipDirectory(tempOut, Path.of(output).resolve(addon.name + ".lemaddon")); + FileHelper.zipDirectory(tempOut, output.resolve(addon.name + ".lemaddon")); FileHelper.deleteDir(tempOut); + System.out.println("Converted: " + addon.name); } } catch (Exception e) { e.printStackTrace(); @@ -288,10 +353,10 @@ private static List readMCAFile(Path file) throws IOException { } } - public record BattleMapData(String map, String resourcepack, String mappack, String mappackkey) { + public record BattleMapData(String mapName, String resourcepack, String mappack, String mappackkey) { } - public record LobbyMapData(String map, String resourcepack, String winnercoords) { + public record LobbyMapData(String mapName, String resourcepack, String winnercoords) { }