create IFacadeItem API, close #1946

This commit is contained in:
asiekierka 2014-10-19 12:21:45 +02:00
parent 88351a6bd8
commit 260a57d600
12 changed files with 94 additions and 70 deletions

View file

@ -0,0 +1,9 @@
package buildcraft.api.facades;
public enum FacadeType {
Basic, Phased;
public static FacadeType fromOrdinal(int ordinal) {
return ordinal == 1 ? Phased : Basic;
}
}

View file

@ -0,0 +1,14 @@
package buildcraft.api.facades;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
public interface IFacadeItem {
FacadeType getFacadeType(ItemStack facade);
ItemStack getFacadeForBlock(Block block, int meta);
Block[] getBlocksForFacade(ItemStack facade);
int[] getMetaValuesForFacade(ItemStack facade);
}

View file

@ -0,0 +1,11 @@
/**
* 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
*/
@API(apiVersion = "1.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|facades")
package buildcraft.api.facades;
import cpw.mods.fml.common.API;

View file

@ -607,9 +607,9 @@ public class BuildCraftSilicon extends BuildCraftMod {
@Mod.EventHandler @Mod.EventHandler
public void remap(FMLMissingMappingsEvent event) { public void remap(FMLMissingMappingsEvent event) {
for (FMLMissingMappingsEvent.MissingMapping mapping: event.get()) { for (FMLMissingMappingsEvent.MissingMapping mapping: event.get()) {
if (mapping.name.equals("BuildCraft|Silicon:null")) if (mapping.name.equals("BuildCraft|Silicon:null")) {
mapping.remap(laserBlock); mapping.remap(laserBlock);
}
} }
} }
} }

View file

