aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kekztech/ItemDistributionNetworkController.java
diff options
context:
space:
mode:
authorChristina Berchtold <kekzdealer@gmail.com>2019-11-08 21:27:05 +0100
committerChristina Berchtold <kekzdealer@gmail.com>2019-11-08 21:27:05 +0100
commita76478105d61d7be330c63fd247f7fbb66da9d9a (patch)
tree3f2fdc8b02d4aed9a9c4c2d1dab9d76b1d61dc7f /src/main/java/kekztech/ItemDistributionNetworkController.java
parent8c11cb77c724a7adf29777a1e7123d6492eec00a (diff)
downloadGT5-Unofficial-a76478105d61d7be330c63fd247f7fbb66da9d9a.tar.gz
GT5-Unofficial-a76478105d61d7be330c63fd247f7fbb66da9d9a.tar.bz2
GT5-Unofficial-a76478105d61d7be330c63fd247f7fbb66da9d9a.zip
Gave Multi Hatch a shaped crafting recipe after many failed attempts with assembling machines. Began adding Item Distribution Network code.
Diffstat (limited to 'src/main/java/kekztech/ItemDistributionNetworkController.java')
-rw-r--r--src/main/java/kekztech/ItemDistributionNetworkController.java152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/main/java/kekztech/ItemDistributionNetworkController.java b/src/main/java/kekztech/ItemDistributionNetworkController.java
new file mode 100644
index 0000000000..e188cb0d26
--- /dev/null
+++ b/src/main/java/kekztech/ItemDistributionNetworkController.java
@@ -0,0 +1,152 @@
+package kekztech;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.UUID;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class ItemDistributionNetworkController implements Comparable<ItemDistributionNetworkController> {
+
+ private static final HashSet<ItemDistributionNetworkController> instances = new HashSet<>();
+
+ private final UUID uuid = UUID.randomUUID();
+ private final LinkedList<IConduit> conduits = new LinkedList<>();
+ private final HashMap<String, IConduit> sources = new HashMap<>(); // k = resource name, v = source conduit
+
+ public ItemDistributionNetworkController() {
+
+ }
+
+ /**
+ * Places a new conduit as it's own network. Merges with adjacent networks automatically.
+ *
+ * @param conduit
+ * The conduit to be placed
+ */
+ public static void placeConduit(IConduit conduit) {
+
+ conduit.setNetwork(new ItemDistributionNetworkController());
+ conduit.getNetwork().addConduit(conduit);
+
+ final TileEntity te = (TileEntity) conduit;
+ final int x = te.xCoord;
+ final int y = te.yCoord;
+ final int z = te.zCoord;
+
+ // Search for adjacent Networks on all six sides
+ final HashSet<ItemDistributionNetworkController> networks = new HashSet<>();
+ final World world = te.getWorldObj();
+ final TileEntity te1x = world.getTileEntity(x + 1, y, z);
+ final TileEntity te0x = world.getTileEntity(x - 1, y, z);
+ final TileEntity te1y = world.getTileEntity(x, y + 1, z);
+ final TileEntity te0y = world.getTileEntity(x, y - 1, z);
+ final TileEntity te1z = world.getTileEntity(x, y, z + 1);
+ final TileEntity te0z = world.getTileEntity(x, y, z - 1);
+ if(te1x != null && te1x instanceof IConduit) {
+ final IConduit c = (IConduit) te1x;
+ networks.add(c.getNetwork());
+ }
+ if(te0x != null && te0x instanceof IConduit) {
+ final IConduit c = (IConduit) te0x;
+ networks.add(c.getNetwork());
+ }
+ if(te1y != null && te1y instanceof IConduit) {
+ final IConduit c = (IConduit) te1y;
+ networks.add(c.getNetwork());
+ }
+ if(te0y != null && te0y instanceof IConduit) {
+ final IConduit c = (IConduit) te0y;
+ networks.add(c.getNetwork());
+ }
+ if(te1z != null && te1z instanceof IConduit) {
+ final IConduit c = (IConduit) te1z;
+ networks.add(c.getNetwork());
+ }
+ if(te0z != null && te0z instanceof IConduit) {
+ final IConduit c = (IConduit) te0z;
+ networks.add(c.getNetwork());
+ }
+ // Return prematurely if no adjacent network was found
+ if(networks.size() == 0) {
+ return;
+ }
+ // Sort networks by descending size
+ final LinkedList<ItemDistributionNetworkController> networkList = new LinkedList<>();
+ networkList.addAll(networks);
+ Collections.sort(networkList, Collections.reverseOrder());
+ // Larger networks consume smaller networks to reduce copying around data
+ while(networkList.size() > 1) {
+ final ItemDistributionNetworkController l = networkList.get(networkList.size() - 2);
+ final ItemDistributionNetworkController r = networkList.getLast();
+ l.appendNetwork(r);
+ networkList.removeLast();
+ }
+
+ }
+
+ /**
+ * Deletes this conduit and breaks up adjacent networks into separate networks.
+ *
+ * @param conduit
+ * Conduit to be removed.
+ */
+ public static void destroyConduit(IConduit conduit) {
+
+ }
+
+ public void run() {
+
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if(o instanceof ItemDistributionNetworkController) {
+ final ItemDistributionNetworkController network = (ItemDistributionNetworkController) o;
+ return uuid.equals(network.getUUID());
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int compareTo(ItemDistributionNetworkController o) {
+ return (int) Math.signum(o.getSize() - this.getSize());
+ }
+
+ public UUID getUUID() {
+ return uuid;
+ }
+
+ public int getSize() {
+ return conduits.size();
+ }
+
+ /**
+ * Register a new conduit to this network.
+ *
+ * @param conduit
+ * New conduit.
+ */
+ private void addConduit(IConduit conduit) {
+ conduits.add(conduit);
+ }
+
+ /**
+ * Merge another network with this one if they have been connected by a new conduit.
+ *
+ * @param network
+ * Network to merge with this one.
+ */
+ private void appendNetwork(ItemDistributionNetworkController network) {
+
+ }
+
+ private void updateSource() {
+
+ }
+
+}