Merge branch 'master' into power

This commit is contained in:
CovertJaguar 2013-07-02 06:50:45 -07:00
commit 55c4abac12
27 changed files with 871 additions and 320 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -112,4 +112,5 @@ tile.engineIron=Combustion Engine
tile.oilStill=Oil
tile.spring.water=Water Spring
tile.spring.oil=Oil Spring
tile.oilMoving=Oil
tile.oilMoving=Oil
tile.filteredBufferBlock=Filtered Buffer

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

View file

@ -299,8 +299,8 @@ public class BuildCraftBuilders {
CoreProxy.proxy.addCraftingRecipe(new ItemStack(templateItem, 1), new Object[]{"ppp", "pip", "ppp", Character.valueOf('i'),
new ItemStack(Item.dyePowder, 1, 0), Character.valueOf('p'), Item.paper});
CoreProxy.proxy.addCraftingRecipe(new ItemStack(blueprintItem, 1), new Object[]{"ppp", "pip", "ppp", Character.valueOf('i'),
new ItemStack(Item.dyePowder, 1, 4), Character.valueOf('p'), Item.paper});
// CoreProxy.proxy.addCraftingRecipe(new ItemStack(blueprintItem, 1), new Object[]{"ppp", "pip", "ppp", Character.valueOf('i'),
// new ItemStack(Item.dyePowder, 1, 4), Character.valueOf('p'), Item.paper});
CoreProxy.proxy.addCraftingRecipe(new ItemStack(markerBlock, 1), new Object[]{"l ", "r ", Character.valueOf('l'),
new ItemStack(Item.dyePowder, 1, 4), Character.valueOf('r'), Block.torchRedstoneActive});
@ -318,13 +318,13 @@ public class BuildCraftBuilders {
Character.valueOf('c'), Block.workbench, Character.valueOf('g'), BuildCraftCore.diamondGearItem, Character.valueOf('C'), Block.chest });
*/
CoreProxy.proxy.addCraftingRecipe(new ItemStack(architectBlock, 1), new Object[]{"btb", "ycy", "gCg", Character.valueOf('b'),
new ItemStack(Item.dyePowder, 1, 0), Character.valueOf('t'), markerBlock, Character.valueOf('y'), new ItemStack(Item.dyePowder, 1, 11),
Character.valueOf('c'), Block.workbench, Character.valueOf('g'), BuildCraftCore.diamondGearItem, Character.valueOf('C'),
new ItemStack(templateItem, 1)});
// CoreProxy.proxy.addCraftingRecipe(new ItemStack(architectBlock, 1), new Object[]{"btb", "ycy", "gCg", Character.valueOf('b'),
// new ItemStack(Item.dyePowder, 1, 0), Character.valueOf('t'), markerBlock, Character.valueOf('y'), new ItemStack(Item.dyePowder, 1, 11),
// Character.valueOf('c'), Block.workbench, Character.valueOf('g'), BuildCraftCore.diamondGearItem, Character.valueOf('C'),
// new ItemStack(templateItem, 1)});
CoreProxy.proxy.addCraftingRecipe(new ItemStack(libraryBlock, 1), new Object[]{"bbb", "bBb", "bbb", Character.valueOf('b'),
new ItemStack(blueprintItem), Character.valueOf('B'), Block.bookShelf});
// CoreProxy.proxy.addCraftingRecipe(new ItemStack(libraryBlock, 1), new Object[]{"bbb", "bBb", "bbb", Character.valueOf('b'),
// new ItemStack(blueprintItem), Character.valueOf('B'), Block.bookShelf});
// / INIT FILLER PATTERNS
FillerManager.registry.addRecipe(new FillerFillAll(), new Object[]{"bbb", "bbb", "bbb", 'g', Block.glass, 'b', Block.brick});

View file

@ -30,6 +30,7 @@ import buildcraft.core.Version;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.triggers.BCAction;
import buildcraft.core.triggers.BCTrigger;
import buildcraft.transport.BlockFilteredBuffer;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.GateIconProvider;
import buildcraft.transport.GuiHandler;
@ -77,6 +78,7 @@ import buildcraft.transport.pipes.PipeStructureCobblestone;
import buildcraft.transport.triggers.ActionEnergyPulser;
import buildcraft.transport.triggers.ActionSignalOutput;
import buildcraft.transport.triggers.ActionSingleEnergyPulse;
import buildcraft.transport.triggers.TriggerFilteredBufferInventoryLevel;
import buildcraft.transport.triggers.TriggerPipeContents;
import buildcraft.transport.triggers.TriggerPipeContents.Kind;
import buildcraft.transport.triggers.TriggerPipeSignal;
@ -142,6 +144,7 @@ public class BuildCraftTransport {
public static Item pipePowerDiamond;
public static Item facadeItem;
public static Item plugItem;
public static BlockFilteredBuffer filteredBufferBlock;
// public static Item pipeItemsStipes;
public static Item pipeStructureCobblestone;
public static int groupItemsTrigger;
@ -159,6 +162,9 @@ public class BuildCraftTransport {
public static BCTrigger triggerGreenSignalInactive = new TriggerPipeSignal(DefaultProps.TRIGGER_GREEN_SIGNAL_INACTIVE, false, IPipe.WireColor.Green);
public static BCTrigger triggerYellowSignalActive = new TriggerPipeSignal(DefaultProps.TRIGGER_YELLOW_SIGNAL_ACTIVE, true, IPipe.WireColor.Yellow);
public static BCTrigger triggerYellowSignalInactive = new TriggerPipeSignal(DefaultProps.TRIGGER_YELLOW_SIGNAL_INACTIVE, false, IPipe.WireColor.Yellow);
public static BCTrigger triggerInventoryBelow25 = new TriggerFilteredBufferInventoryLevel(DefaultProps.TRIGGER_INVENTORY_LEVEL_BELOW25, TriggerFilteredBufferInventoryLevel.State.Below25);
public static BCTrigger triggerInventoryBelow50 = new TriggerFilteredBufferInventoryLevel(DefaultProps.TRIGGER_INVENTORY_LEVEL_BELOW50, TriggerFilteredBufferInventoryLevel.State.Below50);
public static BCTrigger triggerInventoryBelow75 = new TriggerFilteredBufferInventoryLevel(DefaultProps.TRIGGER_INVENTORY_LEVEL_BELOW75, TriggerFilteredBufferInventoryLevel.State.Below75);
public static BCAction actionRedSignal = new ActionSignalOutput(DefaultProps.ACTION_RED_SIGNAL, IPipe.WireColor.Red);
public static BCAction actionBlueSignal = new ActionSignalOutput(DefaultProps.ACTION_BLUE_SIGNAL, IPipe.WireColor.Blue);
public static BCAction actionGreenSignal = new ActionSignalOutput(DefaultProps.ACTION_GREEN_SIGNAL, IPipe.WireColor.Green);
@ -349,6 +355,12 @@ public class BuildCraftTransport {
Property pipePlugId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "pipePlug.id", DefaultProps.PIPE_PLUG_ID);
plugItem = new ItemPlug(pipePlugId.getInt());
plugItem.setUnlocalizedName("pipePlug");
Property filteredBufferId = BuildCraftCore.mainConfiguration.getBlock("filteredBuffer.id", DefaultProps.FILTERED_BUFFER);
filteredBufferBlock = new BlockFilteredBuffer(filteredBufferId.getInt());
CoreProxy.proxy.registerBlock(filteredBufferBlock.setUnlocalizedName("filteredBufferBlock"));
CoreProxy.proxy.addName(filteredBufferBlock, "Filtered Buffer");
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(pipeStructureCobblestone)}, 1000, new ItemStack(plugItem, 8)));
} finally {
@ -412,6 +424,11 @@ public class BuildCraftTransport {
CoreProxy.proxy.addCraftingRecipe(pipe.result, pipe.input);
}
}
CoreProxy.proxy.addCraftingRecipe(new ItemStack(filteredBufferBlock, 1),
new Object[] { "wdw", "wcw", "wpw", Character.valueOf('w'), "plankWood", Character.valueOf('d'),
BuildCraftTransport.pipeItemsDiamond, Character.valueOf('c'), Block.chest, Character.valueOf('p'),
Block.pistonBase });
}
@IMCCallback

