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
public void remap(FMLMissingMappingsEvent event) {
for (FMLMissingMappingsEvent.MissingMapping mapping: event.get()) {
if (mapping.name.equals("BuildCraft|Silicon:null"))
if (mapping.name.equals("BuildCraft|Silicon:null")) {
mapping.remap(laserBlock);
}
}
}
}

View file

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

View file

@ -19,7 +19,6 @@ import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftFactory;
import buildcraft.BuildCraftSilicon;
import buildcraft.BuildCraftTransport;
import buildcraft.transport.ItemFacade;
public enum CreativeTabBuildCraft {
@ -51,12 +50,12 @@ public enum CreativeTabBuildCraft {
case PIPES:
return new ItemStack (BuildCraftTransport.pipeItemsDiamond, 1);
case FACADES:
return ItemFacade.getFacade(Blocks.brick_block, 0);
return BuildCraftTransport.facadeItem.getFacadeForBlock(Blocks.brick_block, 0);
case BOARDS:
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 {

View file

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

View file

@ -9,16 +9,17 @@
package buildcraft.silicon.recipes;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import buildcraft.BuildCraftTransport;
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.silicon.ItemRedstoneChipset;
import buildcraft.silicon.TileIntegrationTable;
import buildcraft.transport.ItemFacade;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.ItemPipeWire;
public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
@ -36,7 +37,8 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
@Override
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);
}
@ -59,14 +61,14 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
}
if (wire != null) {
ItemFacade.FacadeState[] states = ItemFacade.getFacadeStates(inputA);
ItemFacade.FacadeState additionalState;
FacadeState[] states = ItemFacade.getFacadeStates(inputA);
FacadeState additionalState;
if (inputB.getItem() == BuildCraftTransport.plugItem) {
additionalState = ItemFacade.FacadeState.createTransparent(wire);
additionalState = FacadeState.createTransparent(wire);
} else {
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
@ -83,7 +85,7 @@ public class AdvancedFacadeRecipe extends IntegrationTableRecipe {
result.energyCost = 50000;
result.crafted = ItemFacade.getFacade(JavaTools.concat(states,
new ItemFacade.FacadeState[] {additionalState}));
new FacadeState[] {additionalState}));
return result;
} else {

View file

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

View file

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

View file

@ -13,7 +13,6 @@ import java.util.LinkedList;
import org.apache.logging.log4j.Level;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
@ -24,19 +23,15 @@ import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import cofh.api.energy.IEnergyHandler;
import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.BCLog;
@ -65,6 +60,7 @@ import buildcraft.core.network.ISyncedTile;
import buildcraft.core.network.PacketTileState;
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;
@ -171,7 +167,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) {
IPipePluggable pluggable = null;
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 {
// Migration support for 5.0.x and 6.0.x
if (nbt.hasKey("facadeBlocks[" + i + "]")) {
@ -181,23 +177,23 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
if (blockId != 0) {
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]")) {
// 6.0.x
ItemFacade.FacadeState mainState = ItemFacade.FacadeState.create(
FacadeState mainState = FacadeState.create(
(Block) Block.blockRegistry.getObject(nbt.getString("facadeBlocksStr[" + i + "][0]")),
nbt.getInteger("facadeMeta[" + i + "][0]")
);
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]")),
nbt.getInteger("facadeMeta[" + i + "][1]"),
PipeWire.fromOrdinal(nbt.getInteger("facadeWires[" + i + "]"))
);
pluggable = new ItemFacade.FacadePluggable(new ItemFacade.FacadeState[]{mainState, phasedState});
pluggable = new ItemFacade.FacadePluggable(new FacadeState[]{mainState, phasedState});
} 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);
continue;
}
ItemFacade.FacadeState[] states = ((ItemFacade.FacadePluggable) pluggable).states;
FacadeState[] states = ((ItemFacade.FacadePluggable) pluggable).states;
if (states == null) {
renderState.facadeMatrix.setFacade(direction, null, 0, true);
continue;
}
// Iterate over all states and activate first proper
ItemFacade.FacadeState defaultState = null, activeState = null;
for (ItemFacade.FacadeState state : states) {
FacadeState defaultState = null, activeState = null;
for (FacadeState state : states) {
if (state.wire == null) {
defaultState = state;
continue;
@ -861,7 +857,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
refreshRenderState = true;
}
public boolean addFacade(ForgeDirection direction, ItemFacade.FacadeState[] states) {
public boolean addFacade(ForgeDirection direction, FacadeState[] 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.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import buildcraft.BuildCraftTransport;
import buildcraft.api.facades.FacadeType;
import buildcraft.api.facades.IFacadeItem;
import buildcraft.core.CoreConstants;
import buildcraft.core.render.RenderUtils;
import buildcraft.transport.ItemFacade;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.PipeIconProvider;
public class FacadeItemRenderer implements IItemRenderer {
@ -38,12 +39,12 @@ public class FacadeItemRenderer implements IItemRenderer {
lastTime = System.currentTimeMillis() + 1000L;
}
ItemFacade.FacadeType type = ItemFacade.getType(item);
ItemFacade.FacadeState[] states = ItemFacade.getFacadeStates(item);
ItemFacade.FacadeState activeState = null;
if (type == ItemFacade.FacadeType.Basic) {
FacadeType type = ((IFacadeItem) item.getItem()).getFacadeType(item);
FacadeState[] states = ItemFacade.getFacadeStates(item);
FacadeState activeState = null;
if (type == FacadeType.Basic) {
activeState = states[0];
} else if (type == ItemFacade.FacadeType.Phased) {
} else if (type == FacadeType.Phased) {
activeState = states[renderState % states.length];
}
Block block = activeState != null ? activeState.block : null;