added serializers for fluids

This commit is contained in:
SpaceToad 2014-03-30 11:50:39 +02:00
parent c95d21255c
commit ab75f0c623
2 changed files with 58 additions and 0 deletions

View file

@ -24,6 +24,7 @@ import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
import buildcraft.core.network.NetworkData;
import buildcraft.core.utils.Utils;
@ -606,6 +607,7 @@ public class ClassMapping extends ClassSerializer {
registerSerializer(Item.class, new SerializerItem());
registerSerializer(NBTTagCompound.class, new SerializerNBT());
registerSerializer(ItemStack.class, new SerializerItemStack());
registerSerializer(FluidStack.class, new SerializerFluidStack());
registerSerializer(Integer.class, new SerializerInteger());
}
}

View file

@ -0,0 +1,56 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core.network.serializers;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
import buildcraft.core.utils.Utils;
public class SerializerFluidStack extends ClassSerializer {
@Override
public void write (ByteBuf data, Object o, SerializationContext context) {
FluidStack stack = (FluidStack) o;
if (stack == null) {
data.writeBoolean(false);
} else {
data.writeShort(stack.getFluid().getID());
data.writeInt(stack.amount);
if (stack.tag == null) {
data.writeBoolean(false);
} else {
data.writeBoolean(true);
Utils.writeNBT(data, stack.tag);
}
}
}
@Override
public Object read (ByteBuf data, Object o, SerializationContext context) {
if (!data.readBoolean()) {
return null;
} else {
int id = data.readShort();
int amount = data.readerIndex();
NBTTagCompound nbt = null;
if (data.readBoolean()) {
nbt = Utils.readNBT(data);
return new FluidStack(id, amount, nbt);
} else {
return new FluidStack(id, amount);
}
}
}
}