Package buildcraft.core.network

Source Code of buildcraft.core.network.PacketTileState$StateWithId

/**
* 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;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

public class PacketTileState extends PacketCoordinates {

  private ByteBuf state;

  private class StateWithId {
    public byte stateId;
    public IClientState state;

    public StateWithId(byte stateId, IClientState state) {
      this.stateId = stateId;
      this.state = state;
    }
  }

  private List<StateWithId> stateList = new LinkedList<StateWithId>();

  /**
   * Default constructor for incoming packets
   */
  public PacketTileState() {
  }

  /**
   * Constructor for outgoing packets
   *
   * @param x
   *            , y, z - the coordinates the tile to sync
   */
  public PacketTileState(int x, int y, int z) {
    super(PacketIds.STATE_UPDATE, x, y, z);
    isChunkDataPacket = true;
  }

  @Override
  public int getID() {
    return PacketIds.STATE_UPDATE;
  }

  public void applyStates(ISyncedTile tile) throws IOException {
    byte stateCount = state.readByte();
    for (int i = 0; i < stateCount; i++) {
      byte stateId = state.readByte();
      tile.getStateInstance(stateId).readData(state);
      tile.afterStateUpdated(stateId);
    }
  }

  public void addStateForSerialization(byte stateId, IClientState state) {
    stateList.add(new StateWithId(stateId, state));
  }

  @Override
  public void writeData(ByteBuf data) {
    super.writeData(data);

    ByteBuf tmpState = Unpooled.buffer();

    tmpState.writeByte(stateList.size());
    for (StateWithId stateWithId : stateList) {
      tmpState.writeByte(stateWithId.stateId);
      stateWithId.state.writeData(tmpState);
    }

    data.writeShort((short) tmpState.readableBytes());
    data.writeBytes(tmpState.readBytes(tmpState.readableBytes()));
  }

  @Override
  public void readData(ByteBuf data) {
    super.readData(data);

    state = Unpooled.buffer();
    int length = data.readUnsignedShort();
    state.writeBytes(data.readBytes(length));
  }
}
TOP

Related Classes of buildcraft.core.network.PacketTileState$StateWithId

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.