Do you know what this means? It means that

this damn thing doesn't work at all!
This commit is contained in:
Boblet 2024-04-03 14:48:50 +02:00
parent 7b6467fb37
commit 7ab30aa136
8 changed files with 89 additions and 11 deletions

View File

@ -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)
);
}
}

View File

@ -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());
}

View File

@ -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);

View File

@ -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);

View File

@ -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<World, NodeWorld> worlds = new HashMap();
public static Set<PowerNetMK2> 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<BlockPos, PowerNode> 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;

View File

@ -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<IEnergyReceiverMK2, Long> receiverEntries = new HashMap();
private HashMap<IEnergyProviderMK2, Long> 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() {

View File

@ -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();
}
}

View File

@ -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);
}
}
}