API improvements: start refactoring pipe API, add renderers, hitboxes, registration and network sync to IPipePluggable API, fix tons of design things
This commit is contained in:
parent
078ff84fd7
commit
ad36ec30cd
89 changed files with 1330 additions and 1204 deletions
8
api/buildcraft/api/core/INBTStoreable.java
Normal file
8
api/buildcraft/api/core/INBTStoreable.java
Normal file
|
@ -0,0 +1,8 @@
|
|||
package buildcraft.api.core;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public interface INBTStoreable {
|
||||
void readFromNBT(NBTTagCompound tag);
|
||||
void writeToNBT(NBTTagCompound tag);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
|
@ -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 {
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
@ -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 {
|
||||
|
49
api/buildcraft/api/pipes/IPipeContainer.java
Normal file
49
api/buildcraft/api/pipes/IPipeContainer.java
Normal file
|
@ -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();
|
||||
}
|
42
api/buildcraft/api/pipes/IPipePluggable.java
Executable file
42
api/buildcraft/api/pipes/IPipePluggable.java
Executable file
|
@ -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();
|
||||
}
|
11
api/buildcraft/api/pipes/IPipePluggableRenderer.java
Normal file
11
api/buildcraft/api/pipes/IPipePluggableRenderer.java
Normal file
|
@ -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);
|
||||
}
|
|
@ -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;
|
|
@ -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;
|
|
@ -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<IStripesHandler> stripesHandlers = new ArrayList<IStripesHandler>();
|
||||
public static List<IExtractionHandler> extractionHandlers = new ArrayList<IExtractionHandler>();
|
||||
public static ArrayList<Class<? extends IPipePluggable>> pipePluggables = new ArrayList<Class<? extends IPipePluggable>>();
|
||||
private static Map<String, Class<? extends IPipePluggable>> pipePluggableNames =
|
||||
new HashMap<String, Class<? extends IPipePluggable>>();
|
||||
private static Map<Class<? extends IPipePluggable>, String> pipePluggableByNames =
|
||||
new HashMap<Class<? extends IPipePluggable>, 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<? extends IPipePluggable> 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<? extends IPipePluggable> aClass) {
|
||||
return pipePluggableByNames.get(aClass);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
3
api/buildcraft/api/pipes/package-info.java
Normal file
3
api/buildcraft/api/pipes/package-info.java
Normal file
|
@ -0,0 +1,3 @@
|
|||
@API(apiVersion = "1.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|pipes")
|
||||
package buildcraft.api.pipes;
|
||||
import cpw.mods.fml.common.API;
|
22
api/buildcraft/api/power/IRedstoneEngineReceiver.java
Normal file
22
api/buildcraft/api/power/IRedstoneEngineReceiver.java
Normal file
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<T extends Tank> extends ForwardingList<T> implements IFluidHandler, List<T>, INBTSerializable {
|
||||
public class TankManager<T extends Tank> extends ForwardingList<T> implements IFluidHandler, List<T> {
|
||||
|
||||
private List<T> tanks = new ArrayList<T>();
|
||||
|
||||
|
@ -141,16 +139,4 @@ public class TankManager<T extends Tank> extends ForwardingList<T> implements IF
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound serializeNBT() {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
writeToNBT(nbt);
|
||||
return nbt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serializeNBT(NBTTagCompound nbt) {
|
||||
readFromNBT(nbt);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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<IActionInternal> getInternalActions(IStatementContainer container) {
|
||||
LinkedList<IActionInternal> res = new LinkedList<IActionInternal>();
|
||||
|
||||
if (container.getTile() instanceof IPipeTile) {
|
||||
if (container.getTile() instanceof IPipeContainer) {
|
||||
res.add(BuildCraftCore.actionRedstone);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<IPipeTile> possiblePipes = new ArrayList<IPipeTile>();
|
||||
List<IPipeContainer> possiblePipes = new ArrayList<IPipeContainer>();
|
||||
List<ForgeDirection> pipeDirections = new ArrayList<ForgeDirection>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
98
common/buildcraft/transport/FacadePluggable.java
Normal file
98
common/buildcraft/transport/FacadePluggable.java
Normal file
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<T extends PipeTransport> 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<T extends PipeTransport> 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;
|
||||
}
|
||||
|
||||
|
|
57
common/buildcraft/transport/PipePluggableState.java
Normal file
57
common/buildcraft/transport/PipePluggableState.java
Normal file
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
137
common/buildcraft/transport/PlugPluggable.java
Normal file
137
common/buildcraft/transport/PlugPluggable.java
Normal file
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
256
common/buildcraft/transport/RobotStationPluggable.java
Normal file
256
common/buildcraft/transport/RobotStationPluggable.java
Normal file
|
@ -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()];
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
187
common/buildcraft/transport/gates/GatePluggable.java
Normal file
187
common/buildcraft/transport/gates/GatePluggable.java
Normal file
|
@ -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<IGateExpansion> 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;
|
||||
}
|
||||
}
|
15
common/buildcraft/transport/gates/GatePluggableRender.java
Normal file
15
common/buildcraft/transport/gates/GatePluggableRender.java
Normal file
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
|
@ -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<IGateExpansion> 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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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<PipeTransportFluids> implements IEnergyHandler, IClientState {
|
||||
public class PipeFluidsWood extends Pipe<PipeTransportFluids> implements IEnergyHandler, ISerializable {
|
||||
public int liquidToExtract;
|
||||
|
||||
protected int standardIconIndex = PipeIconProvider.TYPE.PipeFluidsWood_Standard.ordinal();
|
||||
|
@ -46,7 +46,7 @@ public class PipeFluidsWood extends Pipe<PipeTransportFluids> 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)) {
|
||||
|
|
|
@ -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<PipeTransportItems> {
|
|||
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);
|
||||
|
|
|
@ -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<PipeTransportItems> implements IClientState {
|
||||
public class PipeItemsDaizuli extends Pipe<PipeTransportItems> implements ISerializable {
|
||||
|
||||
private int standardIconIndex = PipeIconProvider.TYPE.PipeItemsDaizuli_Black.ordinal();
|
||||
private int solidIconIndex = PipeIconProvider.TYPE.PipeAllDaizuli_Solid.ordinal();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<PipeTransportItems> 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)) {
|
||||
|
|
|
@ -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<PipeTransportPower> 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 {
|
||||
|
|
34
common/buildcraft/transport/pipes/events/PipeEventFluid.java
Normal file
34
common/buildcraft/transport/pipes/events/PipeEventFluid.java
Normal file
|
@ -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<ForgeDirection> destinations;
|
||||
|
||||
public FindDest(FluidStack fluidStack, List<ForgeDirection> 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;
|
||||
}
|
||||
}
|
||||
}
|
31
common/buildcraft/transport/pipes/events/PipeEventPower.java
Normal file
31
common/buildcraft/transport/pipes/events/PipeEventPower.java
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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()];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package buildcraft.transport.utils;
|
||||
|
||||
public enum RobotStationState {
|
||||
None,
|
||||
Available,
|
||||
Reserved,
|
||||
Linked
|
||||
}
|
|
@ -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 {
|
||||
|
||||
|
|
Loading…
Reference in a new issue