From 78ba97373272963bae7c4a701eeda50b5d6c9769 Mon Sep 17 00:00:00 2001 From: tgame14 Date: Sun, 25 May 2014 21:27:55 +0300 Subject: [PATCH] Complete redesign and repackage of Item Railings, some cleanup before moving to 1.7 --- .../itemrailing/EnumRailingMaterial.java | 10 + .../electrical/itemrailing/GridRailing.java | 48 +--- .../itemrailing/ItemRailingTransfer.java | 80 ------- .../electrical/itemrailing/NodeRailing.java | 223 ++++++------------ .../electrical/itemrailing/PartRailing.java | 122 +++++----- .../RailingDistanceComparator.java | 88 ------- .../interfaces/IItemRailingProvider.java | 4 +- 7 files changed, 142 insertions(+), 433 deletions(-) create mode 100644 electrical/src/main/scala/resonantinduction/electrical/itemrailing/EnumRailingMaterial.java delete mode 100644 electrical/src/main/scala/resonantinduction/electrical/itemrailing/ItemRailingTransfer.java delete mode 100644 electrical/src/main/scala/resonantinduction/electrical/itemrailing/RailingDistanceComparator.java diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/EnumRailingMaterial.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/EnumRailingMaterial.java new file mode 100644 index 000000000..8af94d0ec --- /dev/null +++ b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/EnumRailingMaterial.java @@ -0,0 +1,10 @@ +package resonantinduction.electrical.itemrailing; + +/** + * @since 25/05/14 + * @author tgame14 + */ +public enum EnumRailingMaterial +{ + DEFAULT, EXTENTION; +} diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/GridRailing.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/GridRailing.java index 0cb3b2913..a27524812 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/GridRailing.java +++ b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/GridRailing.java @@ -1,57 +1,15 @@ package resonantinduction.electrical.itemrailing; -import java.util.Arrays; - -import net.minecraft.item.ItemStack; import resonant.lib.grid.TickingGrid; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailing; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer; /** - * @since 18/03/14 + * @since 25/05/14 * @author tgame14 */ public class GridRailing extends TickingGrid { - public final static String CATEGORY_RAILING = "Item_Railings"; - - public GridRailing (NodeRailing railing, Class type) + public GridRailing (NodeRailing node, Class type) { - super(railing, type); + super(node, type); } - - public IItemRailing findTargetForIItemTransfer(IItemRailingTransfer itemwrapper) - { - if (itemwrapper.getColor() == null) - { - return findNearestInventory(itemwrapper); - } - return findNearestColoredTarget(itemwrapper); - } - - public IItemRailing findNearestInventory(IItemRailingTransfer itemwrapper) - { - IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray(); - Arrays.sort(arr, new RailingDistanceComparator.RailingInventoryDistanceComparator(itemwrapper.getRailing())); - return arr[0]; - } - - public IItemRailing findNearestColoredTarget(IItemRailingTransfer itemwrapper) - { - IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray(); - Arrays.sort(arr, new RailingDistanceComparator.RailingColoredDistanceComparator(itemwrapper.getRailing(), itemwrapper.getColor())); - return arr[0]; - } - - public IItemRailing chooseNextInstantGoal(IItemRailingTransfer itemwrapper) - { - IItemRailing[] arr = (IItemRailing[]) itemwrapper.getRailing().getConnectionMap().entrySet().toArray(); - Arrays.sort(arr, new RailingDistanceComparator(itemwrapper.getEndGoal())); - return arr[0]; - } - - public void onItemEnterGrid(IItemRailing railing, ItemStack item) - { - - } } diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/ItemRailingTransfer.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/ItemRailingTransfer.java deleted file mode 100644 index 2d8fea720..000000000 --- a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/ItemRailingTransfer.java +++ /dev/null @@ -1,80 +0,0 @@ -package resonantinduction.electrical.itemrailing; - -import java.lang.ref.WeakReference; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import resonant.lib.render.EnumColor; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailing; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer; - -/** - * An object that is a wrapper for all items through railings - * - * @since 16/03/14 - * @author tgame14 - */ -public class ItemRailingTransfer implements IItemRailingTransfer -{ - private ItemStack stack; - private EnumColor color; - private WeakReference railing; - private WeakReference endTarget; - - public ItemRailingTransfer(ItemStack stack, PartRailing railing) - { - this.stack = stack.copy(); - this.color = null; - this.railing = new WeakReference(railing.getNode()); - this.endTarget = new WeakReference(railing.getNode().getGrid().findTargetForIItemTransfer(this)); - } - - public ItemRailingTransfer(Item item, PartRailing railing) - { - this(new ItemStack(item), railing); - } - - @Override - public ItemStack getItemStack() - { - return this.stack; - } - - @Override - public EnumColor getColor() - { - return this.color; - } - - public IItemRailingTransfer setColor(EnumColor color) - { - this.color = color; - return this; - } - - @Override - public IItemRailing getRailing() - { - return this.railing.get(); - } - - @Override - public IItemRailingTransfer setRailing(IItemRailing railing) - { - this.railing = new WeakReference(railing); - return this; - } - - @Override - public IItemRailing getEndGoal() - { - return endTarget.get(); - } - - @Override - public IItemRailingTransfer setEndGoal(IItemRailing goal) - { - this.endTarget = new WeakReference(goal); - return this; - } -} diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/NodeRailing.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/NodeRailing.java index de571bbc9..c03aee2f6 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/NodeRailing.java +++ b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/NodeRailing.java @@ -1,181 +1,94 @@ package resonantinduction.electrical.itemrailing; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import net.minecraft.inventory.IInventory; +import codechicken.multipart.TMultiPart; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; -import resonant.lib.config.Config; import resonant.lib.grid.Node; -import resonant.lib.render.EnumColor; -import resonant.lib.type.Pair; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailing; +import resonant.lib.grid.TickingGrid; import resonantinduction.electrical.itemrailing.interfaces.IItemRailingProvider; -import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer; -import universalelectricity.api.vector.IVectorWorld; -import universalelectricity.api.vector.VectorWorld; - -import com.google.common.collect.Lists; +import universalelectricity.api.vector.IVector3; +import universalelectricity.api.vector.Vector3; /** + * @since 25/05/14 * @author tgame14 - * @since 18/03/14 */ -public class NodeRailing extends Node implements IVectorWorld, IItemRailing +public class NodeRailing extends Node { - private int maxItemSpeed; - private byte connectionMap; - private EnumColor color; - @Config(category = GridRailing.CATEGORY_RAILING) - private static int MAX_TICKS_IN_RAILING = 5; + protected byte connectionMap = Byte.parseByte("111111", 2); - /** hold a timer here per item */ - private Set> itemNodeSet; + public NodeRailing (IItemRailingProvider parent) + { + super(parent); + } + public NodeRailing setConnection(byte connectionMap) + { + this.connectionMap = connectionMap; + return this; + } - public NodeRailing(IItemRailingProvider parent) - { - super(parent); - this.itemNodeSet = new HashSet>(); - this.color = null; - this.connectionMap = Byte.parseByte("111111", 2); - this.maxItemSpeed = 20; - } + @Override + protected GridRailing newGrid () + { + return new GridRailing(this, NodeRailing.class); + } - public NodeRailing setConnection(byte connectionMap) - { - this.connectionMap = connectionMap; - return this; - } + @Override + public void update (float deltaTime) + { + super.update(deltaTime); + } - @Override - public void update(float deltaTime) - { - if (!world().isRemote) - { - Iterator> iterator = new HashMap(getConnections()).entrySet().iterator(); + @Override + protected void doRecache () + { + connections.clear(); - for (Pair pair : this.itemNodeSet) - { - if (pair.right() <= 0) - { - //TODO move to next item railing + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity tile = new Vector3(position()).translate(dir).getTileEntity(world()); - } - else - { - pair.setRight(pair.right() - 1); - } + if (tile instanceof IItemRailingProvider) + { + NodeRailing check = (NodeRailing) ((IItemRailingProvider) tile).getNode(NodeRailing.class, dir.getOpposite()); + if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this)) + { + connections.put(check, dir); + } + } + } + } - } + public IVector3 position() + { + return parent.getVectorWorld(); + } - while (iterator.hasNext()) - { - Map.Entry entry = iterator.next(); - Object obj = entry.getKey(); + public World world() + { + return parent.getVectorWorld().world(); + } - if (obj instanceof NodeRailing) - { - - } - } - - } - } - - @Override - protected GridRailing newGrid() - { - return new GridRailing(this, getClass()); - } - - @Override - public double z() - { - return this.getWorldPos().z(); - } - - @Override - public World world() - { - return parent.getWorldPos().world(); - } - - @Override - public double x() - { - return parent.getWorldPos().x(); - } - - @Override - public double y() - { - return parent.getWorldPos().y(); - } - - @Override - public boolean canItemEnter (IItemRailingTransfer item) - { - return this.color != null ? this.color == item.getColor() : false; - } - - @Override - public boolean canConnectToRailing (IItemRailing railing, ForgeDirection from) - { - return this.color != null ? this.color == railing.getRailingColor() : true; - } - - @Override - public EnumColor getRailingColor () - { - return this.color; - } - - @Override - public IItemRailing setRailingColor (EnumColor color) - { - this.color = color; - return this; - } - - @Override - public VectorWorld getWorldPos() - { - return (VectorWorld) parent.getWorldPos(); - } - - @Override - public Map getConnectionMap() - { - return new HashMap(this.getConnections()); - } - - @Override - public IInventory[] getInventoriesNearby() - { - ArrayList invList = Lists.newArrayList(); - for (Object tile : this.getConnections().entrySet()) - { - if (tile instanceof IInventory) - { - invList.add((IInventory) tile); - } - } - return (IInventory[]) invList.toArray(); - } - - @Override - public boolean isLeaf() - { - return connectionMap < 2; - } + @Override + public boolean canConnect (ForgeDirection from, Object source) + { + return (source instanceof NodeRailing) && (connectionMap & (1 << from.ordinal())) != 0; + } + @Override + public void load (NBTTagCompound nbt) + { + super.load(nbt); + } + @Override + public void save (NBTTagCompound nbt) + { + super.save(nbt); + } } diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/PartRailing.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/PartRailing.java index 69f8512da..7606a4ac9 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/PartRailing.java +++ b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/PartRailing.java @@ -2,17 +2,28 @@ package resonantinduction.electrical.itemrailing; import java.lang.reflect.Constructor; +import codechicken.lib.vec.Vector3; +import codechicken.microblock.IHollowConnect; +import codechicken.multipart.JNormalOcclusion; +import codechicken.multipart.TSlottedPart; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; +import resonant.api.IExternalInventory; +import resonant.api.IExternalInventoryBox; import resonant.api.grid.INode; +import resonant.lib.utility.inventory.ExternalInventory; import resonantinduction.core.prefab.part.PartFramedConnection; +import resonantinduction.core.prefab.part.PartFramedNode; import resonantinduction.electrical.Electrical; import resonantinduction.electrical.itemrailing.interfaces.IItemRailingProvider; import universalelectricity.api.energy.EnergyNetworkLoader; import universalelectricity.api.energy.IConductor; import universalelectricity.api.energy.IEnergyNetwork; +import universalelectricity.api.net.IConnector; +import universalelectricity.api.net.INetwork; +import universalelectricity.api.vector.IVectorWorld; import universalelectricity.api.vector.VectorWorld; import codechicken.multipart.TileMultipart; @@ -20,26 +31,19 @@ import codechicken.multipart.TileMultipart; * @since 16/03/14 * @author tgame14 */ -public class PartRailing extends PartFramedConnection implements IConductor, IItemRailingProvider +public class PartRailing extends PartFramedNode implements IItemRailingProvider, TSlottedPart, JNormalOcclusion, IHollowConnect, IExternalInventory { - - public static enum EnumRailing - { - DEFAULT, EXTENTION; - } - - public NodeRailing getNode() - { - return node; - } - - private NodeRailing node; + protected ExternalInventory inventory; + protected boolean markPacketUpdate; public PartRailing () { super(Electrical.itemInsulation); - this.material = EnumRailing.DEFAULT; + this.material = EnumRailingMaterial.DEFAULT; this.node = new NodeRailing(this); + this.markPacketUpdate = true; + this.requiresInsulation = false; + this.inventory = new ExternalInventory(tile(), 5); } @@ -72,71 +76,23 @@ public class PartRailing extends PartFramedConnection -{ - private IItemRailing source; - - public RailingDistanceComparator(IItemRailing source) - { - this.source = source; - } - - @Override - public int compare(IItemRailing o1, IItemRailing o2) - { - return (int) (source.getWorldPos().floor().distance(o1.getWorldPos()) - source.getWorldPos().floor().distance(o2.getWorldPos())); - } - - - public static class RailingInventoryDistanceComparator extends RailingDistanceComparator - { - public RailingInventoryDistanceComparator(IItemRailing source) - { - super(source); - } - - @Override - public int compare(IItemRailing o1, IItemRailing o2) - { - if (o1.getInventoriesNearby() != null && o2.getInventoriesNearby() != null) - { - return super.compare(o1, o2); - } - - else if (o1.getInventoriesNearby() == null && o2.getInventoriesNearby() == null) - { - return super.compare(o1, o2); - } - - if (o1.getInventoriesNearby() != null) - { - return 1; - } - return -1; - } - } - - - public static class RailingColoredDistanceComparator extends RailingDistanceComparator - { - private EnumColor color; - - public RailingColoredDistanceComparator(IItemRailing source, EnumColor color) - { - super(source); - this.color = color; - } - - @Override - public int compare(IItemRailing o1, IItemRailing o2) - { - if (o1.getRailingColor() == o2.getRailingColor()) - { - return super.compare(o1, o2); - } - - else if (color == o1.getRailingColor()) - { - return 1; - } - - else if (color == o2.getRailingColor()) - { - return -1; - } - - return super.compare(o1, o2); - } - } -} diff --git a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/interfaces/IItemRailingProvider.java b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/interfaces/IItemRailingProvider.java index 7b2394656..c6cf26f9a 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/itemrailing/interfaces/IItemRailingProvider.java +++ b/electrical/src/main/scala/resonantinduction/electrical/itemrailing/interfaces/IItemRailingProvider.java @@ -9,5 +9,7 @@ import universalelectricity.api.vector.IVectorWorld; */ public interface IItemRailingProvider extends INodeProvider { - public IVectorWorld getWorldPos(); + public IVectorWorld getVectorWorld(); + + public void onInventoryChanged(); }