diff --git a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java index 0d85f35..d5b310c 100644 --- a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java +++ b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java @@ -1,7 +1,11 @@ package net.pietru.cookie_utils.api; import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.utils.Json; +import com.badlogic.gdx.utils.JsonWriter; import finalforeach.cosmicreach.GameSingletons; +import finalforeach.cosmicreach.ZoneLoader; +import finalforeach.cosmicreach.ZoneLoaders; import finalforeach.cosmicreach.accounts.Account; import finalforeach.cosmicreach.entities.player.Player; import finalforeach.cosmicreach.io.SaveLocation; @@ -9,6 +13,7 @@ import finalforeach.cosmicreach.networking.NetworkIdentity; import finalforeach.cosmicreach.networking.packets.MessagePacket; import finalforeach.cosmicreach.networking.server.ServerSingletons; import finalforeach.cosmicreach.savelib.utils.TriConsumer; +import finalforeach.cosmicreach.world.IZoneLoader; import finalforeach.cosmicreach.world.Zone; import finalforeach.cosmicreach.worldgen.ZoneGenerator; import io.netty.channel.ChannelHandlerContext; @@ -16,7 +21,9 @@ import net.pietru.cookie_utils.permissions.GroupPerms; import net.pietru.cookie_utils.permissions.Permissions; import net.pietru.cookie_utils.setups.Setup; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.*; @@ -345,5 +352,31 @@ public class TextCommands { MessagePacket packet = new MessagePacket("Reloaded: "+reloaded_funcs); packet.setupAndSend(channelHandlerContext); }); + + commands.put("dump",(args, networkIdentity, channelHandlerContext) -> { + File dumps_folder = new File(SaveLocation.getSaveFolder(),"dumps"); + if (!dumps_folder.exists()) + dumps_folder.mkdirs(); + List arg_list = Arrays.stream(args).toList(); + String reloaded_funcs = ""; + if (arg_list.contains("zones") || args.length==1) { + int i = 0; + for(IZoneLoader z : ZoneLoaders.INSTANCE.getAllZoneLoaders()) { + File dump_file = new File(get_path_string(SaveLocation.getSaveFolder().getPath(), "dumps", "zone_"+String.valueOf(i++)+".json")); + try { + Json json = new Json(); + json.setOutputType(JsonWriter.OutputType.json); + BufferedWriter writer = new BufferedWriter(new FileWriter(dump_file.getPath())); + writer.write(json.prettyPrint(z)); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + reloaded_funcs+="zones "; + } + MessagePacket packet = new MessagePacket("Dumped: "+reloaded_funcs); + packet.setupAndSend(channelHandlerContext); + }); } } diff --git a/src/main/java/net/pietru/cookie_utils/mixins/MessagePacketMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/MessagePacketMixin.java index debb118..de6ada9 100644 --- a/src/main/java/net/pietru/cookie_utils/mixins/MessagePacketMixin.java +++ b/src/main/java/net/pietru/cookie_utils/mixins/MessagePacketMixin.java @@ -72,6 +72,6 @@ public class MessagePacketMixin { } } } - message=message.replace("\n",""); + //message=message.replace("\n",""); } } diff --git a/src/main/java/net/pietru/cookie_utils/mixins/ZoneLoaderMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/ZoneLoaderMixin.java new file mode 100644 index 0000000..ad29fa3 --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/mixins/ZoneLoaderMixin.java @@ -0,0 +1,19 @@ +package net.pietru.cookie_utils.mixins; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Queue; +import finalforeach.cosmicreach.ZoneLoader; +import finalforeach.cosmicreach.util.Point3DMap; +import finalforeach.cosmicreach.worldgen.ChunkColumn; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ZoneLoader.class) +public class ZoneLoaderMixin { + @Shadow + public Point3DMap loadedChunkColumns = new Point3DMap(); + @Shadow + public Queue chunkColumnsToGenerate = new Queue(16, ChunkColumn.class); + @Shadow + public Array chunkColumnsToRemove = new Array(false, 16, ChunkColumn.class); +}