package net.minecraftforge.common.network;
import java.util.Map;
import java.util.Set;
import org.apache.logging.log4j.Level;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.network.ByteBufUtils;
import io.netty.buffer.ByteBuf;
public abstract class ForgeMessage {
public static class DimensionRegisterMessage extends ForgeMessage {
/** The dimension ID to register on client */
int dimensionId;
/** The provider ID to register with dimension on client */
int providerId;
public DimensionRegisterMessage(){}
public DimensionRegisterMessage(int dimensionId, int providerId)
{
this.dimensionId = dimensionId;
this.providerId = providerId;
}
@Override
void toBytes(ByteBuf bytes)
{
bytes.writeInt(this.dimensionId);
bytes.writeInt(this.providerId);
}
@Override
void fromBytes(ByteBuf bytes)
{
dimensionId = bytes.readInt();
providerId = bytes.readInt();
}
}
public static class FluidIdMapMessage extends ForgeMessage {
BiMap<Fluid, Integer> fluidIds = HashBiMap.create();
Set<String> defaultFluids = Sets.newHashSet();
@Override
void toBytes(ByteBuf bytes)
{
Map<Fluid, Integer> ids = FluidRegistry.getRegisteredFluidIDsByFluid();
bytes.writeInt(ids.size());
for (Map.Entry<Fluid, Integer> entry : ids.entrySet())
{
ByteBufUtils.writeUTF8String(bytes,entry.getKey().getName());
bytes.writeInt(entry.getValue());
}
for (Map.Entry<Fluid, Integer> entry : ids.entrySet())
{
String defaultName = FluidRegistry.getDefaultFluidName(entry.getKey());
ByteBufUtils.writeUTF8String(bytes, defaultName);
}
}
@Override
void fromBytes(ByteBuf bytes)
{
int listSize = bytes.readInt();
for (int i = 0; i < listSize; i++) {
String fluidName = ByteBufUtils.readUTF8String(bytes);
int fluidId = bytes.readInt();
fluidIds.put(FluidRegistry.getFluid(fluidName), fluidId);
}
// do we have a defaults list?
if (bytes.isReadable())
{
for (int i = 0; i < listSize; i++)
{
defaultFluids.add(ByteBufUtils.readUTF8String(bytes));
}
}
else
{
FMLLog.getLogger().log(Level.INFO, "Legacy server message contains no default fluid list - there may be problems with fluids");
defaultFluids.clear();
}
}
}
abstract void toBytes(ByteBuf bytes);
abstract void fromBytes(ByteBuf bytes);
}