package joshie.progression.network; import io.netty.buffer.ByteBuf; import joshie.progression.helpers.SplitHelper; import joshie.progression.json.DefaultSettings; import joshie.progression.json.JSONLoader; import joshie.progression.json.Options; import joshie.progression.network.core.PacketPart; import joshie.progression.network.core.PacketSyncStringArray; import net.minecraft.entity.player.EntityPlayer; import java.util.HashMap; import static joshie.progression.network.core.PacketPart.REQUEST_DATA; import static joshie.progression.network.core.PacketPart.SEND_DATA; @Packet public class PacketSyncJSONToServer extends PacketSyncStringArray { private static HashMap<Long, String[]> serverList = new HashMap(); private long timestamp; public PacketSyncJSONToServer() {} public PacketSyncJSONToServer(PacketPart part, long timestamp) { super(part); this.timestamp = timestamp; } public PacketSyncJSONToServer(PacketPart part, String text, int index, long timestamp) { super(part, text, index); this.timestamp = timestamp; } @Override public void toBytes(ByteBuf to) { to.writeLong(timestamp); super.toBytes(to); } @Override public void fromBytes(ByteBuf from) { timestamp = from.readLong(); super.fromBytes(from); } @Override public void receivedHashcode(EntityPlayer player) {} @Override public void receivedLengthRequest(EntityPlayer player) {} @Override public void receivedStringLength(EntityPlayer player) { if (Options.editor) { String[] server = new String[integer]; //Build up the string value from the name serverList.put(timestamp, server); //Create and place in hashmap PacketHandler.sendToClient(new PacketSyncJSONToServer(REQUEST_DATA, timestamp), player); } } @Override public void receivedDataRequest(EntityPlayer player) { //Grab the data and send it if (Options.editor) { String json = JSONLoader.getClientTabJsonData(); String[] client = SplitHelper.splitStringEvery(json, JSONLoader.MAX_LENGTH); for (int i = 0; i < client.length; i++) { PacketHandler.sendToServer(new PacketSyncJSONToServer(SEND_DATA, client[i], i, timestamp)); } } } @Override public void receivedData(EntityPlayer player) { if (serverList.get(timestamp) != null && serverList.get(timestamp).length > integer) { String[] server = serverList.get(timestamp); server[integer] = text; //Now check if any parts are null boolean all = true; for (String s : server) { if (s == null) all = false; } //Received all the data if (all) { StringBuilder builder = new StringBuilder(); for (String s : server) { builder.append(s); } String json = builder.toString(); DefaultSettings settings = JSONLoader.getGson().fromJson(json, DefaultSettings.class); JSONLoader.serverHashcode = (int) timestamp; //For resyncing purposes < and v JSONLoader.serverTabJsonData = SplitHelper.splitStringEvery(json, JSONLoader.MAX_LENGTH); //Now that we have saved the newer data, we should reload it all PacketReload.handle(settings, false); //Reload everything JSONLoader.saveData(false); //Save to the server serverList.remove(timestamp); //Reset } } } }