View file

@ -26,7 +26,6 @@ import net.minecraftforge.common.ForgeDirection;
import buildcraft.BuildCraftBuilders;
import buildcraft.api.core.Position;
import buildcraft.api.tools.IToolWrench;
import buildcraft.core.CreativeTabBuildCraft;
import buildcraft.core.GuiIds;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.Utils;
@ -44,7 +43,7 @@ public class BlockArchitect extends BlockContainer {
public BlockArchitect(int i) {
super(i, Material.iron);
setHardness(0.5F);
setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
//setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
}
@Override

View file

@ -21,7 +21,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import buildcraft.BuildCraftBuilders;
import buildcraft.core.CreativeTabBuildCraft;
import buildcraft.core.GuiIds;
import buildcraft.core.proxy.CoreProxy;
import cpw.mods.fml.relauncher.Side;
@ -34,7 +33,7 @@ public class BlockBlueprintLibrary extends BlockContainer {
public BlockBlueprintLibrary(int i) {
super(i, Material.wood);
setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
//setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
setHardness(0.7F);
}

View file

@ -21,6 +21,7 @@ public class ItemBptBluePrint extends ItemBptBase {
public ItemBptBluePrint(int i) {
super(i);
setCreativeTab(null);
}
@Override

View file

@ -116,6 +116,7 @@ public class DefaultProps {
public static int OIL_MOVING_ID = 1520;
public static int OIL_STILL_ID = 1521;
public static int SPRING_ID = 1522;
public static int FILTERED_BUFFER = 1523;
public static boolean CURRENT_CONTINUOUS = false;
public static double PIPES_DURABILITY = 0.25D;
@ -154,6 +155,9 @@ public class DefaultProps {
public static int TRIGGER_RED_ENGINE_HEAT = 28;
public static int TRIGGER_PIPE_REQUESTS_ENERGY = 29;
public static int TRIGGER_PIPE_TOO_MUCH_ENERGY = 30;
public static int TRIGGER_INVENTORY_LEVEL_BELOW25 = 31;
public static int TRIGGER_INVENTORY_LEVEL_BELOW50 = 32;
public static int TRIGGER_INVENTORY_LEVEL_BELOW75 = 33;
public static int ACTION_REDSTONE = 1;
public static int ACTION_RED_SIGNAL = 2;

View file

@ -20,4 +20,5 @@ public class GuiIds {
public static final int GATES = 51;
public static final int PIPE_EMERALD_ITEM = 52;
public static final int FILTERED_BUFFER = 60;
}

View file

@ -0,0 +1,29 @@
/*
* Copyright (c) CovertJaguar, 2011 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at railcraft.wikispaces.com.
*/
package buildcraft.core.gui.slots;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
/**
*
* @author SandGrainOne
*/
public class SlotValidated extends Slot {
public SlotValidated(IInventory inv, int id, int x, int y) {
super(inv, id, x, y);
}
@Override
public boolean isItemValid(ItemStack itemStack) {
return inventory.isStackValidForSlot(this.getSlotIndex(), itemStack);
}
}

View file

@ -87,10 +87,9 @@ public class StackHelper {
if (oreDictionary) {
int idBase = OreDictionary.getOreID(base);
if (idBase >= 0) {
int idComp = OreDictionary.getOreID(comparison);
if (idComp >= 0) {
if (idBase == idComp)
return true;
for(ItemStack itemstack : OreDictionary.getOres(idBase)) {
if(comparison.itemID == itemstack.itemID && (itemstack.getItemDamage() == OreDictionary.WILDCARD_VALUE || comparison.getItemDamage() == itemstack.getItemDamage()))
return true;
}
}
}

View file

@ -42,8 +42,11 @@ public class ActionTriggerIconProvider implements IIconProvider {
public static final int Trigger_RedstoneInput_Inactive = 30;
public static final int Trigger_PipeContents_RequestsEnergy = 31;
public static final int Trigger_PipeContents_TooMuchEnergy = 32;
public static final int Trigger_Inventory_Below25 = 33;
public static final int Trigger_Inventory_Below50 = 34;
public static final int Trigger_Inventory_Below75 = 35;
public static final int MAX = 33;
public static final int MAX = 36;
@SideOnly(Side.CLIENT)
@ -94,6 +97,9 @@ public class ActionTriggerIconProvider implements IIconProvider {
icons[ActionTriggerIconProvider.Trigger_PipeSignal_Yellow_Inactive] = iconRegister.registerIcon("buildcraft:triggers/trigger_pipesignal_yellow_inactive");
icons[ActionTriggerIconProvider.Trigger_RedstoneInput_Active] = iconRegister.registerIcon("buildcraft:triggers/trigger_redstoneinput_active");
icons[ActionTriggerIconProvider.Trigger_RedstoneInput_Inactive] = iconRegister.registerIcon("buildcraft:triggers/trigger_redstoneinput_inactive");
icons[ActionTriggerIconProvider.Trigger_Inventory_Below25] = iconRegister.registerIcon("buildcraft:triggers/trigger_inventory_below25");
icons[ActionTriggerIconProvider.Trigger_Inventory_Below50] = iconRegister.registerIcon("buildcraft:triggers/trigger_inventory_below50");
icons[ActionTriggerIconProvider.Trigger_Inventory_Below75] = iconRegister.registerIcon("buildcraft:triggers/trigger_inventory_below75");
}
}

View file

@ -0,0 +1,85 @@
/**
* Copyright (c) SpaceToad, 2011 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;
import java.util.ArrayList;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import buildcraft.BuildCraftTransport;
import buildcraft.core.BlockBuildCraft;
import buildcraft.core.GuiIds;
import buildcraft.core.IItemPipe;
import buildcraft.core.proxy.CoreProxy;
/**
*
* @author SandGrainOne
*/
public class BlockFilteredBuffer extends BlockBuildCraft {
private static Icon blockTexture;
public BlockFilteredBuffer(int blockId) {
super(blockId, Material.iron);
setHardness(5F);
}
@Override
public TileEntity createNewTileEntity(World var1) {
return new TileFilteredBuffer();
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer,
int par6, float par7, float par8, float par9) {
super.onBlockActivated(world, x, y, z, entityplayer, par6, par7, par8, par9);
if (entityplayer.isSneaking()) {
return false;
}
if (entityplayer.getCurrentEquippedItem() != null) {
if (entityplayer.getCurrentEquippedItem().getItem() instanceof IItemPipe) {
return false;
}
}
if (!CoreProxy.proxy.isRenderWorld(world)) {
entityplayer.openGui(BuildCraftTransport.instance, GuiIds.FILTERED_BUFFER, world, x, y, z);
}
return true;
}
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public void addCreativeItems(ArrayList itemList) {
itemList.add(new ItemStack(this));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister) {
blockTexture = par1IconRegister.registerIcon("buildcraft:filteredBuffer_all");
}
@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int i, int j) {
return blockTexture;
}
}

View file

@ -1,12 +1,10 @@
/**
* Copyright (c) SpaceToad, 2011
* http://www.mod-buildcraft.com
* Copyright (c) SpaceToad, 2011 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
* 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;
import java.util.ArrayList;
@ -51,27 +49,26 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockGenericPipe extends BlockContainer {
static enum Part {
Pipe,
Gate
}
static class RaytraceResult {
RaytraceResult(Part hitPart, MovingObjectPosition movingObjectPosition) {
this.hitPart = hitPart;
this.movingObjectPosition = movingObjectPosition;
}
public Part hitPart;
public MovingObjectPosition movingObjectPosition;
}
private static Random rand = new Random();
private boolean skippedFirstIconRegister;
/* Defined subprograms ************************************************* */
public BlockGenericPipe(int i) {
super(i, Material.glass);
@ -198,31 +195,31 @@ public class BlockGenericPipe extends BlockContainer {
TileEntity tile1 = world.getBlockTileEntity(i, j, k);
TileGenericPipe tileG = (TileGenericPipe) tile1;
if (Utils.checkPipesConnections(world, tile1, i - 1, j, k) || (tileG != null && tileG.hasFacade(ForgeDirection.WEST))) {
xMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i + 1, j, k) || (tileG != null && tileG.hasFacade(ForgeDirection.EAST))) {
xMax = 1.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j - 1, k) || (tileG != null && tileG.hasFacade(ForgeDirection.DOWN))) {
yMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j + 1, k) || (tileG != null && tileG.hasFacade(ForgeDirection.UP))) {
yMax = 1.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j, k - 1) || (tileG != null && tileG.hasFacade(ForgeDirection.NORTH))) {
zMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j, k + 1) || (tileG != null && tileG.hasFacade(ForgeDirection.SOUTH))) {
zMax = 1.0F;
}
if (tileG != null) {
if (Utils.checkPipesConnections(world, tile1, i - 1, j, k) || tileG.hasFacade(ForgeDirection.WEST)) {
xMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i + 1, j, k) || tileG.hasFacade(ForgeDirection.EAST)) {
xMax = 1.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j - 1, k) || tileG.hasFacade(ForgeDirection.DOWN)) {
yMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j + 1, k) || tileG.hasFacade(ForgeDirection.UP)) {
yMax = 1.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j, k - 1) || tileG.hasFacade(ForgeDirection.NORTH)) {
zMin = 0.0F;
}
if (Utils.checkPipesConnections(world, tile1, i, j, k + 1) || tileG.hasFacade(ForgeDirection.SOUTH)) {
zMax = 1.0F;
}
if (tileG.hasFacade(ForgeDirection.EAST) || tileG.hasFacade(ForgeDirection.WEST)) {
yMin = 0.0F;
yMax = 1.0F;
@ -263,15 +260,15 @@ public class BlockGenericPipe extends BlockContainer {
double pitch = Math.toRadians(entityPlayer.rotationPitch);
double yaw = Math.toRadians(entityPlayer.rotationYaw);
double dirX = -Math.sin(yaw) * Math.cos(pitch);
double dirY = -Math.sin(pitch);
double dirZ = Math.cos(yaw) * Math.cos(pitch);
double dirX = -Math.sin(yaw) * Math.cos(pitch);
double dirY = -Math.sin(pitch);
double dirZ = Math.cos(yaw) * Math.cos(pitch);
double reachDistance = 5;
double reachDistance = 5;
if (entityPlayer instanceof EntityPlayerMP) {
reachDistance = ((EntityPlayerMP) entityPlayer).theItemInWorldManager.getBlockReachDistance();
}
if (entityPlayer instanceof EntityPlayerMP) {
reachDistance = ((EntityPlayerMP) entityPlayer).theItemInWorldManager.getBlockReachDistance();
}
Vec3 origin = Vec3.fakePool.getVecFromPool(entityPlayer.posX, entityPlayer.posY + 1.62 - entityPlayer.yOffset, entityPlayer.posZ);
Vec3 direction = origin.addVector(dirX * reachDistance, dirY * reachDistance, dirZ * reachDistance);
@ -290,9 +287,10 @@ public class BlockGenericPipe extends BlockContainer {
}
/**
* pipe hits along x, y, and z axis, gate (all 6 sides) [and wires+facades]
* pipe hits along x, y, and z axis, gate (all 6 sides) [and
* wires+facades]
*/
MovingObjectPosition[] hits = new MovingObjectPosition[] { null, null, null, null, null, null, null, null, null };
MovingObjectPosition[] hits = new MovingObjectPosition[]{null, null, null, null, null, null, null, null, null};
boolean needAxisCheck = false;
boolean needCenterCheck = true;
@ -390,7 +388,8 @@ public class BlockGenericPipe extends BlockContainer {
for (int i = 0; i < hits.length; i++) {
MovingObjectPosition hit = hits[i];
if (hit == null) continue;
if (hit == null)
continue;
double lengthSquared = hit.hitVec.squareDistanceTo(origin);
@ -424,24 +423,24 @@ public class BlockGenericPipe extends BlockContainer {
float max = Utils.pipeMaxPos - 0.05F;
switch (dir) {
case DOWN:
setBlockBounds(min, Utils.pipeMinPos - 0.10F, min, max, Utils.pipeMinPos, max);
break;
case UP:
setBlockBounds(min, Utils.pipeMaxPos, min, max, Utils.pipeMaxPos + 0.10F, max);
break;
case NORTH:
setBlockBounds(min, min, Utils.pipeMinPos - 0.10F, max, max, Utils.pipeMinPos);
break;
case SOUTH:
setBlockBounds(min, min, Utils.pipeMaxPos, max, max, Utils.pipeMaxPos + 0.10F);
break;
case WEST:
setBlockBounds(Utils.pipeMinPos - 0.10F, min, min, Utils.pipeMinPos, max, max);
break;
case EAST:
setBlockBounds(Utils.pipeMaxPos, min, min, Utils.pipeMaxPos + 0.10F, max, max);
break;
case DOWN:
setBlockBounds(min, Utils.pipeMinPos - 0.10F, min, max, Utils.pipeMinPos, max);
break;
case UP:
setBlockBounds(min, Utils.pipeMaxPos, min, max, Utils.pipeMaxPos + 0.10F, max);
break;
case NORTH:
setBlockBounds(min, min, Utils.pipeMinPos - 0.10F, max, max, Utils.pipeMinPos);
break;
case SOUTH:
setBlockBounds(min, min, Utils.pipeMaxPos, max, max, Utils.pipeMaxPos + 0.10F);
break;
case WEST:
setBlockBounds(Utils.pipeMinPos - 0.10F, min, min, Utils.pipeMinPos, max, max);
break;
case EAST:
setBlockBounds(Utils.pipeMaxPos, min, min, Utils.pipeMaxPos + 0.10F, max, max);
break;
}
}
@ -503,6 +502,7 @@ public class BlockGenericPipe extends BlockContainer {
}
return list;
}
public TileEntity createNewTileEntity(World var1) {
return new TileGenericPipe();
}
@ -554,7 +554,6 @@ public class BlockGenericPipe extends BlockContainer {
}
/* Wrappers ************************************************************ */
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, int l) {
super.onNeighborBlockChange(world, x, y, z, l);
@ -607,7 +606,6 @@ public class BlockGenericPipe extends BlockContainer {
return stripEquipment(pipe);
} else if (entityplayer.getCurrentEquippedItem() == null) {
// Fall through the end of the test
} else if (entityplayer.getCurrentEquippedItem().itemID == Item.sign.itemID)
// Sign will be placed anyway, so lets show the sign gui
@ -694,7 +692,7 @@ public class BlockGenericPipe extends BlockContainer {
private boolean stripEquipment(Pipe pipe) {
// Try to strip wires first, starting with yellow.
for (IPipe.WireColor color : IPipe.WireColor.values())
for (IPipe.WireColor color : IPipe.WireColor.values()) {
if (pipe.wireSet[color.reverse().ordinal()]) {
if (!CoreProxy.proxy.isRenderWorld(pipe.worldObj)) {
dropWire(color.reverse(), pipe.worldObj, pipe.xCoord, pipe.yCoord, pipe.zCoord);
@ -704,6 +702,7 @@ public class BlockGenericPipe extends BlockContainer {
pipe.container.scheduleRenderUpdate();
return true;
}
}
// Try to strip gate next
if (pipe.hasGate()) {
@ -726,23 +725,23 @@ public class BlockGenericPipe extends BlockContainer {
Item wireItem;
switch (color) {
case Red:
wireItem = BuildCraftTransport.redPipeWire;
break;
case Blue:
wireItem = BuildCraftTransport.bluePipeWire;
break;
case Green:
wireItem = BuildCraftTransport.greenPipeWire;
break;
default:
wireItem = BuildCraftTransport.yellowPipeWire;
case Red:
wireItem = BuildCraftTransport.redPipeWire;
break;
case Blue:
wireItem = BuildCraftTransport.bluePipeWire;
break;
case Green:
wireItem = BuildCraftTransport.greenPipeWire;
break;
default:
wireItem = BuildCraftTransport.yellowPipeWire;
}
Utils.dropItems(world, new ItemStack(wireItem), i, j, k);
}
@SuppressWarnings({ "all" })
@SuppressWarnings({"all"})
@SideOnly(Side.CLIENT)
public Icon getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l) {
@ -811,7 +810,7 @@ public class BlockGenericPipe extends BlockContainer {
return 0;
}
@SuppressWarnings({ "all" })
@SuppressWarnings({"all"})
@Override
public void randomDisplayTick(World world, int i, int j, int k, Random random) {
Pipe pipe = getPipe(world, i, j, k);
@ -822,9 +821,7 @@ public class BlockGenericPipe extends BlockContainer {
}
/* Registration ******************************************************** */
public static Map<Integer, Class<? extends Pipe>> pipes = new HashMap<Integer, Class<? extends Pipe>>();
static long lastRemovedDate = -1;
public static Map<BlockIndex, Pipe> pipeRemoved = new HashMap<BlockIndex, Pipe>();
@ -899,17 +896,16 @@ public class BlockGenericPipe extends BlockContainer {
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister iconRegister)
{
if (!skippedFirstIconRegister){
public void registerIcons(IconRegister iconRegister) {
if (!skippedFirstIconRegister) {
skippedFirstIconRegister = true;
return;
}
BuildCraftTransport.instance.gateIconProvider.registerIcons(iconRegister);
BuildCraftTransport.instance.wireIconProvider.registerIcons(iconRegister);
for (int i : pipes.keySet()){
for (int i : pipes.keySet()) {
Pipe dummyPipe = createPipe(i);
if (dummyPipe != null){
if (dummyPipe != null) {
dummyPipe.getIconProvider().registerIcons(iconRegister);
}
}
@ -922,102 +918,113 @@ public class BlockGenericPipe extends BlockContainer {
}
/**
* Spawn a digging particle effect in the world, this is a wrapper around
* EffectRenderer.addBlockHitEffects to allow the block more control over
* the particles. Useful when you have entirely different texture sheets for
* different sides/locations in the world.
*
* @param world The current world
* @param target The target the player is looking at {x/y/z/side/sub}
* @param effectRenderer A reference to the current effect renderer.
* @return True to prevent vanilla digging particles form spawning.
*/
@SideOnly(Side.CLIENT)
@Override
public boolean addBlockHitEffects(World worldObj, MovingObjectPosition target, EffectRenderer effectRenderer) {
int x = target.blockX;
int y = target.blockY;
int z = target.blockZ;
* Spawn a digging particle effect in the world, this is a wrapper around
* EffectRenderer.addBlockHitEffects to allow the block more control over
* the particles. Useful when you have entirely different texture sheets for
* different sides/locations in the world.
*
* @param world The current world
* @param target The target the player is looking at {x/y/z/side/sub}
* @param effectRenderer A reference to the current effect renderer.
* @return True to prevent vanilla digging particles form spawning.
*/
@SideOnly(Side.CLIENT)
@Override
public boolean addBlockHitEffects(World worldObj, MovingObjectPosition target, EffectRenderer effectRenderer) {
int x = target.blockX;
int y = target.blockY;
int z = target.blockZ;
Pipe pipe = getPipe(worldObj, x, y, z);
if (pipe == null) return false;
Pipe pipe = getPipe(worldObj, x, y, z);
if (pipe == null)
return false;
Icon icon = pipe.getIconProvider().getIcon(pipe.getIconIndexForItem());
Icon icon = pipe.getIconProvider().getIcon(pipe.getIconIndexForItem());
int sideHit = target.sideHit;
int sideHit = target.sideHit;
Block block = BuildCraftTransport.genericPipeBlock;
float b = 0.1F;
double px = x + rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - (b * 2.0F)) + b + block.getBlockBoundsMinX();
double py = y + rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - (b * 2.0F)) + b + block.getBlockBoundsMinY();
double pz = z + rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - (b * 2.0F)) + b + block.getBlockBoundsMinZ();
Block block = BuildCraftTransport.genericPipeBlock;
float b = 0.1F;
double px = x + rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - (b * 2.0F)) + b + block.getBlockBoundsMinX();
double py = y + rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - (b * 2.0F)) + b + block.getBlockBoundsMinY();
double pz = z + rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - (b * 2.0F)) + b + block.getBlockBoundsMinZ();
if (sideHit == 0) {
py = (double) y + block.getBlockBoundsMinY() - (double) b;
}
if (sideHit == 0) {
py = (double) y + block.getBlockBoundsMinY() - (double) b;
}
if (sideHit == 1) {
py = (double) y + block.getBlockBoundsMaxY() + (double) b;
}
if (sideHit == 1) {
py = (double) y + block.getBlockBoundsMaxY() + (double) b;
}
if (sideHit == 2) {
pz = (double) z + block.getBlockBoundsMinZ() - (double) b;
}
if (sideHit == 2) {
pz = (double) z + block.getBlockBoundsMinZ() - (double) b;
}
if (sideHit == 3) {
pz = (double) z + block.getBlockBoundsMaxZ() + (double) b;
}
if (sideHit == 3) {
pz = (double) z + block.getBlockBoundsMaxZ() + (double) b;
}
if (sideHit == 4) {
px = (double) x + block.getBlockBoundsMinX() - (double) b;
}
if (sideHit == 4) {
px = (double) x + block.getBlockBoundsMinX() - (double) b;
}
if (sideHit == 5) {
px = (double) x + block.getBlockBoundsMaxX() + (double) b;
}
if (sideHit == 5) {
px = (double) x + block.getBlockBoundsMaxX() + (double) b;
}
EntityDiggingFX fx = new EntityDiggingFX(worldObj, px, py, pz, 0.0D, 0.0D, 0.0D, block, sideHit, worldObj.getBlockMetadata(x, y, z), Minecraft.getMinecraft().renderEngine);
EntityDiggingFX fx = new EntityDiggingFX(worldObj, px, py, pz, 0.0D, 0.0D, 0.0D, block, sideHit, worldObj.getBlockMetadata(x, y, z), Minecraft.getMinecraft().renderEngine);
fx.setParticleIcon(Minecraft.getMinecraft().renderEngine, icon);
effectRenderer.addEffect(fx.func_70596_a(x, y, z).multiplyVelocity(0.2F).multipleParticleScaleBy(0.6F));
return true;
}
effectRenderer.addEffect(fx.func_70596_a(x, y, z).multiplyVelocity(0.2F).multipleParticleScaleBy(0.6F));
return true;
}
/**
* Spawn particles for when the block is destroyed. Due to the nature of how
* this is invoked, the x/y/z locations are not always guaranteed to host
* your block. So be sure to do proper sanity checks before assuming that
* the location is this block.
*
* @param world The current world
* @param x X position to spawn the particle
* @param y Y position to spawn the particle
* @param z Z position to spawn the particle
* @param meta The metadata for the block before it was destroyed.
* @param effectRenderer A reference to the current effect renderer.
* @return True to prevent vanilla break particles from spawning.
*/
@SideOnly(Side.CLIENT)
@Override
public boolean addBlockDestroyEffects(World worldObj, int x, int y, int z, int meta, EffectRenderer effectRenderer) {
Pipe pipe = getPipe(worldObj, x, y, z);
if (pipe == null) return false;
/**
* Spawn particles for when the block is destroyed. Due to the nature of how
* this is invoked, the x/y/z locations are not always guaranteed to host
* your block. So be sure to do proper sanity checks before assuming that
* the location is this block.
*
* @param world The current world
* @param x X position to spawn the particle
* @param y Y position to spawn the particle
* @param z Z position to spawn the particle
* @param meta The metadata for the block before it was destroyed.
* @param effectRenderer A reference to the current effect renderer.
* @return True to prevent vanilla break particles from spawning.
*/
@SideOnly(Side.CLIENT)
@Override
public boolean addBlockDestroyEffects(World worldObj, int x, int y, int z, int meta, EffectRenderer effectRenderer) {
Pipe pipe = getPipe(worldObj, x, y, z);
if (pipe == null)
return false;
Icon icon = pipe.getIconProvider().getIcon(pipe.getIconIndexForItem());
Icon icon = pipe.getIconProvider().getIcon(pipe.getIconIndexForItem());
byte its = 4;
for (int i = 0; i < its; ++i) {
for (int j = 0; j < its; ++j) {
for (int k = 0; k < its; ++k) {
double px = x + (i + 0.5D) / (double) its;
double py = y + (j + 0.5D) / (double) its;
double pz = z + (k + 0.5D) / (double) its;
int random = rand.nextInt(6);
EntityDiggingFX fx = new EntityDiggingFX(worldObj, px, py, pz, px - x - 0.5D, py - y - 0.5D, pz - z - 0.5D, BuildCraftTransport.genericPipeBlock, random, meta, Minecraft.getMinecraft().renderEngine);
byte its = 4;
for (int i = 0; i < its; ++i) {
for (int j = 0; j < its; ++j) {
for (int k = 0; k < its; ++k) {
double px = x + (i + 0.5D) / (double) its;
double py = y + (j + 0.5D) / (double) its;
double pz = z + (k + 0.5D) / (double) its;
int random = rand.nextInt(6);
EntityDiggingFX fx = new EntityDiggingFX(worldObj, px, py, pz, px - x - 0.5D, py - y - 0.5D, pz - z - 0.5D, BuildCraftTransport.genericPipeBlock, random, meta, Minecraft.getMinecraft().renderEngine);
fx.setParticleIcon(Minecraft.getMinecraft().renderEngine, icon);
effectRenderer.addEffect(fx.func_70596_a(x, y, z));
}
}
}
return true;
}
effectRenderer.addEffect(fx.func_70596_a(x, y, z));
}
}
}
return true;
}
public static int facadeRenderColor = -1;
@Override
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
if (facadeRenderColor != -1) {
return facadeRenderColor;
}
return super.colorMultiplier(world, x, y, z);
}
}

View file

@ -7,9 +7,11 @@ import net.minecraft.world.World;
import buildcraft.core.GuiIds;
import buildcraft.transport.gui.ContainerDiamondPipe;
import buildcraft.transport.gui.ContainerEmeraldPipe;
import buildcraft.transport.gui.ContainerFilteredBuffer;
import buildcraft.transport.gui.ContainerGateInterface;
import buildcraft.transport.gui.GuiDiamondPipe;
import buildcraft.transport.gui.GuiEmeraldPipe;
import buildcraft.transport.gui.GuiFilteredBuffer;
import buildcraft.transport.gui.GuiGateInterface;
import buildcraft.transport.pipes.PipeLogicDiamond;
import cpw.mods.fml.common.network.IGuiHandler;
@ -22,6 +24,12 @@ public class GuiHandler implements IGuiHandler {
return null;
TileEntity tile = world.getBlockTileEntity(x, y, z);
if (tile instanceof TileFilteredBuffer) {
TileFilteredBuffer filteredBuffer = (TileFilteredBuffer) tile;
return new ContainerFilteredBuffer(player.inventory, filteredBuffer);
}
if (!(tile instanceof TileGenericPipe))
return null;
@ -51,6 +59,12 @@ public class GuiHandler implements IGuiHandler {
return null;
TileEntity tile = world.getBlockTileEntity(x, y, z);
if (tile instanceof TileFilteredBuffer) {
TileFilteredBuffer filteredBuffer = (TileFilteredBuffer) tile;
return new GuiFilteredBuffer(player.inventory, filteredBuffer);
}
if (!(tile instanceof TileGenericPipe))
return null;

View file

@ -0,0 +1,130 @@
package buildcraft.transport;
import java.util.LinkedList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import buildcraft.BuildCraftTransport;
import buildcraft.api.gates.IOverrideDefaultTriggers;
import buildcraft.api.gates.ITrigger;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.inventory.SimpleInventory;
public class TileFilteredBuffer extends TileBuildCraft implements IInventory, IOverrideDefaultTriggers {
private final SimpleInventory inventoryFilters = new SimpleInventory(9, "FilteredBufferFilters", 1);
private final SimpleInventory inventoryStorage = new SimpleInventory(9, "FilteredBufferStorage", 64);
@Override
public void updateEntity() {
super.updateEntity();
}
public IInventory getFilters() {
return inventoryFilters;
}
/** IInventory Implementation **/
@Override
public int getSizeInventory() {
return inventoryStorage.getSizeInventory();
}
@Override
public ItemStack getStackInSlot(int slotId) {
return inventoryStorage.getStackInSlot(slotId);
}
@Override
public ItemStack decrStackSize(int slotId, int count) {
return inventoryStorage.decrStackSize(slotId, count);
}
@Override
public ItemStack getStackInSlotOnClosing(int slotId) {
return inventoryStorage.getStackInSlotOnClosing(slotId);
}
@Override
public void setInventorySlotContents(int slotId, ItemStack itemStack) {
inventoryStorage.setInventorySlotContents(slotId, itemStack);
}
@Override
public String getInvName() {
return inventoryStorage.getInvName();
}
@Override
public int getInventoryStackLimit() {
return inventoryStorage.getInventoryStackLimit();
}
@Override
public boolean isUseableByPlayer(EntityPlayer entityPlayer) {
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) == this;
}
@Override
public void openChest() {
}
@Override
public void closeChest() {
}
@Override
public boolean isStackValidForSlot(int i, ItemStack itemstack) {
ItemStack filterItemStack = inventoryFilters.getStackInSlot(i);
if ( filterItemStack == null || filterItemStack.itemID != itemstack.itemID)
return false;
if (Item.itemsList[itemstack.itemID].isDamageable())
return true;
if (filterItemStack.getItemDamage() == itemstack.getItemDamage())
return true;
return false;
}
@Override
public LinkedList<ITrigger> getTriggers() {
LinkedList<ITrigger> result = new LinkedList<ITrigger>();
result.add(BuildCraftTransport.triggerInventoryBelow25);
result.add(BuildCraftTransport.triggerInventoryBelow50);
result.add(BuildCraftTransport.triggerInventoryBelow75);
return result;
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(nbtTagCompound);
NBTTagCompound inventoryStorageTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryStorage");
inventoryStorage.readFromNBT(inventoryStorageTag);
NBTTagCompound inventoryFiltersTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryFilters");
inventoryFilters.readFromNBT(inventoryFiltersTag);
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryStorageTag = new NBTTagCompound();
inventoryStorage.writeToNBT(inventoryStorageTag);
nbtTagCompound.setTag("inventoryStorage", inventoryStorageTag);
NBTTagCompound inventoryFiltersTag = new NBTTagCompound();
inventoryFilters.writeToNBT(inventoryFiltersTag);
nbtTagCompound.setTag("inventoryFilters", inventoryFiltersTag);
}
}

View file

@ -1,12 +1,10 @@
/**
* Copyright (c) SpaceToad, 2011
* http://www.mod-buildcraft.com
* Copyright (c) SpaceToad, 2011 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
* 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;
import java.io.DataInputStream;
@ -74,29 +72,22 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
pipeId = data.readInt();
gateKind = data.readInt();
}
}
private PipeRenderState renderState = new PipeRenderState();
private CoreState coreState = new CoreState();
private boolean deletePipe = false;
public TileBuffer[] tileBuffer;
public boolean[] pipeConnectionsBuffer = new boolean[6];
public SafeTimeTracker networkSyncTracker = new SafeTimeTracker();
public Pipe pipe;
private boolean blockNeighborChange = false;
private boolean refreshRenderState = false;
private boolean pipeBound = false;
private int[] facadeBlocks = new int[ForgeDirection.VALID_DIRECTIONS.length];
private int[] facadeMeta = new int[ForgeDirection.VALID_DIRECTIONS.length];
private boolean[] plugs = new boolean[ForgeDirection.VALID_DIRECTIONS.length];
public TileGenericPipe() {
}
@Override
@ -157,13 +148,12 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
pipe.validate();
}
}
public boolean initialized = false;
@Override
public void updateEntity() {
if(deletePipe){
if (deletePipe) {
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
}
@ -225,23 +215,23 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
renderState.wireMatrix.setWireConnected(color, direction, pipe.isWireConnectedTo(this.getTile(direction), color));
}
boolean lit = pipe.signalStrength[color.ordinal()] > 0;
switch(color){
case Red:
renderState.wireMatrix.setWireIndex(color, lit? WireIconProvider.Texture_Red_Lit : WireIconProvider.Texture_Red_Dark);
break;
case Blue:
renderState.wireMatrix.setWireIndex(color, lit? WireIconProvider.Texture_Blue_Lit : WireIconProvider.Texture_Blue_Dark);
break;
case Green:
renderState.wireMatrix.setWireIndex(color, lit? WireIconProvider.Texture_Green_Lit : WireIconProvider.Texture_Green_Dark);
break;
case Yellow:
renderState.wireMatrix.setWireIndex(color, lit? WireIconProvider.Texture_Yellow_Lit : WireIconProvider.Texture_Yellow_Dark);
break;
default:
break;
switch (color) {
case Red:
renderState.wireMatrix.setWireIndex(color, lit ? WireIconProvider.Texture_Red_Lit : WireIconProvider.Texture_Red_Dark);
break;
case Blue:
renderState.wireMatrix.setWireIndex(color, lit ? WireIconProvider.Texture_Blue_Lit : WireIconProvider.Texture_Blue_Dark);
break;
case Green:
renderState.wireMatrix.setWireIndex(color, lit ? WireIconProvider.Texture_Green_Lit : WireIconProvider.Texture_Green_Dark);
break;
case Yellow:
renderState.wireMatrix.setWireIndex(color, lit ? WireIconProvider.Texture_Yellow_Lit : WireIconProvider.Texture_Yellow_Dark);
break;
default:
break;
}
}
@ -256,10 +246,10 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
}
//Plugs
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS){
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
renderState.plugMatrix.setConnected(direction, plugs[direction.ordinal()]);
}
if (renderState.isDirty()) {
worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
renderState.clean();
@ -269,8 +259,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
public void initialize(Pipe pipe) {
this.blockType = getBlockType();
if(pipe == null){
if (pipe == null) {
BuildCraftCore.bcLog.log(Level.WARNING, "Pipe failed to initialize at {0},{1},{2}, deleting", new Object[]{xCoord, yCoord, zCoord});
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
return;
@ -430,7 +420,6 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
@Override
public void blockRemoved(ForgeDirection from) {
// TODO Auto-generated method stub
}
@Override
@ -458,21 +447,23 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
/**
* Checks if this tile is connected to another tile
*
* @param with - The other Tile
* @param side - The orientation to get to the other tile ('with')
* @return true if pipes are considered connected
*/
protected boolean arePipesConnected(TileEntity with, ForgeDirection side) {
Pipe pipe1 = pipe;
if (hasPlug(side)) return false;
if (hasPlug(side))
return false;
if (!BlockGenericPipe.isValid(pipe1))
return false;
if (with instanceof TileGenericPipe) {
if (((TileGenericPipe)with).hasPlug(side.getOpposite())) return false;
if (((TileGenericPipe) with).hasPlug(side.getOpposite()))
return false;
Pipe pipe2 = ((TileGenericPipe) with).pipe;
if (!BlockGenericPipe.isValid(pipe2))
@ -489,12 +480,12 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
if (tileBuffer != null) {
pipeConnectionsBuffer = new boolean[6];
for (int i = 0; i < tileBuffer.length; ++i) {
TileBuffer t = tileBuffer[i];
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
TileBuffer t = tileBuffer[side.ordinal()];
t.refresh();
if (t.getTile() != null) {
pipeConnectionsBuffer[i] = arePipesConnected(t.getTile(), ForgeDirection.VALID_DIRECTIONS[i]);
pipeConnectionsBuffer[side.ordinal()] = arePipesConnected(t.getTile(), side);
}
}
}
@ -520,11 +511,12 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
}
}
/** ITankContainer implementation **/
/**
* ITankContainer implementation *
*/
@Override
public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) {
if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof ITankContainer)
if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof ITankContainer && !hasPlug(from))
return ((ITankContainer) pipe.transport).fill(from, resource, doFill);
else
return 0;
@ -540,7 +532,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
@Override
public LiquidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof ITankContainer)
if (BlockGenericPipe.isValid(pipe) && pipe.transport instanceof ITankContainer && !hasPlug(from))
return ((ITankContainer) pipe.transport).drain(from, maxDrain, doDrain);
else
return null;
@ -588,8 +580,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
return renderState.facadeMatrix.getFacadeBlockId(direction) != 0;
return (this.facadeBlocks[direction.ordinal()] != 0);
}
private void dropFacadeItem(ForgeDirection direction){
private void dropFacadeItem(ForgeDirection direction) {
Utils.dropItems(worldObj, ItemFacade.getStack(this.facadeBlocks[direction.ordinal()], this.facadeMeta[direction.ordinal()]), this.xCoord, this.yCoord, this.zCoord);
}
@ -605,29 +597,31 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
scheduleRenderUpdate();
}
/** IPipeRenderState implementation **/
/**
* IPipeRenderState implementation *
*/
@Override
public PipeRenderState getRenderState() {
return renderState;
}
@Override
@SideOnly(Side.CLIENT)
public IIconProvider getPipeIcons() {
if (pipe == null) return null;
if (pipe == null)
return null;
return pipe.getIconProvider();
}
@Override
public IClientState getStateInstance(byte stateId) {
switch (stateId) {
case 0:
return coreState;
case 1:
return renderState;
case 2:
return (IClientState) pipe;
case 0:
return coreState;
case 1:
return renderState;
case 2:
return (IClientState) pipe;
}
throw new RuntimeException("Unknown state requested: " + stateId + " this is a bug!");
}
@ -638,17 +632,17 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
return;
switch (stateId) {
case 0:
if (pipe == null && coreState.pipeId != 0) {
initialize(BlockGenericPipe.createPipe(coreState.pipeId));
}
if (pipe != null && coreState.gateKind != GateKind.None.ordinal()) {
if (pipe.gate == null) {
pipe.gate = new GateVanilla(pipe);
case 0:
if (pipe == null && coreState.pipeId != 0) {
initialize(BlockGenericPipe.createPipe(coreState.pipeId));
}
pipe.gate.kind = GateKind.values()[coreState.gateKind];
}
break;
if (pipe != null && coreState.gateKind != GateKind.None.ordinal()) {
if (pipe.gate == null) {
pipe.gate = new GateVanilla(pipe);
}
pipe.gate.kind = GateKind.values()[coreState.gateKind];
}
break;
}
worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord);
}
@ -685,12 +679,15 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
}
public boolean hasPlug(ForgeDirection forgeDirection) {
if (this.worldObj.isRemote)
return renderState.plugMatrix.isConnected(forgeDirection);
return plugs[forgeDirection.ordinal()];
}
public void removeAndDropPlug(ForgeDirection forgeDirection) {
if (!hasPlug(forgeDirection)) return;
if (!hasPlug(forgeDirection))
return;
plugs[forgeDirection.ordinal()] = false;
Utils.dropItems(worldObj, new ItemStack(BuildCraftTransport.plugItem), this.xCoord, this.yCoord, this.zCoord);
worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
@ -699,8 +696,9 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, ITank
}
public boolean addPlug(ForgeDirection forgeDirection) {
if (hasPlug(forgeDirection)) return false;
if (hasPlug(forgeDirection))
return false;
plugs[forgeDirection.ordinal()] = true;
worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
scheduleNeighborChange(); //To force recalculation of connections

View file

@ -13,6 +13,7 @@ public class TransportProxy {
GameRegistry.registerTileEntity(TileDummyGenericPipe.class, "net.minecraft.src.buildcraft.GenericPipe");
GameRegistry.registerTileEntity(TileDummyGenericPipe2.class, "net.minecraft.src.buildcraft.transport.TileGenericPipe");
GameRegistry.registerTileEntity(TileGenericPipe.class, "net.minecraft.src.buildcraft.transport.GenericPipe");
GameRegistry.registerTileEntity(TileFilteredBuffer.class, "net.minecraft.src.buildcraft.transport.TileFilteredBuffer");
}
public void registerRenderers() {

View file

@ -0,0 +1,74 @@
/**
* Copyright (c) SpaceToad, 2011 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.gui;
import buildcraft.core.gui.slots.SlotValidated;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import buildcraft.core.gui.BuildCraftContainer;
import buildcraft.core.gui.slots.SlotPhantom;
import buildcraft.transport.TileFilteredBuffer;
/**
*
* @author SandGrainOne
*/
public class ContainerFilteredBuffer extends BuildCraftContainer {
private class SlotPhantomLockable extends SlotPhantom {
final IInventory locks;
public SlotPhantomLockable(IInventory storage, IInventory locks, int par2, int par3, int par4) {
super(storage, par2, par3, par4);
this.locks = locks;
}
@Override
public boolean canAdjust() {
return locks.getStackInSlot(this.getSlotIndex()) == null;
}
}
IInventory playerInventory;
TileFilteredBuffer filteredBuffer;
public ContainerFilteredBuffer(InventoryPlayer playerInventory, TileFilteredBuffer tile) {
super(tile.getSizeInventory());
this.playerInventory = playerInventory;
this.filteredBuffer = tile;
IInventory filters = tile.getFilters();
for (int col = 0; col < 9; col++) {
// Filtered Buffer filter slots
addSlotToContainer(new SlotPhantomLockable(filters, tile, col, 8 + col * 18, 27));
// Filtered Buffer inventory slots
addSlotToContainer(new SlotValidated(tile, col, 8 + col * 18, 61));
}
// Player inventory
for (int l = 0; l < 3; l++) {
for (int k1 = 0; k1 < 9; k1++) {
addSlotToContainer(new Slot(playerInventory, k1 + l * 9 + 9, 8 + k1 * 18, 86 + l * 18));
}
}
// Player hot bar
for (int i1 = 0; i1 < 9; i1++) {
addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 144));
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer) {
return filteredBuffer.isUseableByPlayer(entityPlayer);
}
}

View file

@ -0,0 +1,61 @@
/**
* Copyright (c) SpaceToad, 2011 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.gui;
import org.lwjgl.opengl.GL11;
import buildcraft.core.DefaultProps;
import buildcraft.core.utils.StringUtils;
import buildcraft.transport.TileFilteredBuffer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
/**
*
* @author SandGrainOne
*/
public class GuiFilteredBuffer extends GuiContainer {
IInventory playerInventory;
TileFilteredBuffer filteredBuffer;
public GuiFilteredBuffer(InventoryPlayer playerInventory, TileFilteredBuffer filteredBuffer) {
super(new ContainerFilteredBuffer(playerInventory, filteredBuffer));
this.playerInventory = playerInventory;
this.filteredBuffer = filteredBuffer;
xSize = 175;
ySize = 169;
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
mc.renderEngine.bindTexture(DefaultProps.TEXTURE_PATH_GUI + "/filteredBuffer_gui.png");
int cornerX = (width - xSize) / 2;
int cornerY = (height - ySize) / 2;
drawTexturedModalRect(cornerX, cornerY, 0, 0, xSize, ySize);
IInventory filters = filteredBuffer.getFilters();
for (int col = 0; col < filters.getSizeInventory(); col++) {
if (filters.getStackInSlot(col) == null) {
drawTexturedModalRect(cornerX + 7 + col * 18, cornerY + 60, 176, 0, 18, 18);
}
}
}
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
String title = StringUtils.localize("tile.filteredBufferBlock");
int xPos = (xSize - fontRenderer.getStringWidth(title)) / 2;
fontRenderer.drawString(title, xPos, 10, 0x404040);
}
}

View file

@ -13,14 +13,24 @@ import buildcraft.BuildCraftTransport;
import buildcraft.core.utils.Utils;
import buildcraft.transport.ItemFacade;
import buildcraft.transport.PipeIconProvider;
import net.minecraft.item.Item;
public class FacadeItemRenderer implements IItemRenderer {
private void renderFacadeItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) {
int decodedMeta = ItemFacade.getMetaData(item);
int decodedBlockId = ItemFacade.getBlockId(item);
try {
int color = Item.itemsList[decodedBlockId].getColorFromItemStack(new ItemStack(decodedBlockId, 1, decodedMeta), 0);
float r = (float) (color >> 16 & 0xff) / 255F;
float g = (float) (color >> 8 & 0xff) / 255F;
float b = (float) (color & 0xff) / 255F;
GL11.glColor4f(r, g, b, 1.0F);
} catch (Throwable error) {
}
Tessellator tessellator = Tessellator.instance;
Block block = Block.blocksList[decodedBlockId];
@ -100,14 +110,14 @@ public class FacadeItemRenderer implements IItemRenderer {
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
switch (type) {
case ENTITY:
return true;
case EQUIPPED:
return true;
case INVENTORY:
return true;
default:
return false;
case ENTITY:
return true;
case EQUIPPED:
return true;
case INVENTORY:
return true;
default:
return false;
}
}
@ -120,19 +130,18 @@ public class FacadeItemRenderer implements IItemRenderer {
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
switch (type) {
case ENTITY:
GL11.glScalef(0.50F, 0.50F, 0.50F);
renderFacadeItem((RenderBlocks) data[0], item, -0.6F, 0f, -0.6F);
break;
case EQUIPPED:
renderFacadeItem((RenderBlocks) data[0], item, 0F, 0F, 0f);
break;
case INVENTORY:
GL11.glScalef(1.1F, 1.1F, 1.1F);
renderFacadeItem((RenderBlocks) data[0], item, -0.3f, -0.35f, -0.7f);
break;
default:
case ENTITY:
GL11.glScalef(0.50F, 0.50F, 0.50F);
renderFacadeItem((RenderBlocks) data[0], item, -0.6F, 0f, -0.6F);
break;
case EQUIPPED:
renderFacadeItem((RenderBlocks) data[0], item, 0F, 0F, 0f);
break;
case INVENTORY:
GL11.glScalef(1.1F, 1.1F, 1.1F);
renderFacadeItem((RenderBlocks) data[0], item, -0.3f, -0.35f, -0.7f);
break;
default:
}
}
}

View file

@ -10,11 +10,14 @@ import buildcraft.api.core.IIconProvider;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipe.WireColor;
import buildcraft.core.utils.Utils;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.IPipeRenderState;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeRenderState;
import buildcraft.transport.TransportProxy;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
@ -32,11 +35,11 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
}
/**
* Shifts the coordinates around effectivly rotating something. Zero state is DOWN then -> NORTH -> WEST Note - To obtain Pos, do a mirrorY() before
* Shifts the coordinates around effectivly rotating something. Zero state
* is DOWN then -> NORTH -> WEST Note - To obtain Pos, do a mirrorY() before
* rotating
*
* @param targetArray
* the array that should be rotated
* @param targetArray the array that should be rotated
*/
private void rotate(float[][] targetArray) {
for (int i = 0; i < 2; i++) {
@ -48,8 +51,7 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
}
/**
* @param targetArray
* the array that should be transformed
* @param targetArray the array that should be transformed
* @param direction
*/
private void transform(float[][] targetArray, ForgeDirection direction) {
@ -65,8 +67,7 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
/**
* Clones both dimensions of a float[][]
*
* @param source
* the float[][] to deepClone
* @param source the float[][] to deepClone
* @return
*/
private float[][] deepClone(float[][] source) {
@ -84,7 +85,8 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
PipeRenderState state = renderState.getRenderState();
IIconProvider icons = renderState.getPipeIcons();
if (icons == null) return;
if (icons == null)
return;
state.currentTexture = icons.getIcon(state.textureMatrix.getTextureIndex(ForgeDirection.UNKNOWN));
@ -182,25 +184,28 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
zeroState[2][1] = 1.0F;
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
if (state.facadeMatrix.getFacadeBlockId(direction) != 0) {
Block renderBlock = Block.blocksList[state.facadeMatrix.getFacadeBlockId(direction)];
int renderMeta = state.facadeMatrix.getFacadeMetaId(direction);
state.currentTexture = renderBlock.getIcon(direction.ordinal(), renderMeta);
int facadeId = state.facadeMatrix.getFacadeBlockId(direction);
if (facadeId != 0) {
Block renderBlock = Block.blocksList[facadeId];
int renderMeta = state.facadeMatrix.getFacadeMetaId(direction);
state.currentTexture = renderBlock.getIcon(direction.ordinal(), renderMeta);
if (renderBlock.getRenderType() == 31) {
if ((renderMeta & 12) == 4)
{
renderblocks.uvRotateEast = 1;
renderblocks.uvRotateWest = 1;
renderblocks.uvRotateTop = 1;
renderblocks.uvRotateBottom = 1;
}
else if ((renderMeta & 12) == 8)
{
renderblocks.uvRotateSouth = 1;
renderblocks.uvRotateNorth = 1;
}
}
try {
BlockGenericPipe.facadeRenderColor = Item.itemsList[state.facadeMatrix.getFacadeBlockId(direction)].getColorFromItemStack(new ItemStack(facadeId, 1, renderMeta), 0);
} catch (Throwable error) {
}
if (renderBlock.getRenderType() == 31) {
if ((renderMeta & 12) == 4) {
renderblocks.uvRotateEast = 1;
renderblocks.uvRotateWest = 1;
renderblocks.uvRotateTop = 1;
renderblocks.uvRotateBottom = 1;
} else if ((renderMeta & 12) == 8) {
renderblocks.uvRotateSouth = 1;
renderblocks.uvRotateNorth = 1;
}
}
// Hollow facade
if (state.pipeConnectionMatrix.isConnected(direction)) {
@ -246,15 +251,17 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
renderblocks.renderStandardBlock(block, x, y, z);
}
if (renderBlock.getRenderType() == 31) {
renderblocks.uvRotateSouth = 0;
renderblocks.uvRotateEast = 0;
renderblocks.uvRotateWest = 0;
renderblocks.uvRotateNorth = 0;
renderblocks.uvRotateTop = 0;
renderblocks.uvRotateBottom = 0;
}
if (renderBlock.getRenderType() == 31) {
renderblocks.uvRotateSouth = 0;
renderblocks.uvRotateEast = 0;
renderblocks.uvRotateWest = 0;
renderblocks.uvRotateNorth = 0;
renderblocks.uvRotateTop = 0;
renderblocks.uvRotateBottom = 0;
}
}
BlockGenericPipe.facadeRenderColor = -1;
}
// X START - END
@ -310,14 +317,14 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
}
// X START - END
zeroState[0][0] = 0.25F + 0.125F/2 + zFightOffset;
zeroState[0][1] = 0.75F - 0.125F/2 + zFightOffset;
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;
zeroState[2][0] = 0.25F + 0.125F / 2;
zeroState[2][1] = 0.75F - 0.125F / 2;
state.currentTexture = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal()); // Structure Pipe
@ -503,14 +510,13 @@ public class PipeWorldRenderer implements ISimpleBlockRenderingHandler {
}
}
private boolean shouldRenderNormalPipeSide(PipeRenderState state, ForgeDirection direction){
private boolean shouldRenderNormalPipeSide(PipeRenderState state, ForgeDirection direction) {
return !state.pipeConnectionMatrix.isConnected(direction) && state.facadeMatrix.getFacadeBlockId(direction) == 0 && !state.plugMatrix.isConnected(direction);
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {
// TODO Auto-generated method stub
}
@Override

View file

@ -0,0 +1,110 @@
/**
* Copyright (c) SpaceToad, 2011
* 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.triggers;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.gates.ITriggerParameter;
import buildcraft.core.triggers.ActionTriggerIconProvider;
import buildcraft.core.triggers.BCTrigger;
import buildcraft.transport.TileFilteredBuffer;
public class TriggerFilteredBufferInventoryLevel extends BCTrigger {
public enum State {
Below25, Below50, Below75
};
public State state;
public TriggerFilteredBufferInventoryLevel(int id, State state) {
super(id);
this.state = state;
}
@Override
public boolean hasParameter() {
return true;
}
@Override
public String getDescription() {
switch (state) {
case Below25:
return "Contains < 25%";
case Below50:
return "Contains < 50%";
default:
return "Contains < 75%";
}
}
@Override
public boolean isTriggerActive(ForgeDirection side, TileEntity tile, ITriggerParameter parameter) {
if (tile instanceof TileFilteredBuffer) {
// A parameter is required
if (parameter == null) {
return false;
}
TileFilteredBuffer filteredBuffer = (TileFilteredBuffer) tile;
ItemStack searchStack = parameter.getItem();
int foundStackCount = 0;
int foundItemCount = 0;
IInventory filters = filteredBuffer.getFilters();
for (int i = 0 ; i < filters.getSizeInventory() ; i++) {
ItemStack filterStack = filters.getStackInSlot(i);
if (filterStack != null && filterStack.isItemEqual(searchStack)) {
ItemStack foundStack = filteredBuffer.getStackInSlot(i);
if(foundStack != null)
foundItemCount += foundStack.stackSize;
foundStackCount++;
}
}
if (foundStackCount > 0) {
float percentage = (float)foundItemCount / ((float)foundStackCount * (float)searchStack.getMaxStackSize());
switch (state) {
case Below25:
return percentage < 0.25f;
case Below50:
return percentage < 0.5f;
default:
return percentage < 0.75f;
}
}
}
return false;
}
@Override
public int getIconIndex() {
switch (state) {
case Below25:
return ActionTriggerIconProvider.Trigger_Inventory_Below25;
case Below50:
return ActionTriggerIconProvider.Trigger_Inventory_Below50;
default:
return ActionTriggerIconProvider.Trigger_Inventory_Below75;
}
}
}