@ -532,7 +532,7 @@ public class BuildCraftTransport extends BuildCraftMod {
@Mod.EventHandler @Mod.EventHandler
public void postInit(FMLPostInitializationEvent evt) { public void postInit(FMLPostInitializationEvent evt) {
ItemFacade.initialize(); facadeItem.initialize();
} }
@Mod.EventHandler @Mod.EventHandler

View file

@ -19,7 +19,6 @@ import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftFactory; import buildcraft.BuildCraftFactory;
import buildcraft.BuildCraftSilicon; import buildcraft.BuildCraftSilicon;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.transport.ItemFacade;
public enum CreativeTabBuildCraft { public enum CreativeTabBuildCraft {
@ -51,12 +50,12 @@ public enum CreativeTabBuildCraft {
case PIPES: case PIPES:
return new ItemStack (BuildCraftTransport.pipeItemsDiamond, 1); return new ItemStack (BuildCraftTransport.pipeItemsDiamond, 1);
case FACADES: case FACADES:
return ItemFacade.getFacade(Blocks.brick_block, 0); return BuildCraftTransport.facadeItem.getFacadeForBlock(Blocks.brick_block, 0);
case BOARDS: case BOARDS:
return new ItemStack(BuildCraftSilicon.redstoneBoard, 1); return new ItemStack(BuildCraftSilicon.redstoneBoard, 1);
} }
return ItemFacade.getFacade(Blocks.brick_block, 0); return BuildCraftTransport.facadeItem.getFacadeForBlock(Blocks.brick_block, 0);
} }
private final class Tab extends CreativeTabs { private final class Tab extends CreativeTabs {

View file

@ -23,12 +23,10 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase;
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent; import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import buildcraft.BuildCraftTransport;
import buildcraft.core.recipes.AssemblyRecipeManager; import buildcraft.core.recipes.AssemblyRecipeManager;
import buildcraft.core.recipes.RefineryRecipeManager; import buildcraft.core.recipes.RefineryRecipeManager;
import buildcraft.energy.worldgen.OilPopulate; import buildcraft.energy.worldgen.OilPopulate;
@ -161,7 +159,8 @@ public final class InterModComms {
} else { } else {
Block block = (Block) Block.blockRegistry.getObject(blockName); Block block = (Block) Block.blockRegistry.getObject(blockName);
if (block.getRenderType() != 0 && block.getRenderType() != 31) { if (block.getRenderType() != 0 && block.getRenderType() != 31) {
ItemFacade.addFacade("buildcraft:facade{" + blockName + "}", BuildCraftTransport.facadeItem.addFacade(
"buildcraft:facade{" + blockName + "}",
new ItemStack(block, 1, metaId)); new ItemStack(block, 1, metaId));
} else { } else {
logRedundantAddFacadeMessage(m, block.toString()); logRedundantAddFacadeMessage(m, block.toString());
@ -173,7 +172,8 @@ public final class InterModComms {
Block block = Block.getBlockFromItem(modItemStack.getItem()); Block block = Block.getBlockFromItem(modItemStack.getItem());
if (block != null && block.getRenderType() != 0 && block.getRenderType() != 31) { if (block != null && block.getRenderType() != 0 && block.getRenderType() != 31) {
ItemFacade.addFacade("buildcraft:facade{" + Block.blockRegistry.getNameForObject(block) + "}", BuildCraftTransport.facadeItem.addFacade(
"buildcraft:facade{" + Block.blockRegistry.getNameForObject(block) + "}",
modItemStack); modItemStack);
} else { } else {
logRedundantAddFacadeMessage(m, block.toString()); logRedundantAddFacadeMessage(m, block.toString());

View file

@ -9,16 +9,17 @@
package buildcraft.silicon.recipes; package buildcraft.silicon.recipes;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.core.JavaTools; import buildcraft.api.core.JavaTools;
import buildcraft.api.facades.FacadeType;
import buildcraft.api.facades.IFacadeItem;
import buildcraft.api.recipes.CraftingResult; import buildcraft.api.recipes.CraftingResult;
import buildcraft.api.transport.PipeWire; import buildcraft.api.transport.PipeWire;
import buildcraft.silicon.ItemRedstoneChipset; import buildcraft.silicon.ItemRedstoneChipset;
import buildcraft.silicon.TileIntegrationTable; import buildcraft.silicon.TileIntegrationTable;
import buildcraft.transport.ItemFacade; import buildcraft.transport.ItemFacade;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.ItemPipeWire; import buildcraft.transport.ItemPipeWire;
public class AdvancedFacadeRecipe extends IntegrationTableRecipe { public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
@ -36,7 +37,8 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
@Override @Override
public boolean isValidInputB(ItemStack inputB) { public boolean isValidInputB(ItemStack inputB) {
return inputB != null && (inputB.getItem() instanceof ItemFacade && ItemFacade.getType(inputB) == ItemFacade.FacadeType.Basic || return inputB != null && (inputB.getItem() instanceof ItemFacade &&
((IFacadeItem) inputB.getItem()).getFacadeType(inputB) == FacadeType.Basic ||
inputB.getItem() == BuildCraftTransport.plugItem); inputB.getItem() == BuildCraftTransport.plugItem);
} }
@ -59,14 +61,14 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
} }
if (wire != null) { if (wire != null) {
ItemFacade.FacadeState[] states = ItemFacade.getFacadeStates(inputA); FacadeState[] states = ItemFacade.getFacadeStates(inputA);
ItemFacade.FacadeState additionalState; FacadeState additionalState;
if (inputB.getItem() == BuildCraftTransport.plugItem) { if (inputB.getItem() == BuildCraftTransport.plugItem) {
additionalState = ItemFacade.FacadeState.createTransparent(wire); additionalState = FacadeState.createTransparent(wire);
} else { } else {
additionalState = ItemFacade.getFacadeStates(inputB)[0]; additionalState = ItemFacade.getFacadeStates(inputB)[0];
additionalState = ItemFacade.FacadeState.create(additionalState.block, additionalState.metadata, wire); additionalState = FacadeState.create(additionalState.block, additionalState.metadata, wire);
} }
// if in states array exists state with the same wire just override it // if in states array exists state with the same wire just override it
@ -83,7 +85,7 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
result.energyCost = 50000; result.energyCost = 50000;
result.crafted = ItemFacade.getFacade(JavaTools.concat(states, result.crafted = ItemFacade.getFacade(JavaTools.concat(states,
new ItemFacade.FacadeState[] {additionalState})); new FacadeState[] {additionalState}));
return result; return result;
} else { } else {

View file

@ -663,7 +663,7 @@ public class BlockGenericPipe extends BlockBuildCraft {
FacadeMatrix matrix = getPipe(world, x, y, z).container.renderState.facadeMatrix; FacadeMatrix matrix = getPipe(world, x, y, z).container.renderState.facadeMatrix;
Block block = matrix.getFacadeBlock(dir); Block block = matrix.getFacadeBlock(dir);
if (block != null) { if (block != null) {
return ItemFacade.getFacade(block, return BuildCraftTransport.facadeItem.getFacadeForBlock(block,
matrix.getFacadeMetaId(dir)); matrix.getFacadeMetaId(dir));
} }
} }

View file

@ -27,16 +27,15 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.core.JavaTools; import buildcraft.api.core.JavaTools;
import buildcraft.api.core.Position; import buildcraft.api.core.Position;
import buildcraft.api.facades.FacadeType;
import buildcraft.api.facades.IFacadeItem;
import buildcraft.api.recipes.BuildcraftRecipeRegistry; import buildcraft.api.recipes.BuildcraftRecipeRegistry;
import buildcraft.api.transport.IPipePluggable; import buildcraft.api.transport.IPipePluggable;
import buildcraft.api.transport.IPipeTile; import buildcraft.api.transport.IPipeTile;
@ -47,7 +46,7 @@ import buildcraft.core.ItemBuildCraft;
import buildcraft.core.proxy.CoreProxy; import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.StringUtils; import buildcraft.core.utils.StringUtils;
public class ItemFacade extends ItemBuildCraft { public class ItemFacade extends ItemBuildCraft implements IFacadeItem {
public static class FacadeState { public static class FacadeState {
public final Block block; public final Block block;
public final int metadata; public final int metadata;
@ -124,14 +123,6 @@ public class ItemFacade extends ItemBuildCraft {
} }
} }
public static enum FacadeType {
Basic, Phased;
public static FacadeType fromOrdinal(int ordinal) {
return ordinal == 1 ? Phased : Basic;
}
}
public static final LinkedList<ItemStack> allFacades = new LinkedList<ItemStack>(); public static final LinkedList<ItemStack> allFacades = new LinkedList<ItemStack>();
public static final LinkedList<String> blacklistedFacades = new LinkedList<String>(); public static final LinkedList<String> blacklistedFacades = new LinkedList<String>();
@ -147,7 +138,7 @@ public class ItemFacade extends ItemBuildCraft {
@Override @Override
public String getItemStackDisplayName(ItemStack itemstack) { public String getItemStackDisplayName(ItemStack itemstack) {
switch (getType(itemstack)) { switch (getFacadeType(itemstack)) {
case Basic: case Basic:
return super.getItemStackDisplayName(itemstack) + ": " + getFacadeStateDisplayName(getFacadeStates(itemstack)[0]); return super.getItemStackDisplayName(itemstack) + ": " + getFacadeStateDisplayName(getFacadeStates(itemstack)[0]);
case Phased: case Phased:
@ -164,7 +155,7 @@ public class ItemFacade extends ItemBuildCraft {
@Override @Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean debug) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean debug) {
if (getType(stack) == FacadeType.Phased) { if (getFacadeType(stack) == FacadeType.Phased) {
String stateString = StringUtils.localize("item.FacadePhased.state"); String stateString = StringUtils.localize("item.FacadePhased.state");
FacadeState defaultState = null; FacadeState defaultState = null;
for (FacadeState state : getFacadeStates(stack)) { for (FacadeState state : getFacadeStates(stack)) {
@ -224,7 +215,7 @@ public class ItemFacade extends ItemBuildCraft {
return false; return false;
} }
public static void initialize() { public void initialize() {
for (Object o : Block.blockRegistry) { for (Object o : Block.blockRegistry) {
Block b = (Block) o; Block b = (Block) o;
@ -246,7 +237,7 @@ public class ItemFacade extends ItemBuildCraft {
} }
} }
private static void registerValidFacades(Block block, Item item) { private void registerValidFacades(Block block, Item item) {
Set<String> names = Sets.newHashSet(); Set<String> names = Sets.newHashSet();
for (int i = 0; i <= 15; i++) { for (int i = 0; i <= 15; i++) {
@ -255,8 +246,7 @@ public class ItemFacade extends ItemBuildCraft {
if (!Strings.isNullOrEmpty(stack.getUnlocalizedName()) if (!Strings.isNullOrEmpty(stack.getUnlocalizedName())
&& names.add(stack.getUnlocalizedName())) { && names.add(stack.getUnlocalizedName())) {
ItemFacade.addFacade( addFacade("buildcraft:facade{" + Block.blockRegistry.getNameForObject(block) + "#"
"buildcraft:facade{" + Block.blockRegistry.getNameForObject(block) + "#"
+ stack.getItemDamage() + "}", stack); + stack.getItemDamage() + "}", stack);
// prevent adding multiple facades if it's a rotatable block // prevent adding multiple facades if it's a rotatable block
@ -365,7 +355,7 @@ public class ItemFacade extends ItemBuildCraft {
return nbt; return nbt;
} }
public static Block[] getBlocks(ItemStack stack) { public Block[] getBlocksForFacade(ItemStack stack) {
FacadeState[] states = getFacadeStates(stack); FacadeState[] states = getFacadeStates(stack);
Block[] blocks = new Block[states.length]; Block[] blocks = new Block[states.length];
for (int i = 0; i < states.length; i++) { for (int i = 0; i < states.length; i++) {
@ -374,7 +364,7 @@ public class ItemFacade extends ItemBuildCraft {
return blocks; return blocks;
} }
public static int[] getMetaValues(ItemStack stack) { public int[] getMetaValuesForFacade(ItemStack stack) {
FacadeState[] states = getFacadeStates(stack); FacadeState[] states = getFacadeStates(stack);
int[] meta = new int[states.length]; int[] meta = new int[states.length];
for (int i = 0; i < states.length; i++) { for (int i = 0; i < states.length; i++) {
@ -384,7 +374,8 @@ public class ItemFacade extends ItemBuildCraft {
} }
// GETTERS FOR FACADE DATA // GETTERS FOR FACADE DATA
public static FacadeType getType(ItemStack stack) { @Override
public FacadeType getFacadeType(ItemStack stack) {
if (!stack.hasTagCompound()) { if (!stack.hasTagCompound()) {
return FacadeType.Basic; return FacadeType.Basic;
} }
@ -401,12 +392,12 @@ public class ItemFacade extends ItemBuildCraft {
return true; return true;
} }
public static void addFacade(String id, ItemStack itemStack) { public void addFacade(String id, ItemStack itemStack) {
if (itemStack.stackSize == 0) { if (itemStack.stackSize == 0) {
itemStack.stackSize = 1; itemStack.stackSize = 1;
} }
ItemStack facade = getFacade(Block.getBlockFromItem(itemStack.getItem()), itemStack.getItemDamage()); ItemStack facade = getFacadeForBlock(Block.getBlockFromItem(itemStack.getItem()), itemStack.getItemDamage());
if (!allFacades.contains(facade)) { if (!allFacades.contains(facade)) {
allFacades.add(facade); allFacades.add(facade);
@ -525,14 +516,14 @@ public class ItemFacade extends ItemBuildCraft {
} }
if (slotmatch != null && slotmatch != NO_MATCH) { if (slotmatch != null && slotmatch != NO_MATCH) {
return new Object[]{ItemFacade.getBlocks(slotmatch), slotmatch}; return new Object[]{getBlocksForFacade(slotmatch), slotmatch};
} }
return null; return null;
} }
private ItemStack getNextFacadeItemStack(Block block, ItemStack originalFacade) { private ItemStack getNextFacadeItemStack(Block block, ItemStack originalFacade) {
int blockMeta = ItemFacade.getMetaValues(originalFacade)[0]; int blockMeta = getMetaValuesForFacade(originalFacade)[0];
int stackMeta = 0; int stackMeta = 0;
switch (block.getRenderType()) { switch (block.getRenderType()) {
@ -559,7 +550,7 @@ public class ItemFacade extends ItemBuildCraft {
stackMeta = blockMeta; stackMeta = blockMeta;
} }
return getFacade(block, stackMeta); return getFacadeForBlock(block, stackMeta);
} }
@Override @Override
@ -584,8 +575,9 @@ public class ItemFacade extends ItemBuildCraft {
public int getSpriteNumber() { public int getSpriteNumber() {
return 0; return 0;
} }
public static ItemStack getFacade(Block block, int metadata) { @Override
public ItemStack getFacadeForBlock(Block block, int metadata) {
return getFacade(FacadeState.create(block, metadata)); return getFacade(FacadeState.create(block, metadata));
} }

View file

@ -13,7 +13,6 @@ import java.util.LinkedList;
import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Level;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
@ -24,19 +23,15 @@ import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import cofh.api.energy.IEnergyHandler; import cofh.api.energy.IEnergyHandler;
import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.core.BCLog; import buildcraft.api.core.BCLog;
@ -65,6 +60,7 @@ import buildcraft.core.network.ISyncedTile;
import buildcraft.core.network.PacketTileState; import buildcraft.core.network.PacketTileState;
import buildcraft.core.robots.DockingStation; import buildcraft.core.robots.DockingStation;
import buildcraft.core.utils.Utils; import buildcraft.core.utils.Utils;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.gates.GateFactory; import buildcraft.transport.gates.GateFactory;
import buildcraft.transport.gates.ItemGate; import buildcraft.transport.gates.ItemGate;
import buildcraft.transport.utils.RobotStationState; import buildcraft.transport.utils.RobotStationState;
@ -171,7 +167,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) {
IPipePluggable pluggable = null; IPipePluggable pluggable = null;
if (nbt.hasKey("facadeState[" + i + "]")) { if (nbt.hasKey("facadeState[" + i + "]")) {
pluggable = new ItemFacade.FacadePluggable(ItemFacade.FacadeState.readArray(nbt.getTagList("facadeState[" + i + "]", Constants.NBT.TAG_COMPOUND))); pluggable = new ItemFacade.FacadePluggable(FacadeState.readArray(nbt.getTagList("facadeState[" + i + "]", Constants.NBT.TAG_COMPOUND)));
} else { } else {
// Migration support for 5.0.x and 6.0.x // Migration support for 5.0.x and 6.0.x
if (nbt.hasKey("facadeBlocks[" + i + "]")) { if (nbt.hasKey("facadeBlocks[" + i + "]")) {
@ -181,23 +177,23 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
if (blockId != 0) { if (blockId != 0) {
int metadata = nbt.getInteger("facadeMeta[" + i + "]"); int metadata = nbt.getInteger("facadeMeta[" + i + "]");
pluggable = new ItemFacade.FacadePluggable(new ItemFacade.FacadeState[]{ItemFacade.FacadeState.create(block, metadata)}); pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{FacadeState.create(block, metadata)});
} }
} else if (nbt.hasKey("facadeBlocksStr[" + i + "][0]")) { } else if (nbt.hasKey("facadeBlocksStr[" + i + "][0]")) {
// 6.0.x // 6.0.x
ItemFacade.FacadeState mainState = ItemFacade.FacadeState.create( FacadeState mainState = FacadeState.create(
(Block) Block.blockRegistry.getObject(nbt.getString("facadeBlocksStr[" + i + "][0]")), (Block) Block.blockRegistry.getObject(nbt.getString("facadeBlocksStr[" + i + "][0]")),
nbt.getInteger("facadeMeta[" + i + "][0]") nbt.getInteger("facadeMeta[" + i + "][0]")
); );
if (nbt.hasKey("facadeBlocksStr[" + i + "][1]")) { if (nbt.hasKey("facadeBlocksStr[" + i + "][1]")) {
ItemFacade.FacadeState phasedState = ItemFacade.FacadeState.create( FacadeState phasedState = FacadeState.create(
(Block) Block.blockRegistry.getObject(nbt.getString("facadeBlocksStr[" + i + "][1]")), (Block) Block.blockRegistry.getObject(nbt.getString("facadeBlocksStr[" + i + "][1]")),
nbt.getInteger("facadeMeta[" + i + "][1]"), nbt.getInteger("facadeMeta[" + i + "][1]"),
PipeWire.fromOrdinal(nbt.getInteger("facadeWires[" + i + "]")) PipeWire.fromOrdinal(nbt.getInteger("facadeWires[" + i + "]"))
); );
pluggable = new ItemFacade.FacadePluggable(new ItemFacade.FacadeState[]{mainState, phasedState}); pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{mainState, phasedState});
} else { } else {
pluggable = new ItemFacade.FacadePluggable(new ItemFacade.FacadeState[]{mainState}); pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{mainState});
} }
} }
} }
@ -476,14 +472,14 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
renderState.facadeMatrix.setFacade(direction, null, 0, true); renderState.facadeMatrix.setFacade(direction, null, 0, true);
continue; continue;
} }
ItemFacade.FacadeState[] states = ((ItemFacade.FacadePluggable) pluggable).states; FacadeState[] states = ((ItemFacade.FacadePluggable) pluggable).states;
if (states == null) { if (states == null) {
renderState.facadeMatrix.setFacade(direction, null, 0, true); renderState.facadeMatrix.setFacade(direction, null, 0, true);
continue; continue;
} }
// Iterate over all states and activate first proper // Iterate over all states and activate first proper
ItemFacade.FacadeState defaultState = null, activeState = null; FacadeState defaultState = null, activeState = null;
for (ItemFacade.FacadeState state : states) { for (FacadeState state : states) {
if (state.wire == null) { if (state.wire == null) {
defaultState = state; defaultState = state;
continue; continue;
@ -861,7 +857,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
refreshRenderState = true; refreshRenderState = true;
} }
public boolean addFacade(ForgeDirection direction, ItemFacade.FacadeState[] states) { public boolean addFacade(ForgeDirection direction, FacadeState[] states) {
return setPluggable(direction, new ItemFacade.FacadePluggable(states)); return setPluggable(direction, new ItemFacade.FacadePluggable(states));
} }

View file

@ -16,13 +16,14 @@ import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.facades.FacadeType;
import buildcraft.api.facades.IFacadeItem;
import buildcraft.core.CoreConstants; import buildcraft.core.CoreConstants;
import buildcraft.core.render.RenderUtils; import buildcraft.core.render.RenderUtils;
import buildcraft.transport.ItemFacade; import buildcraft.transport.ItemFacade;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.PipeIconProvider; import buildcraft.transport.PipeIconProvider;
public class FacadeItemRenderer implements IItemRenderer { public class FacadeItemRenderer implements IItemRenderer {
@ -38,12 +39,12 @@ public class FacadeItemRenderer implements IItemRenderer {
lastTime = System.currentTimeMillis() + 1000L; lastTime = System.currentTimeMillis() + 1000L;
} }
ItemFacade.FacadeType type = ItemFacade.getType(item); FacadeType type = ((IFacadeItem) item.getItem()).getFacadeType(item);
ItemFacade.FacadeState[] states = ItemFacade.getFacadeStates(item); FacadeState[] states = ItemFacade.getFacadeStates(item);
ItemFacade.FacadeState activeState = null; FacadeState activeState = null;
if (type == ItemFacade.FacadeType.Basic) { if (type == FacadeType.Basic) {
activeState = states[0]; activeState = states[0];
} else if (type == ItemFacade.FacadeType.Phased) { } else if (type == FacadeType.Phased) {
activeState = states[renderState % states.length]; activeState = states[renderState % states.length];
} }
Block block = activeState != null ? activeState.block : null; Block block = activeState != null ? activeState.block : null;