Adds sync to renderstate (works in SMP), however, pipe-content sync is now broken, as are any gate interfaces for gates that you have not placed yourself. Also fixes autarchic gates being converted to non-autarchic gates.

This commit is contained in:
Krapht 2012-07-17 00:12:15 +02:00
parent 68a911f36a
commit 24e342abbc
11 changed files with 101 additions and 63 deletions

View file

@ -19,6 +19,7 @@ import net.minecraft.src.buildcraft.core.network.PacketPipeTransportContent;
import net.minecraft.src.buildcraft.core.network.PacketUpdate; import net.minecraft.src.buildcraft.core.network.PacketUpdate;
import net.minecraft.src.buildcraft.transport.CraftingGateInterface; import net.minecraft.src.buildcraft.transport.CraftingGateInterface;
import net.minecraft.src.buildcraft.transport.PipeLogicDiamond; import net.minecraft.src.buildcraft.transport.PipeLogicDiamond;
import net.minecraft.src.buildcraft.transport.PipeRenderState;
import net.minecraft.src.buildcraft.transport.PipeTransportItems; import net.minecraft.src.buildcraft.transport.PipeTransportItems;
import net.minecraft.src.buildcraft.transport.TileGenericPipe; import net.minecraft.src.buildcraft.transport.TileGenericPipe;
import net.minecraft.src.forge.IPacketHandler; import net.minecraft.src.forge.IPacketHandler;
@ -42,9 +43,12 @@ public class PacketHandler implements IPacketHandler {
onDiamondContents(packetN); onDiamondContents(packetN);
break; break;
case PacketIds.PIPE_DESCRIPTION: case PacketIds.PIPE_DESCRIPTION:
PacketPipeDescription packetU = new PacketPipeDescription(); PipeRenderStatePacket descPacket = new PipeRenderStatePacket();
packetU.readData(data); descPacket.readData(data);
onPipeDescription(packetU); onPipeDescription(descPacket);
// PacketPipeDescription packetU = new PacketPipeDescription();
// packetU.readData(data);
// onPipeDescription(packetU);
break; break;
case PacketIds.PIPE_CONTENTS: case PacketIds.PIPE_CONTENTS:
PacketPipeTransportContent packetC = new PacketPipeTransportContent(); PacketPipeTransportContent packetC = new PacketPipeTransportContent();
@ -116,20 +120,26 @@ public class PacketHandler implements IPacketHandler {
* Handles a pipe description packet. (Creates the pipe object client side * Handles a pipe description packet. (Creates the pipe object client side
* if needed.) * if needed.)
* *
* @param packet * @param descPacket
*/ */
private void onPipeDescription(PacketPipeDescription packet) { private void onPipeDescription(PipeRenderStatePacket descPacket) {
World world = ModLoader.getMinecraftInstance().theWorld; World world = ModLoader.getMinecraftInstance().theWorld;
if (!world.blockExists(packet.posX, packet.posY, packet.posZ)) if (!world.blockExists(descPacket.posX, descPacket.posY, descPacket.posZ))
return; return;
TileEntity entity = world.getBlockTileEntity(packet.posX, packet.posY, packet.posZ); TileEntity entity = world.getBlockTileEntity(descPacket.posX, descPacket.posY, descPacket.posZ);
if (!(entity instanceof ISynchronizedTile)) if (entity == null){
return;
// entity = new TileGenericPipeProxy();
// world.setBlockTileEntity(descPacket.posX, descPacket.posY, descPacket.posZ, entity);
}
if (!(entity instanceof TileGenericPipe))
return; return;
ISynchronizedTile tile = (ISynchronizedTile) entity; TileGenericPipe tile = (TileGenericPipe) entity;
tile.handleDescriptionPacket(packet); tile.handleDescriptionPacket(descPacket);
} }
/** /**

View file

@ -94,9 +94,9 @@ public class mod_BuildCraftTransport extends NetworkMod {
TileEntity tile = world.getBlockTileEntity(x, y, z); TileEntity tile = world.getBlockTileEntity(x, y, z);
if (tile instanceof TileGenericPipe){ if (tile instanceof IPipeRenderState){
TileGenericPipe pipeTile = (TileGenericPipe) tile; IPipeRenderState pipeTile = (IPipeRenderState) tile;
pipeWorldRenderer.renderPipe(renderer, world, block, ((IPipeRenderState)tile).getRenderState(), pipeTile.xCoord, pipeTile.yCoord, pipeTile.zCoord); pipeWorldRenderer.renderPipe(renderer, world, block, pipeTile.getRenderState(), x, y, z);
} }
// if (tile != null && tile instanceof IPipeTile && ((IPipeTile)tile).isInitialized()) { // if (tile != null && tile instanceof IPipeTile && ((IPipeTile)tile).isInitialized()) {
// pipeWorldRenderer.renderPipe(renderer, world, tile, block); // pipeWorldRenderer.renderPipe(renderer, world, tile, block);

View file

@ -16,6 +16,4 @@ public class PacketIds {
public static final int GATE_SELECTION_CHANGE = 44; public static final int GATE_SELECTION_CHANGE = 44;
public static final int GATE_TRIGGERS = 45; public static final int GATE_TRIGGERS = 45;
public static final int REFINERY_FILTER_SET = 50; public static final int REFINERY_FILTER_SET = 50;
public static final int PIPE_RENDER_STATE = 60;
} }

View file

@ -510,6 +510,7 @@ public class BlockGenericPipe extends BlockContainer implements ITextureProvider
} }
public static boolean placePipe(Pipe pipe, World world, int i, int j, int k, int blockId, int meta) { public static boolean placePipe(Pipe pipe, World world, int i, int j, int k, int blockId, int meta) {
if (world.isRemote) return true;
boolean placed = world.setBlockAndMetadataWithNotify(i, j, k, blockId, meta); boolean placed = world.setBlockAndMetadataWithNotify(i, j, k, blockId, meta);

View file

@ -20,6 +20,7 @@ public class EnergyPulser {
} }
public void update() { public void update() {
if (powerReceptor == null) return;
// Set current pulse speed // Set current pulse speed
pulseSpeed = getPulseSpeed(); pulseSpeed = getPulseSpeed();

View file

@ -118,9 +118,10 @@ public class GateVanilla extends Gate {
* @return * @return
*/ */
private boolean addEnergyPulser(Pipe pipe) { private boolean addEnergyPulser(Pipe pipe) {
if (!(pipe instanceof IPowerReceptor)) if (!(pipe instanceof IPowerReceptor)){
pulser = new EnergyPulser(null);
return false; return false;
}
pulser = new EnergyPulser((IPowerReceptor) pipe); pulser = new EnergyPulser((IPowerReceptor) pipe);
return true; return true;

View file

@ -88,16 +88,22 @@ public class PipeRenderState {
public void writeData(DataOutputStream data) throws IOException { public void writeData(DataOutputStream data) throws IOException {
data.writeUTF(textureFile); data.writeUTF(textureFile);
data.writeBoolean(hasGate);
data.writeInt(gateTextureIndex);
pipeConnectionMatrix.writeData(data); pipeConnectionMatrix.writeData(data);
textureMatrix.writeData(data); textureMatrix.writeData(data);
wireMatrix.writeData(data); wireMatrix.writeData(data);
facadeMatrix.writeData(data);
} }
public void readData(DataInputStream data) throws IOException { public void readData(DataInputStream data) throws IOException {
textureFile = data.readUTF(); textureFile = data.readUTF();
hasGate = data.readBoolean();
gateTextureIndex = data.readInt();
pipeConnectionMatrix.readData(data); pipeConnectionMatrix.readData(data);
textureMatrix.readData(data); textureMatrix.readData(data);
wireMatrix.readData(data); wireMatrix.readData(data);
facadeMatrix.readData(data);
} }
} }

View file

@ -42,17 +42,17 @@ import net.minecraft.src.buildcraft.core.IDropControlInventory;
import net.minecraft.src.buildcraft.core.ITileBufferHolder; import net.minecraft.src.buildcraft.core.ITileBufferHolder;
import net.minecraft.src.buildcraft.core.TileBuffer; import net.minecraft.src.buildcraft.core.TileBuffer;
import net.minecraft.src.buildcraft.core.Utils; import net.minecraft.src.buildcraft.core.Utils;
import net.minecraft.src.buildcraft.core.network.ISynchronizedTile;
import net.minecraft.src.buildcraft.core.network.IndexInPayload; import net.minecraft.src.buildcraft.core.network.IndexInPayload;
import net.minecraft.src.buildcraft.core.network.PacketPayload; import net.minecraft.src.buildcraft.core.network.PacketPayload;
import net.minecraft.src.buildcraft.core.network.PacketPipeDescription; import net.minecraft.src.buildcraft.core.network.PacketPipeDescription;
import net.minecraft.src.buildcraft.core.network.PacketTileUpdate; import net.minecraft.src.buildcraft.core.network.PacketTileUpdate;
import net.minecraft.src.buildcraft.core.network.PacketUpdate; import net.minecraft.src.buildcraft.core.network.PacketUpdate;
import net.minecraft.src.buildcraft.transport.network.PipeRenderStatePacket;
public class TileGenericPipe extends TileEntity implements IPowerReceptor, ILiquidContainer, IPipeEntry, public class TileGenericPipe extends TileEntity implements IPowerReceptor, ILiquidContainer, IPipeEntry,
IPipeTile, ISynchronizedTile, IOverrideDefaultTriggers, ITileBufferHolder, IPipeConnection, IDropControlInventory, IPipeRenderState { IPipeTile, IOverrideDefaultTriggers, ITileBufferHolder, IPipeConnection, IDropControlInventory, IPipeRenderState {
private final PipeRenderState renderState = new PipeRenderState(); private PipeRenderState renderState = new PipeRenderState();
public TileBuffer[] tileBuffer; public TileBuffer[] tileBuffer;
public boolean[] pipeConnectionsBuffer = new boolean[6]; public boolean[] pipeConnectionsBuffer = new boolean[6];
@ -357,57 +357,50 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ILiqu
return false; return false;
} }
/** public void handleDescriptionPacket(PipeRenderStatePacket packet) {
* Description packets and update packets are handled differently. They if (worldObj.isRemote){
* should be unified. if (pipe == null && packet.getPipeId() != 0){
*/ initialize(BlockGenericPipe.createPipe(packet.getPipeId()));
@Override
public void handleDescriptionPacket(PacketUpdate packet) {
if (pipe == null && packet.payload.intPayload[0] != 0) {
initialize(BlockGenericPipe.createPipe(packet.payload.intPayload[0]));
// Check for wire information
pipe.handleWirePayload(packet.payload, new IndexInPayload(1, 0, 0));
// Check for gate information
if (packet.payload.intPayload.length > 5)
pipe.handleGatePayload(packet.payload, new IndexInPayload(5, 0, 0));
} }
renderState = packet.getRenderState();
worldObj.markBlockAsNeedsUpdate(xCoord, yCoord, zCoord);
} }
@Override
return;
// if (pipe == null && packet.payload.intPayload[0] != 0) {
//
// initialize(BlockGenericPipe.createPipe(packet.payload.intPayload[0]));
//
// // Check for wire information
// pipe.handleWirePayload(packet.payload, new IndexInPayload(1, 0, 0));
// // Check for gate information
// if (packet.payload.intPayload.length > 5)
// pipe.handleGatePayload(packet.payload, new IndexInPayload(5, 0, 0));
// }
}
//@Override
public void handleUpdatePacket(PacketUpdate packet) { public void handleUpdatePacket(PacketUpdate packet) {
if (BlockGenericPipe.isValid(pipe)) if (BlockGenericPipe.isValid(pipe))
pipe.handlePacket(packet); pipe.handlePacket(packet);
} }
@Override //@Override
public void postPacketHandling(PacketUpdate packet) {}
@Override
public Packet getUpdatePacket() { public Packet getUpdatePacket() {
return new PacketTileUpdate(this).getPacket(); return null;
//return new PacketTileUpdate(this).getPacket();
} }
@Override
public Packet getDescriptionPacket() { public Packet getDescriptionPacket() {
bindPipe(); bindPipe();
PipeRenderStatePacket packet = new PipeRenderStatePacket(this.renderState, this.pipeId, xCoord, yCoord, zCoord);
PacketPipeDescription packet;
if (pipe != null)
packet = new PacketPipeDescription(xCoord, yCoord, zCoord, pipe);
else
packet = new PacketPipeDescription(xCoord, yCoord, zCoord, null);
return packet.getPacket(); return packet.getPacket();
} }
@Override
public PacketPayload getPacketPayload() {
return pipe.getNetworkPacket();
}
@Override @Override
public int powerRequest() { public int powerRequest() {
return getPowerProvider().maxEnergyReceived; return getPowerProvider().maxEnergyReceived;
@ -535,7 +528,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ILiqu
this.facadeBlocks[direction.ordinal()] = blockid; this.facadeBlocks[direction.ordinal()] = blockid;
this.facadeMeta[direction.ordinal()] = meta; this.facadeMeta[direction.ordinal()] = meta;
refreshRenderState(); scheduleRenderUpdate();
//refreshRenderState();
return true; return true;
} }
@ -550,7 +544,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ILiqu
Utils.dropItems(worldObj, new ItemStack(BuildCraftTransport.facadeItem, 1, ItemFacade.encode(this.facadeBlocks[direction.ordinal()], this.facadeMeta[direction.ordinal()])), this.xCoord, this.yCoord, this.zCoord); Utils.dropItems(worldObj, new ItemStack(BuildCraftTransport.facadeItem, 1, ItemFacade.encode(this.facadeBlocks[direction.ordinal()], this.facadeMeta[direction.ordinal()])), this.xCoord, this.yCoord, this.zCoord);
this.facadeBlocks[direction.ordinal()] = 0; this.facadeBlocks[direction.ordinal()] = 0;
this.facadeMeta[direction.ordinal()] = 0; this.facadeMeta[direction.ordinal()] = 0;
refreshRenderState(); scheduleRenderUpdate();
//refreshRenderState();
} }
/** IPipeRenderState implementation **/ /** IPipeRenderState implementation **/

