aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com>2022-12-18 03:42:01 +0000
committerGTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com>2022-12-18 03:42:01 +0000
commitdcdf7a6c811de445eb1f551effcbab397fb76780 (patch)
tree2f0f0567d00f373b11a2043a63562fdba72b9cc3 /src/main/java
parent3bb97de7e3b773a128c1de2731554b4aedc27e1a (diff)
downloadGT5-Unofficial-dcdf7a6c811de445eb1f551effcbab397fb76780.tar.gz
GT5-Unofficial-dcdf7a6c811de445eb1f551effcbab397fb76780.tar.bz2
GT5-Unofficial-dcdf7a6c811de445eb1f551effcbab397fb76780.zip
Not working for some reason. EyeOfHarmonyRecipe cannot initialise.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java207
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java201
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java232
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java698
4 files changed, 643 insertions, 695 deletions
diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java
index 3cf0974278..1a6ba57bf2 100644
--- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java
+++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java
@@ -1,89 +1,222 @@
package com.github.technus.tectech.recipe;
+import gregtech.api.enums.Materials;
import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import org.apache.commons.lang3.tuple.Pair;
+import org.lwjgl.Sys;
+import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public class EyeOfHarmonyRecipe {
- private final List<Pair<ItemStack, Long>> output_items;
- private final FluidStack[] output_fluids;
+ private static final double maxPlasmaEfficiency = 3;
- private long hydrogen_requirement;
- private long helium_requirement;
+ private final List<Pair<ItemStack, Long>> outputItems;
+ private final FluidStack[] outputFluids;
- private long eu_output;
- private long eu_start_cost;
+ private final long hydrogenRequirement;
+ private final long heliumRequirement;
- private long recipe_processing_time_in_ticks;
+ private final long euOutput;
+ private final long euStartCost;
- private double base_success_chance;
+ private final double baseSuccessChance;
- private long spacetime_casing_tier_required;
+ private final long spacetimeCasingTierRequired;
- public EyeOfHarmonyRecipe(List<Pair<ItemStack, Long>> _output_items,
- FluidStack[] _output_fluids,
- long _hydrogen_requirement,
- long _helium_requirement,
- long _eu_output,
- long _eu_start_cost,
- long _recipe_processing_time_in_ticks,
- double _base_success_chance,
- long _spacetime_casing_tier_required) {
+ private final long miningTime;
- output_items = _output_items;
- output_fluids = _output_fluids;
- hydrogen_requirement = _hydrogen_requirement;
- helium_requirement = _helium_requirement;
+ public EyeOfHarmonyRecipe(GT5OreLayerHelper.OreDimensionWrapper dimensionWrapper,
+ double recipeEnergyEfficiency,
+ long hydrogenRequirement,
+ long heliumRequirement,
+ long miningTime,
+ long spacetimeCasingTierRequired,
+ long euOutput,
+ double baseSuccessChance
+ ) {
+ System.out.println("TEST12345MKFWA");
- eu_output = _eu_output;
- eu_start_cost = _eu_start_cost;
+ ArrayList<Pair<Materials, Long>> materialList = processDimension(dimensionWrapper, miningTime, 6);
- recipe_processing_time_in_ticks = _recipe_processing_time_in_ticks;
+ this.outputItems = validDustGenerator(materialList);
+ this.outputFluids = validPlasmaGenerator(materialList, 0.1);
- base_success_chance = _base_success_chance;
+ this.spacetimeCasingTierRequired = spacetimeCasingTierRequired;
+
+ this.euStartCost = (long) (plasmaCostCalculator(this.outputFluids) * recipeEnergyEfficiency);
+ this.euOutput = euOutput;
+
+ this.hydrogenRequirement = hydrogenRequirement;
+ this.heliumRequirement = heliumRequirement;
+
+ this.baseSuccessChance = baseSuccessChance;
+
+ this.miningTime = miningTime;
- // 0 - 7;
- spacetime_casing_tier_required = _spacetime_casing_tier_required;
}
public List<Pair<ItemStack, Long>> getOutputItems() {
- return output_items;
+ return outputItems;
}
public FluidStack[] getOutputFluids() {
- return output_fluids.clone();
+ return outputFluids.clone();
}
public long getHydrogenRequirement() {
- return hydrogen_requirement;
+ return hydrogenRequirement;
}
public long getHeliumRequirement() {
- return helium_requirement;
+ return heliumRequirement;
}
public long getEUOutput() {
- return eu_output;
+ return euOutput;
}
public long getEUStartCost() {
- return eu_start_cost;
+ return euStartCost;
}
public long getRecipeTime() {
- return recipe_processing_time_in_ticks;
+ return miningTime;
}
public double getBaseRecipeSuccessChance() {
- return base_success_chance;
+ return baseSuccessChance;
}
public long getSpacetimeCasingTierRequired() {
- return spacetime_casing_tier_required;
+ return spacetimeCasingTierRequired;
+ }
+
+ static final double primaryMultiplier = (0.1 + 1.0/9.0);
+ static final double secondaryMultiplier = (1.0/9.0);
+ static final double tertiaryMultiplier = (0.1);
+
+ static final double[] oreMultiplier = {primaryMultiplier, secondaryMultiplier, tertiaryMultiplier};
+
+ private static class HashMapHelper extends HashMap<Materials, Double> {
+
+ void add(Materials material, double value) {
+
+ // If key already exists.
+ if (this.containsKey(material)) {
+ this.put(material, value + this.get(material));
+ return;
+ }
+
+ // Otherwise, add value to hashmap entry.
+ this.put(material, value);
+ }
+ }
+
+ static void processHelper(HashMapHelper outputMap, Materials material, double mainMultiplier, double probability) {
+ outputMap.add(material, material.mOreMultiplier * mainMultiplier * probability);
+
+ int index = 0;
+ for (Materials byProductMaterial : material.mOreByProducts) {
+ outputMap.add(byProductMaterial, mainMultiplier * oreMultiplier[index++]);
+ }
+ }
+
+ static ArrayList<Pair<Materials, Long>> processDimension(GT5OreLayerHelper.OreDimensionWrapper dimWrapper, long timeInSeconds, long miningMultiplier) {
+ HashMapHelper outputMap = new HashMapHelper();
+
+ double mainMultiplier = timeInSeconds * miningMultiplier;
+
+ dimWrapper.oreVeinToProbabilityInDimension.forEach((veinInfo, probability) -> {
+ processHelper(outputMap, veinInfo.mPrimaryVeinMaterial, mainMultiplier, probability);
+ processHelper(outputMap, veinInfo.mSecondaryMaterial, mainMultiplier, probability);
+ processHelper(outputMap, veinInfo.mBetweenMaterial, mainMultiplier, probability);
+ processHelper(outputMap, veinInfo.mSporadicMaterial, mainMultiplier, probability);
+ });
+
+ ArrayList<Pair<Materials, Long>> outputList = new ArrayList<>();
+
+ outputMap.forEach((material, quantity) -> outputList.add(Pair.of(material, (long) Math.floor(quantity))));
+
+ return outputList;
}
+
+ static FluidStack[] validPlasmaGenerator(final List<Pair<Materials, Long>> planetList, final double percentageOfPlasma) {
+
+ List<FluidStack> plasma_list = new ArrayList<>();
+
+ for (Pair<Materials, Long> pair : planetList) {
+ if (validPlasmas.contains(pair.getLeft())) {
+ plasma_list.add(pair.getLeft().getPlasma((int) (pair.getRight() * percentageOfPlasma)));
+ }
+ }
+ return plasma_list.toArray(new FluidStack[0]);
+ }
+
+ static List<Pair<ItemStack, Long>> validDustGenerator(final List<Pair<Materials, Long>> planetList) {
+
+ List<Pair<ItemStack, Long>> dust_list = new ArrayList<>();
+
+ for (Pair<Materials, Long> pair : planetList) {
+ dust_list.add(Pair.of(pair.getLeft().getDust(1), pair.getRight()));
+ }
+ return dust_list;
+ }
+
+ static long plasmaCostCalculator(FluidStack[] plasmas) {
+ long total = 0;
+
+ for (FluidStack plasma : plasmas) {
+ total += (plasmaEnergyMap.get(plasma.getFluid()) * plasma.amount);
+ }
+
+ return (long) (total * maxPlasmaEfficiency);
+ }
+
+ static final List<Materials> validPlasmas = Stream.of(
+ Materials.Helium,
+ Materials.Boron,
+ Materials.Nitrogen,
+ Materials.Oxygen,
+ Materials.Sulfur,
+ Materials.Calcium,
+ Materials.Titanium,
+ Materials.Iron,
+ Materials.Nickel,
+ Materials.Zinc,
+ Materials.Niobium,
+ Materials.Silver,
+ Materials.Tin,
+ Materials.Bismuth,
+ Materials.Americium,
+ Materials.Niobium
+ ).collect(Collectors.toList());
+
+ static HashMap<Fluid, Long> plasmaEnergyMap = new HashMap<Fluid, Long>() {{
+ put(Materials.Helium.getPlasma(1).getFluid(), 81_920L);
+ put(Materials.Boron.getPlasma(1).getFluid(), 112_640L);
+ put(Materials.Nitrogen.getPlasma(1).getFluid(), 129_024L);
+ put(Materials.Oxygen.getPlasma(1).getFluid(), 131_072L);
+ put(Materials.Sulfur.getPlasma(1).getFluid(), 170_393L);
+ put(Materials.Calcium.getPlasma(1).getFluid(), 188_416L);
+ put(Materials.Titanium.getPlasma(1).getFluid(), 196_608L);
+ put(Materials.Iron.getPlasma(1).getFluid(), 206_438L);
+ put(Materials.Nickel.getPlasma(1).getFluid(), 213_811L);
+ put(Materials.Zinc.getPlasma(1).getFluid(), 226_304L);
+ put(Materials.Niobium.getPlasma(1).getFluid(), 269_516L);
+ put(Materials.Silver.getPlasma(1).getFluid(), 282_685L);
+ put(Materials.Tin.getPlasma(1).getFluid(), 304_496L);
+ put(Materials.Americium.getPlasma(1).getFluid(), 501_760L);
+ put(Materials.Radon.getPlasma(1).getFluid(), 450_560L);
+ put(Materials.Bismuth.getPlasma(1).getFluid(), 425_984L);
+ }};
}
diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java
index c6f192e467..de27967ce3 100644
--- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java
+++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java
@@ -1,199 +1,24 @@
package com.github.technus.tectech.recipe;
-import gregtech.api.enums.Materials;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidStack;
-import org.apache.commons.lang3.tuple.Pair;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
import static com.google.common.math.IntMath.pow;
+import static pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper.dimToOreWrapper;
public abstract class EyeOfHarmonyRecipeStorage {
- static final long MILLION = pow(10, 6);
- static final long BILLION = pow(10, 9);
- static final long TRILLION = pow(10, 12);
- static final long QUADRILLION = pow(10, 15);
- static final long QUINTILLION = pow(10, 18);
+// static final long MILLION = pow(10, 6); // Fix, these take int, not long, overflow occurring.
+// static final long BILLION = pow(10, 9);
+// static final long TRILLION = pow(10, 12);
+// static final long QUADRILLION = pow(10, 15);
+// static final long QUINTILLION = pow(10, 18);
static final long SEXTILLION = pow(10, 21);
- // VEGA B (approx), 36000 seconds, 3x multiplier on output (excluding 2x already from ore output):
- // iron:490_898_412L
- // gold:91_781_220L
- // copper:156_028_074L
- // antimony:24_912_048L
- // lead:105_941_754L
- // silver:26_223_204L
- // naquadah:68_180_334L
- // enriched naquadah:3_933_480L
- // tungsten:22_289_724L
- // lithium:1_311_162L
- // uranium:94_403_538L
- // arsenic:62_935_692L
- // bismuth:71_327_118L
- // infused gold:3_933_480L
- // platinum:3_933_480L
- // chrome:7_866_960L
- // neutronium:18_880_710L
- // adamantium:10_489_284L
- // titanium:1_311_162L
- // niobium:62_935_692L
- // yttrium:62_935_692L
- // gallium:15_733_926L
- // thorium:62_935_692L
- // uranium 238:62_935_692L
- // plutonium 241:7_866_960L
- // uranium 235:7_866_960L
- // cadmium:41_957_130L
- // caesium:41_957_130L
- // lanthanum:5_244_642L
- // cerium:5_244_642L
- // awakened_draconium:2_097_858L
- // black_plutonium:6_293_568L
- // infinity_catalyst:6_293_568L
-
- static HashMap<Fluid, Long> plasma_energy_map = new HashMap<Fluid, Long>() {{
- put(Materials.Helium.getPlasma(1).getFluid(), 81_920L);
- put(Materials.Boron.getPlasma(1).getFluid(), 112_640L);
- put(Materials.Nitrogen.getPlasma(1).getFluid(), 129_024L);
- put(Materials.Oxygen.getPlasma(1).getFluid(), 131_072L);
- put(Materials.Sulfur.getPlasma(1).getFluid(), 170_393L);
- put(Materials.Calcium.getPlasma(1).getFluid(), 188_416L);
- put(Materials.Titanium.getPlasma(1).getFluid(), 196_608L);
- put(Materials.Iron.getPlasma(1).getFluid(), 206_438L);
- put(Materials.Nickel.getPlasma(1).getFluid(), 213_811L);
- put(Materials.Zinc.getPlasma(1).getFluid(), 226_304L);
- put(Materials.Niobium.getPlasma(1).getFluid(), 269_516L);
- put(Materials.Silver.getPlasma(1).getFluid(), 282_685L);
- put(Materials.Tin.getPlasma(1).getFluid(), 304_496L);
- put(Materials.Americium.getPlasma(1).getFluid(), 501_760L);
- put(Materials.Radon.getPlasma(1).getFluid(), 450_560L);
- put(Materials.Bismuth.getPlasma(1).getFluid(), 425_984L);
- }};
-
- static long plasma_cost_calculator(FluidStack[] plasmas, double efficiency) {
- long total = 0;
-
- for (FluidStack plasma : plasmas) {
- total += (plasma_energy_map.get(plasma.getFluid()) * plasma.amount);
- }
-
- return (long) (total * efficiency);
- }
-
- static FluidStack[] valid_plasma_generator(final List<Pair<Materials, Long>> planet_list, final double multiplier) {
-
- List<FluidStack> plasma_list = new ArrayList<>();
-
- for (Pair<Materials, Long> pair : planet_list) {
- if (valid_plasmas.contains(pair.getLeft())) {
- plasma_list.add(pair.getLeft().getPlasma((int) (pair.getRight() * multiplier)));
- }
- }
- return plasma_list.toArray(new FluidStack[0]);
- }
-
- static List<Pair<ItemStack, Long>> valid_dust_generator(final List<Pair<Materials, Long>> planet_list, final double multiplier) {
-
- List<Pair<ItemStack, Long>> dust_list = new ArrayList<>();
-
- for (Pair<Materials, Long> pair : planet_list) {
- if (valid_plasmas.contains(pair.getLeft())) {
- dust_list.add(Pair.of(pair.getLeft().getDust(1), (long) (pair.getRight() * multiplier)));
- }
- }
- return dust_list;
- }
-
- static final List<Materials> valid_plasmas = Stream.of(
- Materials.Copper,
- Materials.Silver,
- Materials.Helium,
- Materials.Boron,
- Materials.Nitrogen,
- Materials.Oxygen,
- Materials.Sulfur,
- Materials.Calcium,
- Materials.Titanium,
- Materials.Iron,
- Materials.Nickel,
- Materials.Zinc,
- Materials.Niobium,
- Materials.Silver,
- Materials.Tin,
- Materials.Bismuth,
- Materials.Americium,
- Materials.Niobium
- ).collect(Collectors.toList());
-
- // Vega B weights (approximately). 36000 seconds, Og, UV VM, 2x for ore processing and a final 3x output bonus.
- static final List<Pair<Materials, Long>> vega_b = Stream.of(
- Pair.of(Materials.Iron, 490_898_412L),
- Pair.of(Materials.Gold, 91_781_220L),
- Pair.of(Materials.Copper, 156_028_074L),
- Pair.of(Materials.Antimony, 24_912_048L),
- Pair.of(Materials.Lead, 105_941_754L),
- Pair.of(Materials.Silver, 26_223_204L),
- Pair.of(Materials.Naquadah, 68_180_334L),
- Pair.of(Materials.NaquadahEnriched, 3_933_480L),
- Pair.of(Materials.Tungsten, 22_289_724L),
- Pair.of(Materials.Lithium, 1_311_162L),
- Pair.of(Materials.Uranium235, 94_403_538L + 156_028_074L),
- Pair.of(Materials.Arsenic, 62_935_692L),
- Pair.of(Materials.Bismuth, 71_327_118L),
- Pair.of(Materials.InfusedGold, 3_933_480L),
- Pair.of(Materials.Platinum, 3_933_480L),
- Pair.of(Materials.Chrome, 7_866_960L),
- Pair.of(Materials.Neutronium, 18_880_710L),
- Pair.of(Materials.Adamantium, 10_489_284L),
- Pair.of(Materials.Titanium, 1_311_162L),
- Pair.of(Materials.Niobium, 62_935_692L),
- Pair.of(Materials.Yttrium, 62_935_692L),
- Pair.of(Materials.Gallium, 15_733_926L),
- Pair.of(Materials.Thorium, 62_935_692L),
- Pair.of(Materials.Uranium, 62_935_692L),
- Pair.of(Materials.Plutonium241, 7_866_960L),
- Pair.of(Materials.Cadmium, 41_957_130L),
- Pair.of(Materials.Caesium, 41_957_130L),
- Pair.of(Materials.Lanthanum, 5_244_642L),
- Pair.of(Materials.Cerium, 5_244_642L),
- Pair.of(Materials.DraconiumAwakened, 2_097_858L),
- Pair.of(Materials.BlackPlutonium, 6_293_568L),
- Pair.of(Materials.InfinityCatalyst, 6_293_568L)
- ).collect(Collectors.toList());
-
- static final FluidStack[] vega_b_plasmas = valid_plasma_generator(vega_b, 0.1);
-
- static final long vega_b_seconds = 36_000L;
-
- public static final EyeOfHarmonyRecipe recipe_0 = new EyeOfHarmonyRecipe(
- valid_dust_generator(vega_b, 1),
- vega_b_plasmas,
+//
+ public static EyeOfHarmonyRecipe overworld = new EyeOfHarmonyRecipe(dimToOreWrapper.get("Ow"),
+ 1.0,
100,
100,
- 1800 * TRILLION,
- 524_288L * vega_b_seconds * 20 + 600 * TRILLION + plasma_cost_calculator(vega_b_plasmas, 1),
- vega_b_seconds * 20,
- 0.40,
- 1
- );
-
- static final EyeOfHarmonyRecipe recipe_1 = new EyeOfHarmonyRecipe(
- valid_dust_generator(vega_b, 1),
- vega_b_plasmas,
- 100 * BILLION,
- 100 * BILLION,
- 1800 * TRILLION,
- 524_288L * vega_b_seconds * 20 + 600 * TRILLION + plasma_cost_calculator(vega_b_plasmas, 1),
- vega_b_seconds * 20,
- 0.40,
- 1
- );
-
+ 36_000L,
+ 0,
+ 100 * 10,
+ 0.4);
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java
index 9e740719f7..93f56e64f5 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java
@@ -18,20 +18,23 @@ import gregtech.api.interfaces.IGlobalWirelessEnergy;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME;
+import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.fluids.FluidStack;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
-import static com.github.technus.tectech.recipe.EyeOfHarmonyRecipeStorage.recipe_0;
+import static com.github.technus.tectech.recipe.EyeOfHarmonyRecipeStorage.overworld;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset;
import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT;
@@ -151,6 +154,7 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
private double hydrogen_overflow_probability_adjustment;
private double helium_overflow_probability_adjustment;
+ // Maximum additional chance of recipe success that can be obtained from adding computation.
private static final double max_percentage_chance_gain_from_computation_per_second = 0.3;
private static final long ticks_between_hatch_drain = 20;
@@ -177,13 +181,11 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
- helium_overflow_probability_adjustment
+ max_percentage_chance_gain_from_computation_per_second * (1 - exp(-10e-5 * getComputation())));
- return clamp_probability(chance);
+ return clamp(chance, 0.0, 1.0);
}
- // Restrict number between 0 and 1. MathHelper.clamp was giving NoClassDefFoundError, so I wrote this.
- private double clamp_probability(double number) {
- if (number > (double) 1) { return 1; }
- return Math.max(number, 0);
+ public static double clamp(double amount, double min, double max) {
+ return Math.max(min, Math.min(amount, max));
}
private double recipeYieldCalculator() {
@@ -192,8 +194,7 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
- helium_overflow_probability_adjustment
- StabilisationFieldMetadata * 0.05;
- // Restrict value between 0 and 1 given it is a probability.
- return clamp_probability(yield);
+ return clamp(yield, 0.0, 1.0);
}
private long recipeProcessTimeCalculator(long recipe_time, long recipe_spacetime_casing_required) {
@@ -224,7 +225,61 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
@Override
public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) {
- return structureCheck_EM("main", 16, 16, 0);
+
+ // Check structure of multi.
+ if (!structureCheck_EM("main", 16, 16, 0)) {
+ return false;
+ }
+
+ // Check if there is 1+ output bus, and they are ME output busses.
+ {
+ if (mOutputBusses.size() == 0) {
+ return false;
+ }
+
+ for (GT_MetaTileEntity_Hatch_OutputBus hatch : mOutputBusses) {
+ if (!(hatch instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) {
+ return false;
+ }
+ }
+ }
+
+ // Check if there is 1+ output hatch, and they are ME output hatches.
+ {
+ if (mOutputHatches.size() == 0) {
+ return false;
+ }
+
+ for (GT_MetaTileEntity_Hatch_Output hatch : mOutputHatches) {
+ if (!(hatch instanceof GT_MetaTileEntity_Hatch_Output_ME)) {
+ return false;
+ }
+ }
+ }
+
+ // Make sure there are no energy hatches.
+ {
+ if (mEnergyHatches.size() > 0) {
+ return false;
+ }
+
+ if (mExoticEnergyHatches.size() > 0) {
+ return false;
+ }
+ }
+
+ // Make sure there is 2 input hatches.
+ if (mInputHatches.size() != 2) {
+ return false;
+ }
+
+ // Make sure there is 1 input bus.
+ if (mInputBusses.size() != 1) {
+ return false;
+ }
+
+ // 1 Maintenance hatch, as usual.
+ return (mMaintenanceHatches.size() == 1);
}
@Override
@@ -266,19 +321,27 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
.addInfo("starts at 1 and subtracts depending on penalities. All fluid/item outputs are multiplied")
.addInfo("by the yield calculated.")
.addInfo(GOLD + "--------------------------------------------------------------------------------")
- .addInfo("This multiblock requires a quantum chest to be placed in front each output bus for")
- .addInfo("items to output properly. Items will be instantly deposited into them when the recipe")
- .addInfo("finishes. If a quantum chest is full it will void any items over the max it can hold.")
- .addInfo("If a quantum chest is occupied by another item it will be passed over. If no chest is")
- .addInfo("avaliable the items will be " + UNDERLINE + DARK_RED + "voided" + RESET + GRAY + ".")
+ .addInfo("This multiblock can only output to ME output busses/hatches. If no space in the network")
+ .addInfo("is avaliable the items/fluids will be " + UNDERLINE + DARK_RED + "voided" + RESET + GRAY + ".")
.addInfo(GOLD + "--------------------------------------------------------------------------------")
.addInfo("Recipes that fail will return a random amount of the fluid back from the recipe and some")
- .addInfo("exotic materials that reject conventional physics.")
-
+ .addInfo("exotic material that rejects conventional physics.")
.addSeparator()
-
+ .addStructureInfo("Eye of Harmony structure is too complex! See schematic for details.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "888" + EnumChatFormatting.GRAY + " Ultimate Molecular Casing.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "534" + EnumChatFormatting.GRAY + " Ultimate Advanced Molecular Casing.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "680" + EnumChatFormatting.GRAY + " Time Dilation Field Generator.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "48" + EnumChatFormatting.GRAY + " Stabilisation Field Generator.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "138" + EnumChatFormatting.GRAY + " Spacetime Compression Field Generator.")
+ .addStructureInfo("--------------------------------------------")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " maintenance hatch.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 2 + EnumChatFormatting.GRAY + " input hatches.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + "+ ME output hatch.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " input busses.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " ME output bus.")
+ .addStructureInfo("--------------------------------------------")
.beginStructureBlock(33, 33, 33, false)
- .toolTipFinisher(CommonValues.TEC_MARK_EM + " & " + AuthorColen.substring(8));
+ .toolTipFinisher( AuthorColen.substring(8) + EnumChatFormatting.GRAY + "&" + CommonValues.TEC_MARK_EM);
return tt;
}
@@ -335,10 +398,8 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
long hydrogen_stored = validFluidMap.get(Materials.Hydrogen.getGas(1));
long helium_stored = validFluidMap.get(Materials.Helium.getGas(1));
- System.out.println("TEST123VC" + recipe_0.getEUOutput());
-
- if ((hydrogen_stored >= recipe_0.getHydrogenRequirement()) & (helium_stored >= recipe_0.getHeliumRequirement())) {
- return processRecipe(recipe_0);
+ if ((hydrogen_stored >= overworld.getHydrogenRequirement()) & (helium_stored >= overworld.getHeliumRequirement())) {
+ return processRecipe(overworld);
}
return false;
@@ -377,14 +438,12 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
double yield = recipeYieldCalculator();
- List<Pair<ItemStack, Long>> tmp_items_output = recipeObject.getOutputItems();
+ List<Pair<ItemStack, Long>> tmp_items_output = new ArrayList<>();
FluidStack[] tmp_fluids_output = recipeObject.getOutputFluids().clone();
// Iterate over item output list and apply yield values.
- for (int i = 0; i < tmp_items_output.size(); i++) {
- Pair<ItemStack, Long> tmp_0 = tmp_items_output.get(i);
- Pair<ItemStack, Long> tmp_1 = Pair.of(tmp_0.getLeft(), (long) (tmp_0.getRight() * yield));
- tmp_items_output.set(i, tmp_1);
+ for (Pair<ItemStack, Long> pair : recipeObject.getOutputItems()) {
+ tmp_items_output.add(Pair.of(pair.getLeft(), (long) (pair.getRight() * yield)));
}
// Iterate over fluid output list and apply yield values.
@@ -402,9 +461,7 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
private double success_chance;
- private void outputFailedChance() {
-
- }
+ private void outputFailedChance() {}
@Override
public void stopMachine() {
@@ -424,14 +481,8 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
addEUToGlobalEnergyMap(user_uuid, euOutput);
euOutput = 0;
- int index = 0;
- for (Pair<ItemStack, Long> item : output_items) {
- // If you can output the item, increment the input hatch index.
- try {
- if (outputItemToQuantumChest(mOutputBusses.get(index), item.getLeft(), item.getRight())) {
- index++;
- }
- } catch(Exception ignored) { break; }
+ for (Pair<ItemStack, Long> itemPair : output_items) {
+ outputItemToAENetwork(itemPair.getLeft(), itemPair.getRight());
}
super.outputAfterRecipe_EM();
@@ -450,10 +501,8 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
super.onPreTick(aBaseMetaTileEntity, aTick);
if (aTick == 1) {
-
user_uuid = String.valueOf(getBaseMetaTileEntity().getOwnerUuid());
user_name = getBaseMetaTileEntity().getOwnerName();
-
strongCheckOrAddUser(user_uuid, user_name);
}
@@ -461,7 +510,7 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
pushComputation();
if (!recipeRunning) {
- if (aTick % ticks_between_hatch_drain == 0) {
+ if ((aTick % ticks_between_hatch_drain) == 0) {
drainFluidFromHatchesAndStoreInternally();
}
}
@@ -477,93 +526,36 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
private long max(long[] array) {
long max = array[0];
- for (int i = 1; i < array.length; i++) {
- if (array[i] > max) {
- max = array[i];
- }
+ for (long i : array) {
+ if (i > max) { max = i; }
}
return max;
}
- private void addItemsToQuantumChest(IGregTechTileEntity quantum_chest, long amount) {
- long stored_quantity = quantum_chest.getProgress();
- int max_inventory_size = quantum_chest.getMaxItemCount();
+ // Will void if AE network is full.
+ private void outputItemToAENetwork(ItemStack item, long amount) {
- if ((stored_quantity + amount) > max_inventory_size) {
- quantum_chest.setItemCount(max_inventory_size);
- } else {
- quantum_chest.setItemCount((int) (amount + stored_quantity));
- }
- }
-
- private int[] coordinate_calculator(GT_MetaTileEntity_Hatch output_bus) {
-
- IGregTechTileEntity tile_entity = output_bus.getBaseMetaTileEntity();
-
- int x = tile_entity.getXCoord();
- int y = tile_entity.getYCoord();
- int z = tile_entity.getZCoord();
-
- // Get direction that the output bus is currently facing.
- switch (tile_entity.getFrontFacing()) {
- case 0:
- y -= 1;
- case 1:
- y += 1;
- case 2:
- z -= 1;
- case 3:
- z += 1;
- case 4:
- x -= 1;
- case 5:
- x += 1;
+ if ((item == null) || (amount <= 0)) {
+ return;
}
- int[] coordinates = new int[3];
-
- coordinates[0] = x;
- coordinates[1] = y;
- coordinates[2] = z;
-
- return coordinates;
- }
-
- private boolean outputItemToQuantumChest(GT_MetaTileEntity_Hatch_OutputBus output_bus, ItemStack item, long amount) {
-
- int[] coords = coordinate_calculator(output_bus);
- int x = coords[0];
- int y = coords[1];
- int z = coords[2];
-
- try {
- // Get block in front of output bus.
- IGregTechTileEntity quantum_chest = (IGregTechTileEntity) getBaseMetaTileEntity().getTileEntity(x, y, z);
-
- // Slot 0 = Top input slot of quantum chest.
- // Slot 1 = Bottom output slot of quantum chest.
- // Slot 2 = Stored item slot.
- ItemStack quantum_chest_stored_item = quantum_chest.getStackInSlot(2);
-
- // Adjust sizes so no extra items from quantum chest nonsense.
- amount = amount - 64;
- item.stackSize = 64;
-
- // Check if chest contains item already. If not, add it.
- if (quantum_chest_stored_item == null) {
- quantum_chest.setInventorySlotContents(0, item);
- addItemsToQuantumChest(quantum_chest, amount);
- return true;
- } else if (quantum_chest_stored_item.isItemEqual(item)) {
- addItemsToQuantumChest(quantum_chest, amount);
- return true;
+ if (amount < Integer.MAX_VALUE) {
+ ItemStack tmpItem = item.copy();
+ tmpItem.stackSize = (int) amount;
+ ((GT_MetaTileEntity_Hatch_OutputBus_ME) mOutputBusses.get(0)).store(tmpItem);
+ } else {
+ // For item stacks > Int max.
+ while (amount >= Integer.MAX_VALUE) {
+ ItemStack tmpItem = item.copy();
+ tmpItem.stackSize = Integer.MAX_VALUE;
+ ((GT_MetaTileEntity_Hatch_OutputBus_ME) mOutputBusses.get(0)).store(tmpItem);
+ amount -= Integer.MAX_VALUE;
}
- } catch (Exception e) {
- e.printStackTrace();
+ ItemStack tmpItem = item.copy();
+ tmpItem.stackSize = (int) amount;
+ ((GT_MetaTileEntity_Hatch_OutputBus_ME) mOutputBusses.get(0)).store(tmpItem);
}
-
- return false;
}
@Override
@@ -587,7 +579,6 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
@Override
public void saveNBTData(NBTTagCompound aNBT) {
-
// Save the quantity of fluid stored inside the controller.
validFluidMap.forEach((key, value) -> aNBT.setLong("stored." + key.getUnlocalizedName(), value));
@@ -601,7 +592,6 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl
// Load t