Posted July 10, 20223 yr Hello together, I want to save custom data in JSON format in the world's data folder. How can I retrieve the path to it? Thanks for your help!
July 10, 20223 yr Author Ok thank you. Would I still be able to get the data in a screen container class?
July 10, 20223 yr Author Ok I will figure it out when my attempt now is not working. Right now I am trying to send a CompoundNBT from the server to client. My class looks like that: Spoiler public class SCPacketSendServerData { private final Server server; public SCPacketSendServerData(PacketBuffer buf){ System.out.println("1"); System.out.println(buf.readCompoundTag().getCompound("db")); //Null for some reason System.out.println(buf.readString()); // TEST is printed } public SCPacketSendServerData(Server server){ this.server = server; } public void toBytes(PacketBuffer buf){ System.out.println("2"); buf.writeCompoundTag(server.getData().getCompound("db")); //Normal object with all its contents buf.writeString("TEST") } } As you can see I am writing my compound tag in toBytes. The tag is not null - I can get all the contents of the Server class. But in my constructor the compount tag is null. If I use a string instead it works fine. Can you find my mistake?
July 10, 20223 yr Author Ok, I changed my class to: Spoiler package de.j3ramy.economy.network; import de.j3ramy.economy.screen.ServerScreen; import de.j3ramy.economy.utils.Server; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screen.Screen; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Supplier; public class SCPacketSendServerData { private final Server server; public SCPacketSendServerData(PacketBuffer buf){ System.out.println("1"); System.out.println(buf.readCompoundTag()); //null } public SCPacketSendServerData(Server server){ this.server = server; } public void toBytes(PacketBuffer buf){ System.out.println("2"); System.out.println(server.getData().getCompound("db")); //all good buf.writeCompoundTag(server.getData().getCompound("db")); System.out.println(buf.readCompoundTag()); // ERROR: Caused by: java.io.IOException: Root tag must be a named compound tag } public void handle(Supplier<NetworkEvent.Context> ctx){ ctx.get().enqueueWork(() ->{ System.out.println("3"); }); ctx.get().setPacketHandled(true); } } As you can see this error gets created when I try to print it after I saved it. And I don't really know what this error means, because the tag has a name ("db")
July 10, 20223 yr Author Ah okay this was actually just for debug purpose. But good to know. So, in there data not set yet, because it gets set there. Am I right? But I don't get it why it's still null in the constructor EDIT: It works now for some reason. Another question: Is there a limit in how many content an nbt tag can save? E. g. can I add thousands of strings? Or is the limit actually the space on the hard disk? Edited July 10, 20223 yr by J3ramy
July 10, 20223 yr There are some "hidden" limits which you might hit. e.g. StringTag.write() uses DataOutput.writeUTF() which has this in its javadoc Quote First, * the total number of bytes needed to represent * all the characters of {@code s} is * calculated. If this number is larger than * {@code 65535}, then a {@code UTFDataFormatException} * is thrown. Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.