package com.minemaarten.signals.network; import io.netty.buffer.ByteBuf; import java.util.UUID; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; import com.minemaarten.signals.rail.network.mc.MCPos; import com.minemaarten.signals.rail.network.mc.MCTrain; import com.minemaarten.signals.rail.network.mc.MCTrainClient; import com.minemaarten.signals.rail.network.mc.RailNetworkManager; public class PacketAddOrUpdateTrain extends AbstractPacket<PacketAddOrUpdateTrain>{ private int trainID; private ImmutableSet<UUID> cartIDs; private ImmutableSet<MCPos> positions; public PacketAddOrUpdateTrain(){} public PacketAddOrUpdateTrain(MCTrain train){ this.trainID = train.id; this.cartIDs = train.cartIDs; this.positions = train.getPositions(); } @Override public void toBytes(ByteBuf b){ b.writeInt(trainID); b.writeInt(cartIDs.size()); PacketBuffer pb = new PacketBuffer(b); for(UUID cartID : cartIDs) { pb.writeUniqueId(cartID); } b.writeInt(positions.size()); for(MCPos pos : positions) { pos.writeToBuf(b); } } @Override public void fromBytes(ByteBuf b){ trainID = b.readInt(); int ids = b.readInt(); PacketBuffer pb = new PacketBuffer(b); Builder<UUID> cartIDs = new ImmutableSet.Builder<>(); for(int i = 0; i < ids; i++) { cartIDs.add(pb.readUniqueId()); } this.cartIDs = cartIDs.build(); int posCount = b.readInt(); Builder<MCPos> positions = new ImmutableSet.Builder<>(); for(int i = 0; i < posCount; i++) { positions.add(new MCPos(b)); } this.positions = positions.build(); } @Override public void handleClientSide(EntityPlayer player){ MCTrain train = new MCTrainClient(trainID, cartIDs); train.setPositions(null, null, positions); RailNetworkManager.getClientInstance().addTrain(train); } @Override public void handleServerSide(EntityPlayer player){ } }