View file

@ -11,26 +11,50 @@ import net.minecraft.src.buildcraft.transport.PipeRenderState;
public class PipeRenderStatePacket extends PacketCoordinates { public class PipeRenderStatePacket extends PacketCoordinates {
private PipeRenderState renderState; private PipeRenderState renderState;
public int pipeId;
public PipeRenderStatePacket(PipeRenderState renderState, int x, int y, int z) {
super(PacketIds.PIPE_RENDER_STATE, x, y, z); public PipeRenderStatePacket(){
}
public PipeRenderStatePacket(PipeRenderState renderState, int pipeId, int x, int y, int z) {
super(PacketIds.PIPE_DESCRIPTION, x, y, z);
this.pipeId = pipeId;
this.isChunkDataPacket = true;
this.renderState = renderState; this.renderState = renderState;
} }
public PipeRenderState getRenderState(){
return this.renderState;
}
@Override @Override
public void writeData(DataOutputStream data) throws IOException { public void writeData(DataOutputStream data) throws IOException {
super.writeData(data);
data.writeInt(pipeId);
renderState.writeData(data); renderState.writeData(data);
} }
@Override @Override
public void readData(DataInputStream data) throws IOException { public void readData(DataInputStream data) throws IOException {
super.readData(data);
pipeId = data.readInt();
renderState = new PipeRenderState();
renderState.readData(data); renderState.readData(data);
} }
@Override @Override
public int getID() { public int getID() {
return PacketIds.PIPE_RENDER_STATE; return PacketIds.PIPE_DESCRIPTION;
}
public void setPipeId(int pipeId){
this.pipeId = pipeId;
}
public int getPipeId() {
return pipeId;
} }
} }

