From 7ab30aa1362ab55d51906dde20e787c0dec274d2 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 3 Apr 2024 14:48:50 +0200 Subject: [PATCH] Do you know what this means? It means that this damn thing doesn't work at all! --- .../hbm/energymk2/IEnergyConductorMK2.java | 15 ++++++- .../hbm/energymk2/IEnergyConnectorMK2.java | 4 +- .../api/hbm/energymk2/IEnergyProviderMK2.java | 2 +- .../api/hbm/energymk2/IEnergyReceiverMK2.java | 4 +- .../java/api/hbm/energymk2/Nodespace.java | 42 +++++++++++++++++-- .../java/api/hbm/energymk2/PowerNetMK2.java | 5 +++ .../java/com/hbm/main/ModEventHandler.java | 2 + .../network/TileEntityCableBaseNT.java | 26 +++++++++++- 8 files changed, 89 insertions(+), 11 deletions(-) diff --git a/src/main/java/api/hbm/energymk2/IEnergyConductorMK2.java b/src/main/java/api/hbm/energymk2/IEnergyConductorMK2.java index 2ba97fce6..96a90bcfd 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyConductorMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyConductorMK2.java @@ -1,12 +1,23 @@ package api.hbm.energymk2; +import com.hbm.lib.Library; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + import api.hbm.energymk2.Nodespace.PowerNode; import net.minecraft.tileentity.TileEntity; public interface IEnergyConductorMK2 extends IEnergyConnectorMK2 { - public default PowerNode getNode() { + public default PowerNode createNode() { TileEntity tile = (TileEntity) this; - return Nodespace.getNode(tile.getWorldObj(), tile.xCoord, tile.yCoord, tile.zCoord); + return new PowerNode(new BlockPos(tile.xCoord, tile.yCoord, tile.zCoord)).setConnections( + new DirPos(tile.xCoord + 1, tile.yCoord, tile.zCoord, Library.POS_X), + new DirPos(tile.xCoord - 1, tile.yCoord, tile.zCoord, Library.NEG_X), + new DirPos(tile.xCoord, tile.yCoord + 1, tile.zCoord, Library.POS_Y), + new DirPos(tile.xCoord, tile.yCoord - 1, tile.zCoord, Library.NEG_Y), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord + 1, Library.POS_Z), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord - 1, Library.NEG_Z) + ); } } diff --git a/src/main/java/api/hbm/energymk2/IEnergyConnectorMK2.java b/src/main/java/api/hbm/energymk2/IEnergyConnectorMK2.java index c021d6805..79f678246 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyConnectorMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyConnectorMK2.java @@ -25,13 +25,13 @@ public interface IEnergyConnectorMK2 extends ILoadedTile { public static final boolean particleDebug = false; - public default Vec3 getDebugParticlePos() { + public default Vec3 getDebugParticlePosMK2() { TileEntity te = (TileEntity) this; Vec3 vec = Vec3.createVectorHelper(te.xCoord + 0.5, te.yCoord + 1, te.zCoord + 0.5); return vec; } - public default void provideInfoForEC(NBTTagCompound data) { + public default void provideInfoForECMK2(NBTTagCompound data) { data.setLong(CompatEnergyControl.L_ENERGY_HE, this.getPower()); data.setLong(CompatEnergyControl.L_CAPACITY_HE, this.getMaxPower()); } diff --git a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java index b693b959c..99d029f62 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java @@ -22,7 +22,7 @@ public interface IEnergyProviderMK2 extends IEnergyConnector { IEnergyConductorMK2 con = (IEnergyConductorMK2) te; if(!con.canConnect(dir.getOpposite())) return; - PowerNode node = con.getNode(); + PowerNode node = con.createNode(); if(node != null && node.net != null) { node.net.addProvider(this); diff --git a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java index 9673baf1c..677aa596f 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java @@ -23,7 +23,7 @@ public interface IEnergyReceiverMK2 extends IEnergyConnectorMK2 { IEnergyConductorMK2 con = (IEnergyConductorMK2) te; if(!con.canConnect(dir.getOpposite())) return; - PowerNode node = con.getNode(); + PowerNode node = con.createNode(); if(node != null && node.net != null) { node.net.addReceiver(this); @@ -51,7 +51,7 @@ public interface IEnergyReceiverMK2 extends IEnergyConnectorMK2 { if(te instanceof IEnergyConductorMK2) { IEnergyConductorMK2 con = (IEnergyConductorMK2) te; - PowerNode node = con.getNode(); + PowerNode node = con.createNode(); if(node != null && node.net != null) { node.net.removeReceiver(this); diff --git a/src/main/java/api/hbm/energymk2/Nodespace.java b/src/main/java/api/hbm/energymk2/Nodespace.java index 891076ecf..6b175db87 100644 --- a/src/main/java/api/hbm/energymk2/Nodespace.java +++ b/src/main/java/api/hbm/energymk2/Nodespace.java @@ -1,11 +1,17 @@ package api.hbm.energymk2; import java.util.HashMap; +import java.util.HashSet; import java.util.Map.Entry; +import java.util.Set; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; @@ -18,6 +24,7 @@ public class Nodespace { /** Contains all "NodeWorld" instances, i.e. lists of nodes existing per world */ public static HashMap worlds = new HashMap(); + public static Set activePowerNets = new HashSet(); public static PowerNode getNode(World world, int x, int y, int z) { NodeWorld nodeWorld = worlds.get(world); @@ -36,7 +43,19 @@ public class Nodespace { public static void destroyNode(World world, int x, int y, int z) { PowerNode node = getNode(world, x, y, z); - if(node != null) worlds.get(world).popNode(node); + if(node != null) { + worlds.get(world).popNode(node); + markNeigbors(world, node); + } + } + + /** Grabs all neighbor nodes from the given node's connection points and removes them from the network entirely, forcing a hard reconnect */ + private static void markNeigbors(World world, PowerNode node) { + + for(DirPos con : node.connections) { + PowerNode conNode = getNode(world, con.getX(), con.getY(), con.getZ()); + if(conNode != null && conNode.hasValidNet()) conNode.net.leaveLink(conNode); + } } /** Goes over each node and manages connections */ @@ -47,7 +66,22 @@ public class Nodespace { for(Entry entry : nodes.nodes.entrySet()) { PowerNode node = entry.getValue(); - checkNodeConnection(world, node); + if(!node.hasValidNet()) { + checkNodeConnection(world, node); + } + + if(node.hasValidNet()) { + + for(BlockPos pos : node.positions) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "marker"); + data.setInteger("color", 0x00ff00); + data.setInteger("expires", 250); + data.setDouble("dist", 15D); + data.setString("label", "" + node.net.hashCode()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.getX(), pos.getY(), pos.getZ()), new TargetPoint(world.provider.dimensionId, pos.getX(), pos.getY(), pos.getZ(), 50)); + } + } } } } @@ -57,7 +91,7 @@ public class Nodespace { for(DirPos con : node.connections) { - PowerNode conNode = getNode(world, con.getX() + con.getDir().offsetX, con.getY() + con.getDir().offsetY, con.getZ() + con.getDir().offsetZ); // get whatever neighbor node intersects with that connection + PowerNode conNode = getNode(world, con.getX(), con.getY(), con.getZ()); // get whatever neighbor node intersects with that connection if(conNode != null) { // if there is a node at that place @@ -107,6 +141,7 @@ public class Nodespace { if(node.net != null) node.net.destroy(); for(BlockPos pos : node.positions) { nodes.remove(pos); + node.expired = true; } } @@ -122,6 +157,7 @@ public class Nodespace { public BlockPos[] positions; public DirPos[] connections; public PowerNetMK2 net; + public boolean expired = false; public PowerNode(BlockPos... positions) { this.positions = positions; diff --git a/src/main/java/api/hbm/energymk2/PowerNetMK2.java b/src/main/java/api/hbm/energymk2/PowerNetMK2.java index d84dfc3a5..aee4e2a1e 100644 --- a/src/main/java/api/hbm/energymk2/PowerNetMK2.java +++ b/src/main/java/api/hbm/energymk2/PowerNetMK2.java @@ -14,6 +14,10 @@ public class PowerNetMK2 { /** Maps all active subscribers to a timestamp, handy for handling timeouts. In a good system this shouldn't be necessary, but the previous system taught me to be cautious anyway */ private HashMap receiverEntries = new HashMap(); private HashMap providerEntries = new HashMap(); + + public PowerNetMK2() { + Nodespace.activePowerNets.add(this); + } /// SUBSCRIBER HANDLING /// public boolean isSubscribed(IEnergyReceiverMK2 receiver) { @@ -72,6 +76,7 @@ public class PowerNetMK2 { /// GENERAL POWER NET CONTROL /// public void invalidate() { this.valid = false; + Nodespace.activePowerNets.remove(this); } public boolean isValid() { diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index ebbfc9671..caa150524 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -80,6 +80,7 @@ import com.hbm.util.InventoryUtil; import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.world.generator.TimedGenerator; +import api.hbm.energymk2.Nodespace; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; @@ -1103,6 +1104,7 @@ public class ModEventHandler { RTTYSystem.updateBroadcastQueue(); RequestNetwork.updateEntries(); TileEntityMachineRadarNT.updateSystem(); + Nodespace.updateNodespace(); } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java index 71b37ab3c..60848881b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java @@ -3,12 +3,16 @@ package com.hbm.tileentity.network; import api.hbm.energy.IEnergyConductor; import api.hbm.energy.IPowerNet; import api.hbm.energy.PowerNet; +import api.hbm.energymk2.IEnergyConductorMK2; +import api.hbm.energymk2.Nodespace; +import api.hbm.energymk2.Nodespace.PowerNode; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCableBaseNT extends TileEntity implements IEnergyConductor { +public class TileEntityCableBaseNT extends TileEntity implements IEnergyConductor, IEnergyConductorMK2 { protected IPowerNet network; + protected PowerNode node; @Override public void updateEntity() { @@ -24,6 +28,22 @@ public class TileEntityCableBaseNT extends TileEntity implements IEnergyConducto this.setPowerNet(new PowerNet().joinLink(this)); } } + + if(!worldObj.isRemote) { + + if(this.node == null || this.node.expired) { + this.node = Nodespace.getNode(worldObj, xCoord, yCoord, zCoord); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + Nodespace.createNode(worldObj, this.node); + } + } + } + } + + public void onNodeDestroyedCallback() { + this.node = null; } protected void connect() { @@ -59,6 +79,10 @@ public class TileEntityCableBaseNT extends TileEntity implements IEnergyConducto this.network.reevaluate(); this.network = null; } + + if(this.node != null) { + Nodespace.destroyNode(worldObj, xCoord, yCoord, zCoord); + } } }