aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/core/util
diff options
context:
space:
mode:
authorMartin Robertz <dream-master@gmx.net>2021-12-12 19:09:46 +0100
committerGitHub <noreply@github.com>2021-12-12 19:09:46 +0100
commit896143b96132f5ac54aa8d8f7386f27487e5e530 (patch)
treed61c1bced93b36545873414562b1dfd80718f496 /src/Java/gtPlusPlus/core/util
parent9cbfc7a1bacdbe908632e0fff9ec5ad7f119e563 (diff)
parent35585d4556d85a1a9cda33cdd39b5b257e3e5215 (diff)
downloadGT5-Unofficial-896143b96132f5ac54aa8d8f7386f27487e5e530.tar.gz
GT5-Unofficial-896143b96132f5ac54aa8d8f7386f27487e5e530.tar.bz2
GT5-Unofficial-896143b96132f5ac54aa8d8f7386f27487e5e530.zip
Merge pull request #50 from GTNewHorizons/gtnh-milling
Milling/Nuclear Sciences revamp + Lots of minor fixes
Diffstat (limited to 'src/Java/gtPlusPlus/core/util')
-rw-r--r--src/Java/gtPlusPlus/core/util/data/ArrayUtils.java12
-rw-r--r--src/Java/gtPlusPlus/core/util/math/MathUtils.java16
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/FluidUtils.java38
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java49
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/MaterialUtils.java7
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java40
-rw-r--r--src/Java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java61
-rw-r--r--src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java12
8 files changed, 169 insertions, 66 deletions
diff --git a/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java b/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
index c9c8d26744..62f703f5f5 100644
--- a/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
+++ b/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
@@ -26,6 +26,18 @@ public class ArrayUtils {
return series;
}
+ public static <V> V[] insertElementAtIndex(V[] aArray, int aIndex, V aObjectToInsert) {
+ V[] newArray = Arrays.copyOf(aArray, aArray.length + 1);
+ for (int i=0;i<aIndex;i++) {
+ newArray[i] = aArray[i];
+ }
+ newArray[aIndex] = aObjectToInsert;
+ for (int i=(aIndex+1);i<newArray.length;i++) {
+ newArray[i] = aArray[i-1];
+ }
+ return newArray;
+ }
+
/*public static <V> Object getMostCommonElement(List<V> list) {
Optional r = list.stream().map(V::getTextureSet).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey);
return r.get();
diff --git a/src/Java/gtPlusPlus/core/util/math/MathUtils.java b/src/Java/gtPlusPlus/core/util/math/MathUtils.java
index 2f4db2efcc..7573e0d51c 100644
--- a/src/Java/gtPlusPlus/core/util/math/MathUtils.java
+++ b/src/Java/gtPlusPlus/core/util/math/MathUtils.java
@@ -1,5 +1,6 @@
package gtPlusPlus.core.util.math;
+import java.text.NumberFormat;
import java.util.Map;
import java.util.Random;
@@ -15,6 +16,13 @@ public class MathUtils {
final static Random rand = CORE.RANDOM;
+ /** Formats a number with group separator and at most 2 fraction digits. */
+ private static final NumberFormat sNumberFormat = NumberFormat.getInstance();
+
+ static {
+ sNumberFormat.setMaximumFractionDigits(2);
+ }
+
/**
* Returns a psuedo-random number between min and max, inclusive.
* The difference between min and max can be at most
@@ -766,6 +774,14 @@ public class MathUtils {
public static Number max(Number a, Number b) {
return (a.longValue() >= b.longValue()) ? a : b;
}
+
+ public static String formatNumbers(long aNumber) {
+ return sNumberFormat.format(aNumber);
+ }
+
+ public static String formatNumbers(double aNumber) {
+ return sNumberFormat.format(aNumber);
+ }
}
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/FluidUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/FluidUtils.java
index 758ec8bab0..a6bd50ff17 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/FluidUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/FluidUtils.java
@@ -175,7 +175,7 @@ public class FluidUtils {
}
public static Fluid addGTFluid(final String aName, final String aLocalized, final short[] aRGBa, final int aState, final long aTemperatureK, final ItemStack aFullContainer, final ItemStack aEmptyContainer, final int aFluidAmount, final boolean aGenerateCell) {
- return addGTFluid("molten."+aName, "molten.autogenerated", aLocalized, aRGBa, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell);
+ return addGTFluid("molten."+aName, "fluid.autogenerated", aLocalized, aRGBa, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell);
}
public static Fluid addGTFluidNonMolten(final String aName, final String aLocalized, final short[] aRGBa, final int aState, final long aTemperatureK, final ItemStack aFullContainer, final ItemStack aEmptyContainer, final int aFluidAmount, final boolean aGenerateCell) {
@@ -232,6 +232,7 @@ public class FluidUtils {
public static Fluid addGTFluid(String aName, final String aTexture, final String aLocalized, final short[] aRGBa, final int aState, final long aTemperatureK, ItemStack aFullContainer, final ItemStack aEmptyContainer, final int aFluidAmount, final boolean aGenerateFilledCell) {
String aNameOriginal = aName;
+ Logger.INFO("Generating Fluid for "+aName);
aName = Utils.sanitizeString(aName.toLowerCase());
@@ -286,10 +287,28 @@ public class FluidUtils {
}
+ String aNameNonMolten = aLocalName.contains("Molten") ? aLocalName.replace("Molten", "") : aLocalName;
if (aFullContainer == null) {
- ItemStack oreStack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+aName, 1);
- aFullContainer = oreStack;
+ ItemStack oreStack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+aLocalName, 1);
+ aFullContainer = oreStack;
+ if (aFullContainer == null) {
+ oreStack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+aNameOriginal, 1);
+ aFullContainer = oreStack;
+ if (aFullContainer == null) {
+ oreStack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+aNameNonMolten, 1);
+ aFullContainer = oreStack;
+ if (aFullContainer != null) {
+ Logger.INFO("Found cell for "+aNameNonMolten);
+ }
+ }
+ else {
+ Logger.INFO("Found cell for "+aNameOriginal);
+ }
+ }
+ else {
+ Logger.INFO("Found cell for "+aLocalName);
+ }
}
Item tempCell = null;
@@ -304,7 +323,8 @@ public class FluidUtils {
aMatName = aMatName.replace("fluid.", "");
aMatName = aMatName.substring(0, 1).toUpperCase() + aMatName.substring(1);
}
- tempCell = new BaseItemComponent(aMatName, aLocalized, aRGBa);
+ Logger.INFO("Generating cell for "+aMatName+", "+aLocalName);
+ tempCell = new BaseItemComponent(aMatName, aLocalName, aRGBa);
aFullContainer = ItemUtils.getSimpleStack(tempCell);
}
@@ -563,11 +583,11 @@ public class FluidUtils {
return aFStack1 != null || aFStack2 != null || aFStack3 != null || aFStack4 != null || aFStack5 != null || aFStack6 != null;
}
- public static FluidStack getWildcardFluidStack(String aFluidName, int amount) {
- FluidStack aFStack1 = (FluidUtils.getFluidStack("molten"+"."+aFluidName.toLowerCase(), amount));
- FluidStack aFStack2 = (FluidUtils.getFluidStack("fluid"+"."+aFluidName.toLowerCase(), amount));
- FluidStack aFStack3 = (FluidUtils.getFluidStack(aFluidName.toLowerCase(), amount));
- FluidStack aFStack4 = (FluidUtils.getFluidStack(aFluidName, amount));
+ public static FluidStack getWildcardFluidStack(String aFluidName, int amount) {
+ FluidStack aFStack1 = (FluidUtils.getFluidStack(aFluidName, amount));
+ FluidStack aFStack2 = (FluidUtils.getFluidStack(aFluidName.toLowerCase(), amount));
+ FluidStack aFStack3 = (FluidUtils.getFluidStack("molten"+"."+aFluidName.toLowerCase(), amount));
+ FluidStack aFStack4 = (FluidUtils.getFluidStack("fluid"+"."+aFluidName.toLowerCase(), amount));
FluidStack aFStack5 = (FluidUtils.getFluidStack("liquid_"+aFluidName.toLowerCase(), amount));
FluidStack aFStack6 = (FluidUtils.getFluidStack("liquid"+"."+aFluidName.toLowerCase(), amount));
if (aFStack1 != null) {
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
index 1e282fb849..e96bd3391b 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
@@ -703,6 +703,44 @@ public class ItemUtils {
}
return sRadiation;
}
+
+ public static String getArrayStackNames(ArrayList<?> aStack) {
+ Object aType = aStack.get(0);
+ if (aType instanceof FluidStack) {
+ FluidStack[] aItems = new FluidStack[aStack.size()];
+ for (int i=0;i<aItems.length;i++) {
+ aItems[i] = (FluidStack) aStack.get(i);
+ }
+ return getArrayStackNames(aItems);
+ }
+ if (aType instanceof ItemStack) {
+ ItemStack[] aItems = new ItemStack[aStack.size()];
+ for (int i=0;i<aItems.length;i++) {
+ aItems[i] = (ItemStack) aStack.get(i);
+ }
+ return getArrayStackNames(aItems);
+ }
+ return "";
+ }
+
+ public static String getArrayStackNames(final AutoMap<?> aStack) {
+ Object aType = aStack.get(0);
+ if (aType instanceof FluidStack) {
+ FluidStack[] aItems = new FluidStack[aStack.size()];
+ for (int i=0;i<aItems.length;i++) {
+ aItems[i] = (FluidStack) aStack.get(i);
+ }
+ return getArrayStackNames(aItems);
+ }
+ if (aType instanceof ItemStack) {
+ ItemStack[] aItems = new ItemStack[aStack.size()];
+ for (int i=0;i<aItems.length;i++) {
+ aItems[i] = (ItemStack) aStack.get(i);
+ }
+ return getArrayStackNames(aItems);
+ }
+ return "";
+ }
public static String getArrayStackNames(final FluidStack[] aStack) {
String itemNames = "Fluid Array: ";
@@ -717,7 +755,7 @@ public class ItemUtils {
}
return itemNames;
}
-
+
public static String getArrayStackNames(final ItemStack[] aStack) {
String itemNames = "";
int aPos = 0;
@@ -913,10 +951,11 @@ public class ItemUtils {
}
public static ItemStack getErrorStack(int mAmount, String aName) {
- ItemStack g = getSimpleStack(ModItems.AAA_Broken, 1);
- NBTUtils.setString(g, "Lore", EnumChatFormatting.RED+aName);
+ ItemStack g = getSimpleStack(ModItems.AAA_Broken, 1);
if (aName != null) {
- NBTUtils.setBookTitle(g, EnumChatFormatting.YELLOW+"Maybe Alkalus should know about this");
+ //NBTUtils.setString(g, "Lore", EnumChatFormatting.RED+aName);
+ NBTUtils.setBookTitle(g, EnumChatFormatting.RED+aName);
+ //NBTUtils.setBookTitle(g, EnumChatFormatting.YELLOW+"Maybe Alkalus should know about this");
}
return g;
}
@@ -1375,6 +1414,6 @@ public class ItemUtils {
public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) {
return GT_Utility.areStacksEqual(aStack1, aStack2, aIgnoreNBT);
- }
+ }
}
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/MaterialUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/MaterialUtils.java
index 7e9e34ae47..0323bf0161 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/MaterialUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/MaterialUtils.java
@@ -512,5 +512,12 @@ public class MaterialUtils {
return false;
}
+ public static boolean isNullGregtechMaterial(Materials aGregtechMaterial) {
+ if (aGregtechMaterial == Materials._NULL || aGregtechMaterial.equals(Materials._NULL) || aGregtechMaterial.name().equals(Materials._NULL.name())) {
+ return true;
+ }
+ return false;
+ }
+
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
index df64017ac0..da5bc071bc 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
@@ -1,15 +1,18 @@
package gtPlusPlus.core.util.minecraft;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import cpw.mods.fml.common.registry.GameRegistry;
-import cpw.mods.fml.common.FMLCommonHandler;
import gregtech.api.enums.Materials;
import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.api.interfaces.RunnableWithInfo;
import gtPlusPlus.api.objects.Logger;
@@ -21,7 +24,6 @@ import gtPlusPlus.core.handler.Recipes.RegistrationHandler;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.data.ArrayUtils;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -348,16 +350,7 @@ public static int mInvalidID = 1;
if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) {
- Logger.RECIPE(ReflectionUtils.getMethodName(1));
- Logger.RECIPE(ReflectionUtils.getMethodName(2));
- Logger.RECIPE(ReflectionUtils.getMethodName(3));
- Logger.RECIPE(ReflectionUtils.getMethodName(4));
- Logger.RECIPE(ReflectionUtils.getMethodName(5));
- Logger.RECIPE(ReflectionUtils.getMethodName(6));
- Logger.RECIPE(ReflectionUtils.getMethodName(7));
- Logger.RECIPE(ReflectionUtils.getMethodName(8));
- Logger.RECIPE(ReflectionUtils.getMethodName(9));
- FMLCommonHandler.instance().exitJava(1, true);
+ CORE.crash("Load Phase "+gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE+" should be "+GTplusplus.INIT_PHASE.POST_INIT+". Unable to register recipe.");
}
@@ -418,6 +411,20 @@ public static int mInvalidID = 1;
}
return false;
}
+
+ public static boolean addShapelessGregtechRecipe(
+ final Object InputItem1, final Object InputItem2, final Object InputItem3,
+ final Object InputItem4, final Object InputItem5, final Object InputItem6,
+ final Object InputItem7, final Object InputItem8, final Object InputItem9,
+ final ItemStack OutputItem){
+
+ Object[] inputItems = {
+ InputItem1, InputItem2, InputItem3,
+ InputItem4, InputItem5, InputItem6,
+ InputItem7, InputItem8, InputItem9
+ };
+ return addShapelessGregtechRecipe(inputItems, OutputItem);
+ }
public static boolean addShapelessGregtechRecipe(final Object[] inputItems, final ItemStack OutputItem){
//Catch Invalid Recipes
@@ -492,10 +499,7 @@ public static int mInvalidID = 1;
result.put("Is Enabled? "+m.mEnabled);
result.put("Special Value: "+m.mSpecialValue);
result.put("=====================================");
- String s[] = new String[result.size()];
- for (int i=0;i<result.size();i++) {
- s[i] = result.get(i);
- }
+ String s[] = result.toArray();
return s;
}
@@ -729,7 +733,7 @@ public static int mInvalidID = 1;
Logger.INFO("Data Size: "+aDataObject.length);
aDataObject = ArrayUtils.removeNulls(aDataObject);
Logger.INFO("Clean Size: "+aDataObject.length);
- Logger.INFO("ArrayData: "+aDataObject.toString());
+ Logger.INFO("ArrayData: "+Arrays.toString(aDataObject));
ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, aDataObject);
diff --git a/src/Java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java b/src/Java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java
index 0b22ea3acc..fc8e84cb61 100644
--- a/src/Java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java
+++ b/src/Java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java
@@ -3,16 +3,15 @@ package gtPlusPlus.core.util.reflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import net.minecraft.item.ItemStack;
-
import gregtech.api.enums.GT_Values;
import gregtech.api.interfaces.internal.IGT_RecipeAdder;
import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
public final class AddGregtechRecipe {
@@ -24,53 +23,47 @@ public final class AddGregtechRecipe {
if (aRecipe.mInputs == null || aRecipe.mFluidInputs == null || aRecipe.mFluidOutputs == null || aRecipe.mOutputs == null) {
return false;
- }
-
- if (aRecipe.mInputs.length > 2 || aRecipe.mFluidInputs.length > 1 || aRecipe.mFluidOutputs.length > 1 || aRecipe.mOutputs.length > 1) {
+ }
+ if (aRecipe.mInputs.length > 2 || aRecipe.mFluidInputs.length > 1 || aRecipe.mFluidOutputs.length > 1 || aRecipe.mOutputs.length > 9) {
return false;
}
- else if (aRecipe.mInputs.length <= 0 || aRecipe.mFluidInputs.length <= 0 || aRecipe.mFluidOutputs.length <= 0 || aRecipe.mOutputs.length <= 0) {
+ else if (aRecipe.mInputs.length <= 0) {
return false;
}
int aCircuitNumber = -1;
- int aItemSlot = -1;
+ Item aCircuit = CI.getNumberedCircuit(1).getItem();
+ boolean hasCircuit = false;
- int aSlot = 0;
for (ItemStack a : aRecipe.mInputs) {
- if (a != null && a.getItem() != CI.getNumberedCircuit(1).getItem()) {
- aItemSlot = aSlot;
- }
- else {
- aSlot++;
+ if (a != null && a.getItem() == aCircuit) {
+ hasCircuit = true;
+ aCircuitNumber = a.getItemDamage();
+ break;
}
}
- for (int i=0;i<25;i++) {
- ItemStack aTest = CI.getNumberedCircuit(i);
- for (ItemStack a : aRecipe.mInputs) {
- if (a != null && GT_Utility.areStacksEqual(a, aTest)) {
- aCircuitNumber = i;
- break;
- }
- }
+ ItemStack aInputItem = null;
+ if (!hasCircuit || aCircuitNumber < 1) {
+ return false;
}
- if (aCircuitNumber < 0) {
- return false;
+ for (ItemStack a : aRecipe.mInputs) {
+ if (a != null && a.getItem() != aCircuit) {
+ aInputItem = a;
+ break;
+ }
}
-
return CORE.RA.addCokeOvenRecipe(
- aRecipe.mInputs[aItemSlot],
- ItemUtils.getGregtechCircuit(aCircuitNumber),
- aRecipe.mFluidInputs[0],
- aRecipe.mFluidOutputs[0],
- aRecipe.mOutputs[0],
- aModifiedTime,
- aRecipe.mEUt);
-
-
+ aCircuitNumber,
+ aInputItem,
+ aRecipe.mFluidInputs,
+ aRecipe.mFluidOutputs,
+ aRecipe.mOutputs,
+ aModifiedTime,
+ aRecipe.mEUt);
+
}
diff --git a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
index e0634dfb14..1ef925f793 100644
--- a/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
+++ b/src/Java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
@@ -432,6 +432,18 @@ public class ReflectionUtils {
t.printStackTrace();
}
}
+
+ /**
+ * Allows to change the state of an immutable instance. Huh?!?
+ */
+ public static void setFinalFieldValue(Class<?> clazz, Field field, Object newValue) {
+ try {
+ setFieldValue_Internal(clazz, field, newValue);
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
@Deprecated
public static void setFinalStatic(Field field, Object newValue) throws Exception {