View file

@ -32,13 +32,13 @@ public class TextureMatrix {
} }
public void writeData(DataOutputStream data) throws IOException { public void writeData(DataOutputStream data) throws IOException {
for(int i = 0; i < Orientations.dirs().length; i++){ for(int i = 0; i < Orientations.values().length; i++){
data.writeInt(_textureIndexes[i]); data.writeInt(_textureIndexes[i]);
} }
} }
public void readData(DataInputStream data) throws IOException { public void readData(DataInputStream data) throws IOException {
for (int i = 0; i < Orientations.dirs().length; i++){ for (int i = 0; i < Orientations.values().length; i++){
_textureIndexes[i] = data.readInt(); _textureIndexes[i] = data.readInt();
} }
} }

View file

@ -71,6 +71,7 @@ public class WireMatrix {
for (int i = 0; i < IPipe.WireColor.values().length; i++){ for (int i = 0; i < IPipe.WireColor.values().length; i++){
data.writeBoolean(_hasWire[i]); data.writeBoolean(_hasWire[i]);
_wires[i].writeData(data); _wires[i].writeData(data);
data.writeInt(_wireTextureIndex[i]);
} }
} }
@ -78,6 +79,7 @@ public class WireMatrix {
for (int i = 0; i < IPipe.WireColor.values().length; i++){ for (int i = 0; i < IPipe.WireColor.values().length; i++){
_hasWire[i] = data.readBoolean(); _hasWire[i] = data.readBoolean();
_wires[i].readData(data); _wires[i].readData(data);
_wireTextureIndex[i] = data.readInt();
} }
} }
} }