diff --git a/api/buildcraft/api/core/INBTStoreable.java b/api/buildcraft/api/core/INBTStoreable.java new file mode 100644 index 00000000..669eed33 --- /dev/null +++ b/api/buildcraft/api/core/INBTStoreable.java @@ -0,0 +1,8 @@ +package buildcraft.api.core; + +import net.minecraft.nbt.NBTTagCompound; + +public interface INBTStoreable { + void readFromNBT(NBTTagCompound tag); + void writeToNBT(NBTTagCompound tag); +} diff --git a/api/buildcraft/api/core/ISerializable.java b/api/buildcraft/api/core/ISerializable.java index 9875e341..b8a11e8d 100644 --- a/api/buildcraft/api/core/ISerializable.java +++ b/api/buildcraft/api/core/ISerializable.java @@ -2,15 +2,29 @@ * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com * - * The BuildCraft API is distributed under the terms of the MIT License. - * Please check the contents of the license, which should be located - * as "LICENSE.API" in the BuildCraft source code distribution. + * 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.api.core; import io.netty.buffer.ByteBuf; +/** + * Implemented by classes representing serializable packet state + */ public interface ISerializable { - void readData(ByteBuf stream); - void writeData(ByteBuf stream); + /** + * Serializes the state to the stream + * + * @param data + */ + void writeData(ByteBuf data); + + /** + * Deserializes the state from the stream + * + * @param data + */ + void readData(ByteBuf data); } diff --git a/api/buildcraft/api/core/package-info.java b/api/buildcraft/api/core/package-info.java index 6f20ca4f..afe844cb 100644 --- a/api/buildcraft/api/core/package-info.java +++ b/api/buildcraft/api/core/package-info.java @@ -6,6 +6,6 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -@API(apiVersion = "1.3", owner = "BuildCraft|Core", provides = "BuildCraftAPI|core") +@API(apiVersion = "1.4", owner = "BuildCraft|Core", provides = "BuildCraftAPI|core") package buildcraft.api.core; import cpw.mods.fml.common.API; diff --git a/common/buildcraft/transport/render/ICullable.java b/api/buildcraft/api/core/render/ICullable.java similarity index 96% rename from common/buildcraft/transport/render/ICullable.java rename to api/buildcraft/api/core/render/ICullable.java index 770000a1..b6e06747 100644 --- a/common/buildcraft/transport/render/ICullable.java +++ b/api/buildcraft/api/core/render/ICullable.java @@ -6,7 +6,7 @@ * 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.transport.render; +package buildcraft.api.core.render; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; diff --git a/common/buildcraft/transport/render/ITextureStates.java b/api/buildcraft/api/core/render/ITextureStates.java similarity index 85% rename from common/buildcraft/transport/render/ITextureStates.java rename to api/buildcraft/api/core/render/ITextureStates.java index 2063ed77..2499684b 100644 --- a/common/buildcraft/transport/render/ITextureStates.java +++ b/api/buildcraft/api/core/render/ITextureStates.java @@ -6,10 +6,11 @@ * 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.transport.render; +package buildcraft.api.core.render; import net.minecraft.block.Block; import net.minecraft.util.IIcon; +import buildcraft.transport.render.TextureStateManager; public interface ITextureStates extends ICullable { diff --git a/api/buildcraft/api/gates/IGate.java b/api/buildcraft/api/gates/IGate.java index 2d173833..45e7ef15 100644 --- a/api/buildcraft/api/gates/IGate.java +++ b/api/buildcraft/api/gates/IGate.java @@ -10,7 +10,7 @@ package buildcraft.api.gates; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IPipe; +import buildcraft.api.pipes.IPipe; public interface IGate { @Deprecated diff --git a/api/buildcraft/api/transport/IPipe.java b/api/buildcraft/api/pipes/IPipe.java similarity index 86% rename from api/buildcraft/api/transport/IPipe.java rename to api/buildcraft/api/pipes/IPipe.java index 1080db8a..83d0c7e0 100755 --- a/api/buildcraft/api/transport/IPipe.java +++ b/api/buildcraft/api/pipes/IPipe.java @@ -6,20 +6,13 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.gates.IGate; public interface IPipe { - - int x(); - - int y(); - - int z(); - - IPipeTile getTile(); + IPipeContainer getTile(); IGate getGate(ForgeDirection side); diff --git a/api/buildcraft/api/transport/IPipeConnection.java b/api/buildcraft/api/pipes/IPipeConnection.java similarity index 89% rename from api/buildcraft/api/transport/IPipeConnection.java rename to api/buildcraft/api/pipes/IPipeConnection.java index 4cac6a84..b89d2732 100644 --- a/api/buildcraft/api/transport/IPipeConnection.java +++ b/api/buildcraft/api/pipes/IPipeConnection.java @@ -6,11 +6,11 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; public interface IPipeConnection { diff --git a/api/buildcraft/api/pipes/IPipeContainer.java b/api/buildcraft/api/pipes/IPipeContainer.java new file mode 100644 index 00000000..bba1b103 --- /dev/null +++ b/api/buildcraft/api/pipes/IPipeContainer.java @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * The BuildCraft API is distributed under the terms of the MIT License. + * Please check the contents of the license, which should be located + * as "LICENSE.API" in the BuildCraft source code distribution. + */ +package buildcraft.api.pipes; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.EnumColor; +import buildcraft.api.transport.IInjectable; + +public interface IPipeContainer extends IInjectable { + + public enum PipeType { + + ITEM, FLUID, POWER, STRUCTURE + } + + PipeType getPipeType(); + + World getWorldObj(); + + int x(); + + int y(); + + int z(); + + /** + * True if the pipe is connected to the block/pipe in the specific direction + * + * @param with + * @return true if connect + */ + boolean isPipeConnected(ForgeDirection with); + + Block getNeighborBlock(ForgeDirection dir); + TileEntity getNeighborTile(ForgeDirection dir); + IPipe getNeighborPipe(ForgeDirection dir); + + IPipe getPipe(); +} diff --git a/api/buildcraft/api/pipes/IPipePluggable.java b/api/buildcraft/api/pipes/IPipePluggable.java new file mode 100755 index 00000000..09597fb2 --- /dev/null +++ b/api/buildcraft/api/pipes/IPipePluggable.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * The BuildCraft API is distributed under the terms of the MIT License. + * Please check the contents of the license, which should be located + * as "LICENSE.API" in the BuildCraft source code distribution. + */ +package buildcraft.api.pipes; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.INBTStoreable; +import buildcraft.api.core.ISerializable; + +/** + * An IPipePluggable MUST have an empty constructor for client-side + * rendering! + */ +public interface IPipePluggable extends INBTStoreable, ISerializable { + ItemStack[] getDropItems(IPipeContainer pipe); + + void onAttachedPipe(IPipeContainer pipe, ForgeDirection direction); + + void onDetachedPipe(IPipeContainer pipe, ForgeDirection direction); + + boolean isBlocking(IPipeContainer pipe, ForgeDirection direction); + + void invalidate(); + + void validate(IPipeContainer pipe, ForgeDirection direction); + + AxisAlignedBB getBoundingBox(ForgeDirection side); + + @SideOnly(Side.CLIENT) + IPipePluggableRenderer getRenderer(); +} diff --git a/api/buildcraft/api/pipes/IPipePluggableRenderer.java b/api/buildcraft/api/pipes/IPipePluggableRenderer.java new file mode 100644 index 00000000..d48ee799 --- /dev/null +++ b/api/buildcraft/api/pipes/IPipePluggableRenderer.java @@ -0,0 +1,11 @@ +package buildcraft.api.pipes; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.render.ITextureStates; + +public interface IPipePluggableRenderer { + void renderPluggable(RenderBlocks renderblocks, IPipe pipe, ForgeDirection side, + IPipePluggable pipePluggable, ITextureStates blockStateMachine, + int x, int y, int z); +} diff --git a/api/buildcraft/api/transport/IStripesHandler.java b/api/buildcraft/api/pipes/IStripesHandler.java similarity index 95% rename from api/buildcraft/api/transport/IStripesHandler.java rename to api/buildcraft/api/pipes/IStripesHandler.java index 8ad66dfe..dab27610 100644 --- a/api/buildcraft/api/transport/IStripesHandler.java +++ b/api/buildcraft/api/pipes/IStripesHandler.java @@ -6,7 +6,7 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/api/buildcraft/api/transport/IStripesPipe.java b/api/buildcraft/api/pipes/IStripesPipe.java similarity index 94% rename from api/buildcraft/api/transport/IStripesPipe.java rename to api/buildcraft/api/pipes/IStripesPipe.java index f2159bf4..04848898 100644 --- a/api/buildcraft/api/transport/IStripesPipe.java +++ b/api/buildcraft/api/pipes/IStripesPipe.java @@ -6,7 +6,7 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; diff --git a/api/buildcraft/api/transport/PipeManager.java b/api/buildcraft/api/pipes/PipeManager.java similarity index 58% rename from api/buildcraft/api/transport/PipeManager.java rename to api/buildcraft/api/pipes/PipeManager.java index 14a2b53f..8f388c44 100755 --- a/api/buildcraft/api/transport/PipeManager.java +++ b/api/buildcraft/api/pipes/PipeManager.java @@ -6,17 +6,25 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import net.minecraft.world.World; +import buildcraft.api.transport.IExtractionHandler; public abstract class PipeManager { public static List stripesHandlers = new ArrayList(); public static List extractionHandlers = new ArrayList(); + public static ArrayList> pipePluggables = new ArrayList>(); + private static Map> pipePluggableNames = + new HashMap>(); + private static Map, String> pipePluggableByNames = + new HashMap, String>(); public static void registerExtractionHandler(IExtractionHandler handler) { extractionHandlers.add(handler); @@ -26,6 +34,12 @@ public abstract class PipeManager { stripesHandlers.add(handler); } + public static void registerPipePluggable(Class pluggable, String name) { + pipePluggables.add(pluggable); + pipePluggableNames.put(name, pluggable); + pipePluggableByNames.put(pluggable, name); + } + /** * param extractor can be null */ @@ -51,4 +65,12 @@ public abstract class PipeManager { return true; } + + public static Class getPluggableByName(String pluggableName) { + return pipePluggableNames.get(pluggableName); + } + + public static String getPluggableName(Class aClass) { + return pipePluggableByNames.get(aClass); + } } diff --git a/api/buildcraft/api/transport/PipeWire.java b/api/buildcraft/api/pipes/PipeWire.java similarity index 97% rename from api/buildcraft/api/transport/PipeWire.java rename to api/buildcraft/api/pipes/PipeWire.java index 6f2fd504..7c2edbeb 100644 --- a/api/buildcraft/api/transport/PipeWire.java +++ b/api/buildcraft/api/pipes/PipeWire.java @@ -6,7 +6,7 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -package buildcraft.api.transport; +package buildcraft.api.pipes; import java.util.Locale; diff --git a/api/buildcraft/api/pipes/package-info.java b/api/buildcraft/api/pipes/package-info.java new file mode 100644 index 00000000..d7b692f2 --- /dev/null +++ b/api/buildcraft/api/pipes/package-info.java @@ -0,0 +1,3 @@ +@API(apiVersion = "1.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|pipes") +package buildcraft.api.pipes; +import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/api/buildcraft/api/power/IRedstoneEngineReceiver.java b/api/buildcraft/api/power/IRedstoneEngineReceiver.java new file mode 100644 index 00000000..81e3fc7a --- /dev/null +++ b/api/buildcraft/api/power/IRedstoneEngineReceiver.java @@ -0,0 +1,22 @@ +package buildcraft.api.power; + +import net.minecraftforge.common.util.ForgeDirection; +import cofh.api.energy.IEnergyConnection; +import cofh.api.energy.IEnergyReceiver; + +/** + * Implement this on tiles that you wish to be able to receive Redstone Engine + * (low-power) energy. + * + * Please do not implement it on batteries, pipes or machines which can have + * their energy extracted from. That could lead to exploits and abuse. + */ +public interface IRedstoneEngineReceiver extends IEnergyReceiver { + /** + * This function is queried on every attempt to receive energy from a + * redstone engine as well. + * @param side + * @return + */ + boolean canConnectRedstoneEngine(ForgeDirection side); +} diff --git a/api/buildcraft/api/power/package-info.java b/api/buildcraft/api/power/package-info.java index 34ed47c5..f9f5d1f0 100644 --- a/api/buildcraft/api/power/package-info.java +++ b/api/buildcraft/api/power/package-info.java @@ -6,6 +6,6 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -@API(apiVersion = "1.2", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|power") +@API(apiVersion = "1.3", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|power") package buildcraft.api.power; import cpw.mods.fml.common.API; diff --git a/api/buildcraft/api/transport/IPipeTile.java b/api/buildcraft/api/transport/IInjectable.java similarity index 56% rename from api/buildcraft/api/transport/IPipeTile.java rename to api/buildcraft/api/transport/IInjectable.java index 4bdc8c25..6e55cd24 100644 --- a/api/buildcraft/api/transport/IPipeTile.java +++ b/api/buildcraft/api/transport/IInjectable.java @@ -1,27 +1,10 @@ -/** - * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team - * http://www.mod-buildcraft.com - * - * The BuildCraft API is distributed under the terms of the MIT License. - * Please check the contents of the license, which should be located - * as "LICENSE.API" in the BuildCraft source code distribution. - */ package buildcraft.api.transport; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.core.EnumColor; -public interface IPipeTile { - - public enum PipeType { - - ITEM, FLUID, POWER, STRUCTURE - } - - PipeType getPipeType(); - +public interface IInjectable { /** * Offers an ItemStack for addition to the pipe. Will be rejected if the * pipe doesn't accept items from that side. @@ -41,16 +24,4 @@ public interface IPipeTile { * but with no color attribute. */ int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from); - - /** - * True if the pipe is connected to the block/pipe in the specific direction - * - * @param with - * @return true if connect - */ - boolean isPipeConnected(ForgeDirection with); - - TileEntity getAdjacentTile(ForgeDirection dir); - - IPipe getPipe(); } diff --git a/api/buildcraft/api/transport/IPipePluggable.java b/api/buildcraft/api/transport/IPipePluggable.java deleted file mode 100755 index 41ba3c6f..00000000 --- a/api/buildcraft/api/transport/IPipePluggable.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team - * http://www.mod-buildcraft.com - * - * The BuildCraft API is distributed under the terms of the MIT License. - * Please check the contents of the license, which should be located - * as "LICENSE.API" in the BuildCraft source code distribution. - */ -package buildcraft.api.transport; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import net.minecraftforge.common.util.ForgeDirection; - -public interface IPipePluggable { - void writeToNBT(NBTTagCompound nbt); - - void readFromNBT(NBTTagCompound nbt); - - ItemStack[] getDropItems(IPipeTile pipe); - - void onAttachedPipe(IPipeTile pipe, ForgeDirection direction); - - void onDetachedPipe(IPipeTile pipe, ForgeDirection direction); - - boolean blocking(IPipeTile pipe, ForgeDirection direction); - - void invalidate(); - - void validate(IPipeTile pipe, ForgeDirection direction); -} diff --git a/api/buildcraft/api/transport/package-info.java b/api/buildcraft/api/transport/package-info.java index e75566ef..77d44059 100644 --- a/api/buildcraft/api/transport/package-info.java +++ b/api/buildcraft/api/transport/package-info.java @@ -6,7 +6,7 @@ * Please check the contents of the license, which should be located * as "LICENSE.API" in the BuildCraft source code distribution. */ -@API(apiVersion = "2.1", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|transport") +@API(apiVersion = "3.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|transport") package buildcraft.api.transport; import cpw.mods.fml.common.API; diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index 66c12257..2f7ec1e5 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -43,8 +43,8 @@ import buildcraft.api.statements.IActionInternal; import buildcraft.api.statements.ITriggerInternal; import buildcraft.api.statements.StatementManager; import buildcraft.api.transport.IExtractionHandler; -import buildcraft.api.transport.PipeManager; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeManager; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.DefaultProps; import buildcraft.core.InterModComms; @@ -56,6 +56,7 @@ import buildcraft.core.proxy.CoreProxy; import buildcraft.silicon.ItemRedstoneChipset.Chipset; import buildcraft.transport.BlockFilteredBuffer; import buildcraft.transport.BlockGenericPipe; +import buildcraft.transport.FacadePluggable; import buildcraft.transport.GuiHandler; import buildcraft.transport.ItemFacade; import buildcraft.transport.ItemGateCopier; @@ -68,6 +69,8 @@ import buildcraft.transport.PipeActionProvider; import buildcraft.transport.PipeColoringRecipe; import buildcraft.transport.PipeIconProvider; import buildcraft.transport.PipeTriggerProvider; +import buildcraft.transport.PlugPluggable; +import buildcraft.transport.RobotStationPluggable; import buildcraft.transport.TileFilteredBuffer; import buildcraft.transport.TileGenericPipe; import buildcraft.transport.TransportProxy; @@ -77,6 +80,7 @@ import buildcraft.transport.gates.GateDefinition.GateMaterial; import buildcraft.transport.gates.GateExpansionPulsar; import buildcraft.transport.gates.GateExpansionRedstoneFader; import buildcraft.transport.gates.GateExpansionTimer; +import buildcraft.transport.gates.GatePluggable; import buildcraft.transport.gates.ItemGate; import buildcraft.transport.network.PacketHandlerTransport; import buildcraft.transport.pipes.PipeFluidsCobblestone; @@ -501,6 +505,11 @@ public class BuildCraftTransport extends BuildCraftMod { PipeManager.registerStripesHandler(new StripesHandlerBucket()); PipeManager.registerStripesHandler(new StripesHandlerArrow()); PipeManager.registerStripesHandler(new StripesHandlerShears()); + + PipeManager.registerPipePluggable(FacadePluggable.class, "facade"); + PipeManager.registerPipePluggable(GatePluggable.class, "gate"); + PipeManager.registerPipePluggable(PlugPluggable.class, "plug"); + PipeManager.registerPipePluggable(RobotStationPluggable.class, "robotStation"); if (BuildCraftCore.loadDefaultRecipes) { loadRecipes(); diff --git a/common/buildcraft/core/fluids/Tank.java b/common/buildcraft/core/fluids/Tank.java index 709b466c..ab9fb1ea 100644 --- a/common/buildcraft/core/fluids/Tank.java +++ b/common/buildcraft/core/fluids/Tank.java @@ -18,9 +18,8 @@ import net.minecraftforge.fluids.FluidTank; import buildcraft.core.gui.tooltips.ToolTip; import buildcraft.core.gui.tooltips.ToolTipLine; -import buildcraft.core.network.INBTSerializable; -public class Tank extends FluidTank implements INBTSerializable { +public class Tank extends FluidTank { public int colorRenderCache = 0xFFFFFF; protected final ToolTip toolTip = new ToolTip() { @@ -93,16 +92,4 @@ public class Tank extends FluidTank implements INBTSerializable { } toolTip.add(new ToolTipLine(String.format(Locale.ENGLISH, "%,d / %,d", amount, getCapacity()))); } - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound nbt = new NBTTagCompound(); - writeToNBT(nbt); - return nbt; - } - - @Override - public void serializeNBT(NBTTagCompound nbt) { - readFromNBT(nbt); - } } diff --git a/common/buildcraft/core/fluids/TankManager.java b/common/buildcraft/core/fluids/TankManager.java index 8cd47af5..95ec233c 100644 --- a/common/buildcraft/core/fluids/TankManager.java +++ b/common/buildcraft/core/fluids/TankManager.java @@ -27,9 +27,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -import buildcraft.core.network.INBTSerializable; - -public class TankManager extends ForwardingList implements IFluidHandler, List, INBTSerializable { +public class TankManager extends ForwardingList implements IFluidHandler, List { private List tanks = new ArrayList(); @@ -141,16 +139,4 @@ public class TankManager extends ForwardingList implements IF } } } - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound nbt = new NBTTagCompound(); - writeToNBT(nbt); - return nbt; - } - - @Override - public void serializeNBT(NBTTagCompound nbt) { - readFromNBT(nbt); - } } diff --git a/common/buildcraft/core/network/IClientState.java b/common/buildcraft/core/network/IClientState.java deleted file mode 100644 index e91678c2..00000000 --- a/common/buildcraft/core/network/IClientState.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * 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 io.netty.buffer.ByteBuf; - -/** - * Implemented by classes representing serializable client state - */ -public interface IClientState { - /** - * Serializes the state to the stream - * - * @param data - */ - void writeData(ByteBuf data); - - /** - * Deserializes the state from the stream - * - * @param data - */ - void readData(ByteBuf data); -} diff --git a/common/buildcraft/core/network/INBTSerializable.java b/common/buildcraft/core/network/INBTSerializable.java deleted file mode 100644 index ce1ace52..00000000 --- a/common/buildcraft/core/network/INBTSerializable.java +++ /dev/null @@ -1,17 +0,0 @@ -/** - * 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 net.minecraft.nbt.NBTTagCompound; - -public interface INBTSerializable { - NBTTagCompound serializeNBT(); - - void serializeNBT(NBTTagCompound nbt); -} diff --git a/common/buildcraft/core/network/ISyncedTile.java b/common/buildcraft/core/network/ISyncedTile.java index 431b95e7..3e105185 100644 --- a/common/buildcraft/core/network/ISyncedTile.java +++ b/common/buildcraft/core/network/ISyncedTile.java @@ -8,6 +8,8 @@ */ package buildcraft.core.network; +import buildcraft.api.core.ISerializable; + public interface ISyncedTile { /** @@ -16,7 +18,7 @@ public interface ISyncedTile { * @param stateId * @return an object that should be refreshed from the state */ - IClientState getStateInstance(byte stateId); + ISerializable getStateInstance(byte stateId); /** * Called after a state has been updated diff --git a/common/buildcraft/core/network/IndexInPayload.java b/common/buildcraft/core/network/IndexInPayload.java deleted file mode 100644 index 8a06306b..00000000 --- a/common/buildcraft/core/network/IndexInPayload.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * 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; - -/** - * Keeps track of the indices to use when writing data to payload arrays. Internal use only. - */ -public class IndexInPayload { - public int intIndex = 0; - public int floatIndex = 0; - public int stringIndex = 0; - - public IndexInPayload(int intIndex, int floatIndex, int stringIndex) { - this.intIndex = intIndex; - this.floatIndex = floatIndex; - this.stringIndex = stringIndex; - } -} diff --git a/common/buildcraft/core/network/PacketTileState.java b/common/buildcraft/core/network/PacketTileState.java index ca41e20c..82fc6082 100644 --- a/common/buildcraft/core/network/PacketTileState.java +++ b/common/buildcraft/core/network/PacketTileState.java @@ -14,6 +14,7 @@ import java.util.List; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; +import buildcraft.api.core.ISerializable; public class PacketTileState extends PacketCoordinates { @@ -21,9 +22,9 @@ public class PacketTileState extends PacketCoordinates { private class StateWithId { public byte stateId; - public IClientState state; + public ISerializable state; - public StateWithId(byte stateId, IClientState state) { + public StateWithId(byte stateId, ISerializable state) { this.stateId = stateId; this.state = state; } @@ -40,8 +41,7 @@ public class PacketTileState extends PacketCoordinates { /** * Constructor for outgoing packets * - * @param x - * , y, z - the coordinates the tile to sync + * @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); @@ -62,7 +62,7 @@ public class PacketTileState extends PacketCoordinates { } } - public void addStateForSerialization(byte stateId, IClientState state) { + public void addStateForSerialization(byte stateId, ISerializable state) { stateList.add(new StateWithId(stateId, state)); } diff --git a/common/buildcraft/core/network/PacketWrapper.java b/common/buildcraft/core/network/PacketWrapper.java deleted file mode 100644 index 24d870f0..00000000 --- a/common/buildcraft/core/network/PacketWrapper.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * 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 io.netty.buffer.ByteBuf; -import buildcraft.api.core.ISerializable; - -public class PacketWrapper implements ISerializable { - private final ISerializable wrapped; - - public PacketWrapper(ISerializable wrapped) { - this.wrapped = wrapped; - } - - @Override - public void readData(ByteBuf stream) { - wrapped.readData(stream); - } - - @Override - public void writeData(ByteBuf stream) { - wrapped.writeData(stream); - } -} diff --git a/common/buildcraft/core/robots/AIRobotRecharge.java b/common/buildcraft/core/robots/AIRobotRecharge.java index 85daa8aa..189e22a0 100755 --- a/common/buildcraft/core/robots/AIRobotRecharge.java +++ b/common/buildcraft/core/robots/AIRobotRecharge.java @@ -10,7 +10,7 @@ package buildcraft.core.robots; import buildcraft.api.robots.AIRobot; import buildcraft.api.robots.EntityRobotBase; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.transport.PipeTransportPower; public class AIRobotRecharge extends AIRobot { diff --git a/common/buildcraft/core/statements/DefaultActionProvider.java b/common/buildcraft/core/statements/DefaultActionProvider.java index 86edf2b9..f58f9a91 100644 --- a/common/buildcraft/core/statements/DefaultActionProvider.java +++ b/common/buildcraft/core/statements/DefaultActionProvider.java @@ -11,10 +11,7 @@ package buildcraft.core.statements; import java.util.Collection; import java.util.LinkedList; -import org.apache.logging.log4j.Level; - import net.minecraft.tileentity.TileEntity; -import cpw.mods.fml.common.FMLLog; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftCore; import buildcraft.api.core.BCLog; @@ -23,7 +20,7 @@ import buildcraft.api.statements.IActionInternal; import buildcraft.api.statements.IActionProvider; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.tiles.IControllable; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipeContainer; public class DefaultActionProvider implements IActionProvider { @@ -31,7 +28,7 @@ public class DefaultActionProvider implements IActionProvider { public Collection getInternalActions(IStatementContainer container) { LinkedList res = new LinkedList(); - if (container.getTile() instanceof IPipeTile) { + if (container.getTile() instanceof IPipeContainer) { res.add(BuildCraftCore.actionRedstone); } diff --git a/common/buildcraft/core/utils/Utils.java b/common/buildcraft/core/utils/Utils.java index 20181741..8079488f 100644 --- a/common/buildcraft/core/utils/Utils.java +++ b/common/buildcraft/core/utils/Utils.java @@ -40,8 +40,8 @@ import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.core.IAreaProvider; import buildcraft.api.core.Position; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.DefaultProps; import buildcraft.core.EntityBlock; import buildcraft.core.IDropControlInventory; @@ -149,7 +149,7 @@ public final class Utils { * successful, false otherwise. */ public static int addToRandomPipeAround(World world, int x, int y, int z, ForgeDirection from, ItemStack stack) { - List possiblePipes = new ArrayList(); + List possiblePipes = new ArrayList(); List pipeDirections = new ArrayList(); for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { @@ -163,8 +163,8 @@ public final class Utils { TileEntity tile = world.getTileEntity((int) pos.x, (int) pos.y, (int) pos.z); - if (tile instanceof IPipeTile) { - IPipeTile pipe = (IPipeTile) tile; + if (tile instanceof IPipeContainer) { + IPipeContainer pipe = (IPipeContainer) tile; if (pipe.getPipeType() != PipeType.ITEM) { continue; } @@ -180,7 +180,7 @@ public final class Utils { if (possiblePipes.size() > 0) { int choice = RANDOM.nextInt(possiblePipes.size()); - IPipeTile pipeEntry = possiblePipes.get(choice); + IPipeContainer pipeEntry = possiblePipes.get(choice); return pipeEntry.injectItem(stack, true, pipeDirections.get(choice)); } @@ -366,7 +366,7 @@ public final class Utils { return false; } - if (!(tile1 instanceof IPipeTile) && !(tile2 instanceof IPipeTile)) { + if (!(tile1 instanceof IPipeContainer) && !(tile2 instanceof IPipeContainer)) { return false; } @@ -386,11 +386,11 @@ public final class Utils { o = ForgeDirection.SOUTH; } - if (tile1 instanceof IPipeTile && !((IPipeTile) tile1).isPipeConnected(o)) { + if (tile1 instanceof IPipeContainer && !((IPipeContainer) tile1).isPipeConnected(o)) { return false; } - if (tile2 instanceof IPipeTile && !((IPipeTile) tile2).isPipeConnected(o.getOpposite())) { + if (tile2 instanceof IPipeContainer && !((IPipeContainer) tile2).isPipeConnected(o.getOpposite())) { return false; } diff --git a/common/buildcraft/energy/TileEnergyReceiver.java b/common/buildcraft/energy/TileEnergyReceiver.java index 3db8d3c7..151cd84c 100644 --- a/common/buildcraft/energy/TileEnergyReceiver.java +++ b/common/buildcraft/energy/TileEnergyReceiver.java @@ -16,8 +16,8 @@ import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyHandler; -import buildcraft.api.transport.IPipeConnection; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeConnection; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.TileBuffer; import buildcraft.core.TileBuildCraft; diff --git a/common/buildcraft/energy/TileEngine.java b/common/buildcraft/energy/TileEngine.java index f298163d..62f30f0f 100644 --- a/common/buildcraft/energy/TileEngine.java +++ b/common/buildcraft/energy/TileEngine.java @@ -21,9 +21,9 @@ import buildcraft.BuildCraftEnergy; import buildcraft.api.power.IEngine; import buildcraft.api.tiles.IHeatable; import buildcraft.api.tools.IToolWrench; -import buildcraft.api.transport.IPipeConnection; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeConnection; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.DefaultProps; import buildcraft.core.TileBuildCraft; import buildcraft.core.utils.MathUtils; @@ -383,7 +383,7 @@ public abstract class TileEngine extends TileBuildCraft implements IPipeConnecti TileEntity tile = getTile(o); - if ((!pipesOnly || tile instanceof IPipeTile) && isPoweredTile(tile, o)) { + if ((!pipesOnly || tile instanceof IPipeContainer) && isPoweredTile(tile, o)) { orientation = o; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, worldObj.getBlock(xCoord, yCoord, zCoord)); diff --git a/common/buildcraft/energy/TileEngineWood.java b/common/buildcraft/energy/TileEngineWood.java index 343ae2a8..4b9b4e87 100644 --- a/common/buildcraft/energy/TileEngineWood.java +++ b/common/buildcraft/energy/TileEngineWood.java @@ -11,8 +11,8 @@ package buildcraft.energy; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.factory.TilePump; public class TileEngineWood extends TileEngine { @@ -127,7 +127,7 @@ public class TileEngineWood extends TileEngine { // TODO: Make a proper API out of this if (tile instanceof TilePump || - (tile instanceof IPipeTile && ((IPipeTile) tile).getPipeType() != PipeType.POWER)) { + (tile instanceof IPipeContainer && ((IPipeContainer) tile).getPipeType() != PipeType.POWER)) { super.sendPower(); } else { this.energy = 0; diff --git a/common/buildcraft/factory/TileMiningWell.java b/common/buildcraft/factory/TileMiningWell.java index 52460cf9..2d4a3e1f 100644 --- a/common/buildcraft/factory/TileMiningWell.java +++ b/common/buildcraft/factory/TileMiningWell.java @@ -14,8 +14,8 @@ import buildcraft.BuildCraftFactory; import buildcraft.api.blueprints.BuilderAPI; import buildcraft.api.tiles.IControllable; import buildcraft.api.tiles.IHasWork; -import buildcraft.api.transport.IPipeConnection; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeConnection; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.RFBattery; import buildcraft.core.TileBuildCraft; import buildcraft.core.utils.BlockUtils; diff --git a/common/buildcraft/factory/TileQuarry.java b/common/buildcraft/factory/TileQuarry.java index 60720e63..940bc22f 100644 --- a/common/buildcraft/factory/TileQuarry.java +++ b/common/buildcraft/factory/TileQuarry.java @@ -36,8 +36,8 @@ import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.filler.FillerManager; import buildcraft.api.tiles.IControllable; import buildcraft.api.tiles.IHasWork; -import buildcraft.api.transport.IPipeConnection; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipeConnection; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.core.Box; import buildcraft.core.Box.Kind; import buildcraft.core.CoreConstants; @@ -874,7 +874,7 @@ public class TileQuarry extends TileAbstractBuilder implements IHasWork, ISidedI } @Override - public ConnectOverride overridePipeConnection(IPipeTile.PipeType type, ForgeDirection with) { - return type == IPipeTile.PipeType.ITEM ? ConnectOverride.CONNECT : ConnectOverride.DEFAULT; + public ConnectOverride overridePipeConnection(IPipeContainer.PipeType type, ForgeDirection with) { + return type == IPipeContainer.PipeType.ITEM ? ConnectOverride.CONNECT : ConnectOverride.DEFAULT; } } diff --git a/common/buildcraft/transport/BlockGenericPipe.java b/common/buildcraft/transport/BlockGenericPipe.java index 375f9159..a277c7d7 100644 --- a/common/buildcraft/transport/BlockGenericPipe.java +++ b/common/buildcraft/transport/BlockGenericPipe.java @@ -52,9 +52,10 @@ import buildcraft.api.events.PipePlacedEvent; import buildcraft.api.events.RobotPlacementEvent; import buildcraft.api.gates.GateExpansions; import buildcraft.api.gates.IGateExpansion; +import buildcraft.api.pipes.IPipePluggable; import buildcraft.api.robots.EntityRobotBase; import buildcraft.api.tools.IToolWrench; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.BlockBuildCraft; import buildcraft.core.CoreConstants; import buildcraft.core.CreativeTabBuildCraft; @@ -67,6 +68,7 @@ import buildcraft.core.utils.MatrixTranformations; import buildcraft.core.utils.Utils; import buildcraft.transport.gates.GateDefinition; import buildcraft.transport.gates.GateFactory; +import buildcraft.transport.gates.GatePluggable; import buildcraft.transport.gates.ItemGate; import buildcraft.transport.render.PipeRendererWorld; import buildcraft.transport.utils.FacadeMatrix; @@ -84,10 +86,7 @@ public class BlockGenericPipe extends BlockBuildCraft { static enum Part { Pipe, - Gate, - Facade, - Plug, - RobotStation + Pluggable } static class RaytraceResult { @@ -253,20 +252,16 @@ public class BlockGenericPipe extends BlockBuildCraft { if (rayTraceResult != null && rayTraceResult.boundingBox != null) { AxisAlignedBB box = rayTraceResult.boundingBox; switch (rayTraceResult.hitPart) { - case Gate: - case Plug: - case RobotStation: { - float scale = 0.001F; - box = box.expand(scale, scale, scale); - break; - } - case Pipe: { - float scale = 0.08F; - box = box.expand(scale, scale, scale); - break; - } - case Facade: - break; + case Pluggable: { + float scale = 0.001F; + box = box.expand(scale, scale, scale); + break; + } + case Pipe: { + float scale = 0.08F; + box = box.expand(scale, scale, scale); + break; + } } return box.getOffsetBoundingBox(x, y, z); } @@ -338,11 +333,11 @@ public class BlockGenericPipe extends BlockBuildCraft { } } - // gates + // pluggables for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (pipe.hasGate(side)) { - AxisAlignedBB bb = getGateBoundingBox(side); + if (tileG.getPluggable(side) != null) { + AxisAlignedBB bb = tileG.getPluggable(side).getBoundingBox(side); setBlockBounds(bb); boxes[7 + side.ordinal()] = bb; hits[7 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction); @@ -350,42 +345,6 @@ public class BlockGenericPipe extends BlockBuildCraft { } } - // facades - - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (tileG.hasFacade(side)) { - AxisAlignedBB bb = getFacadeBoundingBox(side); - setBlockBounds(bb); - boxes[13 + side.ordinal()] = bb; - hits[13 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction); - sideHit[13 + side.ordinal()] = side; - } - } - - // plugs - - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (tileG.hasPlug(side)) { - AxisAlignedBB bb = getPlugBoundingBox(side); - setBlockBounds(bb); - boxes[19 + side.ordinal()] = bb; - hits[19 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction); - sideHit[19 + side.ordinal()] = side; - } - } - - // robotStations - - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (tileG.hasRobotStation(side)) { - AxisAlignedBB bb = getRobotStationBoundingBox(side); - setBlockBounds(bb); - boxes[25 + side.ordinal()] = bb; - hits[25 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction); - sideHit[25 + side.ordinal()] = side; - } - } - // TODO: check wires // get closest hit @@ -418,14 +377,8 @@ public class BlockGenericPipe extends BlockBuildCraft { if (minIndex < 7) { hitPart = Part.Pipe; - } else if (minIndex < 13) { - hitPart = Part.Gate; - } else if (minIndex < 19) { - hitPart = Part.Facade; - } else if (minIndex < 25) { - hitPart = Part.Plug; } else { - hitPart = Part.RobotStation; + hitPart = Part.Pluggable; } return new RaytraceResult(hitPart, hits[minIndex], boxes[minIndex], sideHit[minIndex]); @@ -436,73 +389,6 @@ public class BlockGenericPipe extends BlockBuildCraft { setBlockBounds((float) bb.minX, (float) bb.minY, (float) bb.minZ, (float) bb.maxX, (float) bb.maxY, (float) bb.maxZ); } - private AxisAlignedBB getGateBoundingBox(ForgeDirection side) { - float min = CoreConstants.PIPE_MIN_POS + 0.05F; - float max = CoreConstants.PIPE_MAX_POS - 0.05F; - - float[][] bounds = new float[3][2]; - // X START - END - bounds[0][0] = min; - bounds[0][1] = max; - // Y START - END - bounds[1][0] = CoreConstants.PIPE_MIN_POS - 0.10F; - bounds[1][1] = CoreConstants.PIPE_MIN_POS; - // Z START - END - bounds[2][0] = min; - bounds[2][1] = max; - - MatrixTranformations.transform(bounds, side); - return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); - } - - private AxisAlignedBB getFacadeBoundingBox(ForgeDirection side) { - float[][] bounds = new float[3][2]; - // X START - END - bounds[0][0] = 0.0F; - bounds[0][1] = 1.0F; - // Y START - END - bounds[1][0] = 0.0F; - bounds[1][1] = TransportConstants.FACADE_THICKNESS; - // Z START - END - bounds[2][0] = 0.0F; - bounds[2][1] = 1.0F; - - MatrixTranformations.transform(bounds, side); - return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); - } - - private AxisAlignedBB getPlugBoundingBox(ForgeDirection side) { - float[][] bounds = new float[3][2]; - // X START - END - bounds[0][0] = 0.25F; - bounds[0][1] = 0.75F; - // Y START - END - bounds[1][0] = 0.125F; - bounds[1][1] = 0.251F; - // Z START - END - bounds[2][0] = 0.25F; - bounds[2][1] = 0.75F; - - MatrixTranformations.transform(bounds, side); - return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); - } - - private AxisAlignedBB getRobotStationBoundingBox(ForgeDirection side) { - float[][] bounds = new float[3][2]; - // X START - END - bounds[0][0] = 0.25F; - bounds[0][1] = 0.75F; - // Y START - END - bounds[1][0] = 0.125F; - bounds[1][1] = 0.251F; - // Z START - END - bounds[2][0] = 0.25F; - bounds[2][1] = 0.75F; - - MatrixTranformations.transform(bounds, side); - return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); - } - private AxisAlignedBB getPipeBoundingBox(ForgeDirection side) { float min = CoreConstants.PIPE_MIN_POS; float max = CoreConstants.PIPE_MAX_POS; @@ -625,25 +511,27 @@ public class BlockGenericPipe extends BlockBuildCraft { if (rayTraceResult != null && rayTraceResult.boundingBox != null) { switch (rayTraceResult.hitPart) { - case Gate: + case Pluggable: { Pipe pipe = getPipe(world, x, y, z); - Gate gate = pipe.gates[rayTraceResult.sideHit.ordinal()]; - return gate != null ? gate.getGateItem() : null; - case Plug: - return new ItemStack(BuildCraftTransport.plugItem); - case RobotStation: - return new ItemStack(BuildCraftTransport.robotStationItem); - case Pipe: - return new ItemStack(getPipe(world, x, y, z).item, 1, getPipe(world, x, y, z).container.getItemMetadata()); - case Facade: - ForgeDirection dir = ForgeDirection - .getOrientation(target.sideHit); - FacadeMatrix matrix = getPipe(world, x, y, z).container.renderState.facadeMatrix; - Block block = matrix.getFacadeBlock(dir); - if (block != null) { - return BuildCraftTransport.facadeItem.getFacadeForBlock(block, - matrix.getFacadeMetaId(dir)); + IPipePluggable pluggable = pipe.container.getPluggable(rayTraceResult.sideHit); + if (pluggable instanceof FacadePluggable) { + ForgeDirection dir = ForgeDirection + .getOrientation(target.sideHit); + FacadeMatrix matrix = getPipe(world, x, y, z).container.renderState.facadeMatrix; + Block block = matrix.getFacadeBlock(dir); + if (block != null) { + return BuildCraftTransport.facadeItem.getFacadeForBlock(block, + matrix.getFacadeMetaId(dir)); + } + } else { + ItemStack[] drops = pluggable.getDropItems(pipe.container); + if (drops != null && drops.length > 0) { + return drops[0]; + } + } } + case Pipe: + return new ItemStack(getPipe(world, x, y, z).item, 1, getPipe(world, x, y, z).container.getItemMetadata()); } } return null; @@ -788,7 +676,8 @@ public class BlockGenericPipe extends BlockBuildCraft { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); - if (rayTraceResult != null && rayTraceResult.hitPart == Part.RobotStation) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof RobotStationPluggable) { DockingStation station = pipe.container.getStation(rayTraceResult.sideHit); if (!station.isTaken()) { @@ -831,7 +720,8 @@ public class BlockGenericPipe extends BlockBuildCraft { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); - if (rayTraceResult != null && rayTraceResult.hitPart == Part.Gate) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof GatePluggable) { clickedGate = pipe.gates[rayTraceResult.sideHit.ordinal()]; } @@ -849,7 +739,8 @@ public class BlockGenericPipe extends BlockBuildCraft { private boolean addOrStripGate(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); if (player.isSneaking()) { - if (rayTraceResult != null && rayTraceResult.hitPart == Part.Gate) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof GatePluggable) { if (pipe.container.hasGate(rayTraceResult.sideHit)) { return pipe.container.dropSideItems(rayTraceResult.sideHit); } @@ -923,7 +814,8 @@ public class BlockGenericPipe extends BlockBuildCraft { private boolean addOrStripFacade(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); if (player.isSneaking()) { - if (rayTraceResult != null && rayTraceResult.hitPart == Part.Facade) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof FacadePluggable) { if (pipe.container.hasFacade(rayTraceResult.sideHit)) { return pipe.container.dropSideItems(rayTraceResult.sideHit); } @@ -951,7 +843,8 @@ public class BlockGenericPipe extends BlockBuildCraft { private boolean addOrStripPlug(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); if (player.isSneaking()) { - if (rayTraceResult != null && rayTraceResult.hitPart == Part.Plug) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof PlugPluggable) { if (pipe.container.dropSideItems(rayTraceResult.sideHit)) { return true; } @@ -968,7 +861,8 @@ public class BlockGenericPipe extends BlockBuildCraft { private boolean addOrStripRobotStation(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) { RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player); if (player.isSneaking()) { - if (rayTraceResult != null && rayTraceResult.hitPart == Part.RobotStation) { + if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pluggable + && pipe.container.getPluggable(rayTraceResult.sideHit) instanceof RobotStationPluggable) { if (pipe.container.dropSideItems(rayTraceResult.sideHit)) { return true; } @@ -1311,7 +1205,7 @@ public class BlockGenericPipe extends BlockBuildCraft { @Override public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { TileGenericPipe pipeTile = (TileGenericPipe) world.getTileEntity(x, y, z); - if (!pipeTile.hasPlug(side)) { + if (!pipeTile.hasBlockingPluggable(side)) { return pipeTile.setColor(colour); } diff --git a/common/buildcraft/transport/FacadePluggable.java b/common/buildcraft/transport/FacadePluggable.java new file mode 100644 index 00000000..83f2f42b --- /dev/null +++ b/common/buildcraft/transport/FacadePluggable.java @@ -0,0 +1,98 @@ +package buildcraft.transport; + +import io.netty.buffer.ByteBuf; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; +import buildcraft.core.utils.MatrixTranformations; + +public class FacadePluggable implements IPipePluggable { + public ItemFacade.FacadeState[] states; + + public FacadePluggable(ItemFacade.FacadeState[] states) { + this.states = states; + } + + public FacadePluggable() { + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + if (states != null) { + nbt.setTag("states", ItemFacade.FacadeState.writeArray(states)); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + if (nbt.hasKey("states")) { + states = ItemFacade.FacadeState.readArray(nbt.getTagList("states", Constants.NBT.TAG_COMPOUND)); + } + } + + @Override + public ItemStack[] getDropItems(IPipeContainer pipe) { + return states == null ? null : new ItemStack[] { ItemFacade.getFacade(states) }; + } + + @Override + public void onAttachedPipe(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public void onDetachedPipe(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public boolean isBlocking(IPipeContainer pipe, ForgeDirection direction) { + return false; + } + + @Override + public void invalidate() { + + } + + @Override + public void validate(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public AxisAlignedBB getBoundingBox(ForgeDirection side) { + float[][] bounds = new float[3][2]; + // X START - END + bounds[0][0] = 0.0F; + bounds[0][1] = 1.0F; + // Y START - END + bounds[1][0] = 0.0F; + bounds[1][1] = TransportConstants.FACADE_THICKNESS; + // Z START - END + bounds[2][0] = 0.0F; + bounds[2][1] = 1.0F; + + MatrixTranformations.transform(bounds, side); + return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); + } + + @Override + public IPipePluggableRenderer getRenderer() { + return null; + } + + @Override + public void writeData(ByteBuf data) { + } + + @Override + public void readData(ByteBuf data) { + + } +} diff --git a/common/buildcraft/transport/Gate.java b/common/buildcraft/transport/Gate.java index 648565bf..50ae1369 100644 --- a/common/buildcraft/transport/Gate.java +++ b/common/buildcraft/transport/Gate.java @@ -35,8 +35,8 @@ import buildcraft.api.statements.ITriggerExternal; import buildcraft.api.statements.ITriggerInternal; import buildcraft.api.statements.StatementManager; import buildcraft.api.statements.StatementParameterItemStack; -import buildcraft.api.transport.IPipe; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.GuiIds; import buildcraft.transport.gates.GateDefinition.GateLogic; import buildcraft.transport.gates.GateDefinition.GateMaterial; @@ -472,7 +472,7 @@ public final class Gate implements IGate, IStatementContainer { ((IActionInternal) action).actionActivate(this, slot.parameters); } else if (action instanceof IActionExternal) { for (ForgeDirection side: ForgeDirection.VALID_DIRECTIONS) { - TileEntity tile = this.getPipe().getTile().getAdjacentTile(side); + TileEntity tile = this.getPipe().getTile().getNeighborTile(side); if (tile != null) { ((IActionExternal) action).actionActivate(tile, side, this, slot.parameters); } @@ -532,7 +532,7 @@ public final class Gate implements IGate, IStatementContainer { } } else if (trigger instanceof ITriggerExternal) { for (ForgeDirection side: ForgeDirection.VALID_DIRECTIONS) { - TileEntity tile = this.getPipe().getTile().getAdjacentTile(side); + TileEntity tile = this.getPipe().getTile().getNeighborTile(side); if (tile != null && ((ITriggerExternal) trigger).isTriggerActive(tile, side, this, parameters)) { return true; } diff --git a/common/buildcraft/transport/IDiamondPipe.java b/common/buildcraft/transport/IDiamondPipe.java index 093c5fc7..8667eaa7 100644 --- a/common/buildcraft/transport/IDiamondPipe.java +++ b/common/buildcraft/transport/IDiamondPipe.java @@ -9,9 +9,9 @@ package buildcraft.transport; import net.minecraft.inventory.IInventory; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; -public interface IDiamondPipe extends IClientState { +public interface IDiamondPipe extends ISerializable { IInventory getFilters(); } diff --git a/common/buildcraft/transport/IFilteredPipe.java b/common/buildcraft/transport/IFilteredPipe.java index 97205a62..d3d8d43d 100644 --- a/common/buildcraft/transport/IFilteredPipe.java +++ b/common/buildcraft/transport/IFilteredPipe.java @@ -9,9 +9,9 @@ package buildcraft.transport; import net.minecraft.inventory.IInventory; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; -public interface IFilteredPipe extends IClientState { +public interface IFilteredPipe extends ISerializable { IInventory getFilters(); } diff --git a/common/buildcraft/transport/ItemFacade.java b/common/buildcraft/transport/ItemFacade.java index f27c73ba..ce8f8a8c 100644 --- a/common/buildcraft/transport/ItemFacade.java +++ b/common/buildcraft/transport/ItemFacade.java @@ -37,9 +37,9 @@ import buildcraft.api.core.Position; import buildcraft.api.facades.FacadeType; import buildcraft.api.facades.IFacadeItem; import buildcraft.api.recipes.BuildcraftRecipeRegistry; -import buildcraft.api.transport.IPipePluggable; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.BlockSpring; import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.ItemBuildCraft; @@ -446,61 +446,6 @@ public class ItemFacade extends ItemBuildCraft implements IFacadeItem { } } - public static class FacadePluggable implements IPipePluggable { - public FacadeState[] states; - - public FacadePluggable(FacadeState[] states) { - this.states = states; - } - - public FacadePluggable() { - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - if (states != null) { - nbt.setTag("states", FacadeState.writeArray(states)); - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - if (nbt.hasKey("states")) { - states = FacadeState.readArray(nbt.getTagList("states", Constants.NBT.TAG_COMPOUND)); - } - } - - @Override - public ItemStack[] getDropItems(IPipeTile pipe) { - return states == null ? null : new ItemStack[] { getFacade(states) }; - } - - @Override - public void onAttachedPipe(IPipeTile pipe, ForgeDirection direction) { - - } - - @Override - public void onDetachedPipe(IPipeTile pipe, ForgeDirection direction) { - - } - - @Override - public boolean blocking(IPipeTile pipe, ForgeDirection direction) { - return false; - } - - @Override - public void invalidate() { - - } - - @Override - public void validate(IPipeTile pipe, ForgeDirection direction) { - - } - } - public class FacadeRecipe implements IRecipe { @Override diff --git a/common/buildcraft/transport/ItemGateCopier.java b/common/buildcraft/transport/ItemGateCopier.java index 3fbfb148..2a56c5e5 100644 --- a/common/buildcraft/transport/ItemGateCopier.java +++ b/common/buildcraft/transport/ItemGateCopier.java @@ -11,11 +11,13 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import buildcraft.api.pipes.IPipePluggable; import buildcraft.core.ItemBuildCraft; import buildcraft.core.utils.NBTUtils; import buildcraft.transport.BlockGenericPipe.Part; import buildcraft.transport.BlockGenericPipe.RaytraceResult; import buildcraft.transport.gates.GateDefinition.GateMaterial; +import buildcraft.transport.gates.GatePluggable; public class ItemGateCopier extends ItemBuildCraft { @@ -53,8 +55,11 @@ public class ItemGateCopier extends ItemBuildCraft { RaytraceResult rayTraceResult = ((BlockGenericPipe) block).doRayTrace(world, x, y, z, player); - if (rayTraceResult != null && rayTraceResult.boundingBox != null && rayTraceResult.hitPart == Part.Gate) { - gate = ((TileGenericPipe) tile).pipe.gates[rayTraceResult.sideHit.ordinal()]; + if (rayTraceResult != null && rayTraceResult.boundingBox != null && rayTraceResult.hitPart == Part.Pluggable) { + IPipePluggable pluggable = ((TileGenericPipe) tile).getPluggable(rayTraceResult.sideHit); + if (pluggable instanceof GatePluggable) { + gate = ((TileGenericPipe) tile).pipe.gates[rayTraceResult.sideHit.ordinal()]; + } } if (isCopying) { diff --git a/common/buildcraft/transport/ItemPipeWire.java b/common/buildcraft/transport/ItemPipeWire.java index 7a893aa2..ee16b510 100644 --- a/common/buildcraft/transport/ItemPipeWire.java +++ b/common/buildcraft/transport/ItemPipeWire.java @@ -20,7 +20,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.ItemBuildCraft; public class ItemPipeWire extends ItemBuildCraft { diff --git a/common/buildcraft/transport/ItemPlug.java b/common/buildcraft/transport/ItemPlug.java index 81f7db08..701ebbd9 100755 --- a/common/buildcraft/transport/ItemPlug.java +++ b/common/buildcraft/transport/ItemPlug.java @@ -20,8 +20,8 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; -import buildcraft.api.transport.IPipePluggable; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.core.ItemBuildCraft; public class ItemPlug extends ItemBuildCraft { @@ -52,49 +52,4 @@ public class ItemPlug extends ItemBuildCraft { return 0; } - public static class PlugPluggable implements IPipePluggable { - public PlugPluggable() { - - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - - } - - @Override - public ItemStack[] getDropItems(IPipeTile pipe) { - return new ItemStack[] { new ItemStack(BuildCraftTransport.plugItem) }; - } - - @Override - public void onAttachedPipe(IPipeTile pipe, ForgeDirection direction) { - - } - - @Override - public void onDetachedPipe(IPipeTile pipe, ForgeDirection direction) { - - } - - @Override - public boolean blocking(IPipeTile pipe, ForgeDirection direction) { - return true; - } - - @Override - public void invalidate() { - - } - - @Override - public void validate(IPipeTile pipe, ForgeDirection direction) { - - } - } } diff --git a/common/buildcraft/transport/ItemRobotStation.java b/common/buildcraft/transport/ItemRobotStation.java index 02db6173..ed75a1fa 100755 --- a/common/buildcraft/transport/ItemRobotStation.java +++ b/common/buildcraft/transport/ItemRobotStation.java @@ -20,8 +20,8 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; -import buildcraft.api.transport.IPipePluggable; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.ItemBuildCraft; import buildcraft.core.robots.DockingStation; @@ -55,76 +55,4 @@ public class ItemRobotStation extends ItemBuildCraft { return 0; } - public static class RobotStationPluggable implements IPipePluggable { - private DockingStation station; - private boolean isValid = false; - - public RobotStationPluggable() { - - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - - } - - @Override - public ItemStack[] getDropItems(IPipeTile pipe) { - return new ItemStack[] { new ItemStack(BuildCraftTransport.robotStationItem) }; - } - - @Override - public void onAttachedPipe(IPipeTile pipe, ForgeDirection direction) { - validate(pipe, direction); - } - - @Override - public void onDetachedPipe(IPipeTile pipe, ForgeDirection direction) { - invalidate(); - } - - public DockingStation getStation() { - return station; - } - - @Override - public boolean blocking(IPipeTile pipe, ForgeDirection direction) { - return true; - } - - @Override - public void invalidate() { - if (station != null - && station.getPipe() != null - && !station.getPipe().getWorld().isRemote) { - RobotRegistry.getRegistry(station.world).removeStation(station); - isValid = false; - } - } - - @Override - public void validate(IPipeTile pipe, ForgeDirection direction) { - TileGenericPipe gPipe = (TileGenericPipe) pipe; - if (!isValid && !gPipe.getWorld().isRemote) { - station = (DockingStation) - RobotRegistry.getRegistry(gPipe.getWorld()).getStation( - gPipe.xCoord, - gPipe.yCoord, - gPipe.zCoord, - direction); - - if (station == null) { - station = new DockingStation(gPipe, direction); - RobotRegistry.getRegistry(gPipe.getWorld()).registerStation(station); - } - - isValid = true; - } - } - } } diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java index a823667d..2dcb5034 100644 --- a/common/buildcraft/transport/Pipe.java +++ b/common/buildcraft/transport/Pipe.java @@ -33,9 +33,9 @@ import buildcraft.api.core.IIconProvider; import buildcraft.api.gates.IGate; import buildcraft.api.statements.ActionState; import buildcraft.api.statements.IActionInternal; -import buildcraft.api.transport.IPipe; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.IDropControlInventory; import buildcraft.core.inventory.InvUtils; import buildcraft.core.utils.Utils; @@ -495,16 +495,10 @@ public abstract class Pipe implements IDropControlInven } for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (container.hasFacade(direction)) { - result.add (container.getFacade(direction)); - } - - if (container.hasPlug(direction)) { - result.add (new ItemStack(BuildCraftTransport.plugItem)); - } - - if (container.hasRobotStation(direction)) { - result.add (new ItemStack(BuildCraftTransport.robotStationItem)); + if (container.hasPluggable(direction)) { + for (ItemStack stack : container.getPluggable(direction).getDropItems(container)) { + result.add(stack); + } } } @@ -623,22 +617,7 @@ public abstract class Pipe implements IDropControlInven } @Override - public int x() { - return container.xCoord; - } - - @Override - public int y() { - return container.yCoord; - } - - @Override - public int z() { - return container.zCoord; - } - - @Override - public IPipeTile getTile() { + public IPipeContainer getTile() { return container; } diff --git a/common/buildcraft/transport/PipePluggableState.java b/common/buildcraft/transport/PipePluggableState.java new file mode 100644 index 00000000..9e2fe3ee --- /dev/null +++ b/common/buildcraft/transport/PipePluggableState.java @@ -0,0 +1,57 @@ +package buildcraft.transport; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.ISerializable; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.PipeManager; +import buildcraft.transport.utils.ConnectionMatrix; + +public class PipePluggableState implements ISerializable { + private IPipePluggable[] pluggables = new IPipePluggable[6]; + private ConnectionMatrix pluggableMatrix = new ConnectionMatrix(); + + public PipePluggableState() { + + } + + public IPipePluggable[] getPluggables() { + return pluggables; + } + + public void setPluggables(IPipePluggable[] pluggables) { + this.pluggables = pluggables; + this.pluggableMatrix.clean(); + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + this.pluggableMatrix.setConnected(dir, pluggables[dir.ordinal()] != null); + } + } + + @Override + public void writeData(ByteBuf data) { + this.pluggableMatrix.writeData(data); + for (IPipePluggable p : pluggables) { + if (p != null) { + data.writeShort(PipeManager.pipePluggables.indexOf(p.getClass())); + p.writeData(data); + } + } + } + + @Override + public void readData(ByteBuf data) { + this.pluggableMatrix.readData(data); + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if (this.pluggableMatrix.isConnected(dir)) { + try { + IPipePluggable p = PipeManager.pipePluggables.get(data.readUnsignedShort()).newInstance(); + p.readData(data); + pluggables[dir.ordinal()] = p; + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/common/buildcraft/transport/PipeRenderState.java b/common/buildcraft/transport/PipeRenderState.java index 30b2997b..2781b2f2 100644 --- a/common/buildcraft/transport/PipeRenderState.java +++ b/common/buildcraft/transport/PipeRenderState.java @@ -10,21 +10,18 @@ package buildcraft.transport; import io.netty.buffer.ByteBuf; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.transport.utils.ConnectionMatrix; import buildcraft.transport.utils.FacadeMatrix; import buildcraft.transport.utils.GateMatrix; -import buildcraft.transport.utils.RobotStationMatrix; import buildcraft.transport.utils.TextureMatrix; import buildcraft.transport.utils.WireMatrix; -public class PipeRenderState implements IClientState { +public class PipeRenderState implements ISerializable { public final ConnectionMatrix pipeConnectionMatrix = new ConnectionMatrix(); public final TextureMatrix textureMatrix = new TextureMatrix(); public final WireMatrix wireMatrix = new WireMatrix(); - public final ConnectionMatrix plugMatrix = new ConnectionMatrix(); - public final RobotStationMatrix robotStationMatrix = new RobotStationMatrix(); public final FacadeMatrix facadeMatrix = new FacadeMatrix(); public final GateMatrix gateMatrix = new GateMatrix(); public byte glassColor = -1; @@ -37,22 +34,19 @@ public class PipeRenderState implements IClientState { textureMatrix.clean(); facadeMatrix.clean(); wireMatrix.clean(); - plugMatrix.clean(); - robotStationMatrix.clean(); gateMatrix.clean(); } public boolean isDirty() { return dirty || pipeConnectionMatrix.isDirty() || textureMatrix.isDirty() || wireMatrix.isDirty() - || facadeMatrix.isDirty() || plugMatrix.isDirty() - || robotStationMatrix.isDirty() || gateMatrix.isDirty(); + || facadeMatrix.isDirty() || gateMatrix.isDirty(); } public boolean needsRenderUpdate() { return pipeConnectionMatrix.isDirty() || textureMatrix.isDirty() - || facadeMatrix.isDirty() || plugMatrix.isDirty() - || robotStationMatrix.isDirty() || gateMatrix.isDirty(); + || wireMatrix.isDirty() || facadeMatrix.isDirty() + || gateMatrix.isDirty(); } @Override @@ -62,8 +56,6 @@ public class PipeRenderState implements IClientState { textureMatrix.writeData(data); wireMatrix.writeData(data); facadeMatrix.writeData(data); - plugMatrix.writeData(data); - robotStationMatrix.writeData(data); gateMatrix.writeData(data); } @@ -74,8 +66,6 @@ public class PipeRenderState implements IClientState { textureMatrix.readData(data); wireMatrix.readData(data); facadeMatrix.readData(data); - plugMatrix.readData(data); - robotStationMatrix.readData(data); gateMatrix.readData(data); } } diff --git a/common/buildcraft/transport/PipeTransport.java b/common/buildcraft/transport/PipeTransport.java index 1848f708..e1316bdc 100644 --- a/common/buildcraft/transport/PipeTransport.java +++ b/common/buildcraft/transport/PipeTransport.java @@ -17,7 +17,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.utils.BitSetUtils; public abstract class PipeTransport { diff --git a/common/buildcraft/transport/PipeTransportFluids.java b/common/buildcraft/transport/PipeTransportFluids.java index ab70046c..7fed9fb3 100644 --- a/common/buildcraft/transport/PipeTransportFluids.java +++ b/common/buildcraft/transport/PipeTransportFluids.java @@ -24,7 +24,7 @@ import net.minecraftforge.fluids.IFluidHandler; import buildcraft.BuildCraftCore; import buildcraft.BuildCraftTransport; import buildcraft.api.core.SafeTimeTracker; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.DefaultProps; import buildcraft.core.utils.MathUtils; import buildcraft.transport.network.PacketFluidUpdate; diff --git a/common/buildcraft/transport/PipeTransportItems.java b/common/buildcraft/transport/PipeTransportItems.java index e0e6e7cf..0c8b1d04 100644 --- a/common/buildcraft/transport/PipeTransportItems.java +++ b/common/buildcraft/transport/PipeTransportItems.java @@ -28,7 +28,7 @@ import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.core.BCLog; import buildcraft.api.core.Position; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.DefaultProps; import buildcraft.core.inventory.Transactor; import buildcraft.core.utils.BlockUtils; diff --git a/common/buildcraft/transport/PipeTransportPower.java b/common/buildcraft/transport/PipeTransportPower.java index fbc59c6e..94a45b67 100644 --- a/common/buildcraft/transport/PipeTransportPower.java +++ b/common/buildcraft/transport/PipeTransportPower.java @@ -22,7 +22,7 @@ import buildcraft.BuildCraftCore; import buildcraft.BuildCraftTransport; import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.power.IEngine; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; import buildcraft.core.DefaultProps; import buildcraft.core.TileBuildCraft; import buildcraft.transport.network.PacketPowerUpdate; diff --git a/common/buildcraft/transport/PipeTransportStructure.java b/common/buildcraft/transport/PipeTransportStructure.java index 023cee8f..0734cfc6 100644 --- a/common/buildcraft/transport/PipeTransportStructure.java +++ b/common/buildcraft/transport/PipeTransportStructure.java @@ -12,7 +12,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IPipeTile.PipeType; +import buildcraft.api.pipes.IPipeContainer.PipeType; public class PipeTransportStructure extends PipeTransport { diff --git a/common/buildcraft/transport/PlugPluggable.java b/common/buildcraft/transport/PlugPluggable.java new file mode 100644 index 00000000..536c2c74 --- /dev/null +++ b/common/buildcraft/transport/PlugPluggable.java @@ -0,0 +1,137 @@ +package buildcraft.transport; + +import io.netty.buffer.ByteBuf; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.BuildCraftTransport; +import buildcraft.api.core.render.ITextureStates; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; +import buildcraft.core.utils.MatrixTranformations; + +public class PlugPluggable implements IPipePluggable { + public class PlugPluggableRenderer implements IPipePluggableRenderer { + private float zFightOffset = 1 / 4096.0F; + + @Override + public void renderPluggable(RenderBlocks renderblocks, IPipe pipe, ForgeDirection side, IPipePluggable pipePluggable, ITextureStates blockStateMachine, int x, int y, int z) { + float[][] zeroState = new float[3][2]; + + // X START - END + zeroState[0][0] = 0.25F + zFightOffset; + zeroState[0][1] = 0.75F - zFightOffset; + // Y START - END + zeroState[1][0] = 0.125F; + zeroState[1][1] = 0.251F; + // Z START - END + zeroState[2][0] = 0.25F + zFightOffset; + zeroState[2][1] = 0.75F - zFightOffset; + + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal())); // Structure Pipe + + float[][] rotated = MatrixTranformations.deepClone(zeroState); + MatrixTranformations.transform(rotated, side); + + renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]); + renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); + + // X START - END + zeroState[0][0] = 0.25F + 0.125F / 2 + zFightOffset; + zeroState[0][1] = 0.75F - 0.125F / 2 + zFightOffset; + // Y START - END + zeroState[1][0] = 0.25F; + zeroState[1][1] = 0.25F + 0.125F; + // Z START - END + zeroState[2][0] = 0.25F + 0.125F / 2; + zeroState[2][1] = 0.75F - 0.125F / 2; + + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal())); // Structure Pipe + + rotated = MatrixTranformations.deepClone(zeroState); + MatrixTranformations.transform(rotated, side); + + renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]); + renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); + } + } + public PlugPluggable() { + + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + + } + + @Override + public ItemStack[] getDropItems(IPipeContainer pipe) { + return new ItemStack[] { new ItemStack(BuildCraftTransport.plugItem) }; + } + + @Override + public void onAttachedPipe(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public void onDetachedPipe(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public boolean isBlocking(IPipeContainer pipe, ForgeDirection direction) { + return true; + } + + @Override + public void invalidate() { + + } + + @Override + public void validate(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public AxisAlignedBB getBoundingBox(ForgeDirection side) { + float[][] bounds = new float[3][2]; + // X START - END + bounds[0][0] = 0.25F; + bounds[0][1] = 0.75F; + // Y START - END + bounds[1][0] = 0.125F; + bounds[1][1] = 0.251F; + // Z START - END + bounds[2][0] = 0.25F; + bounds[2][1] = 0.75F; + + MatrixTranformations.transform(bounds, side); + return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); + } + + @Override + public IPipePluggableRenderer getRenderer() { + return new PlugPluggableRenderer(); + } + + @Override + public void writeData(ByteBuf data) { + + } + + @Override + public void readData(ByteBuf data) { + + } +} diff --git a/common/buildcraft/transport/RobotStationPluggable.java b/common/buildcraft/transport/RobotStationPluggable.java new file mode 100644 index 00000000..f3b90077 --- /dev/null +++ b/common/buildcraft/transport/RobotStationPluggable.java @@ -0,0 +1,256 @@ +package buildcraft.transport; + +import java.awt.*; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.BuildCraftTransport; +import buildcraft.api.core.render.ITextureStates; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; +import buildcraft.core.robots.DockingStation; +import buildcraft.core.robots.RobotRegistry; +import buildcraft.core.utils.MatrixTranformations; + +/** +* Created by asie on 12/15/14. +*/ +public class RobotStationPluggable implements IPipePluggable { + public class RobotStationPluggableRenderer implements IPipePluggableRenderer { + private float zFightOffset = 1 / 4096.0F; + + private void robotStationPartRender(RenderBlocks renderblocks, RobotStationState state, + ForgeDirection side, ITextureStates blockStateMachine, int x, int y, int z, + float xStart, float xEnd, float yStart, float yEnd, float zStart, + float zEnd) { + + float[][] zeroState = new float[3][2]; + // X START - END + zeroState[0][0] = xStart + zFightOffset; + zeroState[0][1] = xEnd - zFightOffset; + // Y START - END + zeroState[1][0] = yStart; + zeroState[1][1] = yEnd; + // Z START - END + zeroState[2][0] = zStart + zFightOffset; + zeroState[2][1] = zEnd - zFightOffset; + + switch (state) { + case None: + case Available: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStation.ordinal())); + break; + case Reserved: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStationReserved.ordinal())); + break; + case Linked: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStationLinked.ordinal())); + break; + } + + float[][] rotated = MatrixTranformations.deepClone(zeroState); + MatrixTranformations.transform(rotated, side); + + renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], + rotated[2][0], rotated[0][1], rotated[1][1], + rotated[2][1]); + renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); + } + + @Override + public void renderPluggable(RenderBlocks renderblocks, IPipe pipe, ForgeDirection side, IPipePluggable pipePluggable, ITextureStates blockStateMachine, int x, int y, int z) { + RobotStationState state = ((RobotStationPluggable) pipePluggable).renderState; + + //float width = 0.075F; + + robotStationPartRender (renderblocks, state, side, blockStateMachine, x, y, z, + 0.45F, 0.55F, + 0.0F, 0.224F, + 0.45F, 0.55F); + + + /*pipeRobotStationPartRender (renderblocks, block, state, x, y, z, + 0.25F, 0.75F, + 0.025F, 0.224F, + 0.25F, 0.25F + width); + + pipeRobotStationPartRender (renderblocks, block, state, x, y, z, + 0.25F, 0.75F, + 0.025F, 0.224F, + 0.75F - width, 0.75F); + + pipeRobotStationPartRender (renderblocks, block, state, x, y, z, + 0.25F, 0.25F + width, + 0.025F, 0.224F, + 0.25F + width, 0.75F - width); + + pipeRobotStationPartRender (renderblocks, block, state, x, y, z, + 0.75F - width, 0.75F, + 0.025F, 0.224F, + 0.25F + width, 0.75F - width);*/ + + float[][] zeroState = new float[3][2]; + + + // X START - END + zeroState[0][0] = 0.25F + zFightOffset; + zeroState[0][1] = 0.75F - zFightOffset; + // Y START - END + zeroState[1][0] = 0.225F; + zeroState[1][1] = 0.251F; + // Z START - END + zeroState[2][0] = 0.25F + zFightOffset; + zeroState[2][1] = 0.75F - zFightOffset; + + switch(state) { + case None: + case Available: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStation.ordinal())); + break; + case Reserved: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStationReserved.ordinal())); + break; + case Linked: + blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider + .getIcon(PipeIconProvider.TYPE.PipeRobotStationLinked.ordinal())); + break; + } + + float[][] rotated = MatrixTranformations.deepClone(zeroState); + MatrixTranformations.transform(rotated, side); + + renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], + rotated[2][0], rotated[0][1], rotated[1][1], + rotated[2][1]); + renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); + } + } + public static enum RobotStationState { + None, + Available, + Reserved, + Linked + } + + private RobotStationState renderState; + private DockingStation station; + private boolean isValid = false; + + public RobotStationPluggable() { + + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + + } + + @Override + public ItemStack[] getDropItems(IPipeContainer pipe) { + return new ItemStack[] { new ItemStack(BuildCraftTransport.robotStationItem) }; + } + + @Override + public void onAttachedPipe(IPipeContainer pipe, ForgeDirection direction) { + validate(pipe, direction); + } + + @Override + public void onDetachedPipe(IPipeContainer pipe, ForgeDirection direction) { + invalidate(); + } + + public DockingStation getStation() { + return station; + } + + @Override + public boolean isBlocking(IPipeContainer pipe, ForgeDirection direction) { + return true; + } + + @Override + public void invalidate() { + if (station != null + && station.getPipe() != null + && !station.getPipe().getWorld().isRemote) { + RobotRegistry.getRegistry(station.world).removeStation(station); + isValid = false; + } + } + + @Override + public void validate(IPipeContainer pipe, ForgeDirection direction) { + TileGenericPipe gPipe = (TileGenericPipe) pipe; + if (!isValid && !gPipe.getWorld().isRemote) { + station = (DockingStation) + RobotRegistry.getRegistry(gPipe.getWorld()).getStation( + gPipe.xCoord, + gPipe.yCoord, + gPipe.zCoord, + direction); + + if (station == null) { + station = new DockingStation(gPipe, direction); + RobotRegistry.getRegistry(gPipe.getWorld()).registerStation(station); + } + + isValid = true; + } + } + + @Override + public AxisAlignedBB getBoundingBox(ForgeDirection side) { + float[][] bounds = new float[3][2]; + // X START - END + bounds[0][0] = 0.25F; + bounds[0][1] = 0.75F; + // Y START - END + bounds[1][0] = 0.125F; + bounds[1][1] = 0.251F; + // Z START - END + bounds[2][0] = 0.25F; + bounds[2][1] = 0.75F; + + MatrixTranformations.transform(bounds, side); + return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); + } + + public RobotStationState getRenderState() { + return renderState; + } + + @Override + public IPipePluggableRenderer getRenderer() { + return new RobotStationPluggableRenderer(); + } + + @Override + public void writeData(ByteBuf data) { + DockingStation station = getStation(); + this.renderState = station.isTaken() + ? (station.isMainStation() ? RobotStationState.Linked : RobotStationState.Reserved) + : RobotStationState.Available; + data.writeByte(getRenderState().ordinal()); + } + + @Override + public void readData(ByteBuf data) { + this.renderState = RobotStationState.values()[data.readUnsignedByte()]; + } +} diff --git a/common/buildcraft/transport/TileGenericPipe.java b/common/buildcraft/transport/TileGenericPipe.java index d6e4f746..92b87a17 100644 --- a/common/buildcraft/transport/TileGenericPipe.java +++ b/common/buildcraft/transport/TileGenericPipe.java @@ -37,18 +37,19 @@ import buildcraft.api.core.EnumColor; import buildcraft.api.core.IIconProvider; import buildcraft.api.core.Position; import buildcraft.api.gates.IGateExpansion; -import buildcraft.api.transport.IPipe; -import buildcraft.api.transport.IPipeConnection; -import buildcraft.api.transport.IPipePluggable; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipeConnection; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.PipeManager; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.DefaultProps; import buildcraft.core.IDropControlInventory; import buildcraft.core.ITileBufferHolder; import buildcraft.core.TileBuffer; import buildcraft.core.inventory.InvUtils; import buildcraft.core.network.BuildCraftPacket; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.core.network.IGuiReturnHandler; import buildcraft.core.network.ISyncedTile; import buildcraft.core.network.PacketTileState; @@ -56,15 +57,15 @@ import buildcraft.core.robots.DockingStation; import buildcraft.core.utils.Utils; import buildcraft.transport.ItemFacade.FacadeState; import buildcraft.transport.gates.GateFactory; -import buildcraft.transport.gates.ItemGate; -import buildcraft.transport.utils.RobotStationState; +import buildcraft.transport.gates.GatePluggable; public class TileGenericPipe extends TileEntity implements IFluidHandler, - IPipeTile, ITileBufferHolder, IEnergyHandler, IDropControlInventory, + IPipeContainer, ITileBufferHolder, IEnergyHandler, IDropControlInventory, ISyncedTile, ISolidSideTile, IGuiReturnHandler { public boolean initialized = false; public final PipeRenderState renderState = new PipeRenderState(); + public final PipePluggableState pluggableState = new PipePluggableState(); public final CoreState coreState = new CoreState(); public boolean[] pipeConnectionsBuffer = new boolean[6]; @@ -80,41 +81,21 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, protected boolean resyncGateExpansions = false; protected boolean attachPluggables = false; + private SideProperties sideProperties = new SideProperties(); private TileBuffer[] tileBuffer; private int glassColor = -1; - public static class CoreState implements IClientState { + public static class CoreState implements ISerializable { public int pipeId = -1; - public ItemGate.GatePluggable[] gates = new ItemGate.GatePluggable[ForgeDirection.VALID_DIRECTIONS.length]; @Override public void writeData(ByteBuf data) { data.writeInt(pipeId); - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - ItemGate.GatePluggable gate = gates[i]; - - boolean gateValid = gate != null; - data.writeBoolean(gateValid); - if (gateValid) { - gate.writeToByteBuf(data); - } - } } @Override public void readData(ByteBuf data) { pipeId = data.readInt(); - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - if (data.readBoolean()) { - ItemGate.GatePluggable gate = gates[i]; - if (gate == null) { - gates[i] = gate = new ItemGate.GatePluggable(); - } - gate.readFromByteBuf(data); - } else { - gates[i] = null; - } - } } } @@ -129,7 +110,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, nbt.removeTag(key); } else { NBTTagCompound pluggableData = new NBTTagCompound(); - pluggableData.setString("pluggableClass", pluggable.getClass().getName()); + pluggableData.setString("pluggableName", PipeManager.getPluggableName(pluggable.getClass())); pluggable.writeToNBT(pluggableData); nbt.setTag(key, pluggableData); } @@ -144,7 +125,22 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } try { NBTTagCompound pluggableData = nbt.getCompoundTag(key); - Class pluggableClass = Class.forName(pluggableData.getString("pluggableClass")); + Class pluggableClass = null; + // Migration support for 6.1.x/6.2.x + if (pluggableData.hasKey("pluggableClass")) { + String c = pluggableData.getString("pluggableClass"); + if ("buildcraft.transport.gates.ItemGate$GatePluggable".equals(c)) { + pluggableClass = GatePluggable.class; + } else if ("buildcraft.transport.gates.ItemFacade$FacadePluggable".equals(c)) { + pluggableClass = FacadePluggable.class; + } else if ("buildcraft.transport.gates.ItemPlug$PlugPluggable".equals(c)) { + pluggableClass = PlugPluggable.class; + } else if ("buildcraft.transport.gates.ItemRobotStation$RobotStationPluggable".equals(c)) { + pluggableClass = RobotStationPluggable.class; + } + } else { + pluggableClass = PipeManager.getPluggableByName(pluggableData.getString("pluggableName")); + } if (!IPipePluggable.class.isAssignableFrom(pluggableClass)) { BCLog.logger.warn("Wrong pluggable class: " + pluggableClass); continue; @@ -162,7 +158,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { IPipePluggable pluggable = null; if (nbt.hasKey("facadeState[" + i + "]")) { - pluggable = new ItemFacade.FacadePluggable(FacadeState.readArray(nbt.getTagList("facadeState[" + i + "]", Constants.NBT.TAG_COMPOUND))); + pluggable = new FacadePluggable(FacadeState.readArray(nbt.getTagList("facadeState[" + i + "]", Constants.NBT.TAG_COMPOUND))); } else { // Migration support for 5.0.x and 6.0.x if (nbt.hasKey("facadeBlocks[" + i + "]")) { @@ -172,7 +168,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, if (blockId != 0) { int metadata = nbt.getInteger("facadeMeta[" + i + "]"); - pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{FacadeState.create(block, metadata)}); + pluggable = new FacadePluggable(new FacadeState[]{FacadeState.create(block, metadata)}); } } else if (nbt.hasKey("facadeBlocksStr[" + i + "][0]")) { // 6.0.x @@ -186,18 +182,18 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, nbt.getInteger("facadeMeta[" + i + "][1]"), PipeWire.fromOrdinal(nbt.getInteger("facadeWires[" + i + "]")) ); - pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{mainState, phasedState}); + pluggable = new FacadePluggable(new FacadeState[]{mainState, phasedState}); } else { - pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{mainState}); + pluggable = new FacadePluggable(new FacadeState[]{mainState}); } } } if (nbt.getBoolean("plug[" + i + "]")) { - pluggable = new ItemPlug.PlugPluggable(); + pluggable = new PlugPluggable(); } if (nbt.getBoolean("robotStation[" + i + "]")) { - pluggable = new ItemRobotStation.RobotStationPluggable(); + pluggable = new RobotStationPluggable(); } if (pluggable != null) { @@ -251,8 +247,6 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } } - private SideProperties sideProperties = new SideProperties(); - public TileGenericPipe() { } @@ -501,11 +495,11 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, // Facades for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { IPipePluggable pluggable = sideProperties.pluggables[direction.ordinal()]; - if (!(pluggable instanceof ItemFacade.FacadePluggable)) { + if (!(pluggable instanceof FacadePluggable)) { renderState.facadeMatrix.setFacade(direction, null, 0, true); continue; } - FacadeState[] states = ((ItemFacade.FacadePluggable) pluggable).states; + FacadeState[] states = ((FacadePluggable) pluggable).states; if (states == null) { renderState.facadeMatrix.setFacade(direction, null, 0, true); continue; @@ -531,31 +525,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, renderState.facadeMatrix.setFacade(direction, block, metadata, transparent); } - //Plugs - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - IPipePluggable pluggable = sideProperties.pluggables[direction.ordinal()]; - renderState.plugMatrix.setConnected(direction, pluggable instanceof ItemPlug.PlugPluggable); - - if (pluggable instanceof ItemRobotStation.RobotStationPluggable) { - DockingStation station = ((ItemRobotStation.RobotStationPluggable) pluggable).getStation(); - - if (station.isTaken()) { - if (station.isMainStation()) { - renderState.robotStationMatrix.setState(direction, - RobotStationState.Linked); - } else { - renderState.robotStationMatrix.setState(direction, - RobotStationState.Reserved); - } - } else { - renderState.robotStationMatrix.setState(direction, - RobotStationState.Available); - } - } else { - renderState.robotStationMatrix.setState(direction, RobotStationState.None); - } - - } + pluggableState.setPluggables(sideProperties.pluggables); if (renderState.isDirty()) { renderState.clean(); @@ -649,6 +619,21 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, return null; } + @Override + public int x() { + return xCoord; + } + + @Override + public int y() { + return yCoord; + } + + @Override + public int z() { + return zCoord; + } + /* SMP */ public BuildCraftPacket getBCDescriptionPacket() { @@ -663,9 +648,10 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, packet.addStateForSerialization((byte) 0, coreState); packet.addStateForSerialization((byte) 1, renderState); + packet.addStateForSerialization((byte) 2, pluggableState); - if (pipe instanceof IClientState) { - packet.addStateForSerialization((byte) 2, (IClientState) pipe); + if (pipe instanceof ISerializable) { + packet.addStateForSerialization((byte) 3, (ISerializable) pipe); } return packet; @@ -779,8 +765,8 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } protected boolean hasBlockingPluggable(ForgeDirection side) { - IPipePluggable pluggable = sideProperties.pluggables[side.ordinal()]; - return pluggable != null && pluggable.blocking(this, side); + IPipePluggable pluggable = getPluggable(side); + return pluggable != null && pluggable.isBlocking(this, side); } private void computeConnections() { @@ -826,7 +812,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, */ @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasPlug(from) && !hasRobotStation(from)) { + if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasBlockingPluggable(from)) { return ((IFluidHandler) pipe.transport).fill(from, resource, doFill); } else { return 0; @@ -835,7 +821,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasPlug(from) && !hasRobotStation(from)) { + if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasBlockingPluggable(from)) { return ((IFluidHandler) pipe.transport).drain(from, maxDrain, doDrain); } else { return null; @@ -844,7 +830,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasPlug(from) && !hasRobotStation(from)) { + if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasBlockingPluggable(from)) { return ((IFluidHandler) pipe.transport).drain(from, resource, doDrain); } else { return null; @@ -853,7 +839,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasPlug(from) && !hasRobotStation(from)) { + if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasBlockingPluggable(from)) { return ((IFluidHandler) pipe.transport).canFill(from, fluid); } else { return false; @@ -862,7 +848,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { - if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasPlug(from) && !hasRobotStation(from)) { + if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof IFluidHandler && !hasBlockingPluggable(from)) { return ((IFluidHandler) pipe.transport).canDrain(from, fluid); } else { return false; @@ -879,21 +865,21 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } public boolean addFacade(ForgeDirection direction, FacadeState[] states) { - return setPluggable(direction, new ItemFacade.FacadePluggable(states)); + return setPluggable(direction, new FacadePluggable(states)); } public boolean addPlug(ForgeDirection direction) { - return setPluggable(direction, new ItemPlug.PlugPluggable()); + return setPluggable(direction, new PlugPluggable()); } public boolean addRobotStation(ForgeDirection direction) { - return setPluggable(direction, new ItemRobotStation.RobotStationPluggable()); + return setPluggable(direction, new RobotStationPluggable()); } public boolean addGate(ForgeDirection direction, Gate gate) { gate.setDirection(direction); pipe.gates[direction.ordinal()] = gate; - return setPluggable(direction, new ItemGate.GatePluggable(gate)); + return setPluggable(direction, new GatePluggable(gate)); } public boolean hasFacade(ForgeDirection direction) { @@ -902,7 +888,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } else if (this.getWorldObj().isRemote) { return renderState.facadeMatrix.getFacadeBlock(direction) != null; } else { - return sideProperties.pluggables[direction.ordinal()] instanceof ItemFacade.FacadePluggable; + return sideProperties.pluggables[direction.ordinal()] instanceof FacadePluggable; } } @@ -912,7 +898,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } else if (this.getWorldObj().isRemote) { return renderState.gateMatrix.isGateExists(direction); } else { - return sideProperties.pluggables[direction.ordinal()] instanceof ItemGate.GatePluggable; + return sideProperties.pluggables[direction.ordinal()] instanceof GatePluggable; } } @@ -928,10 +914,6 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } private void updateCoreState() { - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - IPipePluggable pluggable = sideProperties.pluggables[i]; - coreState.gates[i] = pluggable instanceof ItemGate.GatePluggable ? (ItemGate.GatePluggable) pluggable : null; - } } public boolean hasEnabledFacade(ForgeDirection direction) { @@ -940,14 +922,14 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, public ItemStack getFacade(ForgeDirection direction) { IPipePluggable pluggable = sideProperties.pluggables[direction.ordinal()]; - return pluggable instanceof ItemFacade.FacadePluggable ? - ItemFacade.getFacade(((ItemFacade.FacadePluggable) pluggable).states) : null; + return pluggable instanceof FacadePluggable ? + ItemFacade.getFacade(((FacadePluggable) pluggable).states) : null; } public DockingStation getStation(ForgeDirection direction) { IPipePluggable pluggable = sideProperties.pluggables[direction.ordinal()]; - return pluggable instanceof ItemRobotStation.RobotStationPluggable ? - ((ItemRobotStation.RobotStationPluggable) pluggable).getStation() : null; + return pluggable instanceof RobotStationPluggable ? + ((RobotStationPluggable) pluggable).getStation() : null; } // Legacy @@ -955,7 +937,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, if (sideProperties.pluggables[direction] == null) { gate.setDirection(ForgeDirection.getOrientation(direction)); pipe.gates[direction] = gate; - sideProperties.pluggables[direction] = new ItemGate.GatePluggable(gate); + sideProperties.pluggables[direction] = new GatePluggable(gate); } } @@ -972,14 +954,16 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } @Override - public IClientState getStateInstance(byte stateId) { + public ISerializable getStateInstance(byte stateId) { switch (stateId) { case 0: return coreState; case 1: return renderState; case 2: - return (IClientState) pipe; + return pluggableState; + case 3: + return (ISerializable) pipe; } throw new RuntimeException("Unknown state requested: " + stateId + " this is a bug!"); } @@ -999,21 +983,6 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, if (pipe == null) { break; } - - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - final ItemGate.GatePluggable gatePluggable = coreState.gates[i]; - if (gatePluggable == null) { - pipe.gates[i] = null; - continue; - } - Gate gate = pipe.gates[i]; - if (gate == null || gate.logic != gatePluggable.logic || gate.material != gatePluggable.material) { - pipe.gates[i] = GateFactory.makeGate(pipe, gatePluggable.material, gatePluggable.logic, ForgeDirection.getOrientation(i)); - } - } - - syncGateExpansions(); - worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); break; @@ -1024,6 +993,27 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } break; } + case 2: { + for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { + final IPipePluggable pluggable = getPluggable(ForgeDirection.getOrientation(i)); + if (pluggable != null && pluggable instanceof GatePluggable) { + final GatePluggable gatePluggable = (GatePluggable) pluggable; + Gate gate = pipe.gates[i]; + if (gate == null || gate.logic != gatePluggable.logic || gate.material != gatePluggable.material) { + pipe.gates[i] = GateFactory.makeGate(pipe, gatePluggable.material, gatePluggable.logic, ForgeDirection.getOrientation(i)); + } + } else { + pipe.gates[i] = null; + } + } + + syncGateExpansions(); + + // TODO: Add some kind of isDirty flag? I don't know... + worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); + sideProperties.pluggables = pluggableState.getPluggables(); + break; + } } } @@ -1031,8 +1021,11 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, resyncGateExpansions = false; for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { Gate gate = pipe.gates[i]; - ItemGate.GatePluggable gatePluggable = coreState.gates[i]; - if (gate != null && gatePluggable.expansions.length > 0) { + if (gate == null) { + continue; + } + GatePluggable gatePluggable = (GatePluggable) sideProperties.pluggables[i]; + if (gatePluggable.expansions.length > 0) { for (IGateExpansion expansion : gatePluggable.expansions) { if (expansion != null) { if (!gate.expansions.containsKey(expansion)) { @@ -1071,28 +1064,20 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, return false; } - public boolean hasPlug(ForgeDirection side) { + public IPipePluggable getPluggable(ForgeDirection side) { if (side == null || side == ForgeDirection.UNKNOWN) { - return false; + return null; } - if (this.worldObj.isRemote) { - return renderState.plugMatrix.isConnected(side); - } - - return sideProperties.pluggables[side.ordinal()] instanceof ItemPlug.PlugPluggable; + return sideProperties.pluggables[side.ordinal()]; } - public boolean hasRobotStation(ForgeDirection side) { + public boolean hasPluggable(ForgeDirection side) { if (side == null || side == ForgeDirection.UNKNOWN) { return false; } - if (this.worldObj.isRemote) { - return renderState.robotStationMatrix.isConnected(side); - } - - return sideProperties.pluggables[side.ordinal()] instanceof ItemRobotStation.RobotStationPluggable; + return sideProperties.pluggables[side.ordinal()] != null; } public Block getBlock() { @@ -1170,10 +1155,25 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler, } @Override - public TileEntity getAdjacentTile(ForgeDirection dir) { + public Block getNeighborBlock(ForgeDirection dir) { + return getBlock(dir); + } + + @Override + public TileEntity getNeighborTile(ForgeDirection dir) { return getTile(dir); } + @Override + public IPipe getNeighborPipe(ForgeDirection dir) { + TileEntity neighborTile = getTile(dir); + if (neighborTile instanceof IPipeContainer) { + return ((IPipeContainer) neighborTile).getPipe(); + } else { + return null; + } + } + @Override public IPipe getPipe() { return pipe; diff --git a/common/buildcraft/transport/gates/GatePluggable.java b/common/buildcraft/transport/gates/GatePluggable.java new file mode 100644 index 00000000..39176dc9 --- /dev/null +++ b/common/buildcraft/transport/gates/GatePluggable.java @@ -0,0 +1,187 @@ +package buildcraft.transport.gates; + +import java.util.Set; +import io.netty.buffer.ByteBuf; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.gates.GateExpansions; +import buildcraft.api.gates.IGateExpansion; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; +import buildcraft.core.CoreConstants; +import buildcraft.core.utils.MatrixTranformations; +import buildcraft.transport.Gate; +import buildcraft.transport.TileGenericPipe; + +public class GatePluggable implements IPipePluggable { + public GateDefinition.GateMaterial material; + public GateDefinition.GateLogic logic; + public IGateExpansion[] expansions; + + public GatePluggable() { + } + + public GatePluggable(Gate gate) { + this.material = gate.material; + this.logic = gate.logic; + + Set gateExpansions = gate.expansions.keySet(); + this.expansions = gateExpansions.toArray(new IGateExpansion[gateExpansions.size()]); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + nbt.setByte(ItemGate.NBT_TAG_MAT, (byte) material.ordinal()); + nbt.setByte(ItemGate.NBT_TAG_LOGIC, (byte) logic.ordinal()); + + NBTTagList expansionsList = nbt.getTagList(ItemGate.NBT_TAG_EX, Constants.NBT.TAG_STRING); + for (IGateExpansion expansion : expansions) { + expansionsList.appendTag(new NBTTagString(expansion.getUniqueIdentifier())); + } + nbt.setTag(ItemGate.NBT_TAG_EX, expansionsList); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + material = GateDefinition.GateMaterial.fromOrdinal(nbt.getByte(ItemGate.NBT_TAG_MAT)); + logic = GateDefinition.GateLogic.fromOrdinal(nbt.getByte(ItemGate.NBT_TAG_LOGIC)); + + NBTTagList expansionsList = nbt.getTagList(ItemGate.NBT_TAG_EX, Constants.NBT.TAG_STRING); + final int expansionsSize = expansionsList.tagCount(); + expansions = new IGateExpansion[expansionsSize]; + for (int i = 0; i < expansionsSize; i++) { + expansions[i] = GateExpansions.getExpansion(expansionsList.getStringTagAt(i)); + } + } + + @Override + public void writeData(ByteBuf buf) { + buf.writeByte(material.ordinal()); + buf.writeByte(logic.ordinal()); + + final int expansionsSize = expansions.length; + buf.writeInt(expansionsSize); + for (IGateExpansion expansion : expansions) { + buf.writeShort(GateExpansions.getExpansionID(expansion)); + } + } + + @Override + public void readData(ByteBuf buf) { + material = GateDefinition.GateMaterial.fromOrdinal(buf.readByte()); + logic = GateDefinition.GateLogic.fromOrdinal(buf.readByte()); + + final int expansionsSize = buf.readInt(); + expansions = new IGateExpansion[expansionsSize]; + for (int i = 0; i < expansionsSize; i++) { + expansions[i] = GateExpansions.getExpansionByID(buf.readUnsignedShort()); + } + } + + @Override + public ItemStack[] getDropItems(IPipeContainer pipe) { + ItemStack gate = ItemGate.makeGateItem(material, logic); + for (IGateExpansion expansion : expansions) { + ItemGate.addGateExpansion(gate, expansion); + } + return new ItemStack[] { gate }; + } + + @Override + public void onAttachedPipe(IPipeContainer pipe, ForgeDirection direction) { + TileGenericPipe pipeReal = (TileGenericPipe) pipe; + if (!pipeReal.getWorld().isRemote) { + Gate gate = pipeReal.pipe.gates[direction.ordinal()]; + if (gate == null || gate.material != material || gate.logic != logic) { + pipeReal.pipe.gates[direction.ordinal()] = GateFactory.makeGate(pipeReal.pipe, material, logic, direction); + pipeReal.scheduleRenderUpdate(); + } + } + } + + @Override + public void onDetachedPipe(IPipeContainer pipe, ForgeDirection direction) { + TileGenericPipe pipeReal = (TileGenericPipe) pipe; + if (!pipeReal.getWorld().isRemote) { + Gate gate = pipeReal.pipe.gates[direction.ordinal()]; + if (gate != null) { + gate.resetGate(); + pipeReal.pipe.gates[direction.ordinal()] = null; + } + pipeReal.scheduleRenderUpdate(); + } + } + + @Override + public boolean isBlocking(IPipeContainer pipe, ForgeDirection direction) { + return true; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof GatePluggable)) { + return false; + } + GatePluggable o = (GatePluggable) obj; + if (o.material.ordinal() != material.ordinal()) { + return false; + } + if (o.logic.ordinal() != logic.ordinal()) { + return false; + } + if (o.expansions.length != expansions.length) { + return false; + } + for (int i = 0; i < expansions.length; i++) { + if (o.expansions[i] != expansions[i]) { + return false; + } + } + return true; + } + + @Override + public void invalidate() { + + } + + @Override + public void validate(IPipeContainer pipe, ForgeDirection direction) { + + } + + @Override + public AxisAlignedBB getBoundingBox(ForgeDirection side) { + float min = CoreConstants.PIPE_MIN_POS + 0.05F; + float max = CoreConstants.PIPE_MAX_POS - 0.05F; + + float[][] bounds = new float[3][2]; + // X START - END + bounds[0][0] = min; + bounds[0][1] = max; + // Y START - END + bounds[1][0] = CoreConstants.PIPE_MIN_POS - 0.10F; + bounds[1][1] = CoreConstants.PIPE_MIN_POS; + // Z START - END + bounds[2][0] = min; + bounds[2][1] = max; + + MatrixTranformations.transform(bounds, side); + return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]); + } + + // TODO: Port Gates to the Pluggable render system + @Override + public IPipePluggableRenderer getRenderer() { + return null; + } +} diff --git a/common/buildcraft/transport/gates/GatePluggableRender.java b/common/buildcraft/transport/gates/GatePluggableRender.java new file mode 100644 index 00000000..17fdd2c2 --- /dev/null +++ b/common/buildcraft/transport/gates/GatePluggableRender.java @@ -0,0 +1,15 @@ +package buildcraft.transport.gates; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.render.ITextureStates; +import buildcraft.api.pipes.IPipe; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; + +public class GatePluggableRender implements IPipePluggableRenderer { + @Override + public void renderPluggable(RenderBlocks renderblocks, IPipe pipe, ForgeDirection side, IPipePluggable pipePluggable, ITextureStates blockStateMachine, int x, int y, int z) { + + } +} diff --git a/common/buildcraft/transport/gates/ItemGate.java b/common/buildcraft/transport/gates/ItemGate.java index 5348df55..add751f0 100755 --- a/common/buildcraft/transport/gates/ItemGate.java +++ b/common/buildcraft/transport/gates/ItemGate.java @@ -31,9 +31,10 @@ import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.gates.GateExpansions; import buildcraft.api.gates.IGateExpansion; +import buildcraft.api.pipes.IPipePluggableRenderer; import buildcraft.api.statements.StatementManager; -import buildcraft.api.transport.IPipePluggable; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.core.ItemBuildCraft; import buildcraft.core.inventory.InvUtils; import buildcraft.core.utils.StringUtils; @@ -43,148 +44,10 @@ import buildcraft.transport.gates.GateDefinition.GateLogic; import buildcraft.transport.gates.GateDefinition.GateMaterial; public class ItemGate extends ItemBuildCraft { - public static class GatePluggable implements IPipePluggable { - public GateMaterial material; - public GateLogic logic; - public IGateExpansion[] expansions; - public GatePluggable() { - } - - public GatePluggable(Gate gate) { - this.material = gate.material; - this.logic = gate.logic; - - Set gateExpansions = gate.expansions.keySet(); - this.expansions = gateExpansions.toArray(new IGateExpansion[gateExpansions.size()]); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - nbt.setByte(NBT_TAG_MAT, (byte) material.ordinal()); - nbt.setByte(NBT_TAG_LOGIC, (byte) logic.ordinal()); - - NBTTagList expansionsList = nbt.getTagList(NBT_TAG_EX, Constants.NBT.TAG_STRING); - for (IGateExpansion expansion : expansions) { - expansionsList.appendTag(new NBTTagString(expansion.getUniqueIdentifier())); - } - nbt.setTag(NBT_TAG_EX, expansionsList); - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - material = GateMaterial.fromOrdinal(nbt.getByte(NBT_TAG_MAT)); - logic = GateLogic.fromOrdinal(nbt.getByte(NBT_TAG_LOGIC)); - - NBTTagList expansionsList = nbt.getTagList(NBT_TAG_EX, Constants.NBT.TAG_STRING); - final int expansionsSize = expansionsList.tagCount(); - expansions = new IGateExpansion[expansionsSize]; - for (int i = 0; i < expansionsSize; i++) { - expansions[i] = GateExpansions.getExpansion(expansionsList.getStringTagAt(i)); - } - } - - public void writeToByteBuf(ByteBuf buf) { - buf.writeByte(material.ordinal()); - buf.writeByte(logic.ordinal()); - - final int expansionsSize = expansions.length; - buf.writeInt(expansionsSize); - for (IGateExpansion expansion : expansions) { - buf.writeShort(GateExpansions.getExpansionID(expansion)); - } - } - - public void readFromByteBuf(ByteBuf buf) { - material = GateMaterial.fromOrdinal(buf.readByte()); - logic = GateLogic.fromOrdinal(buf.readByte()); - - final int expansionsSize = buf.readInt(); - expansions = new IGateExpansion[expansionsSize]; - for (int i = 0; i < expansionsSize; i++) { - expansions[i] = GateExpansions.getExpansionByID(buf.readUnsignedShort()); - } - } - - @Override - public ItemStack[] getDropItems(IPipeTile pipe) { - ItemStack gate = makeGateItem(material, logic); - for (IGateExpansion expansion : expansions) { - addGateExpansion(gate, expansion); - } - return new ItemStack[] { gate }; - } - - @Override - public void onAttachedPipe(IPipeTile pipe, ForgeDirection direction) { - TileGenericPipe pipeReal = (TileGenericPipe) pipe; - if (!pipeReal.getWorld().isRemote) { - Gate gate = pipeReal.pipe.gates[direction.ordinal()]; - if (gate == null || gate.material != material || gate.logic != logic) { - pipeReal.pipe.gates[direction.ordinal()] = GateFactory.makeGate(pipeReal.pipe, material, logic, direction); - pipeReal.scheduleRenderUpdate(); - } - } - } - - @Override - public void onDetachedPipe(IPipeTile pipe, ForgeDirection direction) { - TileGenericPipe pipeReal = (TileGenericPipe) pipe; - if (!pipeReal.getWorld().isRemote) { - Gate gate = pipeReal.pipe.gates[direction.ordinal()]; - if (gate != null) { - gate.resetGate(); - pipeReal.pipe.gates[direction.ordinal()] = null; - } - pipeReal.scheduleRenderUpdate(); - } - } - - @Override - public boolean blocking(IPipeTile pipe, ForgeDirection direction) { - return true; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GatePluggable)) { - return false; - } - GatePluggable o = (GatePluggable) obj; - if (o.material.ordinal() != material.ordinal()) { - return false; - } - if (o.logic.ordinal() != logic.ordinal()) { - return false; - } - if (o.expansions.length != expansions.length) { - return false; - } - for (int i = 0; i < expansions.length; i++) { - if (o.expansions[i] != expansions[i]) { - return false; - } - } - return true; - } - - @Override - public void invalidate() { - - } - - @Override - public void validate(IPipeTile pipe, ForgeDirection direction) { - - } - } - - private static final String NBT_TAG_MAT = "mat"; - private static final String NBT_TAG_LOGIC = "logic"; - private static final String NBT_TAG_EX = "ex"; + protected static final String NBT_TAG_MAT = "mat"; + protected static final String NBT_TAG_LOGIC = "logic"; + protected static final String NBT_TAG_EX = "ex"; public ItemGate() { super(); diff --git a/common/buildcraft/transport/pipes/PipeFluidsEmerald.java b/common/buildcraft/transport/pipes/PipeFluidsEmerald.java index 2edfbe42..2a087b8f 100644 --- a/common/buildcraft/transport/pipes/PipeFluidsEmerald.java +++ b/common/buildcraft/transport/pipes/PipeFluidsEmerald.java @@ -22,13 +22,13 @@ import net.minecraftforge.fluids.IFluidHandler; import buildcraft.BuildCraftTransport; import buildcraft.core.GuiIds; import buildcraft.core.inventory.SimpleInventory; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.core.utils.FluidUtils; import buildcraft.core.utils.Utils; import buildcraft.transport.BlockGenericPipe; import buildcraft.transport.PipeIconProvider; -public class PipeFluidsEmerald extends PipeFluidsWood implements IClientState { +public class PipeFluidsEmerald extends PipeFluidsWood implements ISerializable { private SimpleInventory filters = new SimpleInventory(1, "Filters", 1); public PipeFluidsEmerald(Item item) { diff --git a/common/buildcraft/transport/pipes/PipeFluidsWood.java b/common/buildcraft/transport/pipes/PipeFluidsWood.java index 2a458d75..3f0974f2 100644 --- a/common/buildcraft/transport/pipes/PipeFluidsWood.java +++ b/common/buildcraft/transport/pipes/PipeFluidsWood.java @@ -25,15 +25,15 @@ import cofh.api.energy.IEnergyHandler; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.PipeManager; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.PipeManager; import buildcraft.core.RFBattery; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.transport.Pipe; import buildcraft.transport.PipeIconProvider; import buildcraft.transport.PipeTransportFluids; -public class PipeFluidsWood extends Pipe implements IEnergyHandler, IClientState { +public class PipeFluidsWood extends Pipe implements IEnergyHandler, ISerializable { public int liquidToExtract; protected int standardIconIndex = PipeIconProvider.TYPE.PipeFluidsWood_Standard.ordinal(); @@ -46,7 +46,7 @@ public class PipeFluidsWood extends Pipe implements IEnergy private PipeLogicWood logic = new PipeLogicWood(this) { @Override protected boolean isValidConnectingTile(TileEntity tile) { - if (tile instanceof IPipeTile) { + if (tile instanceof IPipeContainer) { return false; } if (!(tile instanceof IFluidHandler)) { diff --git a/common/buildcraft/transport/pipes/PipeItemsClay.java b/common/buildcraft/transport/pipes/PipeItemsClay.java index 5b6f96f9..e7126204 100644 --- a/common/buildcraft/transport/pipes/PipeItemsClay.java +++ b/common/buildcraft/transport/pipes/PipeItemsClay.java @@ -16,7 +16,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.transport.Pipe; import buildcraft.transport.PipeIconProvider; import buildcraft.transport.PipeTransportItems; @@ -49,7 +49,7 @@ public class PipeItemsClay extends Pipe { if (!event.item.blacklist.contains(o) && container.pipe.outputOpen(o)) { if (container.isPipeConnected(o)) { TileEntity entity = container.getTile(o); - if (entity instanceof IPipeTile) { + if (entity instanceof IPipeContainer) { pipesList.add(o); } else { nonPipesList.add(o); diff --git a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java index 06f75055..fd34c246 100644 --- a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java +++ b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java @@ -26,7 +26,7 @@ import buildcraft.api.core.EnumColor; import buildcraft.api.core.IIconProvider; import buildcraft.api.statements.IActionInternal; import buildcraft.api.tools.IToolWrench; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.transport.Pipe; import buildcraft.transport.PipeIconProvider; import buildcraft.transport.PipeTransportItems; @@ -38,7 +38,7 @@ import buildcraft.transport.pipes.events.PipeEventItem; import buildcraft.transport.statements.ActionPipeColor; import buildcraft.transport.statements.ActionPipeDirection; -public class PipeItemsDaizuli extends Pipe implements IClientState { +public class PipeItemsDaizuli extends Pipe implements ISerializable { private int standardIconIndex = PipeIconProvider.TYPE.PipeItemsDaizuli_Black.ordinal(); private int solidIconIndex = PipeIconProvider.TYPE.PipeAllDaizuli_Solid.ordinal(); diff --git a/common/buildcraft/transport/pipes/PipeItemsEmerald.java b/common/buildcraft/transport/pipes/PipeItemsEmerald.java index 3e3bf5c9..e6c09444 100644 --- a/common/buildcraft/transport/pipes/PipeItemsEmerald.java +++ b/common/buildcraft/transport/pipes/PipeItemsEmerald.java @@ -26,13 +26,13 @@ import buildcraft.core.inventory.InvUtils; import buildcraft.core.inventory.InventoryWrapper; import buildcraft.core.inventory.SimpleInventory; import buildcraft.core.inventory.StackHelper; -import buildcraft.core.network.IClientState; +import buildcraft.api.core.ISerializable; import buildcraft.core.network.IGuiReturnHandler; import buildcraft.core.utils.Utils; import buildcraft.transport.BlockGenericPipe; import buildcraft.transport.PipeIconProvider; -public class PipeItemsEmerald extends PipeItemsWood implements IClientState, IGuiReturnHandler { +public class PipeItemsEmerald extends PipeItemsWood implements ISerializable, IGuiReturnHandler { public enum FilterMode { WHITE_LIST, BLACK_LIST, ROUND_ROBIN diff --git a/common/buildcraft/transport/pipes/PipeItemsStripes.java b/common/buildcraft/transport/pipes/PipeItemsStripes.java index 01013af9..c875b9d0 100644 --- a/common/buildcraft/transport/pipes/PipeItemsStripes.java +++ b/common/buildcraft/transport/pipes/PipeItemsStripes.java @@ -23,10 +23,10 @@ import cofh.api.energy.IEnergyHandler; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; import buildcraft.api.core.Position; -import buildcraft.api.transport.IStripesHandler; -import buildcraft.api.transport.IStripesHandler.StripesHandlerType; -import buildcraft.api.transport.IStripesPipe; -import buildcraft.api.transport.PipeManager; +import buildcraft.api.pipes.IStripesHandler; +import buildcraft.api.pipes.IStripesHandler.StripesHandlerType; +import buildcraft.api.pipes.IStripesPipe; +import buildcraft.api.pipes.PipeManager; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.BlockUtils; import buildcraft.transport.BlockGenericPipe; diff --git a/common/buildcraft/transport/pipes/PipeItemsWood.java b/common/buildcraft/transport/pipes/PipeItemsWood.java index 93de72ed..482918f6 100644 --- a/common/buildcraft/transport/pipes/PipeItemsWood.java +++ b/common/buildcraft/transport/pipes/PipeItemsWood.java @@ -25,8 +25,8 @@ import cofh.api.energy.IEnergyHandler; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; import buildcraft.api.core.Position; -import buildcraft.api.transport.IPipeTile; -import buildcraft.api.transport.PipeManager; +import buildcraft.api.pipes.IPipeContainer; +import buildcraft.api.pipes.PipeManager; import buildcraft.core.RFBattery; import buildcraft.core.inventory.InvUtils; import buildcraft.core.inventory.InventoryWrapper; @@ -46,7 +46,7 @@ public class PipeItemsWood extends Pipe implements IEnergyHa private PipeLogicWood logic = new PipeLogicWood(this) { @Override protected boolean isValidConnectingTile(TileEntity tile) { - if (tile instanceof IPipeTile) { + if (tile instanceof IPipeContainer) { return false; } if (!(tile instanceof IInventory)) { diff --git a/common/buildcraft/transport/pipes/PipePowerWood.java b/common/buildcraft/transport/pipes/PipePowerWood.java index ff0ff12f..efac8789 100644 --- a/common/buildcraft/transport/pipes/PipePowerWood.java +++ b/common/buildcraft/transport/pipes/PipePowerWood.java @@ -17,7 +17,7 @@ import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyHandler; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; -import buildcraft.api.transport.IPipeTile; +import buildcraft.api.pipes.IPipeContainer; import buildcraft.core.RFBattery; import buildcraft.transport.IPipeTransportPowerHook; import buildcraft.transport.Pipe; @@ -157,7 +157,7 @@ public class PipePowerWood extends Pipe implements IPipeTran @Override public int requestEnergy(ForgeDirection from, int amount) { - if (container.getTile(from) instanceof IPipeTile) { + if (container.getTile(from) instanceof IPipeContainer) { requestedEnergy += amount; return amount; } else { diff --git a/common/buildcraft/transport/pipes/events/PipeEventFluid.java b/common/buildcraft/transport/pipes/events/PipeEventFluid.java new file mode 100644 index 00000000..848a8bf0 --- /dev/null +++ b/common/buildcraft/transport/pipes/events/PipeEventFluid.java @@ -0,0 +1,34 @@ +package buildcraft.transport.pipes.events; + +import java.util.List; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +public abstract class PipeEventFluid extends PipeEvent { + public final FluidStack fluidStack; + + public PipeEventFluid(FluidStack fluidStack) { + this.fluidStack = fluidStack; + } + + public static class FindDest extends PipeEventFluid { + public final List destinations; + + public FindDest(FluidStack fluidStack, List destinations) { + super(fluidStack); + this.destinations = destinations; + } + } + + public static class Fill extends PipeEventFluid { + public final ForgeDirection from; + public final boolean doAdd; + + public Fill(ForgeDirection from, FluidStack fluidStack, boolean doAdd) { + super(fluidStack); + this.from = from; + this.doAdd = doAdd; + } + } +} diff --git a/common/buildcraft/transport/pipes/events/PipeEventPower.java b/common/buildcraft/transport/pipes/events/PipeEventPower.java new file mode 100644 index 00000000..20eabf5c --- /dev/null +++ b/common/buildcraft/transport/pipes/events/PipeEventPower.java @@ -0,0 +1,31 @@ +package buildcraft.transport.pipes.events; + +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class PipeEventPower extends PipeEvent { + public final ForgeDirection from; + /** + * The amount of power left after processing. + */ + public int power; + + public PipeEventPower(ForgeDirection from, int power) { + this.from = from; + this.power = power; + } + + public static class Request extends PipeEventPower { + public Request(ForgeDirection from, int power) { + super(from, power); + } + } + + public static class Receive extends PipeEventPower { + public boolean override; + + public Receive(ForgeDirection from, int power) { + super(from, power); + this.override = false; + } + } +} diff --git a/common/buildcraft/transport/recipes/AdvancedFacadeRecipe.java b/common/buildcraft/transport/recipes/AdvancedFacadeRecipe.java index 6f42bbf6..885846c6 100644 --- a/common/buildcraft/transport/recipes/AdvancedFacadeRecipe.java +++ b/common/buildcraft/transport/recipes/AdvancedFacadeRecipe.java @@ -15,7 +15,7 @@ import buildcraft.api.core.JavaTools; import buildcraft.api.facades.FacadeType; import buildcraft.api.facades.IFacadeItem; import buildcraft.api.recipes.CraftingResult; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.silicon.ItemRedstoneChipset; import buildcraft.silicon.TileIntegrationTable; import buildcraft.transport.ItemFacade; diff --git a/common/buildcraft/transport/render/FacadeRenderHelper.java b/common/buildcraft/transport/render/FacadeRenderHelper.java index 3ed8d03f..d30c2228 100644 --- a/common/buildcraft/transport/render/FacadeRenderHelper.java +++ b/common/buildcraft/transport/render/FacadeRenderHelper.java @@ -16,6 +16,7 @@ import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; +import buildcraft.api.core.render.ITextureStates; import buildcraft.core.CoreConstants; import buildcraft.core.utils.MatrixTranformations; import buildcraft.transport.BlockGenericPipe; diff --git a/common/buildcraft/transport/render/FakeBlock.java b/common/buildcraft/transport/render/FakeBlock.java index a92bd155..b315992b 100644 --- a/common/buildcraft/transport/render/FakeBlock.java +++ b/common/buildcraft/transport/render/FakeBlock.java @@ -17,6 +17,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.api.core.render.ITextureStates; import buildcraft.transport.BlockGenericPipe; diff --git a/common/buildcraft/transport/render/PipeRendererTESR.java b/common/buildcraft/transport/render/PipeRendererTESR.java index 01257e3a..a4f8d5da 100644 --- a/common/buildcraft/transport/render/PipeRendererTESR.java +++ b/common/buildcraft/transport/render/PipeRendererTESR.java @@ -38,8 +38,8 @@ import buildcraft.BuildCraftCore.RenderMode; import buildcraft.BuildCraftTransport; import buildcraft.api.core.EnumColor; import buildcraft.api.gates.IGateExpansion; -import buildcraft.api.transport.IPipeTile.PipeType; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.IPipeContainer.PipeType; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.CoreConstants; import buildcraft.core.DefaultProps; import buildcraft.core.render.RenderEntityBlock; diff --git a/common/buildcraft/transport/render/PipeRendererWorld.java b/common/buildcraft/transport/render/PipeRendererWorld.java index d2e59d02..b6cfa4ff 100644 --- a/common/buildcraft/transport/render/PipeRendererWorld.java +++ b/common/buildcraft/transport/render/PipeRendererWorld.java @@ -17,6 +17,9 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; +import buildcraft.api.core.render.ITextureStates; +import buildcraft.api.pipes.IPipePluggable; +import buildcraft.api.pipes.IPipePluggableRenderer; import buildcraft.core.CoreConstants; import buildcraft.core.utils.ColorUtils; import buildcraft.core.utils.MatrixTranformations; @@ -110,8 +113,15 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler { // Force other opaque renders into pass 0 if (renderPass == 0) { - pipePlugRenderer(renderblocks, fakeBlock, state, x, y, z); - pipeRobotStationRenderer(renderblocks, fakeBlock, state, x, y, z); + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if (tile.hasPluggable(dir)) { + IPipePluggable p = tile.getPluggable(dir); + IPipePluggableRenderer r = p.getRenderer(); + if (r != null) { + r.renderPluggable(renderblocks, tile.getPipe(), dir, p, fakeBlock, x, y, z); + } + } + } } } @@ -156,172 +166,6 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler { FacadeRenderHelper.pipeFacadeRenderer(renderblocks, blockStateMachine, state, x, y, z); } - private void pipePlugRenderer(RenderBlocks renderblocks, ITextureStates blockStateMachine, PipeRenderState state, int x, int y, int z) { - float[][] zeroState = new float[3][2]; - - // X START - END - zeroState[0][0] = 0.25F + zFightOffset; - zeroState[0][1] = 0.75F - zFightOffset; - // Y START - END - zeroState[1][0] = 0.125F; - zeroState[1][1] = 0.251F; - // Z START - END - zeroState[2][0] = 0.25F + zFightOffset; - zeroState[2][1] = 0.75F - zFightOffset; - - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal())); // Structure Pipe - - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (state.plugMatrix.isConnected(direction)) { - float[][] rotated = MatrixTranformations.deepClone(zeroState); - MatrixTranformations.transform(rotated, direction); - - renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]); - renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); - } - } - - // X START - END - zeroState[0][0] = 0.25F + 0.125F / 2 + zFightOffset; - zeroState[0][1] = 0.75F - 0.125F / 2 + zFightOffset; - // Y START - END - zeroState[1][0] = 0.25F; - zeroState[1][1] = 0.25F + 0.125F; - // Z START - END - zeroState[2][0] = 0.25F + 0.125F / 2; - zeroState[2][1] = 0.75F - 0.125F / 2; - - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal())); // Structure Pipe - - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (state.plugMatrix.isConnected(direction)) { - float[][] rotated = MatrixTranformations.deepClone(zeroState); - MatrixTranformations.transform(rotated, direction); - - renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]); - renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); - } - } - - } - - private void pipeRobotStationPartRender(RenderBlocks renderblocks, - ITextureStates blockStateMachine, PipeRenderState state, int x, int y, int z, - float xStart, float xEnd, float yStart, float yEnd, float zStart, - float zEnd) { - - float[][] zeroState = new float[3][2]; - // X START - END - zeroState[0][0] = xStart + zFightOffset; - zeroState[0][1] = xEnd - zFightOffset; - // Y START - END - zeroState[1][0] = yStart; - zeroState[1][1] = yEnd; - // Z START - END - zeroState[2][0] = zStart + zFightOffset; - zeroState[2][1] = zEnd - zFightOffset; - - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (state.robotStationMatrix.isConnected(direction)) { - switch (state.robotStationMatrix.getState(direction)) { - case None: - case Available: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStation.ordinal())); - break; - case Reserved: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStationReserved.ordinal())); - break; - case Linked: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStationLinked.ordinal())); - break; - } - - float[][] rotated = MatrixTranformations.deepClone(zeroState); - MatrixTranformations.transform(rotated, direction); - - renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], - rotated[2][0], rotated[0][1], rotated[1][1], - rotated[2][1]); - renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); - } - } - - } - - private void pipeRobotStationRenderer(RenderBlocks renderblocks, ITextureStates blockStateMachine, PipeRenderState state, int x, int y, int z) { - //float width = 0.075F; - - pipeRobotStationPartRender (renderblocks, blockStateMachine, state, x, y, z, - 0.45F, 0.55F, - 0.0F, 0.224F, - 0.45F, 0.55F); - - - /*pipeRobotStationPartRender (renderblocks, block, state, x, y, z, - 0.25F, 0.75F, - 0.025F, 0.224F, - 0.25F, 0.25F + width); - - pipeRobotStationPartRender (renderblocks, block, state, x, y, z, - 0.25F, 0.75F, - 0.025F, 0.224F, - 0.75F - width, 0.75F); - - pipeRobotStationPartRender (renderblocks, block, state, x, y, z, - 0.25F, 0.25F + width, - 0.025F, 0.224F, - 0.25F + width, 0.75F - width); - - pipeRobotStationPartRender (renderblocks, block, state, x, y, z, - 0.75F - width, 0.75F, - 0.025F, 0.224F, - 0.25F + width, 0.75F - width);*/ - - float[][] zeroState = new float[3][2]; - - - // X START - END - zeroState[0][0] = 0.25F + zFightOffset; - zeroState[0][1] = 0.75F - zFightOffset; - // Y START - END - zeroState[1][0] = 0.225F; - zeroState[1][1] = 0.251F; - // Z START - END - zeroState[2][0] = 0.25F + zFightOffset; - zeroState[2][1] = 0.75F - zFightOffset; - - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (state.robotStationMatrix.isConnected(direction)) { - switch (state.robotStationMatrix.getState(direction)) { - case None: - case Available: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStation.ordinal())); - break; - case Reserved: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStationReserved.ordinal())); - break; - case Linked: - blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider - .getIcon(PipeIconProvider.TYPE.PipeRobotStationLinked.ordinal())); - break; - } - - float[][] rotated = MatrixTranformations.deepClone(zeroState); - MatrixTranformations.transform(rotated, direction); - - renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], - rotated[2][0], rotated[0][1], rotated[1][1], - rotated[2][1]); - renderblocks.renderStandardBlock(blockStateMachine.getBlock(), x, y, z); - } - } - } - @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { // TODO Auto-generated method stub diff --git a/common/buildcraft/transport/statements/ActionParameterSignal.java b/common/buildcraft/transport/statements/ActionParameterSignal.java index 6aee70b2..e3c11ac4 100644 --- a/common/buildcraft/transport/statements/ActionParameterSignal.java +++ b/common/buildcraft/transport/statements/ActionParameterSignal.java @@ -18,7 +18,7 @@ import buildcraft.api.statements.IStatement; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; import buildcraft.api.statements.StatementMouseClick; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.utils.StringUtils; public class ActionParameterSignal implements IStatementParameter { diff --git a/common/buildcraft/transport/statements/ActionSignalOutput.java b/common/buildcraft/transport/statements/ActionSignalOutput.java index f4936783..710207e2 100644 --- a/common/buildcraft/transport/statements/ActionSignalOutput.java +++ b/common/buildcraft/transport/statements/ActionSignalOutput.java @@ -14,7 +14,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import buildcraft.api.statements.IActionInternal; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.statements.BCStatement; import buildcraft.core.utils.StringUtils; import buildcraft.transport.Gate; diff --git a/common/buildcraft/transport/statements/ActionValve.java b/common/buildcraft/transport/statements/ActionValve.java index a446839f..6082630c 100644 --- a/common/buildcraft/transport/statements/ActionValve.java +++ b/common/buildcraft/transport/statements/ActionValve.java @@ -15,7 +15,7 @@ import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.statements.IActionInternal; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; -import buildcraft.api.transport.IPipe; +import buildcraft.api.pipes.IPipe; import buildcraft.core.statements.BCStatement; import buildcraft.core.statements.StatementParameterDirection; import buildcraft.core.utils.StringUtils; diff --git a/common/buildcraft/transport/statements/TriggerParameterSignal.java b/common/buildcraft/transport/statements/TriggerParameterSignal.java index 361abb39..b7186301 100644 --- a/common/buildcraft/transport/statements/TriggerParameterSignal.java +++ b/common/buildcraft/transport/statements/TriggerParameterSignal.java @@ -18,7 +18,7 @@ import buildcraft.api.statements.IStatement; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; import buildcraft.api.statements.StatementMouseClick; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.utils.StringUtils; public class TriggerParameterSignal implements IStatementParameter { diff --git a/common/buildcraft/transport/statements/TriggerPipeSignal.java b/common/buildcraft/transport/statements/TriggerPipeSignal.java index 7612de0e..67e4da31 100644 --- a/common/buildcraft/transport/statements/TriggerPipeSignal.java +++ b/common/buildcraft/transport/statements/TriggerPipeSignal.java @@ -15,7 +15,7 @@ import buildcraft.api.gates.IGate; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; import buildcraft.api.statements.ITriggerInternal; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; import buildcraft.core.statements.BCStatement; import buildcraft.core.utils.StringUtils; import buildcraft.transport.Pipe; diff --git a/common/buildcraft/transport/stripes/StripesHandlerArrow.java b/common/buildcraft/transport/stripes/StripesHandlerArrow.java index ec1c2e2d..90e0e063 100644 --- a/common/buildcraft/transport/stripes/StripesHandlerArrow.java +++ b/common/buildcraft/transport/stripes/StripesHandlerArrow.java @@ -6,8 +6,8 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IStripesHandler; -import buildcraft.api.transport.IStripesPipe; +import buildcraft.api.pipes.IStripesHandler; +import buildcraft.api.pipes.IStripesPipe; public class StripesHandlerArrow implements IStripesHandler { diff --git a/common/buildcraft/transport/stripes/StripesHandlerBucket.java b/common/buildcraft/transport/stripes/StripesHandlerBucket.java index 90cc3a7d..4c124cb3 100644 --- a/common/buildcraft/transport/stripes/StripesHandlerBucket.java +++ b/common/buildcraft/transport/stripes/StripesHandlerBucket.java @@ -12,9 +12,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; -import buildcraft.api.transport.IStripesHandler; -import buildcraft.api.transport.IStripesHandler.StripesHandlerType; -import buildcraft.api.transport.IStripesPipe; +import buildcraft.api.pipes.IStripesHandler; +import buildcraft.api.pipes.IStripesPipe; public class StripesHandlerBucket implements IStripesHandler { private static final ItemStack emptyBucket = new ItemStack(Items.bucket, 1); diff --git a/common/buildcraft/transport/stripes/StripesHandlerRightClick.java b/common/buildcraft/transport/stripes/StripesHandlerRightClick.java index bd142651..d7853ce8 100644 --- a/common/buildcraft/transport/stripes/StripesHandlerRightClick.java +++ b/common/buildcraft/transport/stripes/StripesHandlerRightClick.java @@ -6,9 +6,8 @@ import net.minecraft.item.ItemPotion; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IStripesHandler; -import buildcraft.api.transport.IStripesHandler.StripesHandlerType; -import buildcraft.api.transport.IStripesPipe; +import buildcraft.api.pipes.IStripesHandler; +import buildcraft.api.pipes.IStripesPipe; public class StripesHandlerRightClick implements IStripesHandler { diff --git a/common/buildcraft/transport/stripes/StripesHandlerShears.java b/common/buildcraft/transport/stripes/StripesHandlerShears.java index 63a1431f..2c80a072 100644 --- a/common/buildcraft/transport/stripes/StripesHandlerShears.java +++ b/common/buildcraft/transport/stripes/StripesHandlerShears.java @@ -7,9 +7,8 @@ import net.minecraft.item.ItemShears; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.IStripesHandler; -import buildcraft.api.transport.IStripesHandler.StripesHandlerType; -import buildcraft.api.transport.IStripesPipe; +import buildcraft.api.pipes.IStripesHandler; +import buildcraft.api.pipes.IStripesPipe; public class StripesHandlerShears implements IStripesHandler { diff --git a/common/buildcraft/transport/utils/RobotStationMatrix.java b/common/buildcraft/transport/utils/RobotStationMatrix.java deleted file mode 100755 index 176659ed..00000000 --- a/common/buildcraft/transport/utils/RobotStationMatrix.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * 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.transport.utils; - -import io.netty.buffer.ByteBuf; - -import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.core.ISerializable; - -public class RobotStationMatrix implements ISerializable { - - // TODO: All these matrixes should be passed by RPC, instead of having a - // single state carrying everything - - private RobotStationState[] states = new RobotStationState[6]; - - private boolean dirty = false; - - public RobotStationMatrix() { - for (int i = 0; i < states.length; ++i) { - states[i] = RobotStationState.None; - } - } - - public boolean isConnected(ForgeDirection direction) { - return states[direction.ordinal()] != RobotStationState.None; - } - - public void setState(ForgeDirection direction, RobotStationState value) { - if (states[direction.ordinal()] != value) { - states[direction.ordinal()] = value; - dirty = true; - } - } - - public RobotStationState getState(ForgeDirection direction) { - return states[direction.ordinal()]; - } - - public boolean isDirty() { - return dirty; - } - - public void clean() { - dirty = false; - } - - @Override - public void writeData(ByteBuf data) { - for (int i = 0; i < states.length; i++) { - data.writeByte(states[i].ordinal()); - } - } - - @Override - public void readData(ByteBuf data) { - for (int i = 0; i < states.length; i++) { - states[i] = RobotStationState.values()[data.readUnsignedByte()]; - } - } -} diff --git a/common/buildcraft/transport/utils/RobotStationState.java b/common/buildcraft/transport/utils/RobotStationState.java deleted file mode 100755 index e675f0cd..00000000 --- a/common/buildcraft/transport/utils/RobotStationState.java +++ /dev/null @@ -1,8 +0,0 @@ -package buildcraft.transport.utils; - -public enum RobotStationState { - None, - Available, - Reserved, - Linked -} \ No newline at end of file diff --git a/common/buildcraft/transport/utils/WireMatrix.java b/common/buildcraft/transport/utils/WireMatrix.java index 7b84d8f3..af096fdb 100644 --- a/common/buildcraft/transport/utils/WireMatrix.java +++ b/common/buildcraft/transport/utils/WireMatrix.java @@ -14,7 +14,7 @@ import io.netty.buffer.ByteBuf; import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.transport.PipeWire; +import buildcraft.api.pipes.PipeWire; public class WireMatrix {