diff options
author | Martin Robertz <dream-master@gmx.net> | 2021-12-12 19:09:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-12 19:09:46 +0100 |
commit | 896143b96132f5ac54aa8d8f7386f27487e5e530 (patch) | |
tree | d61c1bced93b36545873414562b1dfd80718f496 /src/Java/gtPlusPlus/core/util | |
parent | 9cbfc7a1bacdbe908632e0fff9ec5ad7f119e563 (diff) | |
parent | 35585d4556d85a1a9cda33cdd39b5b257e3e5215 (diff) | |
download | GT5-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')
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 { |