package de.take_weiland.mods.commons.internal.sync.builtin;
import de.take_weiland.mods.commons.net.MCDataInput;
import de.take_weiland.mods.commons.net.MCDataOutput;
import de.take_weiland.mods.commons.sync.Syncer;
import de.take_weiland.mods.commons.util.Fluids;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
/**
* @author diesieben07
*/
public enum FluidTankAndCapacitySyncer implements Syncer<FluidTank, FluidTankAndCapacitySyncer.Companion> {
INSTANCE;
@Override
public Class<Companion> getCompanionType() {
return Companion.class;
}
@Override
public boolean equal(FluidTank value, Companion companion) {
return companion != null
&& value != null
&& value.getCapacity() == companion.capacity
&& Fluids.identical(value.getFluid(), companion.stack);
}
@Override
public Companion writeAndUpdate(FluidTank value, Companion companion, MCDataOutput out) {
if (companion == null) {
companion = new Companion();
}
int cap = value.getCapacity();
FluidStack stack = value.getFluid();
out.writeVarInt(cap);
out.writeFluidStack(stack);
companion.capacity = cap;
companion.stack = Fluids.clone(stack);
return companion;
}
@Override
public FluidTank read(FluidTank value, Companion companion, MCDataInput in) {
int cap = in.readVarInt();
FluidStack stack = in.readFluidStack();
if (value != null) {
value.setCapacity(cap);
value.setFluid(stack);
}
return value;
}
public static final class Companion {
FluidStack stack;
int capacity;
}
}