package com.pahimar.ee.network.message; import com.google.gson.JsonParseException; import com.pahimar.ee.api.blacklist.BlacklistRegistryProxy; import com.pahimar.ee.blacklist.BlacklistRegistry; import com.pahimar.ee.exchange.WrappedStack; import com.pahimar.ee.util.CompressionUtils; import com.pahimar.ee.util.LogHelper; import com.pahimar.ee.util.SerializationHelper; import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import java.util.Set; import static com.pahimar.ee.api.blacklist.BlacklistRegistryProxy.Blacklist; public class MessageSyncBlacklist implements IMessage { public Blacklist blacklist; public Set<WrappedStack> blacklistSet; public MessageSyncBlacklist() { } public MessageSyncBlacklist(Blacklist blacklist) { this.blacklist = blacklist; this.blacklistSet = BlacklistRegistryProxy.getBlacklist(blacklist); } @Override public void fromBytes(ByteBuf buf) { int blacklistOrdinal = buf.readInt(); if (blacklistOrdinal == 0) { blacklist = Blacklist.KNOWLEDGE; } else if (blacklistOrdinal == 1) { blacklist = Blacklist.EXCHANGE; } else { blacklist = null; } if (blacklist != null) { int compressedJsonLength = buf.readInt(); if (compressedJsonLength != 0) { byte[] compressedBlacklist = buf.readBytes(compressedJsonLength).array(); if (compressedBlacklist != null) { String jsonBlacklist = CompressionUtils.decompress(compressedBlacklist); try { blacklistSet = SerializationHelper.GSON.fromJson(jsonBlacklist, SerializationHelper.WRAPPED_STACK_SET_TYPE); } catch (JsonParseException e) { LogHelper.warn("Failed to receive {} blacklist data from server", blacklist); blacklistSet = null; } } else { blacklistSet = null; } } } else { blacklistSet = null; } } @Override public void toBytes(ByteBuf buf) { if (blacklist != null) { buf.writeInt(blacklist.ordinal()); if (blacklistSet != null) { byte[] compressedBlacklist = CompressionUtils.compress(SerializationHelper.GSON.toJson(blacklistSet, SerializationHelper.WRAPPED_STACK_SET_TYPE)); if (compressedBlacklist != null) { buf.writeInt(compressedBlacklist.length); buf.writeBytes(compressedBlacklist); } else { buf.writeInt(0); } } else { buf.writeInt(0); } } else { buf.writeInt(-1); } } public static class MessageHandler implements IMessageHandler<MessageSyncBlacklist, IMessage> { @Override public IMessage onMessage(MessageSyncBlacklist message, MessageContext ctx) { if (message.blacklist != null && message.blacklistSet != null) { BlacklistRegistry.INSTANCE.load(message.blacklistSet, message.blacklist); } return null; } } }