From bc0d1059d817f22244111e06d3d870403d54a8de Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:17:07 -0500 Subject: [PATCH] i want to kill myself :heart: --- .../com/hbm/blocks/machine/rbmk/RBMKBase.java | 7 +- .../com/hbm/handler/neutron/NeutronNode.java | 20 ++ .../hbm/handler/neutron/NeutronNodeWorld.java | 62 +++++ .../hbm/handler/neutron/NeutronStream.java | 69 +++++ .../handler/neutron/PileNeutronHandler.java | 44 +++ .../RBMKNeutronHandler.java} | 254 ++++++------------ .../handler/rbmkmk2/ItemRBMKRodFluxCurve.java | 55 ---- .../java/com/hbm/hazard/HazardRegistry.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 16 +- .../com/hbm/items/machine/ItemRBMKLid.java | 7 +- .../com/hbm/items/machine/ItemRBMKRod.java | 55 +++- .../java/com/hbm/main/ModEventHandler.java | 12 +- .../machine/rbmk/IRBMKFluxReceiver.java | 4 +- .../machine/rbmk/TileEntityRBMKAbsorber.java | 6 +- .../machine/rbmk/TileEntityRBMKBase.java | 16 +- .../machine/rbmk/TileEntityRBMKBlank.java | 6 - .../machine/rbmk/TileEntityRBMKBoiler.java | 6 - .../machine/rbmk/TileEntityRBMKControl.java | 6 +- .../machine/rbmk/TileEntityRBMKCooler.java | 7 - .../machine/rbmk/TileEntityRBMKHeater.java | 6 - .../machine/rbmk/TileEntityRBMKModerator.java | 6 +- .../machine/rbmk/TileEntityRBMKOutgasser.java | 9 +- .../machine/rbmk/TileEntityRBMKReflector.java | 6 +- .../machine/rbmk/TileEntityRBMKRod.java | 40 ++- .../machine/rbmk/TileEntityRBMKRodReaSim.java | 13 +- .../machine/rbmk/TileEntityRBMKStorage.java | 6 +- 26 files changed, 423 insertions(+), 317 deletions(-) create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronNode.java create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronStream.java create mode 100644 src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java rename src/main/java/com/hbm/handler/{rbmkmk2/RBMKHandler.java => neutron/RBMKNeutronHandler.java} (60%) delete mode 100644 src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java index 55975c521..234a2a4b9 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java @@ -3,7 +3,8 @@ package com.hbm.blocks.machine.rbmk; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.handler.MultiblockHandlerXR; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRBMKLid; import com.hbm.lib.RefStrings; @@ -29,8 +30,6 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; - public abstract class RBMKBase extends BlockDummyable implements IToolable, ILookOverlay { public static boolean dropLids = true; @@ -175,7 +174,7 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo if(rbmk.hasLid() && rbmk.isLidRemovable()) { - RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(new BlockPos(te)); if (node != null) node.removeLid(); diff --git a/src/main/java/com/hbm/handler/neutron/NeutronNode.java b/src/main/java/com/hbm/handler/neutron/NeutronNode.java new file mode 100644 index 000000000..43d250949 --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronNode.java @@ -0,0 +1,20 @@ +package com.hbm.handler.neutron; + +import com.hbm.handler.neutron.NeutronStream.NeutronType; +import net.minecraft.tileentity.TileEntity; + +import java.util.HashMap; +import java.util.Map; + +public abstract class NeutronNode { + + protected NeutronType type; + protected TileEntity tile; + // like NBT but less fucking CANCER + protected Map data = new HashMap<>(); + + public NeutronNode(TileEntity tile, NeutronType type) { + this.type = type; + this.tile = tile; + } +} diff --git a/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java b/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java new file mode 100644 index 000000000..cf1da973e --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java @@ -0,0 +1,62 @@ +package com.hbm.handler.neutron; + +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class NeutronNodeWorld { + // HashMap of all RBMK nodes and their positions. + protected static HashMap nodeCache = new HashMap<>(); + + public static void addNode(NeutronNode node) { + nodeCache.put(new BlockPos(node.tile), node); + } + + public static void removeNode(BlockPos position) { + nodeCache.remove(position); + } + + public static NeutronNode getNode(BlockPos position) { + return nodeCache.get(position); + } + + public static void removeAllNodes() { + nodeCache.clear(); + } + + // List of all stream worlds. + public static HashMap streamWorlds = new HashMap<>(); + + public static class StreamWorld { + + List streams; + + public StreamWorld() { + streams = new ArrayList<>(); + } + + public void addStream(NeutronStream stream) { + this.streams.add(stream); + } + + public void removeAllStreams() { + this.streams.clear(); + } + + public void removeAllStreamsOfType(NeutronStream.NeutronType type) { + List toRemove = new ArrayList<>(); + for (NeutronStream stream : streams) { + if (stream.type == type) + toRemove.add(stream); + } + toRemove.forEach((stream) -> streams.remove(stream)); + } + + public static void removeAllWorlds() { + streamWorlds.clear(); + } + } +} diff --git a/src/main/java/com/hbm/handler/neutron/NeutronStream.java b/src/main/java/com/hbm/handler/neutron/NeutronStream.java new file mode 100644 index 000000000..69b1d8eeb --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronStream.java @@ -0,0 +1,69 @@ +package com.hbm.handler.neutron; + +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import com.hbm.handler.neutron.NeutronNodeWorld.StreamWorld; + +import java.util.ArrayList; +import java.util.List; + +public abstract class NeutronStream { + + public enum NeutronType { + DUMMY, // Dummy streams for testing + RBMK, // RBMK neutron streams + PILE // Chicago pile streams + } + + public NeutronNode origin; + + // doubles!! + public double fluxQuantity; + // Hey, new implementation! Basically a ratio for slow flux to fast flux + // 0 = all slow flux + // 1 = all fast flux + public double fluxRatio; + + public NeutronType type = NeutronType.DUMMY; + + // Vector for direction of neutron flow. + public Vec3 vector; + + // Primarily used as a "dummy stream", not to be added to the streams list. + public NeutronStream(NeutronNode origin, Vec3 vector) { + this.origin = origin; + this.vector = vector; + } + + public NeutronStream(NeutronNode origin, Vec3 vector, double flux, double ratio, NeutronType type) { + this.origin = origin; + this.vector = vector; + this.fluxQuantity = flux; + this.fluxRatio = ratio; + this.type = type; + World worldObj = origin.tile.getWorldObj(); + if (NeutronNodeWorld.streamWorlds.get(worldObj) == null) { + StreamWorld world = new StreamWorld(); + world.addStream(this); + NeutronNodeWorld.streamWorlds.put(worldObj, world); + } else + NeutronNodeWorld.streamWorlds.get(worldObj).addStream(this); + } + + // USES THE CACHE!!! + public List getBlocks(int range) { + List positions = new ArrayList<>(); + + for (int i = 1; i <= range; i++) { + int x = (int) Math.floor(0.5 + vector.xCoord * i); + int z = (int) Math.floor(0.5 + vector.zCoord * i); + + BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); + positions.add(pos); + } + return positions; + } + + public abstract void runStreamInteraction(World worldObj); +} \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java new file mode 100644 index 000000000..9d9d88558 --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java @@ -0,0 +1,44 @@ +package com.hbm.handler.neutron; + +import com.hbm.tileentity.machine.pile.TileEntityPileBase; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class PileNeutronHandler { + + public static class PileNeutronNode extends NeutronNode { + + public PileNeutronNode(TileEntityPileBase tile) { + super(tile, NeutronStream.NeutronType.RBMK); + } + + } + + // The big one!! Runs all interactions for neutrons. + public static void runAllInteractions() { + + // Remove `StreamWorld` objects if they have no streams. + { // aflghdkljghlkbhfjkghgilurbhlkfjghkffdjgn + List toRemove = new ArrayList<>(); + NeutronNodeWorld.streamWorlds.forEach((world, streamWorld) -> { + if (streamWorld.streams.isEmpty()) + toRemove.add(world); + }); + + for (World world : toRemove) { + NeutronNodeWorld.streamWorlds.remove(world); + } + } + + for (Map.Entry world : NeutronNodeWorld.streamWorlds.entrySet()) { + + for (NeutronStream stream : world.getValue().streams) { + stream.runStreamInteraction(world.getKey()); + } + world.getValue().removeAllStreams(); + } + } +} diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java similarity index 60% rename from src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java rename to src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java index fa0d93f46..88fab103a 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java @@ -1,4 +1,4 @@ -package com.hbm.handler.rbmkmk2; +package com.hbm.handler.neutron; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.handler.radiation.ChunkRadiationManager; @@ -7,7 +7,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import java.util.ArrayList; import java.util.List; -import java.util.HashMap; import java.util.Map.Entry; import net.minecraft.block.Block; @@ -16,7 +15,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class RBMKHandler { +public class RBMKNeutronHandler { static double moderatorEfficiency; static double reflectorEfficiency; @@ -38,30 +37,27 @@ public class RBMKHandler { return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); } - public static class RBMKNode { + public static RBMKNeutronNode makeNode(TileEntityRBMKBase tile) { + BlockPos pos = new BlockPos(tile); + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + return (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); + return new RBMKNeutronNode(tile, tile.getRBMKType(), tile.hasLid()); + } - protected RBMKType type; - protected TileEntityRBMKBase tile; - protected boolean hasLid; + public static class RBMKNeutronNode extends NeutronNode { - public RBMKNode(TileEntityRBMKBase tile, RBMKType type) { - this.type = type; - this.tile = tile; - this.hasLid = tile.hasLid(); - } - - public RBMKNode(TileEntityRBMKBase tile, RBMKType type, boolean hasLid) { - this.type = type; - this.tile = tile; - this.hasLid = hasLid; + public RBMKNeutronNode(TileEntityRBMKBase tile, RBMKType type, boolean hasLid) { + super(tile, NeutronStream.NeutronType.RBMK); + this.data.put("hasLid", hasLid); + this.data.put("type", type); } public void addLid() { - this.hasLid = true; + this.data.replace("hasLid", true); } public void removeLid() { - this.hasLid = false; + this.data.replace("hasLid", false); } public List getReaSimNodes() { @@ -74,16 +70,15 @@ public class RBMKHandler { } public List checkNode() { - List list = new ArrayList<>(); BlockPos pos = new BlockPos(this.tile); - List streams = new ArrayList<>(); + List streams = new ArrayList<>(); // Simulate streams coming out of the RBMK rod. for (ForgeDirection dir : TileEntityRBMKRod.fluxDirs) { - streams.add(new NeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ))); + streams.add(new RBMKNeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ))); } // Check if the rod should uncache nodes. @@ -91,7 +86,7 @@ public class RBMKHandler { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; if (!rod.hasRod || rod.lastFluxQuantity == 0) { - for (NeutronStream stream : streams) { + for (RBMKNeutronStream stream : streams) { stream.getNodes(false).forEach(node -> list.add(new BlockPos(node.tile))); } @@ -112,16 +107,16 @@ public class RBMKHandler { // Check if non-rod nodes should be uncached... but now with ReaSim! { // Yeah, I don't want to contaminate the surrounding scope. - List nodes = new ArrayList<>(); + List nodes = new ArrayList<>(); points.forEach(nodePos -> { - RBMKNode node = getNode(nodePos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(nodePos); if (node != null) nodes.add(node); }); boolean hasRod = false; - for (RBMKNode node : nodes) { + for (RBMKNeutronNode node : nodes) { if (node.tile instanceof TileEntityRBMKRod) { @@ -141,11 +136,11 @@ public class RBMKHandler { } // Check if non-rod nodes should be uncached due to no rod in range. - for (NeutronStream stream : streams) { + for (RBMKNeutronStream stream : streams) { - List nodes = stream.getNodes(false); + List nodes = stream.getNodes(false); - for (RBMKNode node : nodes) { + for (RBMKNeutronNode node : nodes) { if (node.tile instanceof TileEntityRBMKRod) return list; } @@ -162,84 +157,21 @@ public class RBMKHandler { } } - public static RBMKNode makeNode(TileEntityRBMKBase tile) { - BlockPos pos = new BlockPos(tile); - if (nodeCache.containsKey(pos)) - return getNode(pos); - if (!tile.hasWorldObj()) - return new RBMKNode(tile, tile.getRBMKType(), true); - return new RBMKNode(tile, tile.getRBMKType()); - } - public static class StreamWorld { + public static class RBMKNeutronStream extends NeutronStream { - List streams; - - public StreamWorld() { - streams = new ArrayList<>(); + public RBMKNeutronStream(NeutronNode origin, Vec3 vector) { + super(origin, vector); } - public void addStream(NeutronStream stream) { - this.streams.add(stream); - } - - public void removeAllStreams() { - this.streams.clear(); - } - } - - public static class NeutronStream { - - public RBMKNode origin; - - // doubles!! - public double fluxQuantity; - // Hey, new implementation! Basically a ratio for slow flux to fast flux - // 0 = all slow flux - // 1 = all fast flux - public double fluxRatio; - - // Vector for direction of neutron flow. - public Vec3 vector; - - // Primarily used as a "dummy stream", not to be added to the streams list. - public NeutronStream(RBMKNode origin, Vec3 vector) { - this.origin = origin; - this.vector = vector; - } - - public NeutronStream(RBMKNode origin, Vec3 vector, double flux, double ratio) { - this.origin = origin; - this.vector = vector; - this.fluxQuantity = flux; - this.fluxRatio = ratio; - World worldObj = origin.tile.getWorldObj(); - if (streamWorlds.get(worldObj) == null) { - StreamWorld world = new StreamWorld(); - world.addStream(this); - streamWorlds.put(worldObj, world); - } else - streamWorlds.get(worldObj).addStream(this); - } - - // USES THE CACHE!!! - public List getBlocks() { - List positions = new ArrayList<>(); - - for (int i = 1; i <= fluxRange; i++) { - int x = (int) Math.floor(0.5 + vector.xCoord * i); - int z = (int) Math.floor(0.5 + vector.zCoord * i); - - BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - positions.add(pos); - } - return positions; + public RBMKNeutronStream(NeutronNode origin, Vec3 vector, double flux, double ratio) { + super(origin, vector, flux, ratio, NeutronType.RBMK); } // Does NOT include the origin node // USES THE CACHE!!! - public List getNodes(boolean addNode) { - List positions = new ArrayList<>(); + public List getNodes(boolean addNode) { + List positions = new ArrayList<>(); for (int i = 1; i <= fluxRange; i++) { int x = (int) Math.floor(0.5 + vector.xCoord * i); @@ -247,17 +179,17 @@ public class RBMKHandler { BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - if (nodeCache.containsKey(pos)) - positions.add(getNode(pos)); + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + positions.add((RBMKNeutronNode) NeutronNodeWorld.getNode(pos)); else if (this.origin.tile.getBlockType() instanceof RBMKBase) { TileEntity te = blockPosToTE(this.origin.tile.getWorldObj(), pos); if (te instanceof TileEntityRBMKBase) { - TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase)te; - RBMKNode node = makeNode(rbmkBase); + TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase) te; + RBMKNeutronNode node = makeNode(rbmkBase); positions.add(node); if (addNode) - addNode(node); + NeutronNodeWorld.addNode(node); } } } @@ -268,36 +200,36 @@ public class RBMKHandler { public void runStreamInteraction(World worldObj) { // do nothing if there's nothing to do lmao - if(fluxQuantity == 0D) + if (fluxQuantity == 0D) return; BlockPos pos = new BlockPos(origin.tile); TileEntityRBMKBase originTE; - if (nodeCache.containsKey(pos)) - originTE = nodeCache.get(pos).tile; + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + originTE = (TileEntityRBMKBase) NeutronNodeWorld.nodeCache.get(pos).tile; else { originTE = (TileEntityRBMKBase) blockPosToTE(worldObj, pos); - if(originTE == null) + if (originTE == null) return; // Doesn't exist anymore! - addNode(new RBMKNode(originTE, originTE.getRBMKType())); + NeutronNodeWorld.addNode(new RBMKNeutronNode(originTE, originTE.getRBMKType(), originTE.hasLid())); } int moderatedCount = 0; - for(BlockPos nodePos : getBlocks()) { + for (BlockPos nodePos : getBlocks(fluxRange)) { - if(fluxQuantity == 0D) // Whoops, used it all up! + if (fluxQuantity == 0D) // Whoops, used it all up! return; - RBMKNode node = nodeCache.get(nodePos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.nodeCache.get(nodePos); - if(node == null) { + if (node == null) { TileEntity te = blockPosToTE(worldObj, nodePos); // ok, maybe it didn't get added to the list somehow?? if (te instanceof TileEntityRBMKBase) { node = makeNode((TileEntityRBMKBase) te); - addNode(node); // whoops! + NeutronNodeWorld.addNode(node); // whoops! } else { int hits = getHits(nodePos); // Get the amount of hits on blocks. if (hits == columnHeight) // If stream is fully blocked. @@ -313,42 +245,44 @@ public class RBMKHandler { } } - if(node.type == RBMKType.OTHER) // pass right on by! + RBMKType type = (RBMKType) node.data.get("type"); + + if (type == RBMKType.OTHER) // pass right on by! continue; // we established earlier during `getNodes()` that they should all be RBMKBase TEs // no issue with casting here! - TileEntityRBMKBase nodeTE = node.tile; + TileEntityRBMKBase nodeTE = (TileEntityRBMKBase) node.tile; - if(!node.hasLid) + if (!(boolean) node.data.get("hasLid")) ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); - if (node.type == RBMKType.MODERATOR || nodeTE.isModerated()) { + if (type == RBMKType.MODERATOR || nodeTE.isModerated()) { moderatedCount++; moderateStream(); } if (nodeTE instanceof IRBMKFluxReceiver) { - IRBMKFluxReceiver column = (IRBMKFluxReceiver)nodeTE; + IRBMKFluxReceiver column = (IRBMKFluxReceiver) nodeTE; - if (node.type == RBMKType.ROD) { - TileEntityRBMKRod rod = (TileEntityRBMKRod)column; + if (type == RBMKType.ROD) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) column; if (rod.hasRod) { rod.receiveFlux(this); return; } - } else if(node.type == RBMKType.OUTGASSER) { + } else if (type == RBMKType.OUTGASSER) { TileEntityRBMKOutgasser outgasser = ((TileEntityRBMKOutgasser) column); - if(outgasser.canProcess()) { + if (outgasser.canProcess()) { column.receiveFlux(this); return; } } - } else if (node.type == RBMKType.CONTROL_ROD) { + } else if (type == RBMKType.CONTROL_ROD) { TileEntityRBMKControl rod = (TileEntityRBMKControl) nodeTE; if (rod.level > 0.0D) { @@ -357,41 +291,43 @@ public class RBMKHandler { continue; } return; - } else if (node.type == RBMKType.REFLECTOR) { + } else if (type == RBMKType.REFLECTOR) { - if (this.origin.tile.isModerated()) + if (((TileEntityRBMKBase) this.origin.tile).isModerated()) moderatedCount++; if (this.fluxRatio > 0 && moderatedCount > 0) for (int i = 0; i < moderatedCount; i++) moderateStream(); - if (RBMKHandler.reflectorEfficiency != 1.0D) { - this.fluxQuantity *= RBMKHandler.reflectorEfficiency; + if (reflectorEfficiency != 1.0D) { + this.fluxQuantity *= reflectorEfficiency; continue; } - ((TileEntityRBMKRod)originTE).receiveFlux(this); + ((TileEntityRBMKRod) originTE).receiveFlux(this); return; - } else if (node.type == RBMKType.ABSORBER) { - if (RBMKHandler.absorberEfficiency == 1) + } else if (type == RBMKType.ABSORBER) { + if (absorberEfficiency == 1) return; - this.fluxQuantity *= RBMKHandler.absorberEfficiency; + this.fluxQuantity *= absorberEfficiency; } } - List nodes = getNodes(true); + List nodes = getNodes(true); if (nodes.isEmpty()) return; - RBMKNode lastNode = nodes.get(nodes.size() - 1); + RBMKNeutronNode lastNode = nodes.get(nodes.size() - 1); - if (lastNode.type != RBMKType.REFLECTOR && lastNode.type != RBMKType.ABSORBER && lastNode.type != RBMKType.CONTROL_ROD) + RBMKType lastNodeType = (RBMKType) lastNode.data.get("type"); + + if (lastNodeType != RBMKType.REFLECTOR && lastNodeType != RBMKType.ABSORBER && lastNodeType != RBMKType.CONTROL_ROD) irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); - if (lastNode.type == RBMKType.CONTROL_ROD) { - TileEntityRBMKControl rod = (TileEntityRBMKControl)lastNode.tile; + if (lastNodeType == RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = (TileEntityRBMKControl) lastNode.tile; if (rod.getMult() > 0.0D) { this.fluxQuantity *= rod.getMult(); irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); @@ -426,32 +362,7 @@ public class RBMKHandler { public void moderateStream() { fluxRatio *= (1 - moderatorEfficiency); } - } - // List of all stream worlds. - public static HashMap streamWorlds = new HashMap<>(); - - public static void removeAllWorlds() { - streamWorlds.clear(); - } - - // HashMap of all RBMK nodes and their positions. - protected static HashMap nodeCache = new HashMap<>(); - - public static void addNode(RBMKNode node) { - nodeCache.put(new BlockPos(node.tile), node); - } - - public static void removeNode(BlockPos position) { - nodeCache.remove(position); - } - - public static RBMKNode getNode(BlockPos position) { - return nodeCache.get(position); - } - - public static void removeAllNodes() { - nodeCache.clear(); } private static int ticks = 0; @@ -462,17 +373,17 @@ public class RBMKHandler { // Remove `StreamWorld` objects if they have no streams. { // aflghdkljghlkbhfjkghgilurbhlkfjghkffdjgn List toRemove = new ArrayList<>(); - streamWorlds.forEach((world, streamWorld) -> { + NeutronNodeWorld.streamWorlds.forEach((world, streamWorld) -> { if (streamWorld.streams.isEmpty()) toRemove.add(world); }); for (World world : toRemove) { - streamWorlds.remove(world); + NeutronNodeWorld.streamWorlds.remove(world); } } - for (Entry world : streamWorlds.entrySet()) { + for (Entry world : NeutronNodeWorld.streamWorlds.entrySet()) { // Gamerule caching because this apparently is kinda slow? // meh, good enough @@ -487,9 +398,10 @@ public class RBMKHandler { fluxRange = RBMKDials.getFluxRange(world.getKey()); for (NeutronStream stream : world.getValue().streams) { - stream.runStreamInteraction(world.getKey()); + if (stream.type == NeutronStream.NeutronType.RBMK) + stream.runStreamInteraction(world.getKey()); } - world.getValue().removeAllStreams(); + world.getValue().removeAllStreamsOfType(NeutronStream.NeutronType.RBMK); } // Freshen the node cache every `cacheTime` ticks to prevent huge RAM usage. @@ -497,11 +409,13 @@ public class RBMKHandler { if (ticks >= cacheTime) { ticks = 0; List toRemove = new ArrayList<>(); - for(RBMKNode cachedNode : nodeCache.values()) - toRemove.addAll(cachedNode.checkNode()); + for(NeutronNode cachedNode : NeutronNodeWorld.nodeCache.values()) { + RBMKNeutronNode node = (RBMKNeutronNode) cachedNode; + toRemove.addAll(node.checkNode()); + } for(BlockPos pos : toRemove) - removeNode(pos); + NeutronNodeWorld.removeNode(pos); } ticks++; } diff --git a/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java b/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java deleted file mode 100644 index 457638a76..000000000 --- a/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.hbm.handler.rbmkmk2; - -import com.hbm.items.machine.ItemRBMKPellet; -import com.hbm.items.machine.ItemRBMKRod; -import net.minecraft.util.MathHelper; - -import java.util.function.BiFunction; -import java.util.function.Function; - - -public class ItemRBMKRodFluxCurve extends ItemRBMKRod { - - /** Double 1: Flux ratio in. - * Double 2: Depletion value. - * Return double: Output flux ratio. - **/ - BiFunction ratioCurve; - - /** Double 1: Flux quantity in.
- * Double 2: Flux ratio in.
- * Return double: Output flux quantity. - **/ - BiFunction fluxCurve; - - public ItemRBMKRodFluxCurve(ItemRBMKPellet pellet) { - super(pellet); - } - - public ItemRBMKRodFluxCurve(String fullName) { - super(fullName); - } - - public ItemRBMKRodFluxCurve setOutputRatioCurve(Function func) { - this.ratioCurve = (fluxRatioIn, depletion) -> func.apply(fluxRatioIn) * 1.0D; - return this; - } - - public ItemRBMKRodFluxCurve setDepletionOutputRatioCurve(BiFunction func) { - this.ratioCurve = func; - return this; - } - - public ItemRBMKRodFluxCurve setOutputFluxCurve(BiFunction func) { - this.fluxCurve = func; - return this; - } - - public double fluxRatioOut(double fluxRatioIn, double depletion) { - return MathHelper.clamp_double(ratioCurve.apply(fluxRatioIn, depletion), 0, 1); - } - - public double fluxFromRatio(double quantity, double ratio) { - return fluxCurve.apply(quantity, ratio); - } -} diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index b8de08aa3..d9021d10d 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -394,7 +394,7 @@ public class HazardRegistry { registerRBMKRod(rbmk_fuel_zfb_pu241, pu239 * rod_rbmk * 0.1F, wst * rod_rbmk * 7.5F); registerRBMKRod(rbmk_fuel_zfb_am_mix, pu241 * rod_rbmk * 0.1F, wst * rod_rbmk * 10F); registerRBMK(rbmk_fuel_drx, bf * rod_rbmk, bf * rod_rbmk * 100F, true, true, 0, 1F/3F); - registerRBMKRod(rbmk_fuel_curve, saf * rod_rbmk * np237 * rod_rbmk, wst * rod_rbmk * 35F); + //registerRBMKRod(rbmk_fuel_curve, saf * rod_rbmk * np237 * rod_rbmk, wst * rod_rbmk * 35F); registerRBMKPellet(rbmk_pellet_ueu, u * billet, wst * billet * 20F); registerRBMKPellet(rbmk_pellet_meu, uf * billet, wst * billet * 21.5F); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 4e99c505f..4e4fffd1f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -7,7 +7,6 @@ import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.LuckAbility; import com.hbm.handler.WeaponAbility; import com.hbm.handler.guncfg.*; -import com.hbm.handler.rbmkmk2.ItemRBMKRodFluxCurve; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -1132,7 +1131,7 @@ public class ModItems { public static ItemRBMKRod rbmk_fuel_zfb_am_mix; public static ItemRBMKRod rbmk_fuel_drx; public static ItemRBMKRod rbmk_fuel_test; - public static ItemRBMKRodFluxCurve rbmk_fuel_curve; + //public static ItemRBMKRod rbmk_fuel_curve; public static ItemRBMKPellet rbmk_pellet_ueu; public static ItemRBMKPellet rbmk_pellet_meu; public static ItemRBMKPellet rbmk_pellet_heu233; @@ -3761,15 +3760,18 @@ public class ModItems { .setHeat(1.0D) .setMeltingPoint(100000) .setUnlocalizedName("rbmk_fuel_test").setTextureName(RefStrings.MODID + ":rbmk_fuel_test"); - rbmk_fuel_curve = (ItemRBMKRodFluxCurve) new ItemRBMKRodFluxCurve("3D curve test") + /* Experimental flux curve shit + rbmk_fuel_curve = (ItemRBMKRod) new ItemRBMKRod("3D Flux Curve Test") + .setFluxCurve(true) .setOutputFluxCurve((fluxQuantity, fluxRatio) -> fluxQuantity * (1 - Math.pow(fluxRatio, 2))) .setDepletionOutputRatioCurve((ratioIn, depletion) -> Math.pow(ratioIn, 2) * depletion) .setYield(1000000D) - .setStats(100) - .setFunction(EnumBurnFunc.EXPERIMENTAL) - .setHeat(1.0D) + .setStats(75) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.5D) .setMeltingPoint(100000) .setUnlocalizedName("rbmk_fuel_curve").setTextureName(RefStrings.MODID + ":rbmk_fuel_curve"); + */ watz_pellet = new ItemWatzPellet().setUnlocalizedName("watz_pellet").setTextureName(RefStrings.MODID + ":watz_pellet"); watz_pellet_depleted = new ItemWatzPellet().setUnlocalizedName("watz_pellet_depleted").setTextureName(RefStrings.MODID + ":watz_pellet"); @@ -6613,7 +6615,7 @@ public class ModItems { GameRegistry.registerItem(rbmk_fuel_zfb_am_mix, rbmk_fuel_zfb_am_mix.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_drx, rbmk_fuel_drx.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_test, rbmk_fuel_test.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); + //GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_ueu, rbmk_pellet_ueu.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_meu, rbmk_pellet_meu.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java index c2e215307..853fe918f 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java @@ -2,7 +2,8 @@ package com.hbm.items.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBase; @@ -15,8 +16,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; - public class ItemRBMKLid extends Item { @Override @@ -42,7 +41,7 @@ public class ItemRBMKLid extends Item { if(tile.hasLid()) return false; - RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(new BlockPos(te)); if (node != null) node.addLid(); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 93e30f4ac..d02a393d2 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -2,6 +2,8 @@ package com.hbm.items.machine; import java.util.List; import java.util.Locale; +import java.util.function.BiFunction; +import java.util.function.Function; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; @@ -14,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class ItemRBMKRod extends Item { @@ -241,7 +244,7 @@ public class ItemRBMKRod extends Item { } /** - * @param reactivity [0;100] ...or at least those are sane levels + * @param enrichment [0;100] ...or at least those are sane levels * @return the amount of reactivity yielded, unmodified by xenon */ public double reactivityFunc(double in, double enrichment) { @@ -355,7 +358,55 @@ public class ItemRBMKRod extends Item { public static double getPoisonLevel(ItemStack stack) { return getPoison(stack) / 100D; } - + + // START Special flux curve handling! + // Nothing really uses this yet, though it's a really fun feature to play around with. + + // For the RBMK handler to see if the rod is special. + public boolean specialFluxCurve = false; + + public ItemRBMKRod setFluxCurve(boolean bool) { + specialFluxCurve = bool; + return this; + } + + /** Double 1: Flux ratio in. + * Double 2: Depletion value. + * Return double: Output flux ratio. + **/ + BiFunction ratioCurve; + + /** Double 1: Flux quantity in.
+ * Double 2: Flux ratio in.
+ * Return double: Output flux quantity. + **/ + BiFunction fluxCurve; + + public ItemRBMKRod setOutputRatioCurve(Function func) { + this.ratioCurve = (fluxRatioIn, depletion) -> func.apply(fluxRatioIn) * 1.0D; + return this; + } + + public ItemRBMKRod setDepletionOutputRatioCurve(BiFunction func) { + this.ratioCurve = func; + return this; + } + + public ItemRBMKRod setOutputFluxCurve(BiFunction func) { + this.fluxCurve = func; + return this; + } + + public double fluxRatioOut(double fluxRatioIn, double depletion) { + return MathHelper.clamp_double(ratioCurve.apply(fluxRatioIn, depletion), 0, 1); + } + + public double fluxFromRatio(double quantity, double ratio) { + return fluxCurve.apply(quantity, ratio); + } + + // END Special flux curve handling. + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 1149fc2b6..478c1fe9a 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -9,7 +9,9 @@ import java.util.Map; import java.util.Random; import java.util.UUID; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.PileNeutronHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; @@ -537,8 +539,8 @@ public class ModEventHandler { @SubscribeEvent public void onUnload(WorldEvent.Unload event) { - RBMKHandler.removeAllWorlds(); // Remove world from worlds when unloaded to avoid world issues. - RBMKHandler.removeAllNodes(); // Remove all nodes. + NeutronNodeWorld.StreamWorld.removeAllWorlds(); // Remove world from worlds when unloaded to avoid world issues. + NeutronNodeWorld.removeAllNodes(); // Remove all nodes. } public static boolean didSit = false; @@ -1151,7 +1153,9 @@ public class ModEventHandler { TileEntityMachineRadarNT.updateSystem(); Nodespace.updateNodespace(); // RBMK!!!! - RBMKHandler.runAllInteractions(); + RBMKNeutronHandler.runAllInteractions(); + // Chicago Pile!!!! + PileNeutronHandler.runAllInteractions(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java index 655c234ae..2b8464354 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronStream; public interface IRBMKFluxReceiver { @@ -16,5 +16,5 @@ public interface IRBMKFluxReceiver { } } - public void receiveFlux(RBMKHandler.NeutronStream stream); + public void receiveFlux(NeutronStream stream); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java index abbb5ceb1..d1c585539 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.ABSORBER; + public RBMKType getRBMKType() { + return RBMKType.ABSORBER; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 808e0a076..70e768933 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -10,6 +10,7 @@ import com.hbm.entity.projectile.EntityRBMKDebris; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.neutron.NeutronNodeWorld; import com.hbm.handler.neutron.RBMKNeutronHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; @@ -41,7 +42,12 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; -import java.util.*; +import java.util.List; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Set; +import java.util.HashSet; +import java.util.Iterator; /** * Base class for all RBMK components, active or passive. Handles heat and the explosion sequence @@ -243,13 +249,15 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements heat = 20D; } - public abstract RBMKNeutronHandler.RBMKType getRBMKType(); - + public RBMKType getRBMKType() { + return RBMKType.OTHER; + } + protected static boolean diag = false; @Override public void readFromNBT(NBTTagCompound nbt) { - + if(!diag) { super.readFromNBT(nbt); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java index 08611e1b1..82a7137a9 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKBlank extends TileEntityRBMKBase { @@ -18,11 +17,6 @@ public class TileEntityRBMKBlank extends TileEntityRBMKBase { super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.BLANK; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 2a1ea6801..1c1d4c29b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -8,7 +8,6 @@ import api.hbm.tile.IInfoProviderEC; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerRBMKGeneric; import com.hbm.inventory.fluid.FluidType; @@ -224,11 +223,6 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.BOILER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java index edb73195c..9e6d43868 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java @@ -2,7 +2,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -132,8 +132,8 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.CONTROL_ROD; + public RBMKType getRBMKType() { + return RBMKType.CONTROL_ROD; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java index e4134ab0c..fe3ddc71d 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java @@ -2,7 +2,6 @@ package com.hbm.tileentity.machine.rbmk; import api.hbm.fluid.IFluidStandardReceiver; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; @@ -17,7 +16,6 @@ import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; import java.util.List; @@ -118,11 +116,6 @@ public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidSt this.lastCooled = buf.readInt(); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.COOLER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index e54a5acbd..42aecf827 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -4,7 +4,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.container.ContainerRBMKHeater; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -154,11 +153,6 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.HEATEX; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java index 7ce7c1e67..989b0af42 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKModerator extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKModerator extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.MODERATOR; + public RBMKType getRBMKType() { + return RBMKType.MODERATOR; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 3b701fc0e..7b39fa47b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -4,7 +4,8 @@ import api.hbm.fluid.IFluidStandardSender; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronStream; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.inventory.FluidStack; import com.hbm.inventory.container.ContainerRBMKOutgasser; import com.hbm.inventory.fluid.Fluids; @@ -92,7 +93,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement } @Override - public void receiveFlux(RBMKHandler.NeutronStream stream) { + public void receiveFlux(NeutronStream stream) { if(canProcess()) { @@ -167,8 +168,8 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OUTGASSER; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.OUTGASSER; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java index 79e40867b..f2157f849 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKReflector extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKReflector extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.REFLECTOR; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.REFLECTOR; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index f559b28e4..8908bfa3e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -5,9 +5,11 @@ import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.blocks.machine.rbmk.RBMKRod; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.radiation.ChunkRadiationManager; -import com.hbm.handler.neutron.NeutronStream; +import com.hbm.handler.neutron.NeutronNodeWorld; import com.hbm.handler.neutron.RBMKNeutronHandler; +import com.hbm.handler.radiation.ChunkRadiationManager; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; +import com.hbm.handler.neutron.NeutronStream; import com.hbm.inventory.container.ContainerRBMKRod; import com.hbm.inventory.gui.GUIRBMKRod; import com.hbm.items.ModItems; @@ -90,14 +92,15 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM double fluxRatioOut; double fluxQuantityOut; - if (rod instanceof ItemRBMKRodFluxCurve) { // Experimental flux ratio curve rods! - ItemRBMKRodFluxCurve rodCurve = (ItemRBMKRodFluxCurve) rod; + // Experimental flux ratio curve rods! + // Again, nothing really uses this so its just idle code at the moment. + if (rod.specialFluxCurve) { - fluxRatioOut = rodCurve.fluxRatioOut(this.fluxRatio, ItemRBMKRod.getEnrichment(slots[0])); + fluxRatioOut = rod.fluxRatioOut(this.fluxRatio, ItemRBMKRod.getEnrichment(slots[0])); double fluxIn; - fluxIn = rodCurve.fluxFromRatio(this.fluxQuantity, this.fluxRatio); + fluxIn = rod.fluxFromRatio(this.fluxQuantity, this.fluxRatio); fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); } else { @@ -181,15 +184,15 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM if (flux == 0) { // simple way to remove the node from the cache when no flux is going into it! - removeNode(pos); + NeutronNodeWorld.removeNode(pos); return; } - RBMKHandler.RBMKNode node = getNode(pos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); if(node == null) { - node = RBMKHandler.makeNode(this); - addNode(node); + node = RBMKNeutronHandler.makeNode(this); + NeutronNodeWorld.addNode(node); } for(ForgeDirection dir : fluxDirs) { @@ -214,7 +217,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM this.fluxRatio = 0; } else { this.fluxQuantity = nbt.getDouble("fluxQuantity"); - this.fluxRatio = nbt.getDouble("fluxRatio"); + this.fluxRatio = nbt.getDouble("fluxMod"); } this.hasRod = nbt.getBoolean("hasRod"); } @@ -222,8 +225,17 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setDouble("fluxSlow", this.lastFluxQuantity * (1 - fluxRatio)); - nbt.setDouble("fluxFast", this.lastFluxQuantity * fluxRatio); + nbt.setDouble("fluxQuantity", this.fluxQuantity); + nbt.setDouble("fluxMod", this.fluxRatio); + nbt.setBoolean("hasRod", this.hasRod); + } + + // aaaaaaaa + public void writeToNBTDiag(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setDouble("fluxSlow", this.fluxQuantity * (1 - fluxRatio)); + nbt.setDouble("fluxFast", this.fluxQuantity * fluxRatio); nbt.setBoolean("hasRod", this.hasRod); } @@ -245,7 +257,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void getDiagData(NBTTagCompound nbt) { diag = true; - this.writeToNBT(nbt); + this.writeToNBTDiag(nbt); diag = false; if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java index 74da00c39..d638e4795 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java @@ -1,12 +1,13 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKNode; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.util.Vec3; -import static com.hbm.handler.rbmkmk2.RBMKHandler.*; +import static com.hbm.handler.neutron.RBMKNeutronHandler.*; public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { @@ -26,15 +27,15 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { if (flux == 0) { // simple way to remove the node from the cache when no flux is going into it! - removeNode(pos); + NeutronNodeWorld.removeNode(pos); return; } - RBMKNode node = getNode(pos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); if(node == null) { node = makeNode(this); - addNode(node); + NeutronNodeWorld.addNode(node); } int count = RBMKDials.getReaSimCount(worldObj); @@ -44,7 +45,7 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); - new NeutronStream(makeNode(this), neutronVector, flux, ratio); + new RBMKNeutronHandler.RBMKNeutronStream(makeNode(this), neutronVector, flux, ratio); // Create new neutron streams } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java index ac8621882..66809e58e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.inventory.container.ContainerRBMKStorage; import com.hbm.inventory.gui.GUIRBMKStorage; import com.hbm.items.machine.ItemRBMKRod; @@ -42,8 +42,8 @@ public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.OTHER; } @Override