From 3e519e890249825dc8face0087cc631684d36e8c Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Thu, 13 Jan 2022 00:28:02 +0000 Subject: Basically finished work on Reactor Simulator. --- .../components/Condensator.java | 48 ++ .../components/CoolantCell.java | 31 ++ .../Ic2ExpReactorPlanner/components/Exchanger.java | 130 +++++ .../Ic2ExpReactorPlanner/components/FuelRod.java | 166 +++++++ .../Ic2ExpReactorPlanner/components/Plating.java | 49 ++ .../components/ReactorItem.java | 533 +++++++++++++++++++++ .../Ic2ExpReactorPlanner/components/Reflector.java | 66 +++ .../java/Ic2ExpReactorPlanner/components/Vent.java | 110 +++++ 8 files changed, 1133 insertions(+) create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/Condensator.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/CoolantCell.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/Exchanger.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/FuelRod.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/Plating.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/Reflector.java create mode 100644 src/main/java/Ic2ExpReactorPlanner/components/Vent.java (limited to 'src/main/java/Ic2ExpReactorPlanner/components') diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Condensator.java b/src/main/java/Ic2ExpReactorPlanner/components/Condensator.java new file mode 100644 index 0000000000..d38db4c704 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/Condensator.java @@ -0,0 +1,48 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents a condensator in a reactor, either RSH or LZH. + * @author Brian McCloud + */ +public class Condensator extends ReactorItem { + + public Condensator(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + } + + public Condensator(final Condensator other) { + super(other); + } + + @Override + public double adjustCurrentHeat(final double heat) { + if (heat < 0.0) { + return heat; + } + currentCondensatorCooling += heat; + bestCondensatorCooling = Math.max(currentCondensatorCooling, bestCondensatorCooling); + double acceptedHeat = Math.min(heat, getMaxHeat() - heat); + double result = heat - acceptedHeat; + currentHeat += acceptedHeat; + maxReachedHeat = Math.max(maxReachedHeat, currentHeat); + return result; + } + + @Override + public boolean needsCoolantInjected() { + return currentHeat > 0.85 * getMaxHeat(); + } + + @Override + public void injectCoolant() { + currentHeat = 0; + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/CoolantCell.java b/src/main/java/Ic2ExpReactorPlanner/components/CoolantCell.java new file mode 100644 index 0000000000..f152b49985 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/CoolantCell.java @@ -0,0 +1,31 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents a coolant cell in a reactor. + * @author Brian McCloud + */ +public class CoolantCell extends ReactorItem { + + public CoolantCell(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + } + + public CoolantCell(final CoolantCell other) { + super(other); + } + + @Override + public double adjustCurrentHeat(final double heat) { + currentCellCooling += heat; + bestCellCooling = Math.max(currentCellCooling, bestCellCooling); + return super.adjustCurrentHeat(heat); + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Exchanger.java b/src/main/java/Ic2ExpReactorPlanner/components/Exchanger.java new file mode 100644 index 0000000000..efb9a826e2 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/Exchanger.java @@ -0,0 +1,130 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import java.util.ArrayList; +import java.util.List; + +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents a heat exchanger of some sort in a reactor. + * @author Brian McCloud + */ +public class Exchanger extends ReactorItem { + + private final int switchSide; + private final int switchReactor; + + public Exchanger(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod, final int switchSide, final int switchReactor) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + this.switchSide = switchSide; + this.switchReactor = switchReactor; + } + + public Exchanger(final Exchanger other) { + super(other); + this.switchSide = other.switchSide; + this.switchReactor = other.switchReactor; + } + + @Override + public void transfer() { + List heatableNeighbors = new ArrayList<>(4); + ReactorItem component = parent.getComponentAt(row, col - 1); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row, col + 1); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row - 1, col); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row + 1, col); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + // Code adapted from decompiled IC2 code, class ItemReactorHeatSwitch, with permission from Thunderdark. + double myHeat = 0; + if (switchSide > 0) { + for (ReactorItem heatableNeighbor : heatableNeighbors) { + double mymed = getCurrentHeat() * 100.0 / getMaxHeat(); + double heatablemed = heatableNeighbor.getCurrentHeat() * 100.0 / heatableNeighbor.getMaxHeat(); + + double add = (int) (heatableNeighbor.getMaxHeat() / 100.0 * (heatablemed + mymed / 2.0)); + if (add > switchSide) { + add = switchSide; + } + if (heatablemed + mymed / 2.0 < 1.0) { + add = switchSide / 2; + } + if (heatablemed + mymed / 2.0 < 0.75) { + add = switchSide / 4; + } + if (heatablemed + mymed / 2.0 < 0.5) { + add = switchSide / 8; + } + if (heatablemed + mymed / 2.0 < 0.25) { + add = 1; + } + if (Math.round(heatablemed * 10.0) / 10.0 > Math.round(mymed * 10.0) / 10.0) { + add -= 2 * add; + } else if (Math.round(heatablemed * 10.0) / 10.0 == Math.round(mymed * 10.0) / 10.0) { + add = 0; + } + myHeat -= add; + if (add > 0) { + currentComponentHeating += add; + } + add = heatableNeighbor.adjustCurrentHeat(add); + myHeat += add; + } + } + if (switchReactor > 0) { + double mymed = getCurrentHeat() * 100.0 / getMaxHeat(); + double Reactormed = parent.getCurrentHeat() * 100.0 / parent.getMaxHeat(); + + int add = (int) Math.round(parent.getMaxHeat() / 100.0 * (Reactormed + mymed / 2.0)); + if (add > switchReactor) { + add = switchReactor; + } + if (Reactormed + mymed / 2.0 < 1.0) { + add = switchSide / 2; + } + if (Reactormed + mymed / 2.0 < 0.75) { + add = switchSide / 4; + } + if (Reactormed + mymed / 2.0 < 0.5) { + add = switchSide / 8; + } + if (Reactormed + mymed / 2.0 < 0.25) { + add = 1; + } + if (Math.round(Reactormed * 10.0) / 10.0 > Math.round(mymed * 10.0) / 10.0) { + add -= 2 * add; + } else if (Math.round(Reactormed * 10.0) / 10.0 == Math.round(mymed * 10.0) / 10.0) { + add = 0; + } + myHeat -= add; + parent.adjustCurrentHeat(add); + if (add > 0) { + currentHullHeating = add; + } else { + currentHullCooling = -add; + } + } + adjustCurrentHeat(myHeat); + } + + @Override + public double getHullCoolingCapacity() { + return switchReactor; + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/FuelRod.java b/src/main/java/Ic2ExpReactorPlanner/components/FuelRod.java new file mode 100644 index 0000000000..588e221424 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/FuelRod.java @@ -0,0 +1,166 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import java.util.ArrayList; +import java.util.List; + +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents some form of fuel rod (may be single, dual, or quad). + * @author Brian McCloud + */ +public class FuelRod extends ReactorItem { + + private final int energyMult; + private final double heatMult; + private final int rodCount; + private final boolean moxStyle; + + private static boolean GT509behavior = false; + private static boolean GTNHbehavior = false; + + public static void setGT509Behavior(boolean value) { + GT509behavior = value; + } + + public static void setGTNHBehavior(boolean value) { + GTNHbehavior = value; + } + + public FuelRod(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod, + final int energyMult, final double heatMult, final int rodCount, final boolean moxStyle) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + this.energyMult = energyMult; + this.heatMult = heatMult; + this.rodCount = rodCount; + this.moxStyle = moxStyle; + } + + public FuelRod(final FuelRod other) { + super(other); + this.energyMult = other.energyMult; + this.heatMult = other.heatMult; + this.rodCount = other.rodCount; + this.moxStyle = other.moxStyle; + } + + @Override + public boolean isNeutronReflector() { + return !isBroken(); + } + + private int countNeutronNeighbors() { + int neutronNeighbors = 0; + ReactorItem component = parent.getComponentAt(row + 1, col); + if (component != null && component.isNeutronReflector()) { + neutronNeighbors++; + } + component = parent.getComponentAt(row - 1, col); + if (component != null && component.isNeutronReflector()) { + neutronNeighbors++; + } + component = parent.getComponentAt(row, col - 1); + if (component != null && component.isNeutronReflector()) { + neutronNeighbors++; + } + component = parent.getComponentAt(row, col + 1); + if (component != null && component.isNeutronReflector()) { + neutronNeighbors++; + } + return neutronNeighbors; + } + + protected void handleHeat(final int heat) { + List heatableNeighbors = new ArrayList<>(4); + ReactorItem component = parent.getComponentAt(row + 1, col); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row - 1, col); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row, col - 1); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + component = parent.getComponentAt(row, col + 1); + if (component != null && component.isHeatAcceptor()) { + heatableNeighbors.add(component); + } + if (heatableNeighbors.isEmpty()) { + parent.adjustCurrentHeat(heat); + currentHullHeating = heat; + } else { + currentComponentHeating = heat; + for (ReactorItem heatableNeighbor : heatableNeighbors) { + heatableNeighbor.adjustCurrentHeat(heat / heatableNeighbors.size()); + } + int remainderHeat = heat % heatableNeighbors.size(); + heatableNeighbors.get(0).adjustCurrentHeat(remainderHeat); + } + } + + @Override + public double generateHeat() { + int pulses = countNeutronNeighbors() + (rodCount == 1 ? 1 : (rodCount == 2) ? 2 : 3); + int heat = (int)(heatMult * pulses * (pulses + 1)); + if (moxStyle && parent.isFluid() && (parent.getCurrentHeat() / parent.getMaxHeat()) > 0.5) { + heat *= 2; + } + currentHeatGenerated = heat; + minHeatGenerated = Math.min(minHeatGenerated, heat); + maxHeatGenerated = Math.max(maxHeatGenerated, heat); + handleHeat(heat); + return currentHeatGenerated; + } + + @Override + public double generateEnergy() { + int pulses = countNeutronNeighbors() + (rodCount == 1 ? 1 : (rodCount == 2) ? 2 : 3); + double energy = energyMult * pulses; + if (GT509behavior || "GT5".equals(sourceMod)) { + energy *= 2;//EUx2 if from GT5.09 or in GT5.09 mode + if (moxStyle) { + energy *= (1 + 1.5 * parent.getCurrentHeat() / parent.getMaxHeat()); + } + } + else if (GTNHbehavior || "GTNH".equals(sourceMod)) { + energy *= 10;//EUx10 if from GTNH or in GTNH mode + if (moxStyle) { + energy *= (1 + 1.5 * parent.getCurrentHeat() / parent.getMaxHeat()); + } + } else if (moxStyle) { + energy *= (1 + 4.0 * parent.getCurrentHeat() / parent.getMaxHeat()); + } + minEUGenerated = Math.min(minEUGenerated, energy); + maxEUGenerated = Math.max(maxEUGenerated, energy); + currentEUGenerated = energy; + parent.addEUOutput(energy); + applyDamage(1.0); + return energy; + } + + @Override + public int getRodCount() { + return rodCount; + } + + @Override + public double getCurrentOutput() { + if (parent != null) { + if (parent.isFluid()) { + return currentHeatGenerated; + } else { + return currentEUGenerated; + } + } + return 0; + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Plating.java b/src/main/java/Ic2ExpReactorPlanner/components/Plating.java new file mode 100644 index 0000000000..d792e06035 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/Plating.java @@ -0,0 +1,49 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import Ic2ExpReactorPlanner.Reactor; +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents some form of plating, which changes how much heat the reactor can + * hold before causing external effects (up to and including explosion), as well + * as somewhat reducing explosion power. + * @author Brian McCloud + */ +public class Plating extends ReactorItem { + + private final int heatAdjustment; + + public Plating(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod, final int heatAdjustment, final double explosionPowerMultiplier) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + this.heatAdjustment = heatAdjustment; + this.explosionPowerMultiplier = explosionPowerMultiplier; + } + + public Plating(Plating other) { + super(other); + this.heatAdjustment = other.heatAdjustment; + this.explosionPowerMultiplier = other.explosionPowerMultiplier; + } + + @Override + public void addToReactor(final Reactor parent, final int row, final int col) { + super.addToReactor(parent, row, col); + if (parent != null) { + parent.adjustMaxHeat(heatAdjustment); + } + } + + @Override + public void removeFromReactor() { + if (parent != null) { + parent.adjustMaxHeat(-heatAdjustment); + } + super.removeFromReactor(); + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java b/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java new file mode 100644 index 0000000000..4c4e0bb01b --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java @@ -0,0 +1,533 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import java.util.HashMap; +import java.util.ResourceBundle; + +import Ic2ExpReactorPlanner.Reactor; +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents an item (component) in an IndustrialCraft2 Experimental Nuclear + * Reactor. + * + * @author Brian McCloud + */ +public class ReactorItem { + + public static HashMap sComponentMap = new HashMap(); + // Fundamental values, set at object instantiation, should never need to be + // changed. + public final int id; + public final String baseName; // this is the non-localized version, for + // internal program use + public final String name; // this is expected to be localized, for display + // usage. + protected double maxDamage; + + public double getMaxDamage() { + return maxDamage; + } + + protected double maxHeat; + + public double getMaxHeat() { + return maxHeat; + } + + public final String sourceMod; // for potentially adjusting controls based + // on whether the mod is in use, will be + // null to indicate the item is part of base + // IC2. + public final GT_ItemStack mItem; + + // Simulation setting values + private double initialHeat = 0; + + public double getInitialHeat() { + return initialHeat; + } + + public void setInitialHeat(final double value) { + if (this.isHeatAcceptor() && value >= 0 && value < this.maxHeat) { + initialHeat = value; + } + } + private int automationThreshold = 9000; + + public int getAutomationThreshold() { + return automationThreshold; + } + + public void setAutomationThreshold(final int value) { + if (maxHeat > 1 || maxDamage > 1) { + automationThreshold = value; + } + } + private int reactorPause = 0; + + public int getReactorPause() { + return reactorPause; + } + + public void setReactorPause(final int value) { + if (maxHeat > 1 || maxDamage > 1) { + reactorPause = value; + } + } + + // fields below here are not to be copied by the copy constructor. + + // Parent reactor and position + protected Reactor parent = null; + protected int row = -10; + protected int col = -10; + + // Special variable for holding information about this item from last + // simulation. + // Usage of StringBuffer instead of StringBuilder is deliberate - this may + // be accessed by + // both the simulation worker thread and the event dispatch thread. + public final StringBuffer info = new StringBuffer(1000); + + // Calculated values - readable from outside, but only writable by + // subclasses. + protected double currentDamage = 0; + public double getCurrentDamage() { + return currentDamage; + } + protected double currentHeat = 0; + public double getCurrentHeat() { + return currentHeat; + } + protected double maxReachedHeat = 0; + public double getMaxReachedHeat() { + return maxReachedHeat; + } + + protected double currentEUGenerated = 0; + public double getCurrentEUGenerated() { + return currentEUGenerated; + } + protected double minEUGenerated = Double.MAX_VALUE; + public double getMinEUGenerated() { + return minEUGenerated; + } + protected double maxEUGenerated = 0; + public double getMaxEUGenerated() { + return maxEUGenerated; + } + + protected double currentHeatGenerated = 0; + public double getCurrentHeatGenerated() { + return currentHeatGenerated; + } + protected double minHeatGenerated = Double.MAX_VALUE; + public double getMinHeatGenerated() { + return minHeatGenerated; + } + protected double maxHeatGenerated = 0; + public double getMaxHeatGenerated() { + return maxHeatGenerated; + } + + protected double currentHullHeating = 0; + public double getCurrentHullHeating() { + return currentHullHeating; + } + protected double currentComponentHeating = 0; + public double getCurrentComponentHeating() { + return currentComponentHeating; + } + protected double currentHullCooling = 0; + public double getCurrentHullCooling() { + return currentHullCooling; + } + protected double currentVentCooling = 0; + public double getCurrentVentCooling() { + return currentVentCooling; + } + protected double bestVentCooling = 0; + public double getBestVentCooling() { + return bestVentCooling; + } + + protected double currentCellCooling = 0; + public double getCurrentCellCooling() { + return currentCellCooling; + } + protected double bestCellCooling = 0; + public double getBestCellCooling() { + return bestCellCooling; + } + + protected double currentCondensatorCooling = 0; + public double getCurrentCondensatorCooling() { + return currentCondensatorCooling; + } + protected double bestCondensatorCooling = 0; + public double getBestCondensatorCooling() { + return bestCondensatorCooling; + } + + protected double explosionPowerMultiplier = 1; + + protected static final ResourceBundle BUNDLE = ResourceBundle.getBundle("Ic2ExpReactorPlanner/Bundle"); + + protected ReactorItem(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, String sourceMod) { + this.id = id; + this.baseName = baseName; + this.name = aItem.mItem.getItemStackDisplayName(aItem.toStack()); + this.mItem = aItem; + this.maxDamage = maxDamage; + this.maxHeat = maxHeat; + if (maxHeat > 1) { + automationThreshold = (int) (maxHeat * 0.9); + } + else if (maxDamage > 1) { + automationThreshold = (int) (maxDamage * 1.1); + } + if (sourceMod == null) { + sourceMod = "IC2"; + } + this.sourceMod = sourceMod; + sComponentMap.put(sourceMod+"."+aItem.mItem.getUnlocalizedName()+"."+aItem.mMetaData, this); + } + + // Protected copy constructor for use by subclasses. Generalized copying + // should be done with a method in ComponentFactory (which can check which + // subclass copy constructor to use). + protected ReactorItem(final ReactorItem other) { + this.id = other.id; + this.baseName = other.baseName; + this.name = other.name; + this.mItem = other.mItem; + this.maxDamage = other.maxDamage; + this.maxHeat = other.maxHeat; + this.initialHeat = other.initialHeat; + this.automationThreshold = other.automationThreshold; + this.reactorPause = other.reactorPause; + this.sourceMod = other.sourceMod; + } + + /** + * Gets the name of the component, and the initial heat (if applicable). + * + * @return the name of this component, and potentially initial heat. + */ + @Override + public String toString() { + String result = name; + if (initialHeat > 0) { + result += String.format(BUNDLE.getString("UI.InitialHeatDisplay"), (int) initialHeat); + } + return result; + } + + /** + * Checks if this component can accept heat. (e.g. from adjacent fuel rods, + * or from an exchanger) + * + * @return true if this component can accept heat, false otherwise. + */ + public boolean isHeatAcceptor() { + // maxHeat of 1 means this component never accepts heat (though it might + // take damage instead) + return maxHeat > 1 && !isBroken(); + } + + /** + * Determines if this component can be cooled down, such as by a component + * heat vent. + * + * @return true if this component can be cooled down, false otherwise. + */ + public boolean isCoolable() { + return maxHeat > 1 && !(this instanceof Condensator); + } + + /** + * Checks if this component acts as a neutron reflector, and boosts + * performance of adjacent fuel rods, either by being a "neutron reflector" + * item or by being a fuel rod. + * + * @return true if this component reflects neutrons, false otherwise. + */ + public boolean isNeutronReflector() { + return false; + } + + /** + * Prepare for a new reactor tick. + */ + public void preReactorTick() { + currentHullHeating = 0.0; + currentComponentHeating = 0.0; + currentHullCooling = 0.0; + currentVentCooling = 0.0; + currentCellCooling = 0.0; + currentCondensatorCooling = 0.0; + currentEUGenerated = 0; + currentHeatGenerated = 0; + } + + /** + * Generate heat if appropriate for component type, and spread to reactor or + * adjacent cells. + * + * @return the amount of heat generated by this component. + */ + public double generateHeat() { + return 0.0; + } + + /** + * Generate energy if appropriate for component type. + * + * @return the number of EU generated by this component during the current + * reactor tick. + */ + public double generateEnergy() { + return 0.0; + } + + /** + * Dissipate (aka vent) heat if appropriate for component type. + * + * @return the amount of heat successfully vented during the current reactor + * tick. + */ + public double dissipate() { + return 0.0; + } + + /** + * Transfer heat between component, neighbors, and/or reactor, if + * appropriate for component type. + */ + public void transfer() { + // do nothing by default. + } + + /** + * Adds this component to a new reactor, and applies changes to the reactor + * when adding this component if appropriate, such as for reactor plating. + * + * @param parent + * the reactor to add this component to. + * @param row + * the row this component will be in. + * @param col + * the column this component will be in. + */ + public void addToReactor(final Reactor parent, final int row, final int col) { + // call removeFromReactor first, in case it had previously been added to + // a different reactor (unlikely) + removeFromReactor(); + this.parent = parent; + this.row = row; + this.col = col; + } + + /** + * Removes this component from its reactor (if any), and applies changes to + * the reactor when removing this component if appropriate, such as for + * reactor plating. + */ + public void removeFromReactor() { + parent = null; + this.row = -10; + this.col = -10; + } + + /** + * Resets heat to 0 (used when resetting simulation). + */ + public final void clearCurrentHeat() { + currentHeat = initialHeat; + bestVentCooling = 0.0; + bestCondensatorCooling = 0.0; + bestCellCooling = 0.0; + minEUGenerated = Double.MAX_VALUE; + maxEUGenerated = 0.0; + minHeatGenerated = Double.MAX_VALUE; + maxHeatGenerated = 0.0; + maxReachedHeat = initialHeat; + } + + /** + * Adjusts the component heat up or down + * + * @param heat + * the amount of heat to adjust by (positive to add heat, + * negative to remove heat). + * @return the amount of heat adjustment refused. (e.g. due to going below + * minimum heat, breaking due to excessive heat, or attempting to + * remove heat from a condensator) + */ + public double adjustCurrentHeat(final double heat) { + if (isHeatAcceptor()) { + double result = 0.0; + double tempHeat = getCurrentHeat(); + tempHeat += heat; + if (tempHeat > getMaxHeat()) { + result = getMaxHeat() - tempHeat + 1; + tempHeat = getMaxHeat(); + } + else if (tempHeat < 0.0) { + result = tempHeat; + tempHeat = 0.0; + } + currentHeat = tempHeat; + maxReachedHeat = Math.max(maxReachedHeat, currentHeat); + return result; + } + return heat; + } + + /** + * Clears the damage back to 0 (used when resetting simulation, or replacing + * the component in an automation simulation). + */ + public final void clearDamage() { + currentDamage = 0.0; + } + + /** + * Applies damage to the component, as opposed to heat. Mainly used for fuel + * rods and neutron reflectors that lose durability as the reactor runs, but + * can't recover it via cooling. + * + * @param damage + * the damage to apply (only used if positive). + */ + public final void applyDamage(final double damage) { + // maxDamage of 1 is treated as meaning the component doesn't accept + // damage (though it might accept heat instead) + // if someone actually writes a mod with such a flimsy component, I + // might have to rethink this. + if (maxDamage > 1 && damage > 0.0) { + currentDamage += damage; + } + } + + /** + * Determines if this component is broken in the current tick of the + * simulation + * + * @return true if the component has broken either from damage (e.g. neutron + * reflectors, fuel rods) or from heat (e.g. heat vents, coolant + * cells), false otherwise. + */ + public boolean isBroken() { + return currentHeat >= getMaxHeat() || currentDamage >= getMaxDamage(); + } + + /** + * The number of fuel rods in this component (0 for non-fuel-rod + * components). + * + * @return The number of fuel rods in this component, or 0 if this component + * has no fuel rods. + */ + public int getRodCount() { + return 0; + } + + /** + * Gets a value added in the formula for calculating explosion power. + * + * @return the additive value for explosion power caused by this component, + * or 0 if this component doesn't affect the addition part of the + * explosion calculation. + */ + public double getExplosionPowerOffset() { + if (!isBroken()) { + if (getRodCount() == 0 && isNeutronReflector()) { + return -1; + } + return 2 * getRodCount(); // all known fuel rods (including those + // from GT) use this formula, and + // non-rod components return 0 for + // getRodCount + } + return 0; + } + + /** + * Gets a value multiplied in the formula for calculating explosion power. + * + * @return the multiplier value for explosion power caused by this + * component, or 1 if this component doesn't affect the + * multiplication part of the explosion calculation. + */ + public double getExplosionPowerMultiplier() { + return explosionPowerMultiplier; + } + + /** + * Finds the theoretical maximum venting of this component, regardless of + * whether this venting is from itself, directly from the reactor, or from + * adjacent components. + * + * @return the capacity of this component to vent heat. + */ + public double getVentCoolingCapacity() { + return 0; + } + + /** + * Finds the theoretical maximum hull cooling of this component. + * + * @return the capacity of this component to remove heat from the reactor + * hull. + */ + public double getHullCoolingCapacity() { + return 0; + } + + /** + * Gets the current "output" of this component, presumably for writing to + * CSV data. What this "output" means may vary by component type or reactor + * type. + * + * @return the output of this component for the current reactor tick. + */ + public double getCurrentOutput() { + return 0; + } + + /** + * Determines whether this component expects to produces some sort of output + * each reactor tick, e.g. for purposes of tracking in a CSV file. + * + * @return true if this component produces output (such as EU or vented + * heat), false otherwise. + */ + public boolean producesOutput() { + return getVentCoolingCapacity() > 0 || getRodCount() > 0; + } + + /** + * Determines if this component needs input from a Reactor Coolant Injector. + * Simply returns false for non-condensator items. + * + * @return true if this is a condensator that has absorbed enough heat to + * require the appropriate item added to repair it, false otherwise. + */ + public boolean needsCoolantInjected() { + return false; + } + + /** + * Simulates having a coolant item added by a Reactor Coolant Injector. + */ + public void injectCoolant() { + // do nothing by default. + } + +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java b/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java new file mode 100644 index 0000000000..465641972a --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java @@ -0,0 +1,66 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import Ic2ExpReactorPlanner.MaterialsList; +import gregtech.api.objects.GT_ItemStack; + +import java.awt.Image; + +/** + * Represents a neutron reflector in a reactor. + * @author Brian McCloud + */ +public class Reflector extends ReactorItem { + + private static String mcVersion = "1.12.2"; + + public Reflector(final int id, final String baseName, final GT_ItemStack aStack, final double maxDamage, final double maxHeat, final String sourceMod) { + super(id, baseName, aStack, maxDamage, maxHeat, sourceMod); + } + + public Reflector(final Reflector other) { + super(other); + } + + @Override + public boolean isNeutronReflector() { + return !isBroken(); + } + + @Override + public double generateHeat() { + ReactorItem component = parent.getComponentAt(row - 1, col); + if (component != null) { + applyDamage(component.getRodCount()); + } + component = parent.getComponentAt(row, col + 1); + if (component != null) { + applyDamage(component.getRodCount()); + } + component = parent.getComponentAt(row + 1, col); + if (component != null) { + applyDamage(component.getRodCount()); + } + component = parent.getComponentAt(row, col - 1); + if (component != null) { + applyDamage(component.getRodCount()); + } + return 0; + } + + @Override + public double getMaxDamage() { + if (maxDamage > 1 && "1.7.10".equals(mcVersion)) { + return maxDamage / 3; + } + return maxDamage; + } + + public static void setMcVersion(String newVersion) { + mcVersion = newVersion; + } +} diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Vent.java b/src/main/java/Ic2ExpReactorPlanner/components/Vent.java new file mode 100644 index 0000000000..a43383f694 --- /dev/null +++ b/src/main/java/Ic2ExpReactorPlanner/components/Vent.java @@ -0,0 +1,110 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Ic2ExpReactorPlanner.components; + +import java.util.ArrayList; +import java.util.List; + +import gregtech.api.objects.GT_ItemStack; + +/** + * Represents some kind of vent in a reactor. + * @author Brian McCloud + */ +public class Vent extends ReactorItem { + + private final int selfVent; + private final int hullDraw; + private final int sideVent; + + public Vent(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, final String sourceMod, + final int selfVent, final int hullDraw, final int sideVent) { + super(id, baseName, aItem, maxDamage, maxHeat, sourceMod); + this.selfVent = selfVent; + this.hullDraw = hullDraw; + this.sideVent = sideVent; + } + + public Vent(final Vent other) { + super(other); + this.selfVent = other.selfVent; + this.hullDraw = other.hullDraw; + this.sideVent = other.sideVent; + } + + @Override + public double dissipate() { + double deltaHeat = Math.min(hullDraw, parent.getCurrentHeat()); + currentHullCooling = deltaHeat; + parent.adjustCurrentHeat(-deltaHeat); + this.adjustCurrentHeat(deltaHeat); + final double currentDissipation = Math.min(selfVent, getCurrentHeat()); + currentVentCooling = currentDissipation; + parent.ventHeat(currentDissipation); + adjustCurrentHeat(-currentDissipation); + if (sideVent > 0) { + List coolableNeighbors = new ArrayList<>(4); + ReactorItem component = parent.getComponentAt(row - 1, col); + if (component != null && component.isCoolable()) { + coolableNeighbors.add(component); + } + component = parent.getComponentAt(row, col + 1); + if (component != null && component.isCoolable()) { + coolableNeighbors.add(component); + } + component = parent.getComponentAt(row + 1, col); + if (component != null && component.isCoolable()) { + coolableNeighbors.add(component); + } + component = parent.getComponentAt(row, col - 1); + if (component != null && component.isCoolable()) { + coolableNeighbors.add(component); + } + for (ReactorItem coolableNeighbor : coolableNeighbors) { + double rejectedCooling = coolableNeighbor.adjustCurrentHeat(-sideVent); + double tempDissipatedHeat = sideVent + rejectedCooling; + parent.ventHeat(tempDissipatedHeat); + currentVentCooling += tempDissipatedHeat; + } + } + bestVentCooling = Math.max(bestVentCooling, currentVentCooling); + return currentDissipation; + } + + @Override + public double getVentCoolingCapacity() { + double result = selfVent; + if (sideVent > 0) { + ReactorItem component = parent.getComponentAt(row - 1, col); + if (component != null && component.isCoolable()) { + result += sideVent; + } + component = parent.getComponentAt(row, col + 1); + if (component != null && component.isCoolable()) { + result += sideVent; + } + component = parent.getComponentAt(row + 1, col); + if (component != null && component.isCoolable()) { + result += sideVent; + } + component = parent.getComponentAt(row, col - 1); + if (component != null && component.isCoolable()) { + result += sideVent; + } + } + return result; + } + + @Override + public double getHullCoolingCapacity() { + return hullDraw; + } + + @Override + public double getCurrentOutput() { + return currentVentCooling; + } + } -- cgit From e5eeec1ffc3eab063c765da7bb889017d87aabdd Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Sun, 16 Jan 2022 19:51:13 +0000 Subject: Added Recipe for Computer Cube MKII, Turbine Shaft, Rotor Assembly & Elemental Duplicator. Removed a whole heap of pointless Reactor Planner files/functions. Hide some of the modes in the Computer Cube. --- .../Ic2ExpReactorPlanner/AutomationSimulator.java | 250 +-- .../java/Ic2ExpReactorPlanner/Bundle.properties | 411 ---- .../java/Ic2ExpReactorPlanner/BundleHelper.java | 43 - .../Ic2ExpReactorPlanner/Bundle_zh_CN.properties | 373 ---- .../java/Ic2ExpReactorPlanner/MaterialsList.java | 302 --- src/main/java/Ic2ExpReactorPlanner/Reactor.java | 43 +- .../Ic2ExpReactorPlanner/ReactorPlannerFrame.form | 2260 -------------------- .../java/Ic2ExpReactorPlanner/SimulationData.java | 2 - .../components/ReactorItem.java | 4 +- .../Ic2ExpReactorPlanner/components/Reflector.java | 3 - .../gtPlusPlus/core/recipe/RECIPES_Machines.java | 117 + .../java/gtPlusPlus/core/recipe/common/CI.java | 2 +- .../xmod/gregtech/api/enums/GregtechItemList.java | 17 +- .../gui/computer/GT_Container_ComputerCube.java | 207 +- .../gui/computer/GT_GUIContainer_ComputerCube.java | 49 +- .../blocks/GregtechMetaSpecialMultiCasings2.java | 10 +- .../misc/GT_TileEntity_ComputerCube.java | 354 ++- .../assets/miscutils/textures/gui/computer/0.png | Bin 3702 -> 2335 bytes .../assets/miscutils/textures/gui/computer/2.png | Bin 3481 -> 2147 bytes 19 files changed, 676 insertions(+), 3771 deletions(-) delete mode 100644 src/main/java/Ic2ExpReactorPlanner/Bundle.properties delete mode 100644 src/main/java/Ic2ExpReactorPlanner/BundleHelper.java delete mode 100644 src/main/java/Ic2ExpReactorPlanner/Bundle_zh_CN.properties delete mode 100644 src/main/java/Ic2ExpReactorPlanner/MaterialsList.java delete mode 100644 src/main/java/Ic2ExpReactorPlanner/ReactorPlannerFrame.form (limited to 'src/main/java/Ic2ExpReactorPlanner/components') diff --git a/src/main/java/Ic2ExpReactorPlanner/AutomationSimulator.java b/src/main/java/Ic2ExpReactorPlanner/AutomationSimulator.java index 488de59a8d..729642e837 100644 --- a/src/main/java/Ic2ExpReactorPlanner/AutomationSimulator.java +++ b/src/main/java/Ic2ExpReactorPlanner/AutomationSimulator.java @@ -1,8 +1,5 @@ package Ic2ExpReactorPlanner; -import static Ic2ExpReactorPlanner.BundleHelper.formatI18n; -import static Ic2ExpReactorPlanner.BundleHelper.getI18n; - import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; @@ -24,8 +21,6 @@ public class AutomationSimulator { private final GT_TileEntity_ComputerCube mReactor; - private final boolean[][] alreadyBroken = new boolean[6][9]; - private final boolean[][] needsCooldown = new boolean[6][9]; private final int initialHeat; @@ -77,13 +72,11 @@ public class AutomationSimulator { private int lapisUsed = 0; - private final MaterialsList replacedItems = new MaterialsList(); - - private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(getI18n("Simulation.DecimalFormat")); private boolean completed = false; private boolean mRunning = false; + private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#,##0.##"); private final SimulationData data = new SimulationData(); public SimulationData getData() { @@ -116,7 +109,7 @@ public class AutomationSimulator { int totalRodCount = 0; publish(""); // NOI18N - publish(getI18n("Simulation.Started")); + publish("Simulation.Started"); reactor.setCurrentHeat(initialHeat); reactor.clearVentedHeat(); double minReactorHeat = initialHeat; @@ -241,40 +234,34 @@ public class AutomationSimulator { calculateHeatingCooling(reactorTicks); handleAutomation(reactorTicks); - handleBrokenComponents(reactorTicks, totalHeatOutput, totalRodCount, totalEUoutput, minReactorHeat, maxReactorHeat); } if (hasStopped()) { - publish(formatI18n("Simulation.CancelledAtTick", reactorTicks)); + publish("Simulation.CancelledAtTick", reactorTicks); } data.minTemp = (int) minReactorHeat; data.maxTemp = (int) maxReactorHeat; - publish(formatI18n("Simulation.ReactorMinTemp", minReactorHeat)); - publish(formatI18n("Simulation.ReactorMaxTemp", maxReactorHeat)); + publish("Simulation.ReactorMinTemp", minReactorHeat); + publish("Simulation.ReactorMaxTemp", maxReactorHeat); if (reactor.getCurrentHeat() < reactor.getMaxHeat()) { - publish(formatI18n("Simulation.TimeWithoutExploding", reactorTicks)); + publish("Simulation.TimeWithoutExploding", reactorTicks); if (reactor.isPulsed()) { String rangeString = ""; if (maxActiveTime > minActiveTime) { - rangeString = formatI18n("Simulation.ActiveTimeRange", minActiveTime, maxActiveTime); + rangeString = rangeString("Simulation.ActiveTimeRange", minActiveTime, maxActiveTime); } else if (minActiveTime < activeTime) { - rangeString = formatI18n("Simulation.ActiveTimeSingle", minActiveTime); + rangeString = "Simulation.ActiveTimeSingle "+minActiveTime; } - publish(formatI18n("Simulation.ActiveTime", activeTime, rangeString)); + publish("Simulation.ActiveTime", activeTime, rangeString); rangeString = ""; if (maxInactiveTime > minInactiveTime) { - rangeString = formatI18n("Simulation.InactiveTimeRange", minInactiveTime, maxInactiveTime); + rangeString = rangeString("Simulation.InactiveTimeRange", minInactiveTime, maxInactiveTime); } else if (minInactiveTime < inactiveTime) { - rangeString = formatI18n("Simulation.InactiveTimeSingle", minInactiveTime); + rangeString = "Simulation.InactiveTimeSingle " + minInactiveTime; } - publish(formatI18n("Simulation.InactiveTime", inactiveTime, rangeString)); - } - final String replacedItemsString = replacedItems.toString(); - if (!replacedItemsString.isEmpty()) { - data.replacedItems = new MaterialsList(replacedItems); - publish(formatI18n("Simulation.ComponentsReplaced", replacedItemsString)); + publish("Simulation.InactiveTime", inactiveTime, rangeString); } if (reactorTicks > 0) { @@ -285,10 +272,10 @@ public class AutomationSimulator { data.minHUoutput = 2 * minHeatOutput; data.maxHUoutput = (int) (2 * maxHeatOutput); if (totalHeatOutput > 0) { - publish(formatI18n("Simulation.HeatOutputs", DECIMAL_FORMAT.format(40 * totalHeatOutput), DECIMAL_FORMAT.format(2 * totalHeatOutput / reactorTicks), DECIMAL_FORMAT.format(2 - * minHeatOutput), DECIMAL_FORMAT.format(2 * maxHeatOutput))); + publish("Simulation.HeatOutputs", DECIMAL_FORMAT.format(40 * totalHeatOutput), DECIMAL_FORMAT.format(2 * totalHeatOutput / reactorTicks), DECIMAL_FORMAT.format(2 + * minHeatOutput), DECIMAL_FORMAT.format(2 * maxHeatOutput)); if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalHeatOutput / reactorTicks / 4 / totalRodCount, minHeatOutput / 4 / totalRodCount, maxHeatOutput / 4 / totalRodCount)); + publish("Simulation.Efficiency", totalHeatOutput / reactorTicks / 4 / totalRodCount, minHeatOutput / 4 / totalRodCount, maxHeatOutput / 4 / totalRodCount); } } } @@ -298,17 +285,17 @@ public class AutomationSimulator { data.minEUoutput = minEUoutput / 20.0; data.maxEUoutput = (int) (maxEUoutput / 20.0); if (totalEUoutput > 0) { - publish(formatI18n("Simulation.EUOutputs", DECIMAL_FORMAT.format(totalEUoutput), DECIMAL_FORMAT.format(totalEUoutput / (reactorTicks * 20)), DECIMAL_FORMAT.format(minEUoutput - / 20.0), DECIMAL_FORMAT.format(maxEUoutput / 20.0))); + publish("Simulation.EUOutputs", DECIMAL_FORMAT.format(totalEUoutput), DECIMAL_FORMAT.format(totalEUoutput / (reactorTicks * 20)), DECIMAL_FORMAT.format(minEUoutput + / 20.0), DECIMAL_FORMAT.format(maxEUoutput / 20.0)); if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalEUoutput / reactorTicks / 100 / totalRodCount, minEUoutput / 100 / totalRodCount, maxEUoutput / 100 / totalRodCount)); + publish("Simulation.Efficiency", totalEUoutput / reactorTicks / 100 / totalRodCount, minEUoutput / 100 / totalRodCount, maxEUoutput / 100 / totalRodCount); } } } } if (reactor.getCurrentHeat() > 0.0) { - publish(formatI18n("Simulation.ReactorRemainingHeat", reactor.getCurrentHeat())); + publish("Simulation.ReactorRemainingHeat", reactor.getCurrentHeat()); } double prevReactorHeat = reactor.getCurrentHeat(); double prevTotalComponentHeat = 0.0; @@ -319,13 +306,13 @@ public class AutomationSimulator { if (component.getCurrentHeat() > 0.0) { prevTotalComponentHeat += component.getCurrentHeat(); publish(String.format("R%dC%d:0xFFA500", row, col)); // NOI18N - component.info.append(formatI18n("ComponentInfo.RemainingHeat", component.getCurrentHeat())); + component.info.append("ComponentInfo.RemainingHeat " + component.getCurrentHeat()); } } } } if (prevReactorHeat == 0.0 && prevTotalComponentHeat == 0.0) { - publish(getI18n("Simulation.NoCooldown")); + publish("Simulation.NoCooldown"); } else if (reactor.getCurrentHeat() < reactor.getMaxHeat()) { double currentTotalComponentHeat = prevTotalComponentHeat; @@ -360,7 +347,7 @@ public class AutomationSimulator { if (component != null && !component.isBroken()) { currentTotalComponentHeat += component.getCurrentHeat(); if (component.getCurrentHeat() == 0.0 && needsCooldown[row][col]) { - component.info.append(formatI18n("ComponentInfo.CooldownTime", cooldownTicks)); + component.info.append("ComponentInfo.CooldownTime " + cooldownTicks); needsCooldown[row][col] = false; } } @@ -370,17 +357,17 @@ public class AutomationSimulator { while (lastHeatOutput > 0 && cooldownTicks < 50000); if (reactor.getCurrentHeat() < reactor.getMaxHeat()) { if (reactor.getCurrentHeat() == 0.0) { - publish(formatI18n("Simulation.ReactorCooldownTime", reactorCooldownTime)); + publish("Simulation.ReactorCooldownTime", reactorCooldownTime); } else if (reactorCooldownTime > 0) { - publish(formatI18n("Simulation.ReactorResidualHeat", reactor.getCurrentHeat(), reactorCooldownTime)); + publish("Simulation.ReactorResidualHeat", reactor.getCurrentHeat(), reactorCooldownTime); } - publish(formatI18n("Simulation.TotalCooldownTime", cooldownTicks)); + publish("Simulation.TotalCooldownTime", cooldownTicks); } } } else { - publish(formatI18n("Simulation.ReactorOverheatedTime", reactorTicks)); + publish("Simulation.ReactorOverheatedTime", reactorTicks); explosionPower = 10.0; double explosionPowerMult = 1.0; for (int row = 0; row < 6; row++) { @@ -393,7 +380,7 @@ public class AutomationSimulator { } } explosionPower *= explosionPowerMult; - publish(formatI18n("Simulation.ExplosionPower", explosionPower)); + publish("Simulation.ExplosionPower", explosionPower); } double totalEffectiveVentCooling = 0.0; double totalVentCoolingCapacity = 0.0; @@ -405,81 +392,82 @@ public class AutomationSimulator { ReactorItem component = reactor.getComponentAt(row, col); if (component != null) { if (component.getVentCoolingCapacity() > 0) { - component.info.append(formatI18n("ComponentInfo.UsedCooling", component.getBestVentCooling(), component.getVentCoolingCapacity())); + component.info.append("ComponentInfo.UsedCooling " + component.getBestVentCooling() + " | " + component.getVentCoolingCapacity()); totalEffectiveVentCooling += component.getBestVentCooling(); totalVentCoolingCapacity += component.getVentCoolingCapacity(); } else if (component.getBestCellCooling() > 0) { - component.info.append(formatI18n("ComponentInfo.ReceivedHeat", component.getBestCellCooling())); + component.info.append("ComponentInfo.ReceivedHeat " + component.getBestCellCooling()); totalCellCooling += component.getBestCellCooling(); } else if (component.getBestCondensatorCooling() > 0) { - component.info.append(formatI18n("ComponentInfo.ReceivedHeat", component.getBestCondensatorCooling())); + component.info.append("ComponentInfo.ReceivedHeat " + component.getBestCondensatorCooling()); totalCondensatorCooling += component.getBestCondensatorCooling(); } else if (component.getMaxHeatGenerated() > 0) { if (!reactor.isFluid() && component.getMaxEUGenerated() > 0) { - component.info.append(formatI18n("ComponentInfo.GeneratedEU", component.getMinEUGenerated(), component.getMaxEUGenerated())); + component.info.append("ComponentInfo.GeneratedEU " + component.getMinEUGenerated() + " | " + component.getMaxEUGenerated()); } - component.info.append(formatI18n("ComponentInfo.GeneratedHeat", component.getMinHeatGenerated(), component.getMaxHeatGenerated())); + component.info.append("ComponentInfo.GeneratedHeat " + component.getMinHeatGenerated() + " | " + component.getMaxHeatGenerated()); } if (component.getMaxReachedHeat() > 0) { - component.info.append(formatI18n("ComponentInfo.ReachedHeat", component.getMaxReachedHeat(), component.getMaxHeat())); + component.info.append("ComponentInfo.ReachedHeat " + component.getMaxReachedHeat() + " | " + component.getMaxHeat()); } } } } // if (totalVentCoolingCapacity > 0) { - // publish(formatI18n("Simulation.TotalVentCooling", - // totalEffectiveVentCooling, totalVentCoolingCapacity)); + // publish("Simulation.TotalVentCooling", + // totalEffectiveVentCooling, totalVentCoolingCapacity); // } showHeatingCooling(reactorTicks); // Call to show this info in case it // hasn't already been shown, such // as for an automated reactor. if (totalCellCooling > 0) { - publish(formatI18n("Simulation.TotalCellCooling", totalCellCooling)); + publish("Simulation.TotalCellCooling", totalCellCooling); } if (totalCondensatorCooling > 0) { - publish(formatI18n("Simulation.TotalCondensatorCooling", totalCondensatorCooling)); + publish("Simulation.TotalCondensatorCooling", totalCondensatorCooling); } if (maxGeneratedHeat > 0) { - publish(formatI18n("Simulation.MaxHeatGenerated", maxGeneratedHeat)); + publish("Simulation.MaxHeatGenerated", maxGeneratedHeat); } if (redstoneUsed > 0) { - publish(formatI18n("Simulation.RedstoneUsed", redstoneUsed)); + publish("Simulation.RedstoneUsed", redstoneUsed); } if (lapisUsed > 0) { - publish(formatI18n("Simulation.LapisUsed", lapisUsed)); + publish("Simulation.LapisUsed", lapisUsed); } // double totalCooling = totalEffectiveVentCooling + totalCellCooling + // totalCondensatorCooling; // if (totalCooling >= maxGeneratedHeat) { - // publish(formatI18n("Simulation.ExcessCooling", totalCooling - - // maxGeneratedHeat)); + // publish("Simulation.ExcessCooling", totalCooling - + // maxGeneratedHeat); // } else { - // publish(formatI18n("Simulation.ExcessHeating", maxGeneratedHeat - - // totalCooling)); + // publish("Simulation.ExcessHeating", maxGeneratedHeat - + // totalCooling); // } // return null; /* catch (Throwable e) { if (cooldownTicks == 0) { - publish(formatI18n("Simulation.ErrorReactor", reactorTicks)); + publish("Simulation.ErrorReactor", reactorTicks); } else { - publish(formatI18n("Simulation.ErrorCooldown", cooldownTicks)); + publish("Simulation.ErrorCooldown", cooldownTicks); } - publish(e.toString(), " ", Arrays.toString(e.getStackTrace())); // NO18N + publish(e.toString(), " ", Arrays.toString(e.getStackTrace()); // NO18N }*/ data.explosionPower = (int) explosionPower; data.totalReactorTicks = reactorTicks; long endTime = System.nanoTime(); - publish(formatI18n("Simulation.ElapsedTime", (endTime - startTime) / 1e9)); + publish("Simulation.ElapsedTime", (endTime - startTime) / 1e9); mRunning = false; completed = true; } + public boolean hasStopped() { return !mRunning; } @@ -488,88 +476,6 @@ public class AutomationSimulator { return mRunning; } - private void handleBrokenComponents(final int reactorTicks, final double totalHeatOutput, final int totalRodCount, final double totalEUoutput, final double minReactorHeat, final double maxReactorHeat) { - for (int row = 0; row < 6; row++) { - for (int col = 0; col < 9; col++) { - ReactorItem component = reactor.getComponentAt(row, col); - if (component != null && component.isBroken() && !alreadyBroken[row][col]) { - alreadyBroken[row][col] = true; - if (component.getRodCount() == 0) { - publish(String.format("R%dC%d:0xFF0000", row, col)); // NOI18N - component.info.append(formatI18n("ComponentInfo.BrokeTime", reactorTicks)); - if (componentsIntact) { - componentsIntact = false; - data.firstComponentBrokenTime = reactorTicks; - data.firstComponentBrokenRow = row; - data.firstComponentBrokenCol = col; - data.firstComponentBrokenDescription = component.toString(); - publish(formatI18n("Simulation.FirstComponentBrokenDetails", component.toString(), row, col, reactorTicks)); - if (reactor.isFluid()) { - data.prebreakTotalHUoutput = 40 * totalHeatOutput; - data.prebreakAvgHUoutput = 2 * totalHeatOutput / reactorTicks; - data.prebreakMinHUoutput = 2 * minHeatOutput; - data.prebreakMaxHUoutput = 2 * maxHeatOutput; - publish(formatI18n("Simulation.HeatOutputsBeforeBreak", DECIMAL_FORMAT.format(40 * totalHeatOutput), DECIMAL_FORMAT.format(2 * totalHeatOutput - / reactorTicks), DECIMAL_FORMAT.format(2 * minHeatOutput), DECIMAL_FORMAT.format(2 * maxHeatOutput))); - if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalHeatOutput / reactorTicks / 4 / totalRodCount, minHeatOutput / 4 / totalRodCount, maxHeatOutput / 4 - / totalRodCount)); - } - } - else { - data.prebreakTotalEUoutput = totalEUoutput; - data.prebreakAvgEUoutput = totalEUoutput / (reactorTicks * 20); - data.prebreakMinEUoutput = minEUoutput / 20.0; - data.prebreakMaxEUoutput = maxEUoutput / 20.0; - publish(formatI18n("Simulation.EUOutputsBeforeBreak", DECIMAL_FORMAT.format(totalEUoutput), DECIMAL_FORMAT.format(totalEUoutput - / (reactorTicks * 20)), DECIMAL_FORMAT.format(minEUoutput / 20.0), DECIMAL_FORMAT.format(maxEUoutput / 20.0))); - if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalEUoutput / reactorTicks / 100 / totalRodCount, minEUoutput / 100 / totalRodCount, maxEUoutput / 100 - / totalRodCount)); - } - } - } - } - else if (!anyRodsDepleted) { - anyRodsDepleted = true; - data.firstRodDepletedTime = reactorTicks; - data.firstRodDepletedRow = row; - data.firstRodDepletedCol = col; - data.firstRodDepletedDescription = component.toString(); - publish(formatI18n("Simulation.FirstRodDepletedDetails", component.toString(), row, col, reactorTicks)); - if (reactor.isFluid()) { - data.predepleteTotalHUoutput = 40 * totalHeatOutput; - data.predepleteAvgHUoutput = 2 * totalHeatOutput / reactorTicks; - data.predepleteMinHUoutput = 2 * minHeatOutput; - data.predepleteMaxHUoutput = 2 * maxHeatOutput; - publish(formatI18n("Simulation.HeatOutputsBeforeDepleted", DECIMAL_FORMAT.format(40 * totalHeatOutput), DECIMAL_FORMAT.format(2 * totalHeatOutput - / reactorTicks), DECIMAL_FORMAT.format(2 * minHeatOutput), DECIMAL_FORMAT.format(2 * maxHeatOutput))); - if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalHeatOutput / reactorTicks / 4 / totalRodCount, minHeatOutput / 4 / totalRodCount, maxHeatOutput / 4 / totalRodCount)); - } - } - else { - data.predepleteTotalEUoutput = totalEUoutput; - data.predepleteAvgEUoutput = totalEUoutput / (reactorTicks * 20); - data.predepleteMinEUoutput = minEUoutput / 20.0; - data.predepleteMaxEUoutput = maxEUoutput / 20.0; - publish(formatI18n("Simulation.EUOutputsBeforeDepleted", DECIMAL_FORMAT.format(totalEUoutput), DECIMAL_FORMAT.format(totalEUoutput - / (reactorTicks * 20)), DECIMAL_FORMAT.format(minEUoutput / 20.0), DECIMAL_FORMAT.format(maxEUoutput / 20.0))); - if (totalRodCount > 0) { - publish(formatI18n("Simulation.Efficiency", totalEUoutput / reactorTicks / 100 / totalRodCount, minEUoutput / 100 / totalRodCount, maxEUoutput / 100 / totalRodCount)); - } - } - data.predepleteMinTemp = minReactorHeat; - data.predepleteMaxTemp = maxReactorHeat; - publish(formatI18n("Simulation.ReactorMinTempBeforeDepleted", minReactorHeat)); - publish(formatI18n("Simulation.ReactorMaxTempBeforeDepleted", maxReactorHeat)); - } - showHeatingCooling(reactorTicks); - } - } - } - } - private void handleAutomation(final int reactorTicks) { for (int row = 0; row < 6; row++) { for (int col = 0; col < 9; col++) { @@ -578,8 +484,7 @@ public class AutomationSimulator { if (component.getMaxHeat() > 1) { if (component.getAutomationThreshold() > component.getInitialHeat() && component.getCurrentHeat() >= component.getAutomationThreshold()) { component.clearCurrentHeat(); - replacedItems.add(component.name); - component.info.append(formatI18n("ComponentInfo.ReplacedTime", reactorTicks)); + component.info.append("ComponentInfo.ReplacedTime | " + reactorTicks); if (component.getReactorPause() > 0) { active = false; pauseTimer = Math.max(pauseTimer, component.getReactorPause()); @@ -590,8 +495,7 @@ public class AutomationSimulator { } else if (component.getAutomationThreshold() < component.getInitialHeat() && component.getCurrentHeat() <= component.getAutomationThreshold()) { component.clearCurrentHeat(); - replacedItems.add(component.name); - component.info.append(formatI18n("ComponentInfo.ReplacedTime", reactorTicks)); + component.info.append("ComponentInfo.ReplacedTime | " +reactorTicks); if (component.getReactorPause() > 0) { active = false; pauseTimer = Math.max(pauseTimer, component.getReactorPause()); @@ -603,8 +507,7 @@ public class AutomationSimulator { } else if (component.isBroken() || (component.getMaxDamage() > 1 && component.getCurrentDamage() >= component.getAutomationThreshold())) { component.clearDamage(); - replacedItems.add(component.name); - component.info.append(formatI18n("ComponentInfo.ReplacedTime", reactorTicks)); + component.info.append("ComponentInfo.ReplacedTime | " +reactorTicks); if (component.getReactorPause() > 0) { active = false; pauseTimer = Math.max(pauseTimer, component.getReactorPause()); @@ -629,32 +532,32 @@ public class AutomationSimulator { private void checkReactorTemperature(final int reactorTicks) { if (reactor.getCurrentHeat() < 0.5 * reactor.getMaxHeat() && !reachedBelow50 && reachedEvaporate) { - publish(formatI18n("Simulation.TimeToBelow50", reactorTicks)); + publish("Simulation.TimeToBelow50", reactorTicks); reachedBelow50 = true; data.timeToBelow50 = reactorTicks; } if (reactor.getCurrentHeat() >= 0.4 * reactor.getMaxHeat() && !reachedBurn) { - publish(formatI18n("Simulation.TimeToBurn", reactorTicks)); + publish("Simulation.TimeToBurn", reactorTicks); reachedBurn = true; data.timeToBurn = reactorTicks; } if (reactor.getCurrentHeat() >= 0.5 * reactor.getMaxHeat() && !reachedEvaporate) { - publish(formatI18n("Simulation.TimeToEvaporate", reactorTicks)); + publish("Simulation.TimeToEvaporate", reactorTicks); reachedEvaporate = true; data.timeToEvaporate = reactorTicks; } if (reactor.getCurrentHeat() >= 0.7 * reactor.getMaxHeat() && !reachedHurt) { - publish(formatI18n("Simulation.TimeToHurt", reactorTicks)); + publish("Simulation.TimeToHurt", reactorTicks); reachedHurt = true; data.timeToHurt = reactorTicks; } if (reactor.getCurrentHeat() >= 0.85 * reactor.getMaxHeat() && !reachedLava) { - publish(formatI18n("Simulation.TimeToLava", reactorTicks)); + publish("Simulation.TimeToLava", reactorTicks); reachedLava = true; data.timeToLava = reactorTicks; } if (reactor.getCurrentHeat() >= reactor.getMaxHeat() && !reachedExplode) { - publish(formatI18n("Simulation.TimeToXplode", reactorTicks)); + publish("Simulation.TimeToXplode", reactorTicks); reachedExplode = true; data.timeToXplode = reactorTicks; } @@ -698,25 +601,54 @@ public class AutomationSimulator { data.ventCooling = totalVentCooling / (reactorTicks - 20); data.ventCoolingCapacity = totalVentCoolingCapacity; if (totalHullHeating > 0) { - publish(formatI18n("Simulation.HullHeating", totalHullHeating / (reactorTicks - 20))); + publish("Simulation.HullHeating", totalHullHeating / (reactorTicks - 20)); } if (totalComponentHeating > 0) { - publish(formatI18n("Simulation.ComponentHeating", totalComponentHeating / (reactorTicks - 20))); + publish("Simulation.ComponentHeating", totalComponentHeating / (reactorTicks - 20)); } if (totalHullCoolingCapacity > 0) { - publish(formatI18n("Simulation.HullCooling", totalHullCooling / (reactorTicks - 20), totalHullCoolingCapacity)); + publish("Simulation.HullCooling | " +totalHullCooling / (reactorTicks - 20), totalHullCoolingCapacity); } if (totalVentCoolingCapacity > 0) { - publish(formatI18n("Simulation.VentCooling", totalVentCooling / (reactorTicks - 20), totalVentCoolingCapacity)); + publish("Simulation.VentCooling | " +totalVentCooling / (reactorTicks - 20), totalVentCoolingCapacity); } } } } + + private void publish(String string, double currentHeat, int reactorCooldownTime) { + publish(string + " | "+currentHeat+" | "+reactorCooldownTime); + } + private void publish(String string, double d, double e, double f) { + publish(string + " | "+d+" | "+e+" | "+f); + } + + private void publish(String string, String format, String format2, String format3, String format4) { + publish(string + " | "+format+" | "+format2+" | "+format3+" | "+format4); + } + + private void publish(String string, int activeTime2, String rangeString) { + publish(string + " | "+activeTime2+" | "+rangeString); + } + + private void publish(String aString, double aData) { + publish(aString+":"+aData); + } + + private void publish(String aString, long aData) { + publish(aString+":"+aData); + } + private void publish(String aString) { output.add(aString); + } + + private String rangeString(String string, int aMin, int aMax) { + return string+" ("+aMin+"-"+aMax+")"; } + protected void process(List chunks) { /* for (String chunk : chunks) { diff --git a/src/main/java/Ic2ExpReactorPlanner/Bundle.properties b/src/main/java/Ic2ExpReactorPlanner/Bundle.properties deleted file mode 100644 index b20587693f..0000000000 --- a/src/main/java/Ic2ExpReactorPlanner/Bundle.properties +++ /dev/null @@ -1,411 +0,0 @@ - -# Comparison keys are for comparing two simulated reactors. Instead of being in -# in a TextArea like the main simulation, the comparison will be in a JLabel, wrapped -# in html tags, to allow color coding of the text more easily. - -Comparison.CompareDecimalFormat=+#,##0.##;-# -Comparison.ComponentHeating=Component heating: %s (%s/%s)
-Comparison.ComponentsHeading=Components:
-Comparison.ComponentsReplacedHeading=Components replaced:
-Comparison.Default=Please run at least two simulations (preferably with different reactor designs) to get a comparison. -Comparison.EUEUoutput=total output: %s (%s/%s) EU (%s EU/t average (%s/%s), %s EU/t min (%s/%s), %s EU/t max (%s/%s))
-Comparison.EUHUoutput=total output: %s EU / %s HU (%s EU/t / %s HU/t average, %s EU/t / %s HU/t min, %s EU/t / %s HU/t max)
-Comparison.Header=Most recent simulated reactor (left, in-grid) compared to previous simulated reactor (right, in-tab): -Comparison.HUEUoutput=total output: %s HU / %s EU (%s HU/t / %s EU/t average, %s HU/t / %s EU/t min, %s HU/t / %s EU/t max)
-Comparison.HUHUoutput=total output: %s (%s/%s) HU (%s HU/t average (%s/%s), %s HU/t min (%s/%s), %s HU/t max (%s/%s))
-Comparison.HullCooling=Hull cooling: %s (%s/%s)
-Comparison.HullCoolingPossible=Possible hull cooling: %s (%s/%s)
-Comparison.HullHeating=Hull heating: %s (%s/%s)
-Comparison.MaterialsEntry=%s %s (%s/%s)
-Comparison.MaterialsHeading=Materials:
-Comparison.NoDifferences=No significant differences detected. -Comparison.PostsimMaxTemp=Reactor maximum temperature: %s (%s/%s)
-Comparison.PostsimMinTemp=Reactor minimum temperature: %s (%s/%s)
-Comparison.PredepleteMaxTemp=Reactor maximum temperature (before first fuel rod depleted): %s (%s/%s)
-Comparison.PredepleteMinTemp=Reactor minimum temperature (before first fuel rod depleted): %s (%s/%s)
-Comparison.Prefix.PostSimulation=After simulation,\u0020 -Comparison.Prefix.PostSimulationTime=Time simulated:\u0020 -Comparison.Prefix.Prebreak=Before first component broken,\u0020 -Comparison.Prefix.PrebreakTime=Time to first component break:\u0020 -Comparison.Prefix.Predeplete=Before first rod depleted,\u0020 -Comparison.Prefix.PredepleteTime=Time to first rod depletion:\u0020 -Comparison.Prefix.TimeToBelow50=Time to below 50%% heat (after being above it):\u0020 -Comparison.Prefix.TimeToBurn=Time to "Burn" temperature:\u0020 -Comparison.Prefix.TimeToEvaporate=Time to "Evaporate" temperature:\u0020 -Comparison.Prefix.TimeToHurt=Time to "Hurt" temperature:\u0020 -Comparison.Prefix.TimeToLava=Time to "Lava" temperature:\u0020 -Comparison.Prefix.TimeToXplode=Time to explode:\u0020 -Comparison.SimpleDecimalFormat=#,##0.## -Comparison.Time.Both=%+,d seconds (%d/%d)
-Comparison.Time.BothColored=%+,d seconds (%d/%d)
-Comparison.Time.LeftOnly=%d/\u221e
-Comparison.Time.RightOnly=\u221e/%d
-Comparison.VentCooling=Vent cooling: %s (%s/%s)
-Comparison.VentCoolingPossible=Possible vent cooling: %s (%s/%s)
- -# ComponentData keys are for providing extra details in the tooltips for the component palette. -# Suggested by kekzdealer in Pull Request: https://github.com/MauveCloud/Ic2ExpReactorPlanner/pull/67 -# but heavily modified since. - -ComponentData.AdvancedHeatExchanger=Heat Capacity: 10,000
Hull Exchange Rate: 8 heat/s
Component Exchange Rate: 24 heat/s -ComponentData.AdvancedHeatVent=Heat Capacity: 1,000
Self Venting Rate: 12 heat/s -ComponentData.ComponentHeatExchanger=Heat Capacity: 5,000
Component Exchange Rate: 36 heat/s -ComponentData.ComponentHeatVent=Component Venting Rate: 4 heat/s -ComponentData.ContainmentReactorPlating=Dampens explosions -ComponentData.CoolantCell10k=Heat Capacity: 10,000 -ComponentData.CoolantCell180kHelium=Heat Capacity: 180,000 -ComponentData.CoolantCell180kNak=Heat Capacity: 180,000 -ComponentData.CoolantCell30k=Heat Capacity: 30,000 -ComponentData.CoolantCell360kHelium=Heat Capacity: 360,000 -ComponentData.CoolantCell360kNak=Heat Capacity: 360,000 -ComponentData.CoolantCell60k=Heat Capacity: 60,000 -ComponentData.CoolantCell60kHelium=Heat Capacity: 60,000 -ComponentData.CoolantCell60kNak=Heat Capacity: 60,000 -ComponentData.CoolantCell180kSpace=Heat Capacity: 180,000 -ComponentData.CoolantCell360kSpace=Heat Capacity: 360,000 -ComponentData.CoolantCell540kSpace=Heat Capacity: 540,000 -ComponentData.CoolantCell1080kSpace=Heat Capacity: 1080,000 -ComponentData.DualFuelRodCesium=Generation Time: 10,861 seconds
EU Generation: 40/60/80/100/120 /t
Heat Generation: 6/12/20/30/42 /s -ComponentData.DualFuelRodCoaxium=Generation Time: 20,000 seconds
EU Generation: 20/30/40/50/60 /t
Heat Generation: 0 /s -ComponentData.DualFuelRodMox=Generation Time: 10,000 seconds
EU Generation: [20,100)/[30,150)/[40,200)/[50,250)/[60,300) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 24/48/80/120/168 /s
Heat Generation in fluid reactor when hull temperature>50%: 48/96/160/240/336 /s -ComponentData.DualFuelRodNaquadah=Generation Time: 100,000 seconds
EU Generation: [40,100)/[60,150)/[80,200)/[100,250)/[120,300) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 24/48/80/120/168 /s
Heat Generation in fluid reactor when hull temperature>50%: 48/96/160/240/336 /s -ComponentData.DualFuelRodNaquadahGTNH=Generation Time: 100,000 seconds
EU Generation: 20/30/40/50/60 /t
Heat Generation: 24/48/80/120/168 /s -ComponentData.DualFuelRodNaquadria=Generation Time: 100,000 seconds
EU Generation: [40,100)/[60,150)/[80,200)/[100,250)/[120,300) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 24/48/80/120/168 /s
Heat Generation in fluid reactor when hull temperature>50%: 48/96/160/240/336 /s -ComponentData.DualFuelRodThorium=Generation Time: 50,000 seconds
EU Generation: 4/6/8/10/12 /t
Heat Generation: 6/12/20/30/42 /s -ComponentData.DualFuelRodTiberium=Generation Time: 50,000 seconds
EU Generation: 10/20/30/40/50 /t
Heat Generation: 12/24/40/60/84 /s -ComponentData.DualFuelRodUranium=Generation Time: 20,000 seconds
EU Generation: 20/30/40/50/60 /t
Heat Generation: 24/48/80/120/168 /s -ComponentData.FuelRodCesium=Generation Time: 10,861 seconds
EU Generation: 10/20/30/40/50 /t
Heat Generation: 1/3/8/10/15 /s -ComponentData.FuelRodCoaxium=Generation Time: 20,000 seconds
EU Generation: 5/10/15/20/25 /t
Heat Generation: 0 /s -ComponentData.FuelRodMox=Generation Time: 10,000 seconds
EU Generation: [5,25)/[10,50)/[15,75)/[20,100)/[25,125) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 4/12/24/40/60 /s
Heat Generation in fluid reactor when hull temperature>50%: 8/24/48/80/120 /s -ComponentData.FuelRodNaquadah=Generation Time: 100,000 seconds
EU Generation: [10,25)/[20,50)/[30,75)/[40,100)/[50,125) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 4/12/24/40/60 /s
Heat Generation in fluid reactor when hull temperature>50%: 8/24/48/80/120 /s -ComponentData.FuelRodNaquadahGTNH=Generation Time: 100,000 seconds
EU Generation: 5/10/15/20/25 /t
Heat Generation: 4/12/24/40/60 /s -ComponentData.FuelRodNaquadria=Generation Time: 100,000 seconds
EU Generation: [10,25)/[20,50)/[30,75)/[40,100)/[50,125) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 4/12/24/40/60 /s
Heat Generation in fluid reactor when hull temperature>50%: 8/24/48/80/120 /s -ComponentData.FuelRodTheCore=Generation Time: 100,000 seconds
EU Generation: 10880 /t
Heat Generation: 19584 /s -ComponentData.FuelRodThorium=Generation Time: 50,000 seconds
EU Generation: 1/2/3/4/5 /t
Heat Generation: 1/3/6/10/15 /s -ComponentData.FuelRodTiberium=Generation Time: 50,000 seconds
EU Generation: 5/10/15/20/25 /t
Heat Generation: 2/6/12/20/30 /s -ComponentData.FuelRodUranium=Generation Time: 20,000 seconds
EU Generation: 5/10/15/20/25 /t
Heat Generation: 4/12/24/40/60 /s -ComponentData.HeatCapacityReactorPlating=Increases maximum heat capacity -ComponentData.HeatExchanger=Heat Capacity: 2,500
Hull Exchange Rate: 4 heat/s
Component Exchange Rate: 12 heat/s -ComponentData.HeatVent=Heat Capacity: 1,000
Self Venting Rate: 6 heat/s -ComponentData.IridiumNeutronReflector=Durability: Infinite -ComponentData.LzhCondensator=Heat Capacity: 100,000
Cannot be vented from. -ComponentData.NeutronReflector=Durability: 30,000 (10,000 in MC 1.7.10) -ComponentData.OverclockedHeatVent=Heat Capacity: 1,000
Self Venting Rate: 20 heat/s
Hull Cooling Rate: 36 heat/s -ComponentData.QuadFuelRodCesium=Generation Time: 10,861 seconds
EU Generation: 120/160/200/240/280 /t
Heat Generation: 24/40/60/84/112 /s -ComponentData.QuadFuelRodCoaxium=Generation Time: 20,000 seconds
EU Generation: 60/80/100/120/140 /t
Heat Generation: 0 /s -ComponentData.QuadFuelRodMox=Generation Time: 10,000 seconds
EU Generation: [60,300)/[80,400)/[100,500)/[120,600)/[140,700) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 96/160/240/336/448 /s
Heat Generation in fluid reactor when hull temperature>50%: 192/320/480/672/896 /s -ComponentData.QuadFuelRodNaquadah=Generation Time: 100,000 seconds
EU Generation: [120,300)/[160,400)/[200,500)/[240,600)/[280,700) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 96/160/240/336/448 /s
Heat Generation in fluid reactor when hull temperature>50%: 192/320/480/672/896 /s -ComponentData.QuadFuelRodNaquadahGTNH=Generation Time: 100,000 seconds
EU Generation: 60/80/100/120/140 /t
Heat Generation: 96/160/240/336/448 /s -ComponentData.QuadFuelRodNaquadria=Generation Time: 100,000 seconds
EU Generation: [120,300)/[160,400)/[200,500)/[240,600)/[280,700) /t - scales linearly with hull temperature.
Heat Generation in EU reactor or when hull temperature<=50%: 96/160/240/336/448 /s
Heat Generation in fluid reactor when hull temperature>50%: 192/320/480/672/896 /s -ComponentData.QuadFuelRodThorium=Generation Time: 50,000 seconds
EU Generation: 12/16/20/24/28 /t
Heat Generation: 24/40/60/84/112 /s -ComponentData.QuadFuelRodTiberium=Generation Time: 50,000 seconds
EU Generation: 60/80/100/120/140 /t
Heat Generation: 48/80/120/168/224 /s -ComponentData.QuadFuelRodUranium=Generation Time: 20,000 seconds
EU Generation: 60/80/100/120/140 /t
Heat Generation: 96/160/240/336/448 /s -ComponentData.ReactorHeatExchanger=Heat Capacity: 5,000
Hull Exchange Rate: 72 heat/s -ComponentData.ReactorHeatVent=Heat Capacity: 1,000
Self Venting Rate: 5 heat/s
Hull Cooling Rate: 5 heat/s -ComponentData.ReactorPlating=Crafting component for Containment and Heat-Capacity Reactor Plating -ComponentData.RshCondensator=Heat Capacity: 20,000
Cannot be vented from. -ComponentData.ThickNeutronReflector=Durability: 120,000 (40,000 in MC 1.7.10) - -# ComponentInfo keys are for updating information about a component during a simulation. - -ComponentInfo.BrokeTime=\nBroke after %,d seconds. -ComponentInfo.CooldownTime=\nTook %,d seconds to cool down. -ComponentInfo.GeneratedEU=\nGenerated %,.2f to %,.2f EU per second. -ComponentInfo.GeneratedHeat=\nGenerated %,.0f to %,.0f heat per second. -ComponentInfo.ReachedHeat=\nReached up to %,.0f of %,.0f heat. -ComponentInfo.ReceivedHeat=\nReceived at most %,.0f heat per second. -ComponentInfo.RemainingHeat=\nHad %,.0f heat left after main simulation stopped. -ComponentInfo.ReplacedTime=\nReplaced at %,d seconds. -ComponentInfo.ResidualHeat=\nHad %,.0f heat left after cooldown period. -ComponentInfo.UsedCooling=\nUsed %,.0f of %,.0f cooling. - - -# Keys for component names were originally matched to class names, to allow using reflection to look them up. -# However, refactoring eliminated the "one class for each component type" idea. -# These keys will be used both in the reactor area and the component selection area. - -ComponentName.AdvancedHeatExchanger=Advanced Heat Exchanger -ComponentName.AdvancedHeatVent=Advanced Heat Vent -ComponentName.ComponentHeatExchanger=Component Heat Exchanger -ComponentName.ComponentHeatVent=Component Heat Vent -ComponentName.ContainmentReactorPlating=Containment Reactor Plating -ComponentName.CoolantCell10k=10k Coolant Cell -ComponentName.CoolantCell1080kSpace=1080k Space Coolant Cell -ComponentName.CoolantCell180kHelium=180k He Coolant Cell -ComponentName.CoolantCell180kNak=180k NaK Coolant Cell -ComponentName.CoolantCell180kSpace=180k Space Coolant Cell -ComponentName.CoolantCell30k=30k Coolant Cell -ComponentName.CoolantCell360kHelium=360k He Coolant Cell -ComponentName.CoolantCell360kNak=360k NaK Coolant Cell -ComponentName.CoolantCell360kSpace=360k Space Coolant Cell -ComponentName.CoolantCell540kSpace=540k Space Coolant Cell -ComponentName.CoolantCell60k=60k Coolant Cell -ComponentName.CoolantCell60kHelium=60k He Coolant Cell -ComponentName.CoolantCell60kNak=60k NaK Coolant Cell -ComponentName.DualFuelRodCesium=Dual Fuel Rod (Cesium) -ComponentName.DualFuelRodCoaxium=Dual Fuel Rod (Coaxium) -ComponentName.DualFuelRodMox=Dual Fuel Rod (MOX) -ComponentName.DualFuelRodNaquadah=Dual Fuel Rod (Naquadah) -ComponentName.DualFuelRodNaquadahGTNH=Dual Fuel Rod (Naquadah) -ComponentName.DualFuelRodNaquadria=Dual Fuel Rod (Naquadria) -ComponentName.DualFuelRodThorium=Dual Fuel Rod (Thorium) -ComponentName.DualFuelRodTiberium=Dual Fuel Rod (Tiberium) -ComponentName.DualFuelRodUranium=Dual Fuel Rod (Uranium) -ComponentName.FuelRodCesium=Fuel Rod (Cesium) -ComponentName.FuelRodCoaxium=Fuel Rod (Coaxium) -ComponentName.FuelRodMox=Fuel Rod (MOX) -ComponentName.FuelRodNaquadah=Fuel Rod (Naquadah) -ComponentName.FuelRodNaquadahGTNH=Fuel Rod (Naquadah) -ComponentName.FuelRodNaquadria=Fuel Rod (Naquadria) -ComponentName.FuelRodTheCore=Fuel Rod (The Core) -ComponentName.FuelRodThorium=Fuel Rod (Thorium) -ComponentName.FuelRodTiberium=Fuel Rod (Tiberium) -ComponentName.FuelRodUranium=Fuel Rod (Uranium) -ComponentName.HeatCapacityReactorPlating=Heat-Capacity Reactor Plating -ComponentName.HeatExchanger=Heat Exchanger -ComponentName.HeatVent=Heat Vent -ComponentName.IridiumNeutronReflector=Iridium Neutron Reflector -ComponentName.LzhCondensator=LZH-Condensator -ComponentName.NeutronReflector=Neutron Reflector -ComponentName.OverclockedHeatVent=Overclocked Heat Vent -ComponentName.QuadFuelRodCesium=Quad Fuel Rod (Cesium) -ComponentName.QuadFuelRodCoaxium=Quad Fuel Rod (Coaxium) -ComponentName.QuadFuelRodMox=Quad Fuel Rod (MOX) -ComponentName.QuadFuelRodNaquadah=Quad Fuel Rod (Naquadah) -ComponentName.QuadFuelRodNaquadahGTNH=Quad Fuel Rod (Naquadah) -ComponentName.QuadFuelRodNaquadria=Quad Fuel Rod (Naquadria) -ComponentName.QuadFuelRodThorium=Quad Fuel Rod (Thorium) -ComponentName.QuadFuelRodTiberium=Quad Fuel Rod (Tiberium) -ComponentName.QuadFuelRodUranium=Quad Fuel Rod (Uranium) -ComponentName.ReactorHeatExchanger=Reactor Heat Exchanger -ComponentName.ReactorHeatVent=Reactor Heat Vent -ComponentName.ReactorPlating=Reactor Plating -ComponentName.RshCondensator=RSH-Condensator -ComponentName.ThickNeutronReflector=Thick Neutron Reflector - -ComponentTooltip.Broken=Broke during last simulation -ComponentTooltip.ResidualHeat=Had residual heat after last simulation - -Config.CSVCheckbox=Output CSV Data -Config.CSVLimit=For how many simulated seconds: -Config.EUReactor=EU Reactor -Config.FluidReactor=Fluid Reactor -Config.InitialComponentHeat=Initial Heat: -Config.NoComponentSelected=No component selected -Config.OffPulse=Off-pulse duration: -Config.OnPulse=On-pulse duration: -Config.PlacingReactorPause=Reactor Pause: -Config.PlacingReplacementThreshold=Threshold: -Config.PulseHelp=(on-pulse can be set to 5 million to mimic having no redstone timing) -Config.ReactorCoolantInjectors=Use Reactor Coolant Injectors (MC 1.8+ only) -Config.ReactorPause=Reactor Pause (seconds): -Config.ReactorPauseHelp=(This is how long the reactor will pause while replacing this component) -Config.ReplacementThreshold=Replacement Threshold: -Config.ReplacementThresholdHelp=(Set higher than component's initial heat/damage to replace the component when it gets this hot/damaged, or lower to replace a component that has cooled; broken components will be replaced during automation runs regardless of this setting) -Config.ResumeTemp=Resume when reactor temp <= -# Same language string should be usable anywhere "seconds" appears. -Config.Seconds=seconds -Config.SimulationStyle=Simulation Style: -Config.SuspendTemp=Suspend when reactor temp >= -Config.SuspendTempHelp=(both temps can be set to match explode temp to mimic having no temperature control) - -CSVData.EntryComponentValue=,"%.2f" -CSVData.EntryComponentOutput=,%.0f -CSVData.EntryCoreHeat=,%.0f -CSVData.EntryEUOutput=,"%.2f" -CSVData.EntryHUOutput=,%.0f -CSVData.EntryReactorTick=%d -CSVData.HeaderComponentName=,%s (R%dC%d) -CSVData.HeaderComponentOutput=,%s (R%dC%d) Output -CSVData.HeaderCoreHeat=,Core Heat -CSVData.HeaderEUOutput=,EU Output -CSVData.HeaderHUOutput=,HU Output -CSVData.HeaderReactorTick=Reactor Time - -MaterialName.AdvancedAlloy=Advanced Alloy -MaterialName.AdvancedCircuit=Advanced Circuit -MaterialName.Aluminium=Aluminium -MaterialName.BasicCircuit=Basic Circuit -MaterialName.Beryllium=Beryllium -MaterialName.Bronze=Bronze -MaterialName.CallistoIceDust=Callisto Ice Dust -MaterialName.CesiumFuel=Cesium-Enriched Nuclear Fuel -MaterialName.Coal=Coal -MaterialName.CoaxiumFuel=Coaxium-Enriched Nuclear Fuel -MaterialName.Copper=Copper -MaterialName.Diamond=Diamond -MaterialName.DistilledWater=Distilled Water -MaterialName.EmptyCell=Empty Cell -MaterialName.EnrichedNaquadah=Enriched Naquadah -MaterialName.FluxedElectrum=Fluxed Electrum -MaterialName.Glass=Glass -MaterialName.GlowstoneDust=Glowstone Dust -MaterialName.Gold=Gold -MaterialName.Graphite=Graphite -MaterialName.Helium==Helium -MaterialName.Iridium=Iridium -MaterialName.IridiumReinforcedPlate=Iridium Reinforced Plate -MaterialName.Iron=Iron -MaterialName.LapisLazuli=Lapis Lazuli -MaterialName.Lead=Lead -MaterialName.LedoxDust=Ledox Dust -MaterialName.MoxFuel=MOX Fuel -MaterialName.Naquadria=Naquadria -MaterialName.Platinum=Platinum -MaterialName.Potassium=Potassium -MaterialName.Redstone=Redstone -MaterialName.ReinforcedGlass=Reinforced Glass -MaterialName.Rubber=Rubber -MaterialName.Sodium=Sodium -MaterialName.Thorium=Thorium -MaterialName.Tiberium=Tiberium -MaterialName.Tungsten=Tungsten -MaterialName.Tin=Tin -MaterialName.UraniumFuel=Uranium Fuel - -# %s at the end of this string is for optionally showing the range of active time. -Simulation.ActiveTime=Reactor was active for a total of %,d seconds%s.\n -Simulation.ActiveTimeRange=\u0020(%,d to %,d seconds at a time) -Simulation.ActiveTimeSingle=\u0020(%,d seconds at a time) -Simulation.CancelledAtTick=Simulation cancelled after simulating %,d seconds.\n -Simulation.ComponentHeating=Component heating: %.2f average.\n -Simulation.ComponentsReplaced=Components replaced:\n%s -Simulation.CSVOpenFailure=Failed to open CSV file for output.\n -Simulation.CycleCompleteTime=Cycle complete after %,d seconds.\n -# This will be used to optionally show extra precision, in format strings where %s is used when %.2f might otherwise be expected. -Simulation.DecimalFormat=#,##0.## -Simulation.Efficiency=Efficiency: %.2f average, %.2f minimum, %.2f maximum\n -Simulation.ElapsedTime=Simulation took %.2f seconds.\n -Simulation.ErrorCooldown=Error %,d simulated seconds into cooldown.\n -Simulation.ErrorReactor=Error after simulating %d seconds of reactor activity\n -Simulation.EUOutputs=Total output after full simulation: %s EU (%s EU/t average, %s EU/t min, %s EU/t max)\n -Simulation.EUOutputsBeforeDepleted=Total output before first fuel rod depleted: %s EU (%s EU/t average, %s EU/t min, %s EU/t max)\n -Simulation.EUOutputsBeforeBreak=Total output before first component broken: %s EU (%s EU/t average, %s EU/t min, %s EU/t max)\n -Simulation.ExcessCooling=Excess cooling: %.2f\n -Simulation.ExcessHeating=Excess heating: %.2f\n -Simulation.ExplosionPower=Raw explosion power: %,.2f\n -Simulation.FirstComponentBrokenDetails=First Component Broken: %s at row %d column %d, at %d seconds.\n -Simulation.FirstRodDepletedDetails=First Fuel Rod Depleted: %s at row %d column %d, at %d seconds.\n -Simulation.FuelRodsTime=Fuel rods (if any) stopped after %,d seconds.\n -Simulation.HeatOutputs=Total output after full simulation: %s HU (%s HU/t average, %s HU/t minimum, %s HU/t max)\n -Simulation.HeatOutputsBeforeBreak=Total output before first component broken: %s HU (%s HU/t average, %s HU/t minimum, %s HU/t max)\n -Simulation.HeatOutputsBeforeDepleted=Total output before first fuel rod depleted: %s HU (%s HU/t average, %s HU/t minimum, %s HU/t max)\n -Simulation.HullCooling=Hull cooling: %,.2f average of %,.0f possible.\n -Simulation.HullHeating=Hull heating: %,.2f average.\n -Simulation.InactiveTime=Reactor was inactive for a total of %,d seconds%s.\n -Simulation.InactiveTimeRange=\u0020(%,d to %,d seconds at a time) -Simulation.InactiveTimeSingle=\u0020(%,d seconds at a time) -Simulation.LapisUsed=Used %d Lapis Lazuli Blocks.\n -Simulation.MaxHeatGenerated=Max heat generated (internally, by fuel rods): %,.0f\n -Simulation.NoCooldown=No cooldown needed.\n -Simulation.NoFuelRods=No fuel rods found! Simulating a pulsed cycle makes no sense! -Simulation.ReactorCooldownTime=Reactor took %,d seconds to cool down.\n -Simulation.ReactorHeatBuildup=Reactor heat buildup per second (while all components are intact):%,.0f minimum, %,.0f maximum.\n -Simulation.ReactorMaxTemp=Reactor maximum temperature: %,.0f\n -Simulation.ReactorMaxTempBeforeDepleted=Reactor maximum temperature (before first fuel rod depleted): %,.0f\n -Simulation.ReactorMinTemp=Reactor minimum temperature: %,.0f\n -Simulation.ReactorMinTempBeforeDepleted=Reactor minimum temperature (before first fuel rod depleted): %,.0f\n -Simulation.ReactorOverheatedTime=Reactor overheated at %,d seconds.\n -Simulation.ReactorRemainingHeat=Reactor remained at %,.0f heat after main simulation finished.\n -Simulation.ReactorResidualHeat=Reactor remained at %,.0f heat even after cool down period of %,d seconds.\n -Simulation.RedstoneUsed=Used %d Blocks of Redstone.\n -Simulation.Started=Simulation started.\n -Simulation.TimeToBelow50=Reactor will dip below 50%% heat for the first time (after being above it) at %d seconds.\n -Simulation.TimeToBurn=Reactor will reach "Burn" temperature at %d seconds.\n -Simulation.TimeToEvaporate=Reactor will reach "Evaporate" temperature at %d seconds.\n -Simulation.TimeToHurt=Reactor will reach "Hurt" temperature at %d seconds.\n -Simulation.TimeToLava=Reactor will reach "Lava" temperature at %d seconds.\n -# Note: The "e" is deliberately dropped from "Explode" in the key name so that it will sort after the others. -Simulation.TimeToXplode=Reactor will explode at %d seconds.\n -Simulation.TimeWithoutExploding=\nReactor ran for %,d seconds without exploding.\n -Simulation.TotalCellCooling=Total Cell Cooling (peak usages): %,.2f\n -Simulation.TotalCondensatorCooling=Total Condensator Cooling (peak usages): %,.2f\n -Simulation.TotalCooldownTime=Other components took %,d seconds to cool down (as much as they would).\n -Simulation.TotalVentCooling=Total Vent Cooling (peak usages, theoretical maximum): %,.2f of %,.2f\n -Simulation.VentCooling=Vent cooling: %,.2f average of %,.0f possible.\n - -UI.AdvancedTab=Advanced -#Needs to be heavily abbreviated to fit on the button. -UI.AutomateButton=a -UI.AutomateButtonFont=Arial 10 -UI.AutomatedReactor=Automated Reactor -UI.AutomatedReactorTooltip=Turn on to allow automating of adding/removing of components. -UI.AutomationTooltip=Click to define automation rules for this component. -UI.CancelButton=Cancel -UI.ChosenComponentRowCol=%s at row %d column %d -UI.ClearGridButton=Clear Grid -UI.CodeLabel=Code: -UI.ComparisonTab=Comparison -UI.ComponentAutomationTab=Component Automation -#Needs to be heavily abbreviated to fit on the button. -UI.ComponentInfoButton=i -UI.ComponentInfoButtonFont=Arial 10 -UI.ComponentInfoButtonTooltip=Click for information about this component -UI.ComponentInfoDefault=Please run a simulation and select a component in the reactor grid above to see its details. -UI.ComponentInfoLastSimRowCol=%s at row %d column %d\n%s -UI.ComponentListTab=Component List -UI.ComponentPlacingDefault=Placing Component: None -UI.ComponentPlacingSpecific=Placing Component: %s -UI.ComponentTab=Component -UI.CopyCodeButton=Copy Code -UI.CopyComparisonData=Copy Comparison Data -UI.CSVBrowseButton=Browse -UI.CSVFileDefault=No File Selected -UI.CSVHelp=Warnings:
  1. Simulation will likely run much slower with CSV Output enabled, especially if the chosen file is on a mechanical hard drive.
  2. User is responsible for making sure target drive has enough space for the CSV file.
  3. Additional simulations will overwrite the CSV file unless the target is manually changed.
-UI.CSVTab=CSV -UI.EnableGT508Components=Enable GT 5.08 Components -UI.EnableGT509Components=Enable GT 5.09 Components -UI.ExpandAdvancedAlloy=Expand Advanced Alloy into constituent materials (invalid when using GregTech) -UI.GregTechVersion=GregTech Version: -UI.GregTechVersionNone=None -UI.GTReactorBehavior=GT 5.09 = (2x base EU). GTNH = (10x base EU, Naq Rods->not-MOX-like). Setting always applies to -only fuel rods regardless. -UI.InitialHeatDisplay=\u0020(initial heat: %,d) -UI.InitialReactorHeat=Initial Reactor Heat: -UI.InitialReactorHeatTooltip=Use this to set a heat value for testing MOX-like reactors. -UI.LockInTabCode=Lock in-tab code -UI.MainTitle=IC2 Experimental Reactor Planner -UI.MaterialDecimalFormat=#,##0.## -UI.MaterialsTab=Materials -UI.MaxHeatDefault=/10,000 -UI.MaxHeatSpecific=/%,.0f -UI.MaxSimulationTicks=Maximum time to simulate: -UI.MaxSimulationTicksTooltip=Forces simulation to stop after simulating this much time, even if reactor hasn't exploded or ceased outputting HU or EU. -UI.MinecraftVersion=Minecraft Version: -UI.NoComponentLastSimRowCol=No component at row %d column %d during last simulation. -UI.NoComponentRowCol=No component at row %d column %d. -UI.NoSimulationRun=No simulation run yet. -UI.OnlyShowDiffData=Only show data that is significantly different -UI.PasteCodeButton=Paste Code -UI.PulseConfigurationTab=Pulse Configuration -UI.PulsedReactor=Pulsed Reactor -UI.RemoveAddonComponentsTitle=Add-on Components Found -UI.RemoveGT508ComponentsText=GT 5.08 components found in current design. Remove them? -UI.RemoveGT509ComponentsText=GT 5.09 components found in current design. Remove them? -UI.ResetPulseConfig=Reset Pulse Configuration -UI.ShowComponentDetailButtons=Show Component Detail Buttons -UI.ShowComponentPreconfigControls=Show Component Pre-configuration Controls -UI.ShowOldStyleReactorCode=Show old-style (pre-2.3.1) reactor code -UI.SimulateButton=Simulate -UI.SimulationTab=Simulation -UI.SimulationTypeAutomation=Pulsed Automation -UI.SimulationTypePulsed=Pulsed Cycle -UI.SimulationTypeSimple=Simple Cycle -UI.TemperatureEffectsDefault=Burn: 4,000 Evaporate: 5,000 Hurt: 7,000 Lava: 8,500 Explode: 10,000 -UI.TemperatureEffectsSpecific=Burn: %,d Evaporate: %,d Hurt: %,d Lava: %,d Explode: %,d -UI.TexturePackBrowseButton=Browse -UI.TexturePackClearButton=Clear -UI.TexturePackDefault=Texture Pack: no file selected -UI.TexturePackHelp=(restart planner to see new textures) -UI.TexturePackSpecific=Texture Pack: %s -UI.UseGTRecipes=Use GregTech recipes for component materials (where applicable and unambiguous) -UI.UseUfcForCoolantCells=Use Universal Fluid Cells for coolant (incompatible with GregTech recipes option) -UI.VersionNumber=Version %s - -Warning.DepletedIsotope=Obsolete component (depleted isotope cell) at row %d column %d removed.\n -Warning.DualPlutonium=Obsolete component (dual plutonium cell) at row %d column %d removed.\n -Warning.Heating=Obsolete component (heating cell) at row %d column %d removed.\n -Warning.InvalidReactorCode=Invalid Reactor Code: %s -Warning.Plutonium=Obsolete component (plutonium cell) at row %d column %d removed.\n -Warning.QuadPlutonium=Obsolete component (quad plutonium cell) at row %d column %d removed.\n -Warning.Title=Warning(s) -Warning.Unrecognized=Unrecognized component (id %d) at row %d column %d removed.\n diff --git a/src/main/java/Ic2ExpReactorPlanner/BundleHelper.java b/src/main/java/Ic2ExpReactorPlanner/BundleHelper.java deleted file mode 100644 index 8bbc9aab45..0000000000 --- a/src/main/java/Ic2ExpReactorPlanner/BundleHelper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package Ic2ExpReactorPlanner; - -import java.util.ResourceBundle; - -/** - * Utility class to handle handle access to the planner's resource bundle. - * Methods may be static-imported, and hopefully this will make the code more - * concise, but not to the point of obfuscation. - * @author Brian McCloud - */ -public class BundleHelper { - - private BundleHelper() { - // private no-op constructor to prevent instantiation. - } - - private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("Ic2ExpReactorPlanner/Bundle"); - - /** - * Looks up a key in the planner's resource bundle. - * @param key the key to look up in the resource bundle. - * @return the value from the resource bundle for the default locale of the system the planner is being run on. - */ - public static String getI18n(String key) { - return BUNDLE.getString(key); - } - - /** - * Uses a resource bundle entry as a format specifier. - * @param key the key to look up in the resource bundle. - * @param args the arguments to use in String.format. - * @return the formatted string. - */ - public static String formatI18n(String key, Object... args) { - return String.format(getI18n(key), args); - } - -} diff --git a/src/main/java/Ic2ExpReactorPlanner/Bundle_zh_CN.properties b/src/main/java/Ic2ExpReactorPlanner/Bundle_zh_CN.properties deleted file mode 100644 index b3d5076fb2..0000000000 --- a/src/main/java/Ic2ExpReactorPlanner/Bundle_zh_CN.properties +++ /dev/null @@ -1,373 +0,0 @@ - -# Comparison keys are for comparing two simulated reactors. Instead of being in -# in a TextArea like the main simulation, the comparison will be in a JLabel, wrapped -# in html tags, to allow color coding of the text more easily. - -Comparison.CompareDecimalFormat=+#,##0.##;-# -Comparison.ComponentHeating=\u5143\u4ef6\u4ea7\u70ed: %s (%s/%s)
-Comparison.ComponentsHeading=\u5143\u4ef6:
-Comparison.ComponentsReplacedHeading=\u66f4\u6362\u5143\u4ef6:
-Comparison.Default=\u8bf7\u81f3\u5c11\u8fd0\u884c\u4e24\u6b21\u6a21\u62df (\u6700\u597d\u4f7f\u7528\u4e0d\u540c\u7684\u53cd\u5e94\u5806\u8bbe\u8ba1) \u4ee5\u8fdb\u884c\u6bd4\u8f83. -Comparison.EUEUoutput=\u603b\u4ea7\u80fd: %s (%s/%s) EU (\u5e73\u5747: %s EU/t (%s/%s), \u6700\u5c0f: %s EU/t (%s/%s), \u6700\u5927: %s EU/t (%s/%s))
-Comparison.EUHUoutput=\u603b\u4ea7\u80fd/\u4ea7\u70ed: %s EU / %s HU (\u5e73\u5747: %s EU/t / %s HU/t, \u6700\u5c0f: %s EU/t / %s HU/t, \u6700\u5927: %s EU/t / %s HU/t)
-Comparison.Header=\u8fd9\u4e00\u6b21\u6a21\u62df (\u5de6\u4fa7, \u4e3b\u4ee3\u7801) \u4e0e\u4e0a\u4e00\u6b21\u6a21\u62df (\u53f3\u4fa7, \u6807\u7b7e\u5185\u4ee3\u7801) \u76f8\u6bd4\u8f83: -Comparison.HUEUoutput=\u603b\u4ea7\u70ed/\u4ea7\u80fd: %s HU / %s EU (\u5e73\u5747: %s HU/t / %s EU/t, \u6700\u5c0f: %s HU/t / %s EU/t, \u6700\u5927: %s HU/t / %s EU/t)
-Comparison.HUHUoutput=\u603b\u4ea7\u70ed: %s (%s/%s) HU (\u5e73\u5747: %s HU/t (%s/%s), \u6700\u5c0f: %s HU/t (%s/%s), \u6700\u5927: %s HU/t (%s/%s))
-Comparison.HullCooling=\u5916\u58f3\u51b7\u5374: %s (%s/%s)
-Comparison.HullCoolingPossible=\u53ef\u80fd\u7684\u5916\u58f3\u51b7\u5374: %s (%s/%s)
-Comparison.HullHeating=\u5916\u58f3\u4ea7\u70ed: %s (%s/%s)
-Comparison.MaterialsEntry=%s %s (%s/%s)
-Comparison.MaterialsHeading=\u6750\u6599:
-Comparison.NoDifferences=\u672a\u68c0\u6d4b\u5230\u660e\u663e\u5dee\u5f02. -Comparison.PostsimMaxTemp=\u53cd\u5e94\u5806\u6700\u9ad8\u6e29\u5ea6: %s (%s/%s)
-Comparison.PostsimMinTemp=\u53cd\u5e94\u5806\u6700\u4f4e\u6e29\u5ea6: %s (%s/%s)
-Comparison.PredepleteMaxTemp=\u53cd\u5e94\u5806\u6700\u9ad8\u6e29\u5ea6 (\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d): %s (%s/%s)
-Comparison.PredepleteMinTemp=\u53cd\u5e94\u5806\u6700\u4f4e\u6e29\u5ea6 (\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d): %s (%s/%s)
-Comparison.Prefix.PostSimulation=\u6a21\u62df\u540e,\u0020 -Comparison.Prefix.PostSimulationTime=\u6a21\u62df\u65f6\u95f4:\u0020 -Comparison.Prefix.Prebreak=\u5728\u7b2c\u4e00\u4e2a\u5143\u4ef6\u635f\u574f\u4e4b\u524d,\u0020 -Comparison.Prefix.PrebreakTime=\u7b2c\u4e00\u6b21\u5143\u4ef6\u635f\u574f\u7684\u65f6\u95f4:\u0020 -Comparison.Prefix.Predeplete=\u5728\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d,\u0020 -Comparison.Prefix.PredepleteTime=\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u65f6\u95f4:\u0020 -Comparison.Prefix.TimeToBelow50=\u8fbe\u5230\u70ed\u91cf\u964d\u81f3 50%% \u4ee5\u4e0b\u7684\u65f6\u95f4 (\u5728\u9ad8\u4e8e 50%% \u4e4b\u540e):\u0020 -Comparison.Prefix.TimeToBurn=\u8fbe\u5230 "\u71c3\u70e7" \u6e29\u5ea6\u7684\u65f6\u95f4:\u0020 -Comparison.Prefix.TimeToEvaporate=\u8fbe\u5230 "\u84b8\u53d1" \u6e29\u5ea6\u7684\u65f6\u95f4:\u0020 -Comparison.Prefix.TimeToHurt=\u8fbe\u5230 "\u4f24\u5bb3" \u6e29\u5ea6\u7684\u65f6\u95f4:\u0020 -Comparison.Prefix.TimeToLava=\u8fbe\u5230 "\u7194\u5316" \u6e29\u5ea6\u7684\u65f6\u95f4:\u0020 -Comparison.Prefix.TimeToXplode=\u8fbe\u5230\u7206\u70b8\u7684\u65f6\u95f4:\u0020 -Comparison.SimpleDecimalFormat=#,##0.## -Comparison.Time.Both=%+,d \u79d2 (%d/%d)
-Comparison.Time.BothColored=%+,d \u79d2 (%d/%d)
-Comparison.Time.LeftOnly=%d/\u221e
-Comparison.Time.RightOnly=\u221e/%d
-Comparison.VentCooling=\u6563\u70ed\u7247\u51b7\u5374: %s (%s/%s)
-Comparison.VentCoolingPossible=\u53ef\u80fd\u7684\u6563\u70ed\u7247\u51b7\u5374: %s (%s/%s)
- -# ComponentData keys are for providing extra details in the tooltips for the component palette. -# Suggested by kekzdealer in Pull Request: https://github.com/MauveCloud/Ic2ExpReactorPlanner/pull/67 -# but heavily modified since. - -ComponentData.AdvancedHeatExchanger=\u70ed\u5bb9\u91cf: 10,000
\u53cd\u5e94\u5806\u70ed\u4ea4\u6362\u7387: 8 heat/s
\u5143\u4ef6\u70ed\u4ea4\u6362\u7387: 24 heat/s -ComponentData.AdvancedHeatVent=\u70ed\u5bb9\u91cf: 1,000
\u81ea\u6563\u70ed\u7387: 12 heat/s -ComponentData.ComponentHeatExchanger=\u70ed\u5bb9\u91cf: 5,000
\u5143\u4ef6\u70ed\u4ea4\u6362\u7387: 36 heat/s -ComponentData.ComponentHeatVent=\u5143\u4ef6\u51b7\u5374\u901f\u5ea6: 4 heat/s -ComponentData.ContainmentReactorPlating=\u964d\u4f4e\u7206\u70b8\u8303\u56f4 -ComponentData.CoolantCell10k=\u70ed\u5bb9\u91cf: 10,000 -ComponentData.CoolantCell180kHelium=\u70ed\u5bb9\u91cf: 180,000 -ComponentData.CoolantCell180kNak=\u70ed\u5bb9\u91cf: 180,000 -ComponentData.CoolantCell30k=\u70ed\u5bb9\u91cf: 30,000 -ComponentData.CoolantCell360kHelium=\u70ed\u5bb9\u91cf: 360,000 -ComponentData.CoolantCell360kNak=\u70ed\u5bb9\u91cf: 360,000 -ComponentData.CoolantCell60k=\u70ed\u5bb9\u91cf: 60,000 -ComponentData.CoolantCell60kHelium=\u70ed\u5bb9\u91cf: 60,000 -ComponentData.CoolantCell60kNak=\u70ed\u5bb9\u91cf: 60,000 -ComponentData.DualFuelRodCesium=\u6301\u7eed\u65f6\u95f4: 10,861 \u79d2
\u4ea7\u51fa EU: 40/60/80/100/120
\u4ea7\u751f\u70ed\u91cf: 6/12/20/30/42 -ComponentData.DualFuelRodCoaxium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 20/30/40/50/60
\u4ea7\u751f\u70ed\u91cf: 0 -ComponentData.DualFuelRodMox=\u6301\u7eed\u65f6\u95f4: 10,000 \u79d2
\u4ea7\u51fa EU: [20,100)/[30,150)/[40,200)/[50,250)/[60,300) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 24/48/80/120/168
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 48/96/160/240/336 -ComponentData.DualFuelRodNaquadah=\u6301\u7eed\u65f6\u95f4: 100,000 \u79d2
\u4ea7\u51fa EU: [40,100)/[60,150)/[80,200)/[100,250)/[120,300) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 24/48/80/120/168
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 48/96/160/240/336 -ComponentData.DualFuelRodThorium=\u6301\u7eed\u65f6\u95f4: 50,000 \u79d2
\u4ea7\u51fa EU: 4/6/8/10/12
\u70ed\u91cf\u4ea7\u751f: 6/12/20/30/42 -ComponentData.DualFuelRodUranium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 20/30/40/50/60
\u4ea7\u751f\u70ed\u91cf: 24/48/80/120/168 -ComponentData.FuelRodCesium=\u6301\u7eed\u65f6\u95f4: 10,861 \u79d2
\u4ea7\u51fa EU: 10/20/30/40/50
\u4ea7\u751f\u70ed\u91cf: 1/3/8/10/15 -ComponentData.FuelRodCoaxium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 5/10/15/20/25
\u4ea7\u751f\u70ed\u91cf: 0 -ComponentData.FuelRodMox=\u6301\u7eed\u65f6\u95f4: 10,000 \u79d2
\u4ea7\u51fa EU: [5,25)/[10,50)/[15,75)/[20,100)/[25,125) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 4/12/24/40/60
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 8/24/48/80/120 -ComponentData.FuelRodNaquadah=\u6301\u7eed\u65f6\u95f4: 100,000 \u79d2
\u4ea7\u51fa EU: [10,25)/[20,50)/[30,75)/[40,100)/[50,125) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 4/12/24/40/60
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 8/24/48/80/120 -ComponentData.FuelRodThorium=\u6301\u7eed\u65f6\u95f4: 50,000 \u79d2
\u4ea7\u51fa EU: 1/2/3/4/5
\u4ea7\u751f\u70ed\u91cf: 1/3/8/10/15 -ComponentData.FuelRodUranium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 5/10/15/20/25
\u4ea7\u751f\u70ed\u91cf: 4/12/24/40/60 -ComponentData.HeatCapacityReactorPlating=\u589e\u52a0\u6700\u5927\u70ed\u5bb9\u91cf -ComponentData.HeatExchanger=\u70ed\u5bb9\u91cf: 2,500
\u53cd\u5e94\u5806\u70ed\u4ea4\u6362\u7387: 4 heat/s
\u5143\u4ef6\u70ed\u4ea4\u6362\u7387: 12 heat/s -ComponentData.HeatVent=\u70ed\u5bb9\u91cf: 1,000
\u81ea\u6563\u70ed\u7387: 6 heat/s -ComponentData.IridiumNeutronReflector=\u8010\u4e45: \u65e0\u9650 -ComponentData.LzhCondensator=\u70ed\u5bb9\u91cf: 100,000
\u65e0\u6cd5\u88ab\u6563\u70ed\u7247\u51b7\u5374. -ComponentData.NeutronReflector=\u8010\u4e45: 30,000 (MC 1.7.10 \u4e2d\u4e3a 10,000) -ComponentData.OverclockedHeatVent=\u70ed\u5bb9\u91cf: 1,000
\u81ea\u6563\u70ed\u7387: 20 heat/s
\u51b7\u5374\u901f\u5ea6: 36 heat/s -ComponentData.QuadFuelRodCesium=\u6301\u7eed\u65f6\u95f4: 10,861 \u79d2
\u4ea7\u51fa EU: 120/160/200/240/280
\u4ea7\u751f\u70ed\u91cf: 24/40/60/84/112 -ComponentData.QuadFuelRodCoaxium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 60/80/100/120/140
\u4ea7\u751f\u70ed\u91cf: 0 -ComponentData.QuadFuelRodMox=\u6301\u7eed\u65f6\u95f4: 10,000 \u79d2
\u4ea7\u51fa EU: [60,300)/[80,400)/[100,500)/[120,600)/[140,700) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 96/160/240/336/448
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 192/320/480/672/896 -ComponentData.QuadFuelRodNaquadah=\u6301\u7eed\u65f6\u95f4: 100,000 \u79d2
\u4ea7\u51fa EU: [120,300)/[160,400)/[200,500)/[240,600)/[280,700) - \u4e0e\u53cd\u5e94\u5806\u6e29\u5ea6\u6210\u7ebf\u6027\u6bd4\u4f8b.
EU \u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6<=50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 96/160/240/336/448
\u6d41\u4f53\u53cd\u5e94\u5806\u6a21\u5f0f\u4e0b, \u5f53\u5916\u58f3\u6e29\u5ea6>50%\u65f6\u7684\u4ea7\u70ed\u6548\u7387: 192/320/480/672/896 -ComponentData.QuadFuelRodThorium=\u6301\u7eed\u65f6\u95f4: 50,000 \u79d2
\u4ea7\u51fa EU: 12/16/20/24/28
\u4ea7\u751f\u70ed\u91cf: 24/40/60/84/112 -ComponentData.QuadFuelRodUranium=\u6301\u7eed\u65f6\u95f4: 20,000 \u79d2
\u4ea7\u51fa EU: 60/80/100/120/140
\u4ea7\u751f\u70ed\u91cf: 96/160/240/336/448 -ComponentData.ReactorHeatExchanger=\u70ed\u5bb9\u91cf: 5,000
\u53cd\u5e94\u5806\u70ed\u4ea4\u6362\u7387: 72 heat/s -ComponentData.ReactorHeatVent=\u70ed\u5bb9\u91cf: 1,000
\u81ea\u6563\u70ed\u7387: 5 heat/s
\u51b7\u5374\u901f\u5ea6: 5 heat/s -ComponentData.ReactorPlating=\u5bc6\u5c01\u53cd\u5e94\u5806\u9694\u70ed\u677f\u4e0e\u9ad8\u70ed\u5bb9\u53cd\u5e94\u5806\u9694\u677f\u7684\u5408\u6210\u6750\u6599 -ComponentData.RshCondensator=\u70ed\u5bb9\u91cf: 20,000
\u65e0\u6cd5\u88ab\u6563\u70ed\u7247\u51b7\u5374. -ComponentData.ThickNeutronReflector=\u8010\u4e45: 120,000 (MC 1.7.10 \u4e2d\u4e3a 40,000) - -# ComponentInfo keys are for updating information about a component during a simulation. - -ComponentInfo.BrokeTime=\n %,d \u79d2\u540e\u635f\u574f. -ComponentInfo.CooldownTime=\n\u51b7\u5374\u4e86 %,d \u79d2. -ComponentInfo.GeneratedEU=\n\u4ea7\u751f %,.2f \u4e8e %,.2f EU/\u79d2. -ComponentInfo.GeneratedHeat=\n\u4ea7\u751f %,.0f \u4e8e %,.0f \u70ed\u91cf/\u79d2. -ComponentInfo.ReachedHeat=\n\u4ea7\u751f %,.0f \u4e8e %,.0f \u70ed\u91cf. -ComponentInfo.ReceivedHeat=\n\u6700\u591a\u4ea7\u751f %,.0f \u70ed\u91cf/\u79d2 -ComponentInfo.RemainingHeat=\n\u6a21\u62df\u505c\u6b62\u540e, \u8fd8\u5269\u4f59 %,.0f \u70ed\u91cf. -ComponentInfo.ReplacedTime=\n \u5728 %,d \u79d2\u540e\u88ab\u66ff\u6362. -ComponentInfo.ResidualHeat=\n\u51b7\u5374\u540e\u8fd8\u6709 %,.0f \u70ed\u91cf. -ComponentInfo.UsedCooling=\n\u4f7f\u7528 %,.0f \u4e8e %,.0f \u51b7\u5374. - - -# Keys for component names were originally matched to class names, to allow using reflection to look them up. -# However, refactoring eliminated the "one class for each component type" idea. -# These keys will be used both in the reactor area and the component selection area. - -ComponentName.AdvancedHeatExchanger=\u9ad8\u7ea7\u70ed\u4ea4\u6362\u5668 -ComponentName.AdvancedHeatVent=\u9ad8\u7ea7\u6563\u70ed\u7247 -ComponentName.ComponentHeatExchanger=\u5143\u4ef6\u70ed\u4ea4\u6362\u5668 -ComponentName.ComponentHeatVent=\u5143\u4ef6\u6563\u70ed\u7247 -ComponentName.ContainmentReactorPlating=\u5bc6\u5c01\u53cd\u5e94\u5806\u9694\u70ed\u677f -ComponentName.CoolantCell10k=10k \u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell180kHelium=180k \u6c26\u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell180kNak=180k \u94a0\u94be\u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell30k=30k \u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell360kHelium=360k \u6c26\u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell360kNak=360k \u94a0\u94be\u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell60k=60k \u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell60kHelium=60k \u6c26\u51b7\u5374\u5355\u5143 -ComponentName.CoolantCell60kNak=60k \u94a0\u94be\u51b7\u5374\u5355\u5143 -ComponentName.DualFuelRodCesium=\u53cc\u8054\u71c3\u6599\u68d2 (\u94ef) -ComponentName.DualFuelRodCoaxium=\u53cc\u8054\u71c3\u6599\u68d2 (Coaxium) -ComponentName.DualFuelRodMox=\u53cc\u8054\u71c3\u6599\u68d2 (MOX) -ComponentName.DualFuelRodNaquadah=\u53cc\u8054\u71c3\u6599\u68d2 (\u7845\u5ca9) -ComponentName.DualFuelRodThorium=\u53cc\u8054\u71c3\u6599\u68d2 (\u948d) -ComponentName.DualFuelRodUranium=\u53cc\u8054\u71c3\u6599\u68d2 (\u94c0) -ComponentName.FuelRodCesium=\u71c3\u6599\u68d2 (\u94ef) -ComponentName.FuelRodCoaxium=\u71c3\u6599\u68d2 (Coaxium) -ComponentName.FuelRodMox=\u71c3\u6599\u68d2 (MOX) -ComponentName.FuelRodNaquadah=\u71c3\u6599\u68d2 (\u7845\u5ca9) -ComponentName.FuelRodThorium=\u71c3\u6599\u68d2 (\u948d) -ComponentName.FuelRodUranium=\u71c3\u6599\u68d2 (\u94c0) -ComponentName.HeatCapacityReactorPlating=\u9ad8\u70ed\u5bb9\u53cd\u5e94\u5806\u9694\u677f -ComponentName.HeatExchanger=\u70ed\u4ea4\u6362\u5668 -ComponentName.HeatVent=\u6563\u70ed\u7247 -ComponentName.IridiumNeutronReflector=\u94f1\u4e2d\u5b50\u53cd\u5c04\u677f -ComponentName.LzhCondensator=\u9752\u91d1\u77f3\u51b7\u51dd\u6a21\u5757 -ComponentName.NeutronReflector=\u4e2d\u5b50\u53cd\u5c04\u677f -ComponentName.OverclockedHeatVent=\u8d85\u9891\u6563\u70ed\u7247 -ComponentName.QuadFuelRodCesium=\u56db\u8054\u71c3\u6599\u68d2 (\u94ef) -ComponentName.QuadFuelRodCoaxium=\u56db\u8054\u71c3\u6599\u68d2 (Coaxium) -ComponentName.QuadFuelRodMox=\u56db\u8054\u71c3\u6599\u68d2 (MOX) -ComponentName.QuadFuelRodNaquadah=\u56db\u8054\u71c3\u6599\u68d2 (\u7845\u5ca9) -ComponentName.QuadFuelRodThorium=\u56db\u8054\u71c3\u6599\u68d2 (\u948d) -ComponentName.QuadFuelRodUranium=\u56db\u8054\u71c3\u6599\u68d2 (\u94c0) -ComponentName.ReactorHeatExchanger=\u53cd\u5e94\u5806\u70ed\u4ea4\u6362\u5668 -ComponentName.ReactorHeatVent=\u53cd\u5e94\u5806\u6563\u70ed\u7247 -ComponentName.ReactorPlating=\u53cd\u5e94\u5806\u9694\u677f -ComponentName.RshCondensator=\u7ea2\u77f3\u51b7\u51dd\u6a21\u5757 -ComponentName.ThickNeutronReflector=\u52a0\u539a\u4e2d\u5b50\u53cd\u5c04\u677f - -ComponentTooltip.Broken=\u4e0a\u6b21\u6a21\u62df\u65f6\u5df2\u635f\u574f -ComponentTooltip.ResidualHeat=\u4e0a\u6b21\u6a21\u62df\u540e\u6709\u4f59\u70ed - -Config.CSVCheckbox=\u8f93\u51fa CSV \u6570\u636e -Config.CSVLimit=\u6a21\u62df\u79d2\u6570: -Config.EUReactor=EU \u53cd\u5e94\u5806 -Config.FluidReactor=\u6d41\u4f53\u53cd\u5e94\u5806 -Config.InitialComponentHeat=\u521d\u59cb\u70ed\u91cf: -Config.NoComponentSelected=\u672a\u9009\u62e9\u5143\u4ef6 -Config.OffPulse=\u8109\u51b2\u7684\u5173\u95ed\u6301\u7eed\u65f6\u95f4: -Config.OnPulse=\u8109\u51b2\u7684\u5f00\u542f\u6301\u7eed\u65f6\u95f4: -Config.PlacingReactorPause=\u53cd\u5e94\u5806\u6682\u505c: -Config.PlacingReplacementThreshold=\u9608\u503c: -Config.PulseHelp=(\u53ef\u4ee5\u5c06\u8109\u51b2\u7684\u5f00\u542f\u6301\u7eed\u65f6\u95f4\u8bbe\u7f6e\u4e3a 5,000,000 \u4ee5\u6a21\u62df\u6ca1\u6709\u7ea2\u77f3\u8ba1\u65f6\u7684\u60c5\u51b5) -Config.ReactorCoolantInjectors=\u4f7f\u7528\u53cd\u5e94\u5806\u51b7\u5374\u6db2\u6ce8\u5165\u5668 (\u4ec5\u9650 MC 1.8 \u4ee5\u4e0a) -Config.ReactorPause=\u53cd\u5e94\u5806\u6682\u505c (\u79d2): -Config.ReactorPauseHelp=(\u8fd9\u662f\u53cd\u5e94\u5806\u5728\u66f4\u6362\u8be5\u5143\u4ef6\u65f6\u6682\u505c\u7684\u65f6\u95f4) -Config.ReplacementThreshold=\u66f4\u6362\u9608\u503c: -Config.ReplacementThresholdHelp=(\u8bbe\u7f6e\u4e3a\u9ad8\u4e8e\u5143\u4ef6\u7684\u521d\u59cb\u70ed\u91cf/\u635f\u574f\u503c, \u4ee5\u5728\u5143\u4ef6\u8fc7\u70ed/\u635f\u574f\u65f6\u66f4\u6362\u8be5\u5143\u4ef6, \u6216\u8bbe\u7f6e\u4e3a\u4f4e\u4e8e\u5143\u4ef6\u7684\u521d\u59cb\u70ed\u91cf/\u635f\u574f\u503c, \u4ee5\u66f4\u6362\u5df2\u51b7\u5374\u7684\u5143\u4ef6; \u65e0\u8bba\u6b64\u8bbe\u7f6e\u5982\u4f55, \u5728\u81ea\u52a8\u5316\u8fd0\u884c\u671f\u95f4, \u90fd\u5c06\u66f4\u6362\u635f\u574f\u7684\u5143\u4ef6) -Config.ResumeTemp=\u6062\u590d\u53cd\u5e94\u5806 \u5f53\u5806\u6e29 <= -# Same language string should be usable anywhere "seconds" appears. -Config.Seconds=\u79d2 -Config.SimulationStyle=\u6a21\u62df\u6837\u5f0f: -Config.SuspendTemp=\u6682\u505c\u53cd\u5e94\u5806 \u5f53\u5806\u6e29 >= -Config.SuspendTempHelp=(\u53ef\u4ee5\u5c06\u4e24\u4e2a\u6e29\u5ea6\u8bbe\u7f6e\u4e3a\u4e0e\u7206\u70b8\u6e29\u5ea6\u5339\u914d, \u4ee5\u6a21\u62df\u6ca1\u6709\u6e29\u5ea6\u63a7\u5236\u7684\u60c5\u51b5) - -CSVData.EntryComponentValue=,"%.2f" -CSVData.EntryComponentOutput=,%.0f -CSVData.EntryCoreHeat=,%.0f -CSVData.EntryEUOutput=,"%.2f" -CSVData.EntryHUOutput=,%.0f -CSVData.EntryReactorTick=%d -CSVData.HeaderComponentName=,%s (R%dC%d) -CSVData.HeaderComponentOutput=,%s (R%dC%d) \u8f93\u51fa -CSVData.HeaderCoreHeat=,\u5806\u82af\u70ed\u91cf -CSVData.HeaderEUOutput=,EU \u8f93\u51fa -CSVData.HeaderHUOutput=,HU \u8f93\u51fa -CSVData.HeaderReactorTick=\u53cd\u5e94\u5806\u65f6\u95f4 - -MaterialName.AdvancedAlloy=\u9ad8\u7ea7\u5408\u91d1 -MaterialName.AdvancedCircuit=\u9ad8\u7ea7\u7535\u8def\u677f -MaterialName.Aluminium=\u94dd -MaterialName.BasicCircuit=\u57fa\u7840\u7535\u8def -MaterialName.Beryllium=\u94cd -MaterialName.Bronze=\u9752\u94dc -MaterialName.CesiumFuel=\u5bcc\u96c6\u94ef\u6838\u71c3\u6599 -MaterialName.Coal=\u7164 -MaterialName.CoaxiumFuel=\u5bcc\u96c6 Coaxium \u6838\u71c3\u6599 -MaterialName.Copper=\u94dc -MaterialName.Diamond=\u94bb\u77f3 -MaterialName.DistilledWater=\u84b8\u998f\u6c34 -MaterialName.EmptyCell=\u7a7a\u5355\u5143 -MaterialName.EnrichedNaquadah=\u5bcc\u96c6\u7845\u5ca9 -MaterialName.Glass=\u73bb\u7483 -MaterialName.GlowstoneDust=\u8424\u77f3\u7c89 -MaterialName.Gold=\u91d1 -MaterialName.Graphite=\u77f3\u58a8 -MaterialName.Helium==\u6c26 -MaterialName.Iridium=\u94f1 -MaterialName.IridiumReinforcedPlate=\u5f3a\u5316\u94f1\u677f -MaterialName.Iron=\u94c1 -MaterialName.LapisLazuli=\u9752\u91d1\u77f3 -MaterialName.Lead=\u94c5 -MaterialName.MoxFuel=MOX \u71c3\u6599 -MaterialName.Potassium=\u94be -MaterialName.Redstone=\u7ea2\u77f3 -MaterialName.Rubber=\u6a61\u80f6 -MaterialName.Sodium=\u94a0 -MaterialName.Thorium=\u948d -MaterialName.Tin=\u9521 -MaterialName.UraniumFuel=\u94c0\u71c3\u6599 - -# %s at the end of this string is for optionally showing the range of active time. -Simulation.ActiveTime=\u53cd\u5e94\u5806\u5904\u4e8e\u542f\u52a8\u72b6\u6001\u7684\u65f6\u95f4\u603b\u8ba1 %,d \u79d2 %s .\n -Simulation.ActiveTimeRange=\u0020(%,d \u5230 %,d \u79d2\u4e00\u6b21) -Simulation.ActiveTimeSingle=\u0020(%,d \u79d2\u4e00\u6b21) -Simulation.CancelledAtTick=\u6a21\u62df %,d \u79d2\u540e\u53d6\u6d88\u6a21\u62df.\n -Simulation.ComponentHeating=\u5143\u4ef6\u4ea7\u70ed: \u5e73\u5747: %.2f .\n -Simulation.ComponentsReplaced=\u66f4\u6362\u7684\u5143\u4ef6:\n%s -Simulation.CSVOpenFailure=\u65e0\u6cd5\u6253\u5f00 CSV \u6587\u4ef6\u8fdb\u884c\u8f93\u51fa.\n -Simulation.CycleCompleteTime=%,d \u79d2\u540e\u5faa\u73af\u5b8c\u6210.\n -# This will be used to optionally show extra precision, in format strings where %s is used when %.2f might otherwise be expected. -Simulation.DecimalFormat=#,##0.## -Simulation.Efficiency=\u6548\u7387: \u5e73\u5747: %.2f , \u6700\u5c0f: %.2f , \u6700\u5927: %.2f \n -Simulation.ElapsedTime=\u6a21\u62df\u8017\u65f6 %.2f \u79d2.\n -Simulation.ErrorCooldown=\u9519\u8bef %,d \u6a21\u62df\u51b7\u5374\u65f6\u95f4.\n -Simulation.ErrorReactor=\u6a21\u62df\u53cd\u5e94\u5806\u542f\u52a8\u7684 %d \u79d2\u540e\u53d1\u751f\u9519\u8bef\n -Simulation.EUOutputs=\u5b8c\u6210\u6a21\u62df\u540e\u7684\u603b\u8f93\u51fa: %s EU (\u5e73\u5747: %s EU/t, \u6700\u5c0f: %s EU/t, \u6700\u5927: %s EU/t)\n -Simulation.EUOutputsBeforeDepleted=\u7b2c\u4e00\u6839\u71c3\u6599\u68d2\u8017\u5c3d\u524d\u7684\u603b\u8f93\u51fa: %s EU (\u5e73\u5747: %s EU/t, \u6700\u5c0f: %s EU/t, \u6700\u5927: %s EU/t)\n -Simulation.EUOutputsBeforeBreak=\u4e00\u4e2a\u5143\u4ef6\u635f\u574f\u524d\u7684\u603b\u8f93\u51fa: %s EU (\u5e73\u5747: %s EU/t, \u6700\u5c0f: %s EU/t, \u6700\u5927: %s EU/t)\n -Simulation.ExcessCooling=\u8fc7\u51b7: %.2f\n -Simulation.ExcessHeating=\u8fc7\u70ed: %.2f\n -Simulation.ExplosionPower=\u7206\u70b8\u5a01\u529b: %,.2f\n -Simulation.FirstComponentBrokenDetails=\u7b2c\u4e00\u4e2a\u5143\u4ef6\u635f\u574f: %s \u7b2c %d \u884c %d \u5217, \u7528\u4e86 %d \u79d2.\n -Simulation.FirstRodDepletedDetails=\u7b2c\u4e00\u6839\u71c3\u6599\u68d2\u8017\u5c3d: %s \u7b2c %d \u884c %d \u5217, \u7528\u4e86 %d \u79d2.\n -Simulation.FuelRodsTime=\u71c3\u6599\u68d2 (\u5982\u679c\u6709) \u5728 %,d \u79d2\u540e\u505c\u6b62.\n -Simulation.HeatOutputs=\u5b8c\u5168\u6a21\u62df\u540e\u7684\u603b\u8f93\u51fa: %s HU (\u5e73\u5747: %s HU/t, \u6700\u5c0f: %s HU/t, \u6700\u5927: %s HU/t)\n -Simulation.HeatOutputsBeforeBreak=\u7b2c\u4e00\u4e2a\u5143\u4ef6\u635f\u574f\u4e4b\u524d\u7684\u603b\u8f93\u51fa: %s HU (\u5e73\u5747: %s HU/t, \u6700\u5c0f: %s HU/t, \u6700\u5927: %s HU/t)\n -Simulation.HeatOutputsBeforeDepleted=\u5728\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d\u7684\u603b\u8f93\u51fa: %s HU (\u5e73\u5747: %s HU/t, \u6700\u5c0f: %s HU/t, \u6700\u5927: %s HU/t)\n -Simulation.HullCooling=\u53cd\u5e94\u5806\u51b7\u5374: %,.2f \u5e73\u5747\u4e8e %,.0f \u53ef\u80fd\u503c.\n -Simulation.HullHeating=\u53cd\u5e94\u5806\u4ea7\u70ed: \u5e73\u5747: %,.2f .\n -Simulation.InactiveTime=\u53cd\u5e94\u5806\u5904\u4e8e\u505c\u6b62\u72b6\u6001\u7684\u65f6\u95f4\u603b\u8ba1 %,d \u79d2 %s .\n -Simulation.InactiveTimeRange=\u0020(%,d \u5230 %,d \u79d2\u4e00\u6b21) -Simulation.InactiveTimeSingle=\u0020(%,d \u79d2\u4e00\u6b21) -Simulation.LapisUsed=\u7528\u4e86 %d \u5757\u9752\u91d1\u77f3.\n -Simulation.MaxHeatGenerated=\u4ea7\u751f\u7684\u6700\u5927\u70ed\u91cf (\u5185\u90e8, \u7531\u71c3\u6599\u68d2\u4ea7\u751f): %,.0f\n -Simulation.NoCooldown=\u4e0d\u9700\u8981\u51b7\u5374.\n -Simulation.NoFuelRods=\u6ca1\u6709\u627e\u5230\u71c3\u6599\u68d2! \u6a21\u62df\u8109\u51b2\u5faa\u73af\u65e0\u610f\u4e49! -Simulation.ReactorCooldownTime=\u53cd\u5e94\u5806\u51b7\u5374\u65f6\u95f4\u4e3a %,d \u79d2.\n -Simulation.ReactorHeatBuildup=\u6bcf\u79d2\u53cd\u5e94\u5806\u70ed\u91cf\u7d2f\u79ef (\u6240\u6709\u5143\u4ef6\u90fd\u5b8c\u597d\u65f6): \u6700\u5c0f: %,.0f , \u6700\u5927: %,.0f .\n -Simulation.ReactorMaxTemp=\u53cd\u5e94\u5806\u6700\u9ad8\u6e29\u5ea6: %,.0f\n -Simulation.ReactorMaxTempBeforeDepleted=\u53cd\u5e94\u5806\u6700\u9ad8\u6e29\u5ea6 (\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d): %,.0f\n -Simulation.ReactorMinTemp=\u53cd\u5e94\u5806\u6700\u4f4e\u6e29\u5ea6: %,.0f\n -Simulation.ReactorMinTempBeforeDepleted=\u53cd\u5e94\u5806\u6700\u4f4e\u6e29\u5ea6 (\u7b2c\u4e00\u4e2a\u71c3\u6599\u68d2\u8017\u5c3d\u4e4b\u524d): %,.0f\n -Simulation.ReactorOverheatedTime=\u53cd\u5e94\u5806\u5728 %,d \u79d2\u65f6\u8fc7\u70ed.\n -Simulation.ReactorRemainingHeat=\u6a21\u62df\u5b8c\u6210\u540e, \u53cd\u5e94\u5806\u7684\u70ed\u91cf\u4fdd\u6301\u5728 %,.0f .\n -Simulation.ReactorResidualHeat=\u53cd\u5e94\u5806\u5728\u51b7\u5374 %,d \u79d2\u540e\u70ed\u91cf\u4ecd\u4fdd\u6301\u5728 %,.0f .\n -Simulation.RedstoneUsed=\u4f7f\u7528\u4e86 %d \u5757\u7ea2\u77f3.\n -Simulation.Started=\u6a21\u62df\u5f00\u59cb.\n -Simulation.TimeToBelow50=\u53cd\u5e94\u5806\u70ed\u91cf\u5c06\u4f1a\u5728 %d \u79d2\u540e\u9996\u6b21\u964d\u81f3 50%% \u4ee5\u4e0b (\u5728\u9ad8\u4e8e 50%% \u4e4b\u540e).\n -Simulation.TimeToBurn=\u53cd\u5e94\u5806\u5c06\u5728 %d \u79d2\u540e\u8fbe\u5230"\u71c3\u70e7"\u6e29\u5ea6.\n -Simulation.TimeToEvaporate=\u53cd\u5e94\u5806\u5c06\u5728 %d \u79d2\u540e\u8fbe\u5230"\u84b8\u53d1"\u6e29\u5ea6.\n -Simulation.TimeToHurt=\u53cd\u5e94\u5806\u5c06\u5728 %d \u79d2\u540e\u8fbe\u5230"\u4f24\u5bb3"\u6e29\u5ea6.\n -Simulation.TimeToLava=\u53cd\u5e94\u5806\u5c06\u5728 %d \u79d2\u540e\u8fbe\u5230"\u7194\u5316"\u6e29\u5ea6.\n -# Note: The "e" is deliberately dropped from "Explode" in the key name so that it will sort after the others. -Simulation.TimeToXplode=\u53cd\u5e94\u5806\u5c06\u5728 %d \u79d2\u5185\u7206\u70b8.\n -Simulation.TimeWithoutExploding=\n\u53cd\u5e94\u5806\u8fd0\u884c %,d \u79d2\u540e\u6ca1\u6709\u7206\u70b8.\n -Simulation.TotalCellCooling=\u603b\u71c3\u6599\u68d2\u51b7\u5374 (\u5cf0\u503c\u4f7f\u7528): %,.2f\n -Simulation.TotalCondensatorCooling=\u51b7\u51dd\u5668\u603b\u51b7\u5374\u91cf (\u5cf0\u503c\u4f7f\u7528\u91cf): %,.2f\n -Simulation.TotalCooldownTime=\u5176\u4ed6\u5143\u4ef6\u9700\u8981 %,d \u79d2\u6765\u51b7\u5374 (\u5c3d\u53ef\u80fd\u591a\u7684\u65f6\u95f4).\n -Simulation.TotalVentCooling=\u603b\u7a7a\u6c14\u51b7\u5374 (\u5cf0\u503c\u7528\u6cd5, \u7406\u8bba\u6700\u5927\u503c): %,.2f \u4e8e %,.2f\n -Simulation.VentCooling=\u6563\u70ed\u7247\u51b7\u5374: %,.2f \u5e73\u5747\u4e8e %,.0f \u53ef\u80fd\u503c.\n - -UI.AdvancedTab=\u9ad8\u7ea7 -#Needs to be heavily abbreviated to fit on the button. -UI.AutomateButton=a -UI.AutomateButtonFont=Arial 10 -UI.AutomatedReactor=\u81ea\u52a8\u5316\u53cd\u5e94\u5806 -UI.AutomationTooltip=\u5355\u51fb\u6b64\u5904\u53ef\u5b9a\u4e49\u6b64\u5143\u4ef6\u7684\u81ea\u52a8\u5316\u89c4\u5219. -UI.CancelButton=\u53d6\u6d88 -UI.ChosenComponentRowCol=%s \u7b2c %d \u884c %d \u5217 -UI.ClearGridButton=\u6e05\u9664 -UI.CodeLabel=\u4ee3\u7801: -UI.ComparisonTab=\u6bd4\u8f83\u65b9\u5f0f -UI.ComponentAutomationTab=\u5143\u4ef6\u81ea\u52a8\u5316 -#Needs to be heavily abbreviated to fit on the button. -UI.ComponentInfoButton=i -UI.ComponentInfoButtonFont=Arial 10 -UI.ComponentInfoButtonTooltip=\u5355\u51fb\u4ee5\u83b7\u53d6\u6709\u5173\u6b64\u5143\u4ef6\u7684\u4fe1\u606f -UI.ComponentInfoDefault=\u8bf7\u8fd0\u884c\u6a21\u62df\u5e76\u9009\u62e9\u4e0a\u9762\u53cd\u5e94\u5806\u7f51\u683c\u4e2d\u7684\u5143\u4ef6\u4ee5\u67e5\u770b\u5176\u8be6\u7ec6\u4fe1\u606f. -UI.ComponentInfoLastSimRowCol=%s \u7b2c %d \u884c %d \u5217\n%s -UI.ComponentListTab=\u5143\u4ef6\u6e05\u5355 -UI.ComponentPlacingDefault=\u653e\u7f6e\u5143\u4ef6: \u65e0 -UI.ComponentPlacingSpecific=\u653e\u7f6e\u5143\u4ef6: %s -UI.ComponentTab=\u5143\u4ef6 -UI.CopyCodeButton=\u590d\u5236\u4ee3\u7801 -UI.CopyComparisonData=\u590d\u5236\u6bd4\u8f83\u6570\u636e -UI.CSVBrowseButton=\u6d4f\u89c8 -UI.CSVFileDefault=\u672a\u9009\u62e9\u6587\u4ef6 -UI.CSVHelp=\u8b66\u544a:
  1. \u542f\u7528 CSV \u8f93\u51fa\u540e, \u6a21\u62df\u8fd0\u884c\u53ef\u80fd\u4f1a\u6162\u5f97\u591a, \u5c24\u5176\u662f\u6240\u9009\u6587\u4ef6\u4f4d\u4e8e\u673a\u68b0\u786c\u76d8\u4e0a\u65f6.
  2. \u7528\u6237\u5e94\u786e\u4fdd\u76ee\u6807\u9a71\u52a8\u5668\u6709\u8db3\u591f\u7684\u7a7a\u95f4\u5bb9\u7eb3 CSV \u6587\u4ef6.
  3. \u9664\u975e\u624b\u52a8\u66f4\u6539\u76ee\u6807, \u5426\u5219\u5176\u4ed6\u6a21\u62df\u5c06\u8986\u76d6 CSV \u6587\u4ef6.
-UI.CSVTab=CSV -UI.EnableGT508Components=\u542f\u7528 GT 5.08 \u5143\u4ef6 -UI.EnableGT509Components=\u542f\u7528 GT 5.09 \u5143\u4ef6 -UI.ExpandAdvancedAlloy=\u5c06\u9ad8\u7ea7\u5408\u91d1\u6269\u5c55\u6210\u5143\u4ef6\u6750\u6599 (\u4f7f\u7528\u683c\u96f7\u79d1\u6280\u65f6\u65e0\u6548) -UI.GregTechVersion=\u683c\u96f7\u79d1\u6280 \u7248\u672c: -UI.GregTechVersionNone=\u65e0 -UI.GT509ReactorBehavior=\u4f7f\u7528 GT 5.09 \u53cd\u5e94\u5806\u7279\u6027 (\u71c3\u6599\u68d2\u4ea7\u751f 2 \u500d\u7684\u57fa\u672c EU \u751f\u6210\u91cf, \u65e0\u8bba\u6b64\u8bbe\u7f6e\u5982\u4f55, \u53ea\u9002\u7528\u4e8e GT 5.09 \u7684\u71c3\u6599\u68d2) -UI.InitialHeatDisplay=\u0020(\u521d\u59cb\u70ed\u91cf: %,d) -UI.InitialReactorHeat=\u53cd\u5e94\u5806\u521d\u59cb\u70ed\u91cf: -UI.LockInTabCode=\u9501\u5b9a\u9009\u9879\u5361\u4ee3\u7801 -UI.MainTitle=\u5de5\u4e1a2 \u5b9e\u9a8c\u7248 \u6838\u7535\u6a21\u62df\u5668 -UI.MaterialDecimalFormat=#,##0.## -UI.MaterialsTab=\u6750\u6599 -UI.MaxHeatDefault=/10,000 -UI.MaxHeatSpecific=/%,.0f -UI.MaxSimulationTicks=\u6700\u5927\u6a21\u62df\u65f6\u95f4: -UI.MaxSimulationTicksTooltip=\u5373\u4f7f\u53cd\u5e94\u5806\u6ca1\u6709\u7206\u70b8\u6216\u505c\u6b62\u8f93\u51fa HU \u6216 EU, \u5728\u957f\u65f6\u95f4\u6a21\u62df\u540e, \u4e5f\u4f1a\u8feb\u4f7f\u6a21\u62df\u505c\u6b62\u3002 -UI.MinecraftVersion=Minecraft \u7248\u672c: -UI.NoComponentLastSimRowCol=\u5728\u4e0a\u6b21\u6a21\u62df\u671f\u95f4\u7b2c %d \u884c %d \u5217 \u6ca1\u6709\u5143\u4ef6. -UI.NoComponentRowCol=\u7b2c %d \u884c %d \u5217 \u6ca1\u6709\u5143\u4ef6. -UI.NoSimulationRun=\u5c1a\u672a\u8fd0\u884c\u6a21\u62df. -UI.OnlyShowDiffData=\u53ea\u663e\u793a\u660e\u663e\u4e0d\u540c\u7684\u6570\u636e -UI.PasteCodeButton=\u7c98\u8d34\u4ee3\u7801 -UI.PulseConfigurationTab=\u8109\u51b2\u914d\u7f6e -UI.PulsedReactor=\u8109\u51b2\u578b\u53cd\u5e94\u5806 -UI.RemoveAddonComponentsTitle=\u627e\u5230\u9644\u52a0\u5143\u4ef6 -UI.RemoveGT508ComponentsText=\u5f53\u524d\u8bbe\u8ba1\u4e2d\u53d1\u73b0 GT 5.08 \u7684\u5143\u4ef6\u3002\u662f\u5426\u79fb\u9664\u5b83\u4eec? -UI.RemoveGT509ComponentsText=\u5f53\u524d\u8bbe\u8ba1\u4e2d\u53d1\u73b0 GT 5.09 \u7684\u5143\u4ef6\u3002\u662f\u5426\u79fb\u9664\u5b83\u4eec? -UI.ResetPulseConfig=\u91cd\u7f6e\u8109\u51b2\u914d\u7f6e -UI.ShowComponentDetailButtons=\u663e\u793a\u5143\u4ef6\u8be6\u7ec6\u4fe1\u606f\u6309\u94ae -UI.ShowComponentPreconfigControls=\u663e\u793a\u5143\u4ef6\u9884\u914d\u7f6e\u63a7\u4ef6 -UI.ShowOldStyleReactorCode=\u663e\u793a\u65e7 (2.3.1 \u4e4b\u524d\u7248\u672c) \u53cd\u5e94\u5806\u4ee3\u7801 -UI.SimulateButton=\u6a21\u62df -UI.SimulationTab=\u6a21\u62df -UI.SimulationTypeAutomation=\u8109\u51b2\u81ea\u52a8\u5316 -UI.SimulationTypePulsed=\u8109\u51b2\u578b\u5faa\u73af -UI.SimulationTypeSimple=\u7b80\u5355\u578b\u5faa\u73af -UI.TemperatureEffectsDefault=\u71c3\u70e7: 4,000 \u84b8\u53d1: 5,000 \u4f24\u5bb3: 7,000 \u7194\u5316: 8,500 \u7206\u70b8: 10,000 -UI.TemperatureEffectsSpecific=\u71c3\u70e7: %,d \u84b8\u53d1: %,d \u4f24\u5bb3: %,d \u7194\u5316: %,d \u7206\u70b8: %,d -UI.TexturePackBrowseButton=\u6d4f\u89c8 -UI.TexturePackClearButton=\u6e05\u9664 -UI.TexturePackDefault=\u6750\u8d28\u5305: \u672a\u9009\u62e9\u6587\u4ef6 -UI.TexturePackHelp=(\u91cd\u65b0\u542f\u52a8\u6a21\u62df\u5668\u4ee5\u67e5\u770b\u65b0\u6750\u8d28) -UI.TexturePackSpecific=\u6750\u8d28\u5305: %s -UI.UseGTRecipes=\u4f7f\u7528\u683c\u96f7\u79d1\u6280\u914d\u65b9\u5236\u4f5c\u5143\u4ef6\u6750\u6599 (\u5982\u9002\u7528\u4e14\u660e\u786e) -UI.UseUfcForCoolantCells=\u4f7f\u7528\u901a\u7528\u6d41\u4f53\u5355\u5143\u4f5c\u4e3a\u51b7\u5374\u5242 (\u4e0e\u683c\u96f7\u79d1\u6280\u914d\u65b9\u4e0d\u517c\u5bb9) -UI.VersionNumber=\u7248\u672c %s - -Warning.DepletedIsotope=\u5220\u9664\u4e86 (\u8fd1\u8870\u53d8\u94c0\u68d2) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n -Warning.DualPlutonium=\u5220\u9664\u4e86 (\u53cc\u8054\u71c3\u6599\u68d2 (\u949a)) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n -Warning.Heating=\u5220\u9664\u4e86 (\u52a0\u70ed\u5143\u4ef6) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n -Warning.InvalidReactorCode=\u65e0\u6548\u7684\u53cd\u5e94\u5806\u4ee3\u7801: %s -Warning.Plutonium=\u5220\u9664\u4e86 (\u71c3\u6599\u68d2 (\u949a)) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n -Warning.QuadPlutonium=\u5220\u9664\u4e86 (\u56db\u8054\u71c3\u6599\u68d2 (\u949a)) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n -Warning.Title=\u8b66\u544a -Warning.Unrecognized=\u5220\u9664\u4e86\u65e0\u6cd5\u8bc6\u522b\u7684\u5143\u4ef6 (id %d) \u4f4d\u4e8e\u7b2c %d \u884c %d \u5217.\n diff --git a/src/main/java/Ic2ExpReactorPlanner/MaterialsList.java b/src/main/java/Ic2ExpReactorPlanner/MaterialsList.java deleted file mode 100644 index e798f2d44f..0000000000 --- a/src/main/java/Ic2ExpReactorPlanner/MaterialsList.java +++ /dev/null @@ -1,302 +0,0 @@ -package Ic2ExpReactorPlanner; - -import static Ic2ExpReactorPlanner.BundleHelper.getI18n; -import Ic2ExpReactorPlanner.components.ReactorItem; -import java.text.DecimalFormat; -import java.util.HashMap; -import java.util.Map; -import java.util.SortedMap; -import java.util.SortedSet; -import java.util.TreeMap; -import java.util.TreeSet; - -/** - * Represents a list of materials (such as for an IndustrialCraft2 Nuclear Reactor and components). - * @author Brian McCloud - */ -public final class MaterialsList { - - private final SortedMap materials = new TreeMap<>(); - - private static boolean useGTRecipes = false; - private static boolean useUfcForCoolantCells = false; - private static boolean expandAdvancedAlloy = false; - private static String gtVersion = "none"; - - // pre-load localized material names as constants to make code more readable. - public static final String ALUMINIUM = getI18n("MaterialName.Aluminium"); - public static final String BERYLLIUM = getI18n("MaterialName.Beryllium"); - public static final String BRONZE = getI18n("MaterialName.Bronze"); - public static final String CALLISTOICEDUST = getI18n("MaterialName.CallistoIceDust"); - public static final String CESIUM = getI18n("MaterialName.CesiumFuel"); - public static final String COAL = getI18n("MaterialName.Coal"); - public static final String COAXIUM = getI18n("MaterialName.CoaxiumFuel"); - public static final String COPPER = getI18n("MaterialName.Copper"); - public static final String DIAMOND = getI18n("MaterialName.Diamond"); - public static final String DISTILLED_WATER = getI18n("MaterialName.DistilledWater"); - // Since GT 5.09 allows different materials for making the "empty cell" (steel, tin, or PTFE), it is treated as a primitive material for GT recipes instead of a crafted item that can be further broken down. - public static final String EMPTY_CELL = getI18n("MaterialName.EmptyCell"); - public static final String ENRICHEDNAQUADAH = getI18n("MaterialName.EnrichedNaquadah"); - public static final String FLUXEDELECTRUM = getI18n("MaterialName.FluxedElectrum");//too long - public static final String GOLD = getI18n("MaterialName.Gold"); - public static final String GRAPHITE = getI18n("MaterialName.Graphite"); - public static final String GLASS = getI18n("MaterialName.Glass"); - public static final String GLOWSTONE = getI18n("MaterialName.GlowstoneDust"); - public static final String HELIUM = getI18n("MaterialName.Helium"); - public static final String IRIDIUM = getI18n("MaterialName.Iridium"); - public static final String IRON = getI18n("MaterialName.Iron"); - public static final String LAPIS = getI18n("MaterialName.LapisLazuli"); - public static final String LEAD = getI18n("MaterialName.Lead"); - public static final String LEDOXDUST = getI18n("MaterialName.LedoxDust"); - public static final String MOX = getI18n("MaterialName.MoxFuel"); - public static final String NAQUADRIA = getI18n("MaterialName.Naquadria"); - public static final String PLATINUM = getI18n("MaterialName.Platinum"); - public static final String POTASSIUM = getI18n("MaterialName.Potassium"); - public static final String REDSTONE = getI18n("MaterialName.Redstone"); - public static final String REINFORCEDGLASS = getI18n("MaterialName.ReinforcedGlass");//alt recipes - public static final String RUBBER = getI18n("MaterialName.Rubber"); - public static final String SODIUM = getI18n("MaterialName.Sodium"); - public static final String THORIUM = getI18n("MaterialName.Thorium"); - public static final String TIBERIUM = getI18n("MaterialName.Tiberium"); - public static final String TIN = getI18n("MaterialName.Tin"); - public static final String TUNGSTEN = getI18n("MaterialName.Tungsten"); - public static final String URANIUM = getI18n("MaterialName.UraniumFuel"); - - // Special materials lists for items that may expand differently. - public static MaterialsList basicCircuit = new MaterialsList(IRON, 2, REDSTONE, 2, COPPER, 6, RUBBER); - public static MaterialsList advancedCircuit = new MaterialsList(basicCircuit, 4, REDSTONE, 2, LAPIS, 2, GLOWSTONE); - public static MaterialsList alloy = new MaterialsList(getI18n("MaterialName.AdvancedAlloy")); - public static MaterialsList coolantCell = new MaterialsList(1.0 / 3, TIN, DISTILLED_WATER, LAPIS); - public static MaterialsList iridiumPlate = new MaterialsList(4, IRIDIUM, 4, alloy, DIAMOND); - - // some materials lists for crafted items that are part of reactor components without themselves being reactor components. - public static final MaterialsList TIN_ITEM_CASING = new MaterialsList(0.5, TIN); - public static final MaterialsList COIL = new MaterialsList(IRON, 8.0 / 3, COPPER); - public static final MaterialsList ELECTRIC_MOTOR = new MaterialsList(IRON, 2, COIL, 2, TIN_ITEM_CASING); - public static final MaterialsList IRON_BARS = new MaterialsList(6.0 / 16, IRON); - public static final MaterialsList GLASS_PANE = new MaterialsList(6.0 / 16, GLASS); - public static final MaterialsList TIN_ALLOY = new MaterialsList(0.5, TIN, 0.5, IRON); - - - private static Map componentMaterialsMap = buildComponentMaterialsMap(); - - /** - * Creates an empty materials list. - */ - public MaterialsList() { - // fields are initialized when declared, so no code is needed in this constructor. - } - - /** - * Creates a materials list with the specified items in it. - * @param materials the materials to add, which can be strings that each represent a single material or other MaterialsList objects, and either can be preceded by a number as a count. - * @throws IllegalArgumentException if other object types are passed as arguments. - */ - public MaterialsList(Object... materials) { - add(materials); - } - - /** - * Adds the specified items to this materials list. - * @param materials the materials to add, which can be strings that each represent a single material or other MaterialsList objects, and either can be preceded by a number as a count. - * @throws IllegalArgumentException if other object types are passed as arguments. - */ - public void add(Object... materials) { - double itemCount = 1; - for (Object material : materials) { - if (material instanceof String) { - final String materialName = (String)material; - if (this.materials.containsKey(materialName)) { - this.materials.put(materialName, this.materials.get(materialName) + itemCount); - } else { - this.materials.put(materialName, itemCount); - } - itemCount = 1; - } else if (material instanceof Number) { - itemCount = ((Number)material).doubleValue(); - } else if (material instanceof MaterialsList) { - for (Map.Entry entrySet : ((MaterialsList)material).materials.entrySet()) { - if (this.materials.containsKey(entrySet.getKey())) { - this.materials.put(entrySet.getKey(), this.materials.get(entrySet.getKey()) + itemCount * entrySet.getValue()); - } else { - this.materials.put(entrySet.getKey(), itemCount * entrySet.getValue()); - } - } - itemCount = 1; - } else { - throw new IllegalArgumentException("Invalid material type: " + material.getClass().getName()); - } - } - } - - @Override - public String toString() { - StringBuilder result = new StringBuilder(1000); - DecimalFormat materialDecimalFormat = new DecimalFormat(getI18n("UI.MaterialDecimalFormat")); - for (Map.Entry entrySet : materials.entrySet()) { - double count = entrySet.getValue(); - String formattedNumber = materialDecimalFormat.format(count); - result.append(String.format("%s %s\n", formattedNumber, entrySet.getKey())); //NOI18N - } - return result.toString(); - } - - public String buildComparisonString(MaterialsList rhs, boolean alwaysDiff) { - StringBuilder result = new StringBuilder(1000); - SortedSet keys = new TreeSet<>(materials.keySet()); - keys.addAll(rhs.materials.keySet()); - DecimalFormat comparisonDecimalFormat = new DecimalFormat(getI18n("Comparison.CompareDecimalFormat")); - DecimalFormat simpleDecimalFormat = new DecimalFormat(getI18n("Comparison.SimpleDecimalFormat")); - for (String key : keys) { - double left = 0; - if (materials.containsKey(key)) { - left = materials.get(key); - } - double right = 0; - if (rhs.materials.containsKey(key)) { - right = rhs.materials.get(key); - } - String color = "orange"; - if (left < right) { - color = "green"; - } else if (left > right) { - color = "red"; - } - if (alwaysDiff || left != right) { - result.append(String.format(getI18n("Comparison.MaterialsEntry"), color, - comparisonDecimalFormat.format(left - right), key, - simpleDecimalFormat.format(left), - simpleDecimalFormat.format(right))); - } - } - return result.toString(); - } - - public static void setUseUfcForCoolantCells(boolean value) { - useUfcForCoolantCells = value; - if (value) { - coolantCell = new MaterialsList(4, TIN_ITEM_CASING, GLASS_PANE, DISTILLED_WATER, LAPIS); - } else { - coolantCell = new MaterialsList(1.0 / 3, TIN, DISTILLED_WATER, LAPIS); - } - componentMaterialsMap = buildComponentMaterialsMap(); - } - - public static void setExpandAdvancedAlloy(boolean value) { - expandAdvancedAlloy = value; - if (value) { - alloy = new MaterialsList(3.0 / 2, IRON, 3.0 / 2, BRONZE, 3.0 / 2, TIN); - } else { - alloy = new MaterialsList(getI18n("MaterialName.AdvancedAlloy")); - } - iridiumPlate = new MaterialsList(4, IRIDIUM, 4, alloy, DIAMOND); - componentMaterialsMap = buildComponentMaterialsMap(); - } - - public static void setGTVersion(String value) { - gtVersion = value; - if ("5.08".equals(value) || "5.09".equals(value)) { - coolantCell = new MaterialsList(EMPTY_CELL, DISTILLED_WATER, LAPIS); - alloy = new MaterialsList(getI18n("MaterialName.AdvancedAlloy")); - basicCircuit = new MaterialsList(getI18n("MaterialName.BasicCircuit")); - advancedCircuit = new MaterialsList(getI18n("MaterialName.AdvancedCircuit")); - } else { - basicCircuit = new MaterialsList(IRON, 2, REDSTONE, 2, COPPER, 6, RUBBER); - advancedCircuit = new MaterialsList(basicCircuit, 4, REDSTONE, 2, LAPIS, 2, GLOWSTONE); - if (useUfcForCoolantCells) { - coolantCell = new MaterialsList(4, TIN_ITEM_CASING, GLASS_PANE, DISTILLED_WATER, LAPIS); - } else { - coolantCell = new MaterialsList(1.0 / 3, TIN, DISTILLED_WATER, LAPIS); - } - if (expandAdvancedAlloy) { - alloy = new MaterialsList(3.0 / 2, IRON, 3.0 / 2, BRONZE, 3.0 / 2, TIN); - } else { - alloy = new MaterialsList(getI18n("MaterialName.AdvancedAlloy")); - } - } - iridiumPlate = new MaterialsList(4, IRIDIUM, 4, alloy, DIAMOND); - componentMaterialsMap = buildComponentMaterialsMap(); - } - - public static MaterialsList getMaterialsForComponent(ReactorItem component) { - return componentMaterialsMap.get(component.baseName); - } - - private static Map buildComponentMaterialsMap() { - Map result = new HashMap<>(63);//result.put+2? Added 14, but I can't really tell if that's right - result.put("fuelRodUranium", new MaterialsList(IRON, URANIUM)); - result.put("dualFuelRodUranium", new MaterialsList(IRON, 2, result.get("fuelRodUranium"))); - result.put("quadFuelRodUranium", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodUranium"))); - result.put("fuelRodMox", new MaterialsList(IRON, MOX)); - result.put("dualFuelRodMox", new MaterialsList(IRON, 2, result.get("fuelRodMox"))); - result.put("quadFuelRodMox", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodMox"))); - if ("5.09".equals(gtVersion)) { - result.put("neutronReflector", new MaterialsList(6, TIN_ALLOY, 2, GRAPHITE, BERYLLIUM)); - result.put("thickNeutronReflector", new MaterialsList(4, result.get("neutronReflector"), 2, BERYLLIUM)); - } else { - result.put("neutronReflector", new MaterialsList(COPPER, 4, TIN, 4, COAL)); - result.put("thickNeutronReflector", new MaterialsList(4, result.get("neutronReflector"), 5, COPPER)); - } - if ("5.08".equals(gtVersion) || "5.09".equals(gtVersion)) { - result.put("heatVent", new MaterialsList(4, ALUMINIUM, 4, IRON_BARS)); - } else { - result.put("heatVent", new MaterialsList(ELECTRIC_MOTOR, 4, IRON, 4, IRON_BARS)); - } - result.put("advancedHeatVent", new MaterialsList(2, result.get("heatVent"), 6, IRON_BARS, DIAMOND)); - result.put("reactorHeatVent", new MaterialsList(result.get("heatVent"), 8, COPPER)); - result.put("componentHeatVent", new MaterialsList(result.get("heatVent"), 4, TIN, 4, IRON_BARS)); - result.put("overclockedHeatVent", new MaterialsList(result.get("reactorHeatVent"), 4, GOLD)); - result.put("coolantCell10k", new MaterialsList(coolantCell, 4, TIN)); - result.put("coolantCell30k", new MaterialsList(3, result.get("coolantCell10k"), 6, TIN)); - result.put("coolantCell60k", new MaterialsList(2, result.get("coolantCell30k"), 6, TIN, IRON)); - result.put("heatExchanger", new MaterialsList(basicCircuit, 3, TIN, 5, COPPER)); - result.put("advancedHeatExchanger", new MaterialsList(2, result.get("heatExchanger"), 2, basicCircuit, COPPER, 4, LAPIS)); - result.put("coreHeatExchanger", new MaterialsList(result.get("heatExchanger"), 8, COPPER)); - result.put("componentHeatExchanger", new MaterialsList(result.get("heatExchanger"), 4, GOLD)); - result.put("reactorPlating", new MaterialsList(LEAD, alloy)); - result.put("heatCapacityReactorPlating", new MaterialsList(result.get("reactorPlating"), 8, COPPER)); - if ("5.08".equals(gtVersion) || "5.09".equals(gtVersion)) { - result.put("containmentReactorPlating", new MaterialsList(result.get("reactorPlating"), LEAD)); - } else { - result.put("containmentReactorPlating", new MaterialsList(result.get("reactorPlating"), 2, alloy)); - } - result.put("rshCondensator", new MaterialsList(result.get("heatVent"), result.get("heatExchanger"), 7, REDSTONE)); - result.put("lzhCondensator", new MaterialsList(2, result.get("rshCondensator"), result.get("reactorHeatVent"), result.get("coreHeatExchanger"), 9, LAPIS, 4, REDSTONE)); - result.put("fuelRodThorium", new MaterialsList(IRON, 3, THORIUM)); - result.put("dualFuelRodThorium", new MaterialsList(IRON, 2, result.get("fuelRodThorium"))); - result.put("quadFuelRodThorium", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodThorium"))); - result.put("coolantCellHelium60k", new MaterialsList(EMPTY_CELL, HELIUM, 4, TIN)); - result.put("coolantCellHelium180k", new MaterialsList(3, result.get("coolantCellHelium60k"), 6, TIN)); - result.put("coolantCellHelium360k", new MaterialsList(2, result.get("coolantCellHelium180k"), 6, TIN, 9, COPPER)); - result.put("coolantCellNak60k", new MaterialsList(result.get("coolantCell10k"), 4, TIN, 2, POTASSIUM, 2, SODIUM)); - result.put("coolantCellNak180k", new MaterialsList(3, result.get("coolantCellNak60k"), 6, TIN)); - result.put("coolantCellNak360k", new MaterialsList(2, result.get("coolantCellNak180k"), 6, TIN, 9, COPPER)); - result.put("iridiumNeutronReflector", new MaterialsList(6, result.get("thickNeutronReflector"), 18, COPPER, iridiumPlate)); - result.put("fuelRodNaquadah", new MaterialsList(IRON, 3, ENRICHEDNAQUADAH)); - result.put("dualFuelRodNaquadah", new MaterialsList(IRON, 2, result.get("fuelRodNaquadah"))); - result.put("quadFuelRodNaquadah", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodNaquadah"))); - result.put("fuelRodCoaxium", new MaterialsList(4, IRIDIUM, 36, DIAMOND, 3, COAXIUM)); - result.put("dualFuelRodCoaxium", new MaterialsList(IRON, 2, result.get("fuelRodCoaxium"))); - result.put("quadFuelRodCoaxium", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodCoaxium"))); - result.put("fuelRodCesium", new MaterialsList(IRON, 3, CESIUM)); - result.put("dualFuelRodCesium", new MaterialsList(IRON, 2, result.get("fuelRodCesium"))); - result.put("quadFuelRodCesium", new MaterialsList(3, IRON, 2, COPPER, 4, result.get("fuelRodCesium"))); - result.put("fuelRodNaquadahGTNH", new MaterialsList(4, IRON, 4, TUNGSTEN, 1, PLATINUM, 3, ENRICHEDNAQUADAH)); - result.put("dualFuelRodNaquadahGTNH", new MaterialsList(IRON, TUNGSTEN, 2, result.get("fuelRodNaquadahGTNH"))); - result.put("quadFuelRodNaquadahGTNH", new MaterialsList(3, IRON, 3, TUNGSTEN, 4, result.get("fuelRodNaquadahGTNH"))); - result.put("fuelRodNaquadria", new MaterialsList(4, IRON, 4, TUNGSTEN, 1, PLATINUM, 3, NAQUADRIA)); - result.put("dualFuelRodNaquadria", new MaterialsList(IRON, TUNGSTEN, 2, result.get("fuelRodNaquadria"))); - result.put("quadFuelRodNaquadria", new MaterialsList(3, IRON, 3, TUNGSTEN, 4, result.get("fuelRodNaquadria"))); - result.put("fuelRodTiberium", new MaterialsList(4, IRON, 4, TUNGSTEN, 1, PLATINUM, 3, TIBERIUM)); - result.put("dualFuelRodTiberium", new MaterialsList(IRON, TUNGSTEN, 2, result.get("fuelRodTiberium"))); - result.put("quadFuelRodTiberium", new MaterialsList(3, IRON, 3, TUNGSTEN, 4, result.get("fuelRodTiberium"))); - result.put("fuelRodTheCore", new MaterialsList(96, IRON, 96, TUNGSTEN, 128, TIBERIUM, 32, result.get("fuelRodNaquadah"))); - result.put("coolantCellSpace180k", new MaterialsList(0.5, CALLISTOICEDUST, 0.5, LEDOXDUST, 1000, DISTILLED_WATER, LAPIS, REINFORCEDGLASS, 2, IRON, 2, TUNGSTEN)); - result.put("coolantCellSpace360k", new MaterialsList(1.5, IRON, 1.5, TUNGSTEN, 2, result.get("coolantCellSpace180k"))); - result.put("coolantCellSpace540k", new MaterialsList(3, IRON, 3, TUNGSTEN, 3, result.get("coolantCellSpace180k"))); - result.put("coolantCellSpace1080k", new MaterialsList(3, IRON, 3, TUNGSTEN, 9, FLUXEDELECTRUM, 3, result.get("coolantCellSpace540k"))); - - return result; - } - -} diff --git a/src/main/java/Ic2ExpReactorPlanner/Reactor.java b/src/main/java/Ic2ExpReactorPlanner/Reactor.java index 6febc91b90..83b6c511ad 100644 --- a/src/main/java/Ic2ExpReactorPlanner/Reactor.java +++ b/src/main/java/Ic2ExpReactorPlanner/Reactor.java @@ -5,11 +5,11 @@ */ package Ic2ExpReactorPlanner; -import static Ic2ExpReactorPlanner.BundleHelper.formatI18n; -import static Ic2ExpReactorPlanner.BundleHelper.getI18n; -import Ic2ExpReactorPlanner.components.ReactorItem; import java.awt.HeadlessException; -import javax.swing.JOptionPane; +import java.util.ArrayList; + +import Ic2ExpReactorPlanner.components.ReactorItem; + /** * Represents an IndustrialCraft2 Nuclear Reactor. @@ -152,24 +152,16 @@ public class Reactor { * Gets a list of the materials needed to build the components. * @return a list of the materials needed to build the components. */ - public MaterialsList getMaterials() { - MaterialsList result = new MaterialsList(); - for (int col = 0; col < grid[0].length; col++) { - for (int row = 0; row < grid.length; row++) { - if (getComponentAt(row, col) != null) { - result.add(MaterialsList.getMaterialsForComponent(getComponentAt(row, col))); - } - } - } - return result; + public ArrayList getMaterials() { + return new ArrayList(); } - public MaterialsList getComponentList() { - MaterialsList result = new MaterialsList(); + public ArrayList getComponentList() { + ArrayList result = new ArrayList(); for (int col = 0; col < grid[0].length; col++) { for (int row = 0; row < grid.length; row++) { if (getComponentAt(row, col) != null) { - result.add(getComponentAt(row, col).name); + result.add(getComponentAt(row, col)); } } } @@ -348,7 +340,7 @@ public class Reactor { // Try to handle it as a newer code with the "erp=" prefix stripped readCodeString(code); } else if (!code.isEmpty()) { - JOptionPane.showMessageDialog(null, String.format(getI18n("Warning.InvalidReactorCode"), code), getI18n("Warning.Title"), JOptionPane.WARNING_MESSAGE); + //JOptionPane.showMessageDialog(null, String.format(getI18n("Warning.InvalidReactorCode"), code), getI18n("Warning.Title"), JOptionPane.WARNING_MESSAGE); } } } @@ -381,9 +373,6 @@ public class Reactor { case 3: setComponentAt(y, x, ComponentFactory.createComponent("quadFuelRodUranium")); break; - case 4: - warnings.append(formatI18n("Warning.DepletedIsotope", y, x)); - break; case 5: setComponentAt(y, x, ComponentFactory.createComponent("neutronReflector")); break; @@ -442,7 +431,7 @@ public class Reactor { setComponentAt(y, x, ComponentFactory.createComponent("coolantCell60k")); break; case 24: - warnings.append(formatI18n("Warning.Heating", y, x)); + warnings.append("Warning.Heating", y, x); break; case 32: setComponentAt(y, x, ComponentFactory.createComponent("fuelRodThorium")); @@ -454,13 +443,13 @@ public class Reactor { setComponentAt(y, x, ComponentFactory.createComponent("quadFuelRodThorium")); break; case 35: - warnings.append(formatI18n("Warning.Plutonium", y, x)); + warnings.append("Warning.Plutonium", y, x); break; case 36: - warnings.append(formatI18n("Warning.DualPlutonium", y, x)); + warnings.append("Warning.DualPlutonium", y, x); break; case 37: - warnings.append(formatI18n("Warning.QuadPlutonium", y, x)); + warnings.append("Warning.QuadPlutonium", y, x); break; case 38: setComponentAt(y, x, ComponentFactory.createComponent("iridiumNeutronReflector")); @@ -484,14 +473,14 @@ public class Reactor { setComponentAt(y, x, ComponentFactory.createComponent("coolantCellNak360k")); break; default: - warnings.append(formatI18n("Warning.Unrecognized", nextValue, y, x)); + warnings.append("Warning.Unrecognized", y, x); break; } } } if (warnings.length() > 0) { warnings.setLength(warnings.length() - 1); // to remove last newline character - JOptionPane.showMessageDialog(null, warnings, getI18n("Warning.Title"), JOptionPane.WARNING_MESSAGE); + //JOptionPane.showMessageDialog(null, warnings, "Warning.Title", JOptionPane.WARNING_MESSAGE); } } diff --git a/src/main/java/Ic2ExpReactorPlanner/ReactorPlannerFrame.form b/src/main/java/Ic2ExpReactorPlanner/ReactorPlannerFrame.form deleted file mode 100644 index 40e56f5d3e..0000000000 --- a/src/main/java/Ic2ExpReactorPlanner/ReactorPlannerFrame.form +++ /dev/null @@ -1,2260 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/Ic2ExpReactorPlanner/SimulationData.java b/src/main/java/Ic2ExpReactorPlanner/SimulationData.java index d6384ef012..39ecdbc5f5 100644 --- a/src/main/java/Ic2ExpReactorPlanner/SimulationData.java +++ b/src/main/java/Ic2ExpReactorPlanner/SimulationData.java @@ -76,6 +76,4 @@ public class SimulationData { public double ventCooling = 0; public double ventCoolingCapacity = 0; - // Automation details - public MaterialsList replacedItems = new MaterialsList(); } diff --git a/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java b/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java index 4c4e0bb01b..9a9b1ce341 100644 --- a/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java +++ b/src/main/java/Ic2ExpReactorPlanner/components/ReactorItem.java @@ -176,8 +176,6 @@ public class ReactorItem { protected double explosionPowerMultiplier = 1; - protected static final ResourceBundle BUNDLE = ResourceBundle.getBundle("Ic2ExpReactorPlanner/Bundle"); - protected ReactorItem(final int id, final String baseName, GT_ItemStack aItem, final double maxDamage, final double maxHeat, String sourceMod) { this.id = id; this.baseName = baseName; @@ -223,7 +221,7 @@ public class ReactorItem { public String toString() { String result = name; if (initialHeat > 0) { - result += String.format(BUNDLE.getString("UI.InitialHeatDisplay"), (int) initialHeat); + result += String.format("\u0020(initial heat: %,d)", (int) initialHeat); } return result; } diff --git a/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java b/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java index 465641972a..7851a62804 100644 --- a/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java +++ b/src/main/java/Ic2ExpReactorPlanner/components/Reflector.java @@ -5,11 +5,8 @@ */ package Ic2ExpReactorPlanner.components; -import Ic2ExpReactorPlanner.MaterialsList; import gregtech.api.objects.GT_ItemStack; -import java.awt.Image; - /** * Represents a neutron reflector in a reactor. * @author Brian McCloud diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java index 1876001f11..cd960e5ca1 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java +++ b/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java @@ -266,11 +266,31 @@ public class RECIPES_Machines { multiSolarTower(); multiElementalDuplicator(); + computerCube(); + resonanceChambers(); modulators(); } + + private static void computerCube() { + + CORE.RA.addSixSlotAssemblingRecipe( + new ItemStack[] { + CI.getNumberedAdvancedCircuit(20), + CI.getTieredGTPPMachineCasing(4, 1), + CI.getCircuit(4, 8), + CI.getFieldGenerator(2, 4), + CI.getDoublePlate(4, 8), + CI.getRobotArm(4, 8) + }, + Materials.Redstone.getMolten(144 * 32), + GregtechItemList.Gregtech_Computer_Cube_Machine.get(1), + 20 * 60 * 10, + MaterialUtils.getVoltageForTier(4)); + + } private static void gt4FarmManager() { @@ -532,6 +552,25 @@ public class RECIPES_Machines { private static void multiXlTurbines() { + RecipeUtils.addShapedRecipe( + CI.getDoublePlate(4, 1), CI.getElectricMotor(3, 1), CI.getDoublePlate(4, 1), + ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), ItemList.Casing_Gearbox_Titanium.get(1), ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), + CI.getDoublePlate(4, 1), CI.getElectricMotor(3, 1), CI.getDoublePlate(4, 1), + GregtechItemList.Casing_Turbine_Shaft.get(1)); + + CORE.RA.addSixSlotAssemblingRecipe( + new ItemStack[] { + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine.get(1), + CI.getPlate(4, 4), + CI.getScrew(4, 8), + CI.getCircuit(4, 4), + CI.getGear(3, 8) + }, + CI.tieredMaterials[3].getMolten(144 * 8), + GregtechItemList.Hatch_Turbine_Rotor.get(1), + 20 * 60, + MaterialUtils.getVoltageForTier(4)); // Steam CORE.RA.addSixSlotAssemblingRecipe( @@ -712,6 +751,84 @@ public class RECIPES_Machines { private static void multiElementalDuplicator() { + CORE.RA.addAssemblylineRecipe( + ItemList.Machine_IV_Replicator.get(1), + 20 * 60 * 60 * 12, + new Object[] { + CI.getTieredMachineHull(7, 4), + CI.getFieldGenerator(5, GTNH ? 32 : 16), + CI.getElectricMotor(7, GTNH ? 32 : 16), + CI.getElectricPiston(7, GTNH ? 16 : 4), + CI.getEnergyCore(6, GTNH ? 8 : 2), + CI.getPlate(7, GTNH ? 32 : 16), + CI.getScrew(7, GTNH ? 64 : 32), + CI.getBolt(6, GTNH ? 64 : 32), + CI.getTieredComponent(OrePrefixes.rod, 6, GTNH ? 20 : 10), + new Object[] {CI.getTieredCircuitOreDictName(7), 20}, + ItemList.Tool_DataOrb.get(32), + GregtechItemList.Laser_Lens_Special.get(1) + }, + new FluidStack[] { + CI.getTieredFluid(7, 144 * 32), + CI.getAlternativeTieredFluid(6, 144 * 16), + CI.getTertiaryTieredFluid(6, 144 * 16), + ALLOY.BABBIT_ALLOY.getFluidStack(128 * 144), + + }, + GregtechItemList.Controller_ElementalDuplicator.get(1), + 20 * 60 * 60 * (GTNH ? 2 : 1), + (int) MaterialUtils.getVoltageForTier(7)); + + CORE.RA.addAssemblylineRecipe( + GregtechItemList.Modulator_III.get(1), + 20 * 60 * 60 * 4, + new Object[] { + CI.getTieredGTPPMachineCasing(7, 2), + CI.getFieldGenerator(4, GTNH ? 8 : 4), + CI.getEnergyCore(4, GTNH ? 8 : 2), + CI.getPlate(7, GTNH ? 16 : 8), + CI.getScrew(6, GTNH ? 32 : 16), + CI.getBolt(6, GTNH ? 32 : 16), + CI.getTieredComponent(OrePrefixes.rod, 5, GTNH ? 32 : 16), + new Object[] {CI.getTieredCircuitOreDictName(6), 32}, + ItemList.Tool_DataOrb.get(32), + }, + new FluidStack[] { + CI.getTieredFluid(6, 144 * 16), + CI.getAlternativeTieredFluid(5, 144 * 8), + CI.getTertiaryTieredFluid(5, 144 * 8), + ALLOY.BABBIT_ALLOY.getFluidStack(64 * 144), + + }, + GregtechItemList.Hatch_Input_Elemental_Duplicator.get(1), + 20 * 60 * 60 * (GTNH ? 4 : 2), + (int) MaterialUtils.getVoltageForTier(6)); + + CORE.RA.addAssemblylineRecipe( + GregtechItemList.ResonanceChamber_III.get(1), + 20 * 60 * 60 * 2, + new Object[] { + CI.getTieredMachineHull(6, 5), + CI.getFieldGenerator(3, GTNH ? 32 : 16), + CI.getEnergyCore(2, GTNH ? 8 : 2), + CI.getPlate(7, GTNH ? 8 : 4), + CI.getScrew(7, GTNH ? 8 : 4), + CI.getBolt(6, GTNH ? 16 : 8), + CI.getTieredComponent(OrePrefixes.rod, 5, GTNH ? 8 : 4), + new Object[] {CI.getTieredCircuitOreDictName(5), 4}, + ItemList.Tool_DataStick.get(4), + }, + new FluidStack[] { + CI.getTieredFluid(5, 144 * 16), + CI.getAlternativeTieredFluid(4, 144 * 8), + CI.getTertiaryTieredFluid(4, 144 * 8), + ALLOY.BABBIT_ALLOY.getFluidStack(16 * 144), + + }, + GregtechItemList.Casing_ElementalDuplicator.get(1), + 20 * 60 * (GTNH ? 20 : 10), + (int) MaterialUtils.getVoltageForTier(6)); + } private static void resonanceChambers() { diff --git a/src/main/java/gtPlusPlus/core/recipe/common/CI.java b/src/main/java/gtPlusPlus/core/recipe/common/CI.java index 6bdf77bec5..c5a514c31a 100644 --- a/src/main/java/gtPlusPlus/core/recipe/common/CI.java +++ b/src/main/java/gtPlusPlus/core/recipe/common/CI.java @@ -541,7 +541,7 @@ public class CI { ALLOY.TUMBAGA, ALLOY.EGLIN_STEEL, ALLOY.INCONEL_792, - ALLOY.TUNGSTEN_TITANIUM_CARBIDE, + ALLOY.INCOLOY_MA956, ALLOY.NITINOL_60, ALLOY.ZERON_100, ALLOY.PIKYONIUM, diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java index c61195a9e8..4d67603db0 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java @@ -501,12 +501,25 @@ public enum GregtechItemList implements GregtechItemContainer { Hatch_SuperBus_Output_MAX, - - //---------------------------------------------------------------------------- + /** + * Blocks + */ + + + ResonanceChamber_I, + ResonanceChamber_II, + ResonanceChamber_III, + ResonanceChamber_IV, + + Modulator_I, + Modulator_II, + Modulator_III, + Modulator_IV, + //---------------------------------------------------------------------------- /** diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_Container_ComputerCube.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_Container_ComputerCube.java index 80202695e7..8abe7bff66 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_Container_ComputerCube.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_Container_ComputerCube.java @@ -4,22 +4,16 @@ import java.util.Iterator; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.gui.GT_ContainerMetaTile_Machine; -import gregtech.api.gui.GT_Slot_Holo; -import gregtech.api.gui.GT_Slot_Output; +import gregtech.api.gui.*; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.slots.SlotDataStick; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.common.tileentities.misc.GT_TileEntity_ComputerCube; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; +import net.minecraft.entity.player.*; +import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { @@ -39,6 +33,13 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { public long mEU; public int mEU1; public int mEU2; + + public long mStoredEU; + public int mStoredEU1; + public int mStoredEU2; + public long mMaxStoredEU; + public int mMaxStoredEU1; + public int mMaxStoredEU2; public int mProgress; @@ -66,90 +67,72 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { int y; mID = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mMode; Logger.INFO(""+(Utils.isClient() ? "Client" : "Server")+" Mode: " + mID); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 156 + ((this.mID == 5) ? 50 : 0), 4, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 156 + ((this.mID == 5) ? 50 : 0), 4, false, false, 1)); switch (this.mID) { case 1 : - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 156, 86, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 156, 70, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 156, 54, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 156, 86, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 156, 70, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 156, 54, false, false, 1)); for (y = 0; y < 6; y++) { for (int x = 0; x < 9; x++) - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, x + y * 9, 5 + x * 16, 5 + y * 16, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, x + y * 9, 5 + x * 16, 5 + y * 16, false, false, 64)); } - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 113, 153, 28, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 113, 153, 28, false, false, 64)); break; case 2 : - addSlotToContainer(new Slot((IInventory) this.mTileEntity, 54, 8, 28)); - addSlotToContainer(new Slot((IInventory) this.mTileEntity, 55, 26, 28)); - addSlotToContainer(new GT_Slot_Output((IInventory) this.mTileEntity, 56, 134, 28)); - addSlotToContainer(new GT_Slot_Output((IInventory) this.mTileEntity, 57, 152, 28)); + addSlotToContainer(new SlotDataStick(this.mTileEntity, 54, 8, 28)); + addSlotToContainer(new Slot(this.mTileEntity, 55, 26, 28)); + addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 56, 134, 28)); + addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 57, 152, 28)); break; case 3 : - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 88, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 104, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 59, 122, 35, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 60, 92, 5, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 61, 122, 5, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 62, 152, 35, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 63, 122, 65, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 64, 92, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 88, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 104, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 59, 122, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 60, 92, 5, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 61, 122, 5, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 62, 152, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 63, 122, 65, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 64, 92, 35, false, false, 64)); break; case 4 : - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 88, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 104, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 59, 122, 5, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 60, 122, 65, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 61, 152, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 88, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 104, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 59, 122, 5, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 60, 122, 65, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 61, 152, 35, false, false, 64)); break; case 5 : - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 190, 146, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 206, 146, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 59, 206, 38, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 60, 206, 56, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 61, 206, 74, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 62, 206, 92, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 63, 206, 110, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 64, 153, 7, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 65, 169, 7, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 66, 185, 7, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 67, 153, 23, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 68, 169, 23, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 69, 185, 23, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 70, 153, 39, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 71, 169, 39, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 72, 185, 39, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 190, 146, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 206, 146, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 59, 206, 38, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 60, 206, 56, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 61, 206, 74, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 62, 206, 92, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 63, 206, 110, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 64, 153, 7, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 65, 169, 7, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 66, 185, 7, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 67, 153, 23, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 68, 169, 23, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 69, 185, 23, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 70, 153, 39, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 71, 169, 39, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 72, 185, 39, false, false, 64)); break; case 6 : - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 88, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 58, 104, 65, false, false, 1)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 59, 122, 35, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 60, 92, 5, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 61, 122, 5, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 62, 152, 35, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 63, 122, 65, false, false, 64)); - addSlotToContainer(new GT_Slot_Holo((IInventory) this.mTileEntity, 64, 92, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 88, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 58, 104, 65, false, false, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 59, 122, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 60, 92, 5, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 61, 122, 5, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 62, 152, 35, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 63, 122, 65, false, false, 64)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 64, 92, 35, false, false, 64)); break; } } - public int getComputerCubeGUIID() { - switch (getMode()) { - case 1 : - return 32; - case 2 : - return 34; - case 3 : - return 35; - case 4 : - return 36; - case 5 : - return 37; - case 6 : - return 38; - } - return 4; - } - public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { //Logger.INFO("Clicked slot " + aSlotIndex); if (aSlotIndex < 0) { @@ -187,51 +170,51 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { else if (aSlotIndex <= 2 && this.mID == 3) { if (aSlotIndex == 1) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchCentrifugePageBackward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 2) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchCentrifugePageForward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } } else if (aSlotIndex <= 2 && this.mID == 6) { if (aSlotIndex == 1) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchElectrolyzerPageBackward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 2) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchElectrolyzerPageForward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } } else if (aSlotIndex <= 2 && this.mID == 4) { if (aSlotIndex == 1) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchFusionPageBackward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 2) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchFusionPageForward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } } else if (aSlotIndex <= 2 && this.mID == 5) { if (aSlotIndex == 1) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchDescriptionPageBackward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 2) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchDescriptionPageForward(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } } else if (aSlotIndex <= 58 && this.mID == 1) { if (aSlotIndex == 1) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).switchNuclearReactor(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 2) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).loadNuclearReactor(); - onCraftMatrixChanged((IInventory) this.mTileEntity); + onCraftMatrixChanged(this.mTileEntity); } else if (aSlotIndex == 3) { ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).saveNuclearReactor(); @@ -307,6 +290,16 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) { return; } + mStoredEU = mTileEntity.getStoredEU(); + mMaxStoredEU = mTileEntity.getEUCapacity(); + int[] aStored = MathUtils.splitLongIntoTwoIntegers(mStoredEU); + int[] aMaxStorage = MathUtils.splitLongIntoTwoIntegers(mMaxStoredEU); + mStoredEU1 = aStored[0]; + mStoredEU2 = aStored[1]; + mMaxStoredEU1 = aMaxStorage[0]; + mMaxStoredEU2 = aMaxStorage[1]; + + this.mID = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mMode; this.mEUOut = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mEUOut; int[] aEUSplit1 = MathUtils.splitLongIntoTwoIntegers(mEUOut); @@ -318,24 +311,30 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { this.mExplosionStrength = (int) (((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mExplosionStrength * 100.0F); this.mEU = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mEU; this.mProgress = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mProgress; + this.mMaxProgressTime = ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).mMaxProgress; + this.mProgressTime = (int) ((GT_TileEntity_ComputerCube) mTileEntity.getMetaTileEntity()).getEUVar(); int[] aEUSplit2 = MathUtils.splitLongIntoTwoIntegers(mEU); this.mEU1 = aEUSplit2[0]; this.mEU2 = aEUSplit2[1]; Iterator var2 = this.crafters.iterator(); while (var2.hasNext()) { ICrafting var1 = var2.next(); - var1.sendProgressBarUpdate((Container) this, 101, this.mID); - var1.sendProgressBarUpdate((Container) this, 102, this.mHeat & 0xFFFF); - var1.sendProgressBarUpdate((Container) this, 103, this.mMaxHeat & 0xFFFF); - var1.sendProgressBarUpdate((Container) this, 104, this.mHEM); - var1.sendProgressBarUpdate((Container) this, 105, this.mExplosionStrength); - var1.sendProgressBarUpdate((Container) this, 106, this.mHeat >>> 16); - var1.sendProgressBarUpdate((Container) this, 107, this.mMaxHeat >>> 16); - var1.sendProgressBarUpdate((Container) this, 108, this.mEU1); - var1.sendProgressBarUpdate((Container) this, 109, this.mEU2); - var1.sendProgressBarUpdate((Container) this, 110, this.mProgress); - var1.sendProgressBarUpdate((Container) this, 111, this.mEUOut1); - var1.sendProgressBarUpdate((Container) this, 112, this.mEUOut2); + var1.sendProgressBarUpdate(this, 101, this.mID); + var1.sendProgressBarUpdate(this, 102, this.mHeat & 0xFFFF); + var1.sendProgressBarUpdate(this, 103, this.mMaxHeat & 0xFFFF); + var1.sendProgressBarUpdate(this, 104, this.mHEM); + var1.sendProgressBarUpdate(this, 105, this.mExplosionStrength); + var1.sendProgressBarUpdate(this, 106, this.mHeat >>> 16); + var1.sendProgressBarUpdate(this, 107, this.mMaxHeat >>> 16); + var1.sendProgressBarUpdate(this, 108, this.mEU1); + var1.sendProgressBarUpdate(this, 109, this.mEU2); + var1.sendProgressBarUpdate(this, 110, this.mProgress); + var1.sendProgressBarUpdate(this, 111, this.mEUOut1); + var1.sendProgressBarUpdate(this, 112, this.mEUOut2); + var1.sendProgressBarUpdate(this, 113, mStoredEU1); + var1.sendProgressBarUpdate(this, 114, mStoredEU2); + var1.sendProgressBarUpdate(this, 115, mMaxStoredEU1); + var1.sendProgressBarUpdate(this, 116, mMaxStoredEU2); } } @@ -379,6 +378,20 @@ public class GT_Container_ComputerCube extends GT_ContainerMetaTile_Machine { this.mEUOut2 = par2; this.mEUOut = MathUtils.combineTwoIntegersToLong(mEUOut1, mEUOut2); break; + case 113 : + mStoredEU1 = par2; + break; + case 114 : + mStoredEU2 = par2; + mStoredEU = MathUtils.combineTwoIntegersToLong(mStoredEU1, mStoredEU2); + break; + case 115 : + mMaxStoredEU1 = par2; + break; + case 116 : + mMaxStoredEU2 = par2; + mMaxStoredEU = MathUtils.combineTwoIntegersToLong(mMaxStoredEU1, mMaxStoredEU2); + break; } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_GUIContainer_ComputerCube.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_GUIContainer_ComputerCube.java index c56e167319..71defdc72a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_GUIContainer_ComputerCube.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/computer/GT_GUIContainer_ComputerCube.java @@ -2,21 +2,25 @@ package gtPlusPlus.xmod.gregtech.api.gui.computer; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; -import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.common.computer.GT_Computercube_Description; +import gtPlusPlus.xmod.gregtech.common.tileentities.misc.GT_TileEntity_ComputerCube; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GT_GUIContainer_ComputerCube extends GT_GUIContainerMetaTile_Machine { + + public final GT_Container_ComputerCube mPowerContainer; + public GT_GUIContainer_ComputerCube(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aBaseMetaTileEntity, int aID) { super(new GT_Container_ComputerCube(aInventoryPlayer, aBaseMetaTileEntity, aID), CORE.RES_PATH_GUI + "computer/"+aID+".png"); - GT_Container_ComputerCube tContainer = (GT_Container_ComputerCube) this.mContainer; - Logger.INFO("1 GUI Mode: "+aID); - Logger.INFO("2 GUI Mode: "+tContainer.mID); - if (tContainer.mID == 5) { + mPowerContainer = (GT_Container_ComputerCube) mContainer; + if (mPowerContainer.mID == 5) { this.xSize += 50; } } @@ -43,8 +47,8 @@ public class GT_GUIContainer_ComputerCube extends GT_GUIContainerMetaTile_Machin if (tContainer != null) switch (tContainer.mID) { case 0 : - this.fontRendererObj.drawString("G.L.A.D.-OS", 64, 61, 16448255); - this.fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString("Solaris 1.7.10", 56, 70, Utils.rgbtoHexValue(100, 190, 255)); + //this.fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); break; case 1 : this.fontRendererObj.drawString("Reactorstats:", 7, 108, 16448255); @@ -58,11 +62,13 @@ public class GT_GUIContainer_ComputerCube extends GT_GUIContainerMetaTile_Machin this.fontRendererObj.drawString("Scanner", 51, 7, 16448255); if (tContainer.mProgress == 0) { this.fontRendererObj.drawString("Can be used to", 51, 24, 16448255); - this.fontRendererObj.drawString("scan Seedbags", 51, 32, 16448255); + this.fontRendererObj.drawString("scan things", 51, 32, 16448255); + this.fontRendererObj.drawString("Currently", 51, 48, Utils.rgbtoHexValue(200, 20, 20)); + this.fontRendererObj.drawString("Disabled", 51, 56, Utils.rgbtoHexValue(200, 20, 20)); } else { this.fontRendererObj.drawString("Progress:", 51, 24, 16448255); - this.fontRendererObj.drawString(tContainer.mProgress + "%", 51, 32, 16448255); + this.fontRendererObj.drawString(MathUtils.findPercentage(tContainer.mProgress, tContainer.mMaxProgressTime) + " %", 51, 32, 16448255); } this.fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); break; @@ -73,15 +79,17 @@ public class GT_GUIContainer_ComputerCube extends GT_GUIContainerMetaTile_Machin break; case 4 : this.fontRendererObj.drawString("Fusionreactor", 7, 7, 16448255); - this.fontRendererObj.drawString("Recipe: " + (tContainer.mMaxHeat + 1) + "/" + GT_Recipe_Map.sFusionRecipes.mRecipeList.size(), 7, 23, 16448255); - this.fontRendererObj.drawString("Start: " + toNumber(tContainer.mEU) + "EU", 7, 31, 16448255); - this.fontRendererObj.drawString("EU/t: " + toNumber(tContainer.mEUOut), 7, 39, 16448255); - this.fontRendererObj.drawString(toNumber(tContainer.mHeat) + " Ticks", 7, 47, 16448255); + this.fontRendererObj.drawString("Recipe: " + (tContainer.mMaxHeat + 1) + "/" + GT_TileEntity_ComputerCube.sFusionReactorRecipes.size(), 7, 15, 16448255); + this.fontRendererObj.drawString("Start: " + toNumber(tContainer.mEU) + "EU", 7, 23, 16448255); + this.fontRendererObj.drawString("EU/t: " + toNumber(tContainer.mEUOut), 7, 31, 16448255); + this.fontRendererObj.drawString(toNumber(tContainer.mHeat) + " Ticks", 7, 39, 16448255); + GT_Recipe tRecipe = GT_TileEntity_ComputerCube.sFusionReactorRecipes.get(tContainer.mMaxHeat); + this.fontRendererObj.drawString(""+tRecipe.mFluidOutputs[0].getLocalizedName(), 7, 55, 16448255); if (tContainer.mEUOut < 0) { - this.fontRendererObj.drawString("IN: " + toNumber(-tContainer.mEUOut * tContainer.mHeat) + "EU", 7, 55, 16448255); + this.fontRendererObj.drawString("IN: " + toNumber(-tContainer.mEUOut * tContainer.mHeat) + "EU", 7, 47, 16448255); break; } - this.fontRendererObj.drawString("OUT: " + toNumber(tContainer.mEUOut * tContainer.mHeat) + "EU", 7, 55, 16448255); + this.fontRendererObj.drawString("OUT: " + toNumber(tContainer.mEUOut * tContainer.mHeat) + "EU", 7, 47, 16448255); break; case 5 : if (tContainer.mID == 5 && this.xSize == 176) { @@ -114,6 +122,17 @@ public class GT_GUIContainer_ComputerCube extends GT_GUIContainerMetaTile_Machin int y = (height - ySize) / 2; drawTexturedModalRect(x, y, 0, 0, xSize, ySize); switch (tContainer.mID) { + case 0 : + if (this.mPowerContainer.mStoredEU > 0 && this.mPowerContainer.mMaxStoredEU > 0) { + final double tScale = MathUtils.findPercentage(this.mPowerContainer.mStoredEU, this.mPowerContainer.mMaxStoredEU); + this.drawTexturedModalRect(x + 44, y + 8, 0, 166, Math.min(MathUtils.roundToClosestInt(tScale), 95), 5); + } + else { + // + //Logger.INFO("1 No Power? "+tContainer.mProgressTime+" | "+tContainer.mTileEntity.getEUCapacity()); + //Logger.INFO("2 No Power? "+aComp.getEUVar()+" | "+aComp.maxEUStore()); + } + break; case 5 : if (tContainer.mExplosionStrength != 0) drawTexturedModalRect(x + 152, y + 6, 0, 166, 50, 50); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java index 7ec655dca5..a80b788aa1 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java @@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.util.GT_LanguageManager; import gregtech.common.blocks.GT_Material_Casings; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -59,7 +60,14 @@ public class GregtechMetaSpecialMultiCasings2 extends GregtechMetaCasingBlocksAb GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", ""); // Unused GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", ""); // Unused - //GregtechItemList.Casing_Turbine_Shaft.set(new ItemStack(this, 1, 0)); + GregtechItemList.ResonanceChamber_I.set(new ItemStack(this, 1, 0)); + GregtechItemList.ResonanceChamber_II.set(new ItemStack(this, 1, 1)); + GregtechItemList.ResonanceChamber_III.set(new ItemStack(this, 1, 2)); + GregtechItemList.ResonanceChamber_IV.set(new ItemStack(this, 1, 3)); + GregtechItemList.Modulator_I.set(new ItemStack(this, 1, 4)); + GregtechItemList.Modulator_II.set(new ItemStack(this, 1, 5)); + GregtechItemList.Modulator_III.set(new ItemStack(this, 1, 6)); + GregtechItemList.Modulator_IV.set(new ItemStack(this, 1, 7)); } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/GT_TileEntity_ComputerCube.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/GT_TileEntity_ComputerCube.java index 033a5f925b..67999087f3 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/GT_TileEntity_ComputerCube.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/GT_TileEntity_ComputerCube.java @@ -1,39 +1,50 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.misc; +import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes; + import java.util.ArrayList; import java.util.Collections; import Ic2ExpReactorPlanner.SimulationData; +import cpw.mods.fml.common.FMLCommonHandler; import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; +import gregtech.api.enums.*; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Recipe; +import gregtech.api.objects.*; +import gregtech.api.util.*; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; -import gregtech.api.util.GT_Utility; +import gregtech.common.items.behaviors.Behaviour_DataOrb; import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.api.gui.computer.GT_Container_ComputerCube; import gtPlusPlus.xmod.gregtech.api.gui.computer.GT_GUIContainer_ComputerCube; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.computer.GT_Computercube_Description; import gtPlusPlus.xmod.gregtech.common.computer.GT_Computercube_Simulator; -import ic2.core.Ic2Items; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { + public static int MODE_MAIN = 0; + public static int MODE_REACTOR_PLANNER = 1; + public static int MODE_SCANNER = 2; + public static int MODE_CENTRIFUGE = 3; + public static int MODE_FUSION = 4; + public static int MODE_INFO = 5; + public static int MODE_ELECTROLYZER = 6; + public static boolean mSeedscanner = true; public static boolean mReactorplanner = true; @@ -48,11 +59,12 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { public long mEUOut = 0; - public int mMaxHeat = 10000; + public int mMaxHeat = 1; public long mEU = 0; public int mProgress = 0; + public int mMaxProgress = 0; public int mEUTimer = 0; @@ -65,13 +77,15 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { public int mEULast4 = 0; public float mHEM = 1.0F, mExplosionStrength = 0.0F; + + public String mFusionOutput = ""; private boolean mNeedsUpdate; private GT_Computercube_Simulator mSimulator; public GT_TileEntity_ComputerCube(final int aID, final String aDescription) { - super(aID, "computer.cube", "Computer Cube", 5, 114, aDescription); + super(aID, "computer.cube", "Computer Cube MKII", 5, 114, aDescription); } public GT_TileEntity_ComputerCube(final String aName, final String aDescription, final ITexture[][][] aTextures) { @@ -90,6 +104,17 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { return new GT_GUIContainer_ComputerCube(aPlayerInventory, aBaseMetaTileEntity, mMode); } + @Override + public String[] getDescription() { + return new String[]{ + this.mDescription, + "Built in Reactor Planner", + "Built in Scanner", + "Built in Info-Bank", + "Displays Fusion Recipes", + CORE.GT_Tooltip}; + } + @Override public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { if (aBaseMetaTileEntity.isClientSide()) { @@ -143,7 +168,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { @Override public long maxEUInput() { - return GT_Values.V[2]; + return GT_Values.V[4]; } @Override @@ -213,6 +238,8 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { this.mHEM = 1.0F; this.mExplosionStrength = 0.0F; this.mProgress = 0; + this.mMaxProgress = 0; + this.mFusionOutput = ""; this.mInventory[113] = null; int i; for (i = 0; i < 54; i++) { @@ -229,37 +256,51 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { } public void switchModeForward() { - this.mMode = (this.mMode + 1) % 7; + int aTempMode = mMode; + aTempMode++; + if (aTempMode == MODE_ELECTROLYZER ||aTempMode == MODE_CENTRIFUGE) { + aTempMode++; + } + if (aTempMode >= 7) { + aTempMode = 0; + } + mMode = aTempMode; switchMode(); } public void switchModeBackward() { - this.mMode--; - if (this.mMode < 0) - this.mMode = 6; + int aTempMode = mMode; + aTempMode--; + if (aTempMode == MODE_ELECTROLYZER ||aTempMode == MODE_CENTRIFUGE) { + aTempMode--; + } + if (aTempMode < 0) { + aTempMode = 6; + } + mMode = aTempMode; switchMode(); } private void switchMode() { reset(); - if (this.mMode == 1 && !mReactorplanner) { + if (this.mMode == MODE_REACTOR_PLANNER && !mReactorplanner) { switchMode(); return; } - if (this.mMode == 2 && !mSeedscanner) { + if (this.mMode == MODE_SCANNER && !mSeedscanner) { switchMode(); return; } - if (this.mMode == 3) { + if (this.mMode == MODE_CENTRIFUGE) { showCentrifugeRecipe(0); } - if (this.mMode == 4) { + if (this.mMode == MODE_FUSION) { showFusionRecipe(0); } - if (this.mMode == 5) { + if (this.mMode == MODE_INFO) { showDescription(0); } - if (this.mMode == 6) { + if (this.mMode == MODE_ELECTROLYZER) { showElectrolyzerRecipe(0); } this.getWorld().addBlockEvent(this.getXCoord(), this.getYCoord(), this.getZCoord(), GregTech_API.sBlockMachines, 10, this.mMode); @@ -540,6 +581,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { this.mEUOut = tRecipe.mEUt; this.mHeat = tRecipe.mDuration; this.mMaxHeat = aIndex; + this.mFusionOutput = tRecipe.mFluidOutputs[0].getLocalizedName(); } this.getWorld().addBlockEvent(this.getXCoord(), this.getYCoord(), this.getZCoord(), GregTech_API.sBlockMachines, 11, this.mMaxHeat); } @@ -582,6 +624,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { super.saveNBTData(aNBT); aNBT.setInteger("mMode", this.mMode); aNBT.setInteger("mProgress", this.mProgress); + aNBT.setInteger("mMaxProgress", this.mMaxProgress); aNBT.setBoolean("mStarted", this.mStarted); int[] aSplitLong1 = MathUtils.splitLongIntoTwoIntegers(mEU); aNBT.setInteger("mEU1", aSplitLong1[0]); @@ -593,6 +636,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { aNBT.setInteger("mMaxHeat", this.mMaxHeat); aNBT.setFloat("mHEM", this.mHEM); aNBT.setFloat("mExplosionStrength", this.mExplosionStrength); + aNBT.setString("mFusionOutput", this.mFusionOutput); } @Override @@ -600,6 +644,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { super.loadNBTData(aNBT); this.mMode = aNBT.getInteger("mMode"); this.mProgress = aNBT.getInteger("mProgress"); + this.mMaxProgress = aNBT.getInteger("mMaxProgress"); this.mStarted = aNBT.getBoolean("mStarted"); int partA = aNBT.getInteger("mEU1"); int partB = aNBT.getInteger("mEU2"); @@ -611,6 +656,7 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { this.mMaxHeat = aNBT.getInteger("mMaxHeat"); this.mHEM = aNBT.getFloat("mHEM"); this.mExplosionStrength = aNBT.getFloat("mExplosionStrength"); + this.mFusionOutput = aNBT.getString("mFusionOutput"); } @Override @@ -633,17 +679,32 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { this.mNeedsUpdate = false; } if (this.getBaseMetaTileEntity().isServerSide()) { - if (this.mMode == 2) { - if (this.mInventory[55] == null) { + if (this.mMode == MODE_SCANNER) { + /*if (this.mInventory[55] == null) { this.mInventory[55] = this.mInventory[54]; this.mInventory[54] = null; - } + }*/ if (this.mInventory[57] == null) { this.mInventory[57] = this.mInventory[56]; this.mInventory[56] = null; } - if (mSeedscanner && this.mInventory[55] != null && GT_Utility.areStacksEqual(this.mInventory[55], Ic2Items.cropSeed, true) && this.mInventory[55].getTagCompound() != null) { + // 54 - 55 || 56 - 57 + // Do scanny bits + if (mSeedscanner && this.mMode == MODE_SCANNER) { + /*if (doScan(this.mInventory[55]) == 4) { + if ((this.mInventory[57] != null) && (this.mInventory[57].getUnlocalizedName().equals("gt.metaitem.01.32707"))) { + GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "scanning"); + } + }*/ + /*if (this.mEU > 0) { + if (!this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(this.mEU, false)) { + this.mProgress = 0; + } + }*/ + } + + /*if (mSeedscanner && this.mInventory[55] != null && GT_Utility.areStacksEqual(this.mInventory[55], Ic2Items.cropSeed, true) && this.mInventory[55].getTagCompound() != null) { if (this.mInventory[55].getTagCompound().getByte("scan") < 4) { if (this.mProgress >= 100) { this.mInventory[55].getTagCompound().setByte("scan", (byte) 4); @@ -667,10 +728,10 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { this.mInventory[56] = this.mInventory[55]; this.mInventory[55] = null; } - } + }*/ } - if (this.mMode == 1 && mReactorplanner && this.mSimulator != null && this.mSimulator.simulator != null && this.mSimulator.simulatedReactor != null) { + if (this.mMode == MODE_REACTOR_PLANNER && mReactorplanner && this.mSimulator != null && this.mSimulator.simulator != null && this.mSimulator.simulatedReactor != null) { SimulationData aData = this.mSimulator.simulator.getData(); if (aData != null && aData.totalReactorTicks > 0 && this.mProgress != aData.totalReactorTicks) { Logger.INFO("Updating Variables"); @@ -684,50 +745,6 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { } } - /*if (this.mMode == 1 && mReactorplanner && this.mStarted && this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(32, false)) - for (int i = 0; i < 25 && this.mStarted; i++) { - this.mEUOut = 0; - this.mMaxHeat = 10000; - this.mHEM = 1.0F; - this.mExplosionStrength = 10.0F; - float tMultiplier = 1.0F; - for (int y = 0; y < 6; y++) { - for (int x = 0; x < 9; x++) { - ItemStack tStack = getStackInSlot(x + y * 9); - if (tStack != null) - if (tStack.getItem() instanceof IReactorComponent) { - IReactorComponent tComponent = (IReactorComponent) tStack.getItem(); - tComponent.processChamber(this, tStack, x, y, false); //TODO - float tInfluence = ((IReactorComponent) tStack.getItem()).influenceExplosion(this, tStack); - if (tInfluence > 0.0F && tInfluence < 1.0F) { - tMultiplier *= tInfluence; - } - else { - this.mExplosionStrength += tInfluence; - } - } - else if (tStack.isItemEqual(GT_ModHandler.getIC2Item("nearDepletedUraniumCell", 1)) || tStack.isItemEqual(GT_ModHandler.getIC2Item("reEnrichedUraniumCell", 1))) { - stopNuclearReactor(); - } - else { - setInventorySlotContents(x + y * 9, (ItemStack) null); - } - } - } - this.mEUOut *= getReactorEUOutput(); - if ((this.mEUOut == 0 && this.mEUTimer++ > 20) || this.mHeat >= this.mMaxHeat) - stopNuclearReactor(); - if (this.mEUOut != 0) - this.mEUTimer = 0; - this.mExplosionStrength *= this.mHEM * tMultiplier; - this.mEU += this.mEUOut * 20; - int tEU = this.mEULast1; - this.mEULast1 = this.mEULast2; - this.mEULast2 = this.mEULast3; - this.mEULast3 = this.mEULast4; - this.mEULast4 = this.mEUOut; - this.mEUOut = (this.mEUOut + this.mEULast1 + this.mEULast2 + this.mEULast3 + tEU) / 5; - }*/ if (aTick % 20L == 0L) { this.getWorld().addBlockEvent(this.getXCoord(), this.getYCoord(), this.getZCoord(), GregTech_API.sBlockMachines, 10, this.mMode); this.getWorld().addBlockEvent(this.getXCoord(), this.getYCoord(), this.getZCoord(), GregTech_API.sBlockMachines, 11, this.mMaxHeat); @@ -765,12 +782,12 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { @Override public boolean canInsertItem(int i, ItemStack itemstack, int j) { - return (this.mMode == 2) ? ((i == 54 || i == 55)) : false; + return (this.mMode == MODE_SCANNER) ? ((i == 54 || i == 55)) : false; } @Override public boolean canExtractItem(int i, ItemStack itemstack, int j) { - return (this.mMode == 2) ? ((i == 56 || i == 57)) : false; + return (this.mMode == MODE_SCANNER) ? ((i == 56 || i == 57)) : false; } public World getWorld() { @@ -838,5 +855,198 @@ public class GT_TileEntity_ComputerCube extends GT_MetaTileEntity_BasicTank { public ITexture[] getSides(final byte aColor) { return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Computer_Cube)}; } + + protected static final int + DID_NOT_FIND_RECIPE = 0, + FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1, + FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2; + + /** + * Calcualtes overclocked ness using long integers + * @param aEUt - recipe EUt + * @param aDuration - recipe Duration + */ + protected void calculateOverclockedNess(int aEUt, int aDuration) { + if(mTier==0){ + //Long time calculation + long xMaxProgresstime = ((long)aDuration)<<1; + if(xMaxProgresstime>Integer.MAX_VALUE-1){ + //make impossible if too long + mEU=Integer.MAX_VALUE-1; + mMaxProgress=Integer.MAX_VALUE-1; + }else{ + mEU=aEUt>>2; + mMaxProgress=(int)xMaxProgresstime; + } + }else{ + //Long EUt calculation + long xEUt=aEUt; + //Isnt too low EUt check? + long tempEUt = Math.max(xEUt, V[1]); + + mMaxProgress = aDuration; + + while (tempEUt <= V[mTier -1] * (long)this.maxAmperesIn()) { + tempEUt<<=2;//this actually controls overclocking + //xEUt *= 4;//this is effect of everclocking + mMaxProgress>>=1;//this is effect of overclocking + xEUt = mMaxProgress==0 ? xEUt>>1 : xEUt<<2;//U know, if the time is less than 1 tick make the machine use 2x less power + } + if(xEUt>Integer.MAX_VALUE-1){ + mEU = Integer.MAX_VALUE-1; + mMaxProgress = Integer.MAX_VALUE-1; + }else{ + mEU = (int)xEUt; + if(mEU==0) + mEU = 1; + if(mMaxProgress==0) + mMaxProgress = 1;//set time to 1 tick + } + } + } + + public int doScan(ItemStack aInput) { + if (this.mMode != MODE_SCANNER) { + return DID_NOT_FIND_RECIPE; + } + ItemStack aStack = aInput; + if (this.mInventory[56] != null) { + return DID_NOT_FIND_RECIPE; + } else if ((GT_Utility.isStackValid(aStack)) && (aStack.stackSize > 0)) { + + + if (ItemList.IC2_Crop_Seeds.isStackEqual(aStack, true, true)) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + if (tNBT.getByte("scan") < 4) { + tNBT.setByte("scan", (byte) 4); + calculateOverclockedNess(8, 160); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } else { + this.mMaxProgress = 1; + this.mEU = 1; + } + aStack.stackSize -= 1; + this.mInventory[57] = GT_Utility.copyAmount(1L, aStack); + this.mInventory[57].setTagCompound(tNBT); + return 2; + } + + + if (ItemList.Tool_DataOrb.isStackEqual(getSpecialSlot(), false, true)) { + if (ItemList.Tool_DataOrb.isStackEqual(aStack, false, true)) { + aStack.stackSize -= 1; + this.mInventory[57] = GT_Utility.copyAmount(1L, getSpecialSlot()); + calculateOverclockedNess(30, 512); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + ItemData tData = GT_OreDictUnificator.getAssociation(aStack); + if ((tData != null) && ((tData.mPrefix == OrePrefixes.dust) || (tData.mPrefix == OrePrefixes.cell)) && (tData.mMaterial.mMaterial.mElement != null) && (!tData.mMaterial.mMaterial.mElement.mIsIsotope) && (tData.mMaterial.mMaterial != Materials.Magic) && (tData.mMaterial.mMaterial.getMass() > 0L)) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mInventory[57] = ItemList.Tool_DataOrb.get(1L); + Behaviour_DataOrb.setDataTitle(this.mInventory[57], "Elemental-Scan"); + Behaviour_DataOrb.setDataName(this.mInventory[57], tData.mMaterial.mMaterial.mElement.name()); + calculateOverclockedNess(30, GT_Utility.safeInt(tData.mMaterial.mMaterial.getMass() * 8192L)); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + } + + + if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true)) { + if (ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) { + aStack.stackSize -= 1; + this.mInventory[57] = GT_Utility.copyAmount(1L, getSpecialSlot()); + calculateOverclockedNess(30, 128); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + if (aStack.getItem() == Items.written_book) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mInventory[57] = GT_Utility.copyAmount(1L, getSpecialSlot()); + this.mInventory[57].setTagCompound(aStack.getTagCompound()); + calculateOverclockedNess(30, 128); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + if (aStack.getItem() == Items.filled_map) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mInventory[57] = GT_Utility.copyAmount(1L, getSpecialSlot()); + this.mInventory[57].setTagCompound(GT_Utility.getNBTContainingShort(new NBTTagCompound(), "map_id", (short) aStack.getItemDamage())); + calculateOverclockedNess(30, 128); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + + } + + if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true) && aStack != null) { + for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { + if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, aStack, true)) { + boolean failScanner = true; + for (GT_Recipe scannerRecipe : sScannerFakeRecipes.mRecipeList) { + if (GT_Utility.areStacksEqual(scannerRecipe.mInputs[0], aStack, true)) { + failScanner = false; + break; + } + } + if (failScanner) { + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + + + String s = tRecipe.mOutput.getDisplayName(); + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { + s = GT_Assemblyline_Server.lServerNames.get(tRecipe.mOutput.getDisplayName()); + if (s == null) + s = tRecipe.mOutput.getDisplayName(); + } + this.mInventory[57] = GT_Utility.copyAmount(1L, getSpecialSlot()); + + + // Use Assline Utils + if (GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(this.mInventory[57], tRecipe)) { + aStack.stackSize -= 1; + calculateOverclockedNess(30, tRecipe.mResearchTime); + //In case recipe is too OP for that machine + if (mMaxProgress == Integer.MAX_VALUE - 1 && mEU == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + getSpecialSlot().stackSize -= 1; + return 2; + } + + } + } + } + + } + return 0; + } + + private ItemStack getSpecialSlot() { + return this.mInventory[54]; + } + } diff --git a/src/main/resources/assets/miscutils/textures/gui/computer/0.png b/src/main/resources/assets/miscutils/textures/gui/computer/0.png index 8f8a4a8f75..d96545981e 100644 Binary files a/src/main/resources/assets/miscutils/textures/gui/computer/0.png and b/src/main/resources/assets/miscutils/textures/gui/computer/0.png differ diff --git a/src/main/resources/assets/miscutils/textures/gui/computer/2.png b/src/main/resources/assets/miscutils/textures/gui/computer/2.png index a128743fef..90a9447503 100644 Binary files a/src/main/resources/assets/miscutils/textures/gui/computer/2.png and b/src/main/resources/assets/miscutils/textures/gui/computer/2.png differ -- cgit