From 5822a0806af4c835d3abcd4d0854aae4b500f43b Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Sat, 15 Mar 2014 21:20:42 +0100 Subject: [PATCH] initial resurection of stripes pipe, for #1491 --- common/buildcraft/BuildCraftTransport.java | 3 + common/buildcraft/transport/Pipe.java | 4 - .../transport/PipeIconProvider.java | 3 +- .../transport/PipeTransportItems.java | 71 +++++--- .../transport/pipes/PipeItemsDiamond.java | 29 ++-- .../transport/pipes/PipeItemsStripes.java | 159 ++++++++++++++++++ .../transport/pipes/events/PipeEventItem.java | 13 +- 7 files changed, 240 insertions(+), 42 deletions(-) create mode 100755 common/buildcraft/transport/pipes/PipeItemsStripes.java diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index 57079ce7..68a9d7ef 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -81,6 +81,7 @@ import buildcraft.transport.pipes.PipeItemsObsidian; import buildcraft.transport.pipes.PipeItemsQuartz; import buildcraft.transport.pipes.PipeItemsSandstone; import buildcraft.transport.pipes.PipeItemsStone; +import buildcraft.transport.pipes.PipeItemsStripes; import buildcraft.transport.pipes.PipeItemsVoid; import buildcraft.transport.pipes.PipeItemsWood; import buildcraft.transport.pipes.PipePowerCobblestone; @@ -140,6 +141,7 @@ public class BuildCraftTransport extends BuildCraftMod { public static Item pipeItemsVoid; public static Item pipeItemsSandstone; public static Item pipeItemsEmzuli; + public static Item pipeItemsStripes; public static Item pipeFluidsWood; public static Item pipeFluidsCobblestone; public static Item pipeFluidsStone; @@ -333,6 +335,7 @@ public class BuildCraftTransport extends BuildCraftMod { pipeItemsSandstone = buildPipe(DefaultProps.PIPE_ITEMS_SANDSTONE_ID, PipeItemsSandstone.class, "Sandstone Transport Pipe", CreativeTabBuildCraft.TIER_1, Blocks.sandstone, Blocks.glass, Blocks.sandstone); pipeItemsVoid = buildPipe(DefaultProps.PIPE_ITEMS_VOID_ID, PipeItemsVoid.class, "Void Transport Pipe", CreativeTabBuildCraft.TIER_1, "dyeBlack", Blocks.glass, Items.redstone); pipeItemsEmzuli = buildPipe(DefaultProps.PIPE_ITEMS_EMZULI_ID, PipeItemsEmzuli.class, "Emzuli Transport Pipe", CreativeTabBuildCraft.MISC, Blocks.lapis_block, Blocks.glass, Items.emerald); + pipeItemsStripes = buildPipe(0, PipeItemsStripes.class, "Stripes Transport Pipe", CreativeTabBuildCraft.TIER_3, Items.dye, Blocks.glass, Items.dye); pipeFluidsWood = buildPipe(DefaultProps.PIPE_LIQUIDS_WOOD_ID, PipeFluidsWood.class, "Wooden Waterproof Pipe", CreativeTabBuildCraft.TIER_2, pipeWaterproof, pipeItemsWood); pipeFluidsCobblestone = buildPipe(DefaultProps.PIPE_LIQUIDS_COBBLESTONE_ID, PipeFluidsCobblestone.class, "Cobblestone Waterproof Pipe", CreativeTabBuildCraft.TIER_2, pipeWaterproof, pipeItemsCobblestone); diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java index bb3333dc..0b127208 100644 --- a/common/buildcraft/transport/Pipe.java +++ b/common/buildcraft/transport/Pipe.java @@ -27,7 +27,6 @@ import net.minecraft.world.WorldSettings.GameType; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.core.IIconProvider; -import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.gates.IAction; import buildcraft.api.gates.ITrigger; import buildcraft.api.transport.PipeWire; @@ -51,7 +50,6 @@ public abstract class Pipe implements IDropControlInven public Gate gate; @SuppressWarnings("rawtypes") private static Map networkWrappers = new HashMap(); - public SafeTimeTracker actionTracker = new SafeTimeTracker(); private static Map, Map, EventHandler>> eventHandlers = new HashMap, Map, EventHandler>>(); public Pipe(T transport, Item item) { @@ -65,9 +63,7 @@ public abstract class Pipe implements IDropControlInven } public void setTile(TileEntity tile) { - this.container = (TileGenericPipe) tile; - transport.setTile((TileGenericPipe) tile); } diff --git a/common/buildcraft/transport/PipeIconProvider.java b/common/buildcraft/transport/PipeIconProvider.java index dca0efd1..9e872a1a 100644 --- a/common/buildcraft/transport/PipeIconProvider.java +++ b/common/buildcraft/transport/PipeIconProvider.java @@ -154,8 +154,9 @@ public class PipeIconProvider implements IIconProvider { @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int pipeIconIndex) { - if (pipeIconIndex == -1) + if (pipeIconIndex == -1) { return null; + } return TYPE.VALUES[pipeIconIndex].icon; } diff --git a/common/buildcraft/transport/PipeTransportItems.java b/common/buildcraft/transport/PipeTransportItems.java index 70e716c9..67392d64 100644 --- a/common/buildcraft/transport/PipeTransportItems.java +++ b/common/buildcraft/transport/PipeTransportItems.java @@ -59,8 +59,9 @@ public class PipeTransportItems extends PipeTransport { } PipeEventItem.AdjustSpeed event = new PipeEventItem.AdjustSpeed(item); container.pipe.handlePipeEvent(event); - if (!event.handled) + if (!event.handled) { defaultReajustSpeed(item); + } } public void defaultReajustSpeed(TravelingItem item) { @@ -90,10 +91,11 @@ public class PipeTransportItems extends PipeTransport { } public void injectItem(TravelingItem item, ForgeDirection inputOrientation) { - if (item.isCorrupted()) + if (item.isCorrupted()) { // Safe guard - if for any reason the item is corrupted at this // stage, avoid adding it to the pipe to avoid further exceptions. return; + } item.reset(); item.input = inputOrientation; @@ -112,16 +114,18 @@ public class PipeTransportItems extends PipeTransport { PipeEventItem.Entered event = new PipeEventItem.Entered(item); container.pipe.handlePipeEvent(event); - if (event.cancelled) + if (event.cancelled) { return; + } items.add(item); if (!container.getWorldObj().isRemote) { sendTravelerPacket(item, false); - if (items.size() > BuildCraftTransport.groupItemsTrigger) + if (items.size() > BuildCraftTransport.groupItemsTrigger) { groupEntities(); + } if (items.size() > MAX_PIPE_STACKS) { BCLog.logger.log(Level.WARNING, String.format("Pipe exploded at %d,%d,%d because it had too many stacks: %d", container.xCoord, container.yCoord, container.zCoord, items.size())); @@ -132,8 +136,9 @@ public class PipeTransportItems extends PipeTransport { int numItems = 0; for (TravelingItem travellingItem : items) { ItemStack stack = travellingItem.getItemStack(); - if (stack != null && stack.stackSize > 0) + if (stack != null && stack.stackSize > 0) { numItems += stack.stackSize; + } } if (numItems > MAX_PIPE_ITEMS) { @@ -154,10 +159,11 @@ public class PipeTransportItems extends PipeTransport { * @param item */ protected void reverseItem(TravelingItem item) { - if (item.isCorrupted()) + if (item.isCorrupted()) { // Safe guard - if for any reason the item is corrupted at this // stage, avoid adding it to the pipe to avoid further exceptions. return; + } item.toCenter = true; item.input = item.output.getOpposite(); @@ -174,20 +180,23 @@ public class PipeTransportItems extends PipeTransport { } PipeEventItem.Entered event = new PipeEventItem.Entered(item); container.pipe.handlePipeEvent(event); - if (event.cancelled) + if (event.cancelled) { return; + } items.unscheduleRemoval(item); - if (!container.getWorldObj().isRemote) + if (!container.getWorldObj().isRemote) { sendTravelerPacket(item, true); + } } public ForgeDirection resolveDestination(TravelingItem data) { List validDestinations = getPossibleMovements(data); - if (validDestinations.isEmpty()) + if (validDestinations.isEmpty()) { return ForgeDirection.UNKNOWN; + } return validDestinations.get(0); } @@ -205,8 +214,9 @@ public class PipeTransportItems extends PipeTransport { sides.remove(ForgeDirection.UNKNOWN); for (ForgeDirection o : sides) { - if (container.pipe.outputOpen(o) && canReceivePipeObjects(o, item)) + if (container.pipe.outputOpen(o) && canReceivePipeObjects(o, item)) { result.add(o); + } } if (this.container.pipe instanceof IPipeTransportItemsHook) { @@ -230,16 +240,19 @@ public class PipeTransportItems extends PipeTransport { public boolean canReceivePipeObjects(ForgeDirection o, TravelingItem item) { TileEntity entity = container.getTile(o); - if (!container.isPipeConnected(o)) + if (!container.isPipeConnected(o)) { return false; + } if (entity instanceof TileGenericPipe) { TileGenericPipe pipe = (TileGenericPipe) entity; return pipe.pipe.transport instanceof PipeTransportItems; - } else if (entity instanceof IInventory && item.getInsertionHandler().canInsertItem(item, (IInventory) entity)) - if (Transactor.getTransactorFor(entity).add(item.getItemStack(), o.getOpposite(), false).stackSize > 0) + } else if (entity instanceof IInventory && item.getInsertionHandler().canInsertItem(item, (IInventory) entity)) { + if (Transactor.getTransactorFor(entity).add(item.getItemStack(), o.getOpposite(), false).stackSize > 0) { return true; + } + } return false; } @@ -275,8 +288,9 @@ public class PipeTransportItems extends PipeTransport { item.setPosition(container.xCoord + 0.5, container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack()), container.zCoord + 0.5); if (item.output == ForgeDirection.UNKNOWN) { - if (items.scheduleRemoval(item)) + if (items.scheduleRemoval(item)) { dropItem(item); + } } else { if (travelHook != null) { travelHook.centerReached(this, item); @@ -332,13 +346,15 @@ public class PipeTransportItems extends PipeTransport { reverseItem(item); } } - } else + } else { dropItem(item); + } } private void dropItem(TravelingItem item) { - if (container.getWorldObj().isRemote) + if (container.getWorldObj().isRemote) { return; + } if (travelHook != null) { travelHook.drop(this, item); @@ -346,8 +362,11 @@ public class PipeTransportItems extends PipeTransport { PipeEventItem.DropItem event = new PipeEventItem.DropItem(item, item.toEntityItem()); container.pipe.handlePipeEvent(event); - if (event.entity == null) + + if (event.entity == null) { return; + } + container.getWorldObj().spawnEntityInWorld(event.entity); } @@ -381,8 +400,9 @@ public class PipeTransportItems extends PipeTransport { TravelingItem item = TravelingItem.make(dataTag); - if (item.isCorrupted()) + if (item.isCorrupted()) { continue; + } items.scheduleLoad(item); } catch (Throwable t) { @@ -453,8 +473,9 @@ public class PipeTransportItems extends PipeTransport { public int getNumberOfItems() { int num = 0; for (TravelingItem item : items) { - if (item.getItemStack() == null) + if (item.getItemStack() == null) { continue; + } num += item.getItemStack().stackSize; } return num; @@ -467,8 +488,9 @@ public class PipeTransportItems extends PipeTransport { public boolean canPipeConnect(TileEntity tile, ForgeDirection side) { if (tile instanceof TileGenericPipe) { Pipe pipe2 = ((TileGenericPipe) tile).pipe; - if (BlockGenericPipe.isValid(pipe2) && !(pipe2.transport instanceof PipeTransportItems)) + if (BlockGenericPipe.isValid(pipe2) && !(pipe2.transport instanceof PipeTransportItems)) { return false; + } } if (tile instanceof ISidedInventory) { @@ -490,11 +512,13 @@ public class PipeTransportItems extends PipeTransport { */ public void groupEntities() { for (TravelingItem item : items) { - if (item.isCorrupted()) + if (item.isCorrupted()) { continue; + } for (TravelingItem otherItem : items) { - if (item.tryMergeInto(otherItem)) + if (item.tryMergeInto(otherItem)) { break; + } } } } @@ -504,8 +528,9 @@ public class PipeTransportItems extends PipeTransport { groupEntities(); for (TravelingItem item : items) { - if (!item.isCorrupted()) + if (!item.isCorrupted()) { container.pipe.dropItem(item.getItemStack()); + } } items.clear(); diff --git a/common/buildcraft/transport/pipes/PipeItemsDiamond.java b/common/buildcraft/transport/pipes/PipeItemsDiamond.java index 122f087f..8e4946e0 100644 --- a/common/buildcraft/transport/pipes/PipeItemsDiamond.java +++ b/common/buildcraft/transport/pipes/PipeItemsDiamond.java @@ -10,9 +10,6 @@ package buildcraft.transport.pipes; import io.netty.buffer.ByteBuf; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; import java.util.LinkedList; import net.minecraft.block.Block; @@ -20,7 +17,6 @@ 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.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.BuildCraftTransport; @@ -29,7 +25,6 @@ import buildcraft.core.GuiIds; import buildcraft.core.inventory.SimpleInventory; import buildcraft.core.inventory.StackHelper; import buildcraft.core.network.IClientState; -import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.Utils; import buildcraft.transport.BlockGenericPipe; import buildcraft.transport.Pipe; @@ -86,9 +81,11 @@ public class PipeItemsDiamond extends Pipe implements IClien @Override public boolean blockActivated(EntityPlayer entityplayer) { - if (entityplayer.getCurrentEquippedItem() != null) - if (Block.getBlockFromItem(entityplayer.getCurrentEquippedItem().getItem()) instanceof BlockGenericPipe) + if (entityplayer.getCurrentEquippedItem() != null) { + if (Block.getBlockFromItem(entityplayer.getCurrentEquippedItem().getItem()) instanceof BlockGenericPipe) { return false; + } + } if (!container.getWorldObj().isRemote) { entityplayer.openGui(BuildCraftTransport.instance, GuiIds.PIPE_DIAMOND, container.getWorldObj(), container.xCoord, container.yCoord, container.zCoord); @@ -111,20 +108,26 @@ public class PipeItemsDiamond extends Pipe implements IClien for (int slot = 0; slot < 9; ++slot) { ItemStack filter = getFilters().getStackInSlot(dir.ordinal() * 9 + slot); - if (filter != null) + if (filter != null) { foundFilter = true; + } - if (StackHelper.instance().isMatchingItem(filter, event.item.getItemStack(), true, false)) + if (StackHelper.instance().isMatchingItem(filter, event.item.getItemStack(), true, false)) { filteredOrientations.add(dir); + } } - if (!foundFilter) + if (!foundFilter) { defaultOrientations.add(dir); + } } + event.destinations.clear(); - if (!filteredOrientations.isEmpty()) + + if (!filteredOrientations.isEmpty()) { event.destinations.addAll(filteredOrientations); - else + } else { event.destinations.addAll(defaultOrientations); + } } /* SAVING & LOADING */ @@ -149,7 +152,7 @@ public class PipeItemsDiamond extends Pipe implements IClien } @Override - public void readData(ByteBuf data) { + public void readData(ByteBuf data) { NBTTagCompound nbt = Utils.readNBT(data); readFromNBT(nbt); } diff --git a/common/buildcraft/transport/pipes/PipeItemsStripes.java b/common/buildcraft/transport/pipes/PipeItemsStripes.java new file mode 100755 index 00000000..9e207291 --- /dev/null +++ b/common/buildcraft/transport/pipes/PipeItemsStripes.java @@ -0,0 +1,159 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.transport.pipes; + +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.BuildCraftTransport; +import buildcraft.api.core.IIconProvider; +import buildcraft.api.core.Position; +import buildcraft.core.proxy.CoreProxy; +import buildcraft.transport.Pipe; +import buildcraft.transport.PipeIconProvider; +import buildcraft.transport.PipeTransportItems; +import buildcraft.transport.TileGenericPipe; +import buildcraft.transport.pipes.events.PipeEventItem; + +public class PipeItemsStripes extends Pipe { + + public PipeItemsStripes(Item item) { + super(new PipeTransportItems(), item); + + //((PipeTransportItems) transport).travelHook = this; + } + + /*@Override + public void doWork() { + if (powerProvider.useEnergy(1, 1, true) == 1) { + ForgeDirection o = getOpenOrientation(); + + if (o != ForgeDirection.Unknown) { + Position p = new Position(xCoord, yCoord, zCoord, o); + p.moveForwards(1.0); + + ArrayList stacks = BuildCraftBlockUtil + .getItemStackFromBlock(worldObj, (int) p.x, (int) p.y, + (int) p.z); + + if (stacks != null) { + for (ItemStack s : stacks) { + if (s != null) { + IPipedItem newItem = new EntityPassiveItem( + worldObj, xCoord + 0.5, yCoord + + Utils.getPipeFloorOf(s), + zCoord + 0.5, s); + + this.container.entityEntering(newItem, o.reverse()); + } + } + } + + worldObj.setBlock((int) p.x, (int) p.y, (int) p.z, 0); + } + } + + }*/ + + public void eventHandler(PipeEventItem.DropItem event) { + System.out.println ("EVENT " + event.direction); + + Position p = new Position(container.xCoord, container.yCoord, + container.zCoord, ForgeDirection.UP); + Position from = new Position (p); + p.moveForwards(1.0); + + //if (getWorld().getBlock((int) p.x, (int) p.y, (int) p.z) == Blocks.air) { + System.out.println ("TRY PLACE"); + + event.entity.getEntityItem().tryPlaceItemIntoWorld( + CoreProxy.proxy.getBuildCraftPlayer(getWorld()), + getWorld(), + (int) p.x, (int) p.y - 1, (int) p.z, 1, 0.0f, 0.0f, 0.0f); + //} + + /*if (convertPipe(pipe, data)) { + BuildCraftTransport.pipeItemsStipes.onItemUse(new ItemStack( + BuildCraftTransport.pipeItemsStipes), CoreProxy + .getBuildCraftPlayer(worldObj), worldObj, (int) p.x, + (int) p.y - 1, (int) p.z, 1); + } else else { + data.item + .getItemStack() + .getItem() + .tryPlaceIntoWorld(data.item.getItemStack(), + CoreProxy.getBuildCraftPlayer(worldObj), worldObj, + (int) p.x, (int) p.y, (int) p.z, 1, 0.0f, 0.0f, + 0.0f); + }*/ + } + + /*@Override + public void centerReached(PipeTransportItems pipe, EntityData data) { + convertPipe(pipe, data); + } + + @SuppressWarnings("unchecked") + public boolean convertPipe(PipeTransportItems pipe, EntityData data) { + + if (data.item.getItemStack().getItem() instanceof ItemPipe) { + if (!(data.item.getItemStack().itemID == BuildCraftTransport.pipeItemsStipes.shiftedIndex)) { + + Pipe newPipe = BlockGenericPipe.createPipe(data.item + .getItemStack().itemID); + newPipe.setTile(this.container); + this.container.pipe = newPipe; + ((PipeTransportItems) newPipe.transport).travelingEntities = (TreeMap) pipe.travelingEntities + .clone(); + + data.item.getItemStack().stackSize--; + + if (data.item.getItemStack().stackSize <= 0) { + ((PipeTransportItems) newPipe.transport).travelingEntities + .remove(data.item.getEntityId()); + } + + pipe.scheduleRemoval(data.item); + + return true; + } + } + + return false; + } + + @Override + public void endReached(PipeTransportItems pipe, EntityData data, + TileEntity tile) { + + }*/ + + @Override + public IIconProvider getIconProvider() { + return BuildCraftTransport.instance.pipeIconProvider; + } + + @Override + public int getIconIndex(ForgeDirection direction) { + return PipeIconProvider.TYPE.Stripes.ordinal(); + } + + @Override + public boolean canPipeConnect(TileEntity tile, ForgeDirection side) { + if (tile instanceof TileGenericPipe) { + TileGenericPipe tilePipe = (TileGenericPipe) tile; + + if (tilePipe.pipe instanceof PipeItemsStripes) { + return false; + } + } + + return super.canPipeConnect(tile, side); + } +} diff --git a/common/buildcraft/transport/pipes/events/PipeEventItem.java b/common/buildcraft/transport/pipes/events/PipeEventItem.java index f06c7e42..e8309e5a 100644 --- a/common/buildcraft/transport/pipes/events/PipeEventItem.java +++ b/common/buildcraft/transport/pipes/events/PipeEventItem.java @@ -8,11 +8,12 @@ */ package buildcraft.transport.pipes.events; -import buildcraft.transport.TravelingItem; import java.util.List; + import net.minecraft.entity.item.EntityItem; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +import buildcraft.transport.TravelingItem; public abstract class PipeEventItem extends PipeEvent { @@ -52,10 +53,20 @@ public abstract class PipeEventItem extends PipeEvent { public static class DropItem extends PipeEventItem { public EntityItem entity; + public ForgeDirection direction = ForgeDirection.UNKNOWN; public DropItem(TravelingItem item, EntityItem entity) { super(item); this.entity = entity; + + System.out.println ("OUTPUT = " + item.output); + System.out.println ("INPUT = " + item.output); + + if (item.output != ForgeDirection.UNKNOWN) { + this.direction = item.output; + } else { + this.direction = item.input.getOpposite(); + } } }