From 7d1f51a8937e0a86486267437d444696e81e8aa0 Mon Sep 17 00:00:00 2001 From: Jakub <53441451+kuba6000@users.noreply.github.com> Date: Mon, 29 Aug 2022 16:04:28 +0200 Subject: Buildscript + Spotless (#318) * Convert AES.java to readable class * Buildscript * Spotless --- .../gtPlusPlus/core/util/MovingAverageLong.java | 3 +- src/main/java/gtPlusPlus/core/util/Utils.java | 1808 ++++++------- src/main/java/gtPlusPlus/core/util/data/AES.java | 154 +- .../java/gtPlusPlus/core/util/data/ArrayUtils.java | 192 +- .../java/gtPlusPlus/core/util/data/EnumUtils.java | 75 +- .../java/gtPlusPlus/core/util/data/FileUtils.java | 164 +- .../gtPlusPlus/core/util/data/LocaleUtils.java | 136 +- .../gtPlusPlus/core/util/data/LoggingUtils.java | 76 +- .../gtPlusPlus/core/util/data/StringUtils.java | 425 +-- .../java/gtPlusPlus/core/util/data/UUIDUtils.java | 29 +- .../gtPlusPlus/core/util/debug/DEBUG_INIT.java | 51 +- .../core/util/debug/DEBUG_ITEM_ShapeSpawner.java | 83 +- .../util/debug/DEBUG_MULTIBLOCK_ShapeSpawner.java | 1849 ++++++------- .../core/util/debug/DEBUG_ScreenOverlay.java | 54 +- .../core/util/debug/DEBUG_TimerThread.java | 104 +- .../core/util/debug/UtilityGL11Debug.java | 1426 +++++++--- .../java/gtPlusPlus/core/util/math/MathUtils.java | 1559 ++++++----- .../core/util/minecraft/ClientUtils.java | 15 +- .../core/util/minecraft/EnchantingUtils.java | 173 +- .../core/util/minecraft/EnergyUtils.java | 233 +- .../core/util/minecraft/EntityUtils.java | 458 ++-- .../gtPlusPlus/core/util/minecraft/FluidUtils.java | 1446 +++++----- .../gtPlusPlus/core/util/minecraft/FoodUtils.java | 94 +- .../core/util/minecraft/HazmatUtils.java | 1141 ++++---- .../core/util/minecraft/InventoryUtils.java | 131 +- .../gtPlusPlus/core/util/minecraft/ItemUtils.java | 2777 ++++++++++---------- .../gtPlusPlus/core/util/minecraft/LangUtils.java | 264 +- .../core/util/minecraft/MaterialUtils.java | 1012 +++---- .../core/util/minecraft/MiningUtils.java | 483 ++-- .../core/util/minecraft/ModularArmourUtils.java | 305 +-- .../gtPlusPlus/core/util/minecraft/NBTUtils.java | 1128 ++++---- .../core/util/minecraft/OreDictUtils.java | 29 +- .../core/util/minecraft/PlayerUtils.java | 460 ++-- .../core/util/minecraft/RecipeUtils.java | 1538 ++++++----- .../core/util/minecraft/ShapelessUtils.java | 72 +- .../util/minecraft/gregtech/PollutionUtils.java | 322 ++- .../gregtech/material/MaterialBuilder.java | 482 ++-- .../gregtech/recipehandlers/GregtechRecipe.java | 2 +- .../core/util/minecraft/network/CustomPacket.java | 52 +- .../core/util/minecraft/network/PacketBuilder.java | 33 +- .../util/minecraft/network/PacketDispatcher.java | 127 +- .../core/util/minecraft/network/PacketHandler.java | 94 +- .../util/minecraft/network/PacketTileEntity.java | 114 +- .../minecraft/particles/BlockBreakParticles.java | 16 +- .../particles/EntityParticleFXMysterious.java | 25 +- .../gtPlusPlus/core/util/player/PlayerCache.java | 289 +- .../core/util/reflect/AddGregtechRecipe.java | 466 ++-- .../gtPlusPlus/core/util/reflect/ProxyFinder.java | 90 +- .../core/util/reflect/ReflectionUtils.java | 2172 ++++++++------- .../gtPlusPlus/core/util/sys/KeyboardUtils.java | 61 +- src/main/java/gtPlusPlus/core/util/sys/Log.java | 26 +- .../java/gtPlusPlus/core/util/sys/SystemUtils.java | 153 +- 52 files changed, 12826 insertions(+), 11645 deletions(-) (limited to 'src/main/java/gtPlusPlus/core/util') diff --git a/src/main/java/gtPlusPlus/core/util/MovingAverageLong.java b/src/main/java/gtPlusPlus/core/util/MovingAverageLong.java index f59aa20ecd..fee1fe84bc 100644 --- a/src/main/java/gtPlusPlus/core/util/MovingAverageLong.java +++ b/src/main/java/gtPlusPlus/core/util/MovingAverageLong.java @@ -1,11 +1,10 @@ package gtPlusPlus.core.util; -import net.minecraft.nbt.NBTTagCompound; - import java.math.BigInteger; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; +import net.minecraft.nbt.NBTTagCompound; public class MovingAverageLong { private final long[] storage; diff --git a/src/main/java/gtPlusPlus/core/util/Utils.java b/src/main/java/gtPlusPlus/core/util/Utils.java index ac61abdd30..274d180de8 100644 --- a/src/main/java/gtPlusPlus/core/util/Utils.java +++ b/src/main/java/gtPlusPlus/core/util/Utils.java @@ -1,36 +1,11 @@ package gtPlusPlus.core.util; -import java.awt.Color; -import java.awt.Graphics; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.ObjectOutput; -import java.io.ObjectOutputStream; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; - -import javax.xml.bind.DatatypeConverter; - -import org.apache.commons.lang3.EnumUtils; - import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.EntityRegistry.EntityRegistration; import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.TC_Aspects; import gregtech.api.enums.TC_Aspects.TC_AspectStack; @@ -55,6 +30,26 @@ import gtPlusPlus.plugin.villagers.tile.TileEntityGenericSpawner; import ic2.core.Ic2Items; import ic2.core.init.InternalName; import ic2.core.item.resources.ItemCell; +import java.awt.Color; +import java.awt.Graphics; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import javax.xml.bind.DatatypeConverter; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -73,888 +68,921 @@ import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; +import org.apache.commons.lang3.EnumUtils; public class Utils { - public static final int WILDCARD_VALUE = Short.MAX_VALUE; - - public static final boolean isServer() { - return FMLCommonHandler.instance().getEffectiveSide().isServer(); - } - - public static final boolean isClient() { - return FMLCommonHandler.instance().getEffectiveSide().isClient(); - } - - static class ShortTimerTask extends TimerTask { - @Override - public void run() { - Logger.WARNING("Timer expired."); - } - } - - public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final long size) { - return getTcAspectStack(aspect.name(), (int) size); - } - - public static TC_AspectStack getTcAspectStack(final String aspect, final long size) { - return getTcAspectStack(aspect, (int) size); - } - - public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final int size) { - return getTcAspectStack(aspect.name(), size); - } - - public static TC_AspectStack getTcAspectStack(final String aspect, final int size) { - - TC_AspectStack returnValue = null; - - if (aspect.toUpperCase().equals("COGNITIO")) { - // Adds in Compat for older GT Versions which Misspell aspects. - try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "COGNITIO")) { - Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITIO"), size); - } else { - Logger.INFO("Fallback TC Aspect found - " + aspect - + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITO"), size); - } - } catch (final NoSuchFieldError r) { - Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); - } - } else if (aspect.toUpperCase().equals("EXANIMUS")) { - // Adds in Compat for older GT Versions which Misspell aspects. - try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "EXANIMUS")) { - Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXANIMUS"), size); - } else { - Logger.INFO("Fallback TC Aspect found - " + aspect - + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXAMINIS"), size); - } - } catch (final NoSuchFieldError r) { - Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); - } - - } else if (aspect.toUpperCase().equals("PRAECANTATIO")) { - // Adds in Compat for older GT Versions which Misspell aspects. - try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "PRAECANTATIO")) { - Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTATIO"), size); - } else { - Logger.INFO("Fallback TC Aspect found - " + aspect - + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTIO"), size); - } - } catch (final NoSuchFieldError r) { - Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); - } - } else { - Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf(aspect), size); - } - - return returnValue; - } - - public static boolean containsMatch(final boolean strict, final ItemStack[] inputs, final ItemStack... targets) { - for (final ItemStack input : inputs) { - for (final ItemStack target : targets) { - if (itemMatches(target, input, strict)) { - return true; - } - } - } - return false; - } - - public static boolean itemMatches(final ItemStack target, final ItemStack input, final boolean strict) { - if ((input == null) || (target == null)) { - return false; - } - return ((target.getItem() == input.getItem()) && (((target.getItemDamage() == WILDCARD_VALUE) && !strict) - || (target.getItemDamage() == input.getItemDamage()))); - } - - //Register an event to both busses. - public static void registerEvent(Object o){ - MinecraftForge.EVENT_BUS.register(o); - FMLCommonHandler.instance().bus().register(o); - } - - public static void paintBox(final Graphics g, final int MinA, final int MinB, final int MaxA, final int MaxB) { - g.drawRect(MinA, MinB, MaxA, MaxB); - } - - // Send a message to all players on the server - public static void sendServerMessage(final String translationKey) { - sendServerMessage(new ChatComponentText(translationKey)); - } - - // Send a message to all players on the server - public static void sendServerMessage(final IChatComponent chatComponent) { - MinecraftServer.getServer().getConfigurationManager().sendChatMsg(chatComponent); - } - - /** - * Returns if that Liquid is IC2Steam. - */ - public static boolean isIC2Steam(final FluidStack aFluid) { - if (aFluid == null) { - return false; - } - return aFluid.isFluidEqual(getIC2Steam(1)); - } - - /** - * Returns a Liquid Stack with given amount of IC2Steam. - */ - public static FluidStack getIC2Steam(final long aAmount) { - return FluidRegistry.getFluidStack("ic2steam", (int) aAmount); - } - - /* - * public static void recipeBuilderBlock(ItemStack slot_1, ItemStack slot_2, - * ItemStack slot_3, ItemStack slot_4, ItemStack slot_5, ItemStack slot_6, - * ItemStack slot_7, ItemStack slot_8, ItemStack slot_9, Block resultBlock){ - * GameRegistry.addRecipe(new ItemStack(resultBlock), new Object[] {"ABC", - * "DEF", "GHI", 'A',slot_1,'B',slot_2,'C',slot_3, - * 'D',slot_4,'E',slot_5,'F',slot_6, 'G',slot_7,'H',slot_8,'I',slot_9 }); } - */ - - public static String checkCorrectMiningToolForBlock(final Block currentBlock, final World currentWorld) { - String correctTool = ""; - if (!currentWorld.isRemote) { - try { - correctTool = currentBlock.getHarvestTool(0); - Logger.WARNING(correctTool); - - } catch (final NullPointerException e) { - - } - } - - return correctTool; - } - - /** - * - * @param colourStr - * e.g. "#FFFFFF" - * @return String - formatted "rgb(0,0,0)" - */ - public static String hex2RgbFormatted(final String hexString) { - final Color c = new Color(Integer.valueOf(hexString.substring(1, 3), 16), - Integer.valueOf(hexString.substring(3, 5), 16), Integer.valueOf(hexString.substring(5, 7), 16)); - - final StringBuffer sb = new StringBuffer(); - sb.append("rgb("); - sb.append(c.getRed()); - sb.append(","); - sb.append(c.getGreen()); - sb.append(","); - sb.append(c.getBlue()); - sb.append(")"); - return sb.toString(); - } - - /** - * - * @param colourStr - * e.g. "#FFFFFF" - * @return - */ - public static Color hex2Rgb(final String colorStr) { - return new Color(Integer.valueOf(colorStr.substring(1, 3), 16), Integer.valueOf(colorStr.substring(3, 5), 16), - Integer.valueOf(colorStr.substring(5, 7), 16)); - } - - /** - * - * @param colourInt - * e.g. 0XFFFFFF - * @return Colour - */ - public static Color hex2Rgb(final int colourInt) { - return Color.decode(String.valueOf(colourInt)); - } - - /** - * - * @param colourInt - * e.g. 0XFFFFFF - * @return short[] - */ - public static short[] hex2RgbShort(final int colourInt) { - final Color rgb = Color.decode(String.valueOf(colourInt)); - final short[] rgba = { (short) rgb.getRed(), (short) rgb.getGreen(), (short) rgb.getBlue(), - (short) rgb.getAlpha() }; - return rgba; - } - - public static Timer ShortTimer(final int seconds) { - Timer timer; - timer = new Timer(); - timer.schedule(new ShortTimerTask(), seconds * 1000); - return timer; - } - - public static String byteToHex(final byte b) { - final int i = b & 0xFF; - return Integer.toHexString(i); - } - - public static Object[] convertListToArray(final List sourceList) { - final Object[] targetArray = sourceList.toArray(new Object[sourceList.size()]); - return targetArray; - } - - public static List convertArrayToFixedSizeList(final Object[] sourceArray) { - final List targetList = Arrays.asList(sourceArray); - return targetList; - } - - public static List convertArrayToList(final Object[] sourceArray) { - final List targetList = new ArrayList<>(Arrays.asList(sourceArray)); - return targetList; - } - - public static List convertArrayListToList(final ArrayList sourceArray) { - final List targetList = new ArrayList(Arrays.asList(sourceArray)); - return targetList; - } - - public static void spawnCustomParticle(final Entity entity) { - GTplusplus.proxy.generateMysteriousParticles(entity); - } - - public static void spawnFX(final World world, final int x, final int y, final int z, final String particleName, - Object particleName2) { - if (!world.isRemote) { - if ((particleName2 == null) || particleName2.equals("")) { - particleName2 = particleName; - } - final int l = MathUtils.randInt(0, 4); - final double d0 = x + 0.5F; - final double d1 = y + 0.7F; - final double d2 = z + 0.5F; - final double d3 = 0.2199999988079071D; - final double d4 = 0.27000001072883606D; - - if (l == 1) { - world.spawnParticle(particleName, d0 - d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D); - } else if (l == 2) { - world.spawnParticle((String) particleName2, d0 + d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D); - } else if (l == 3) { - world.spawnParticle(particleName, d0, d1 + d3, d2 - d4, 0.0D, 0.0D, 0.0D); - } else if (l == 4) { - world.spawnParticle((String) particleName2, d0, d1 + d3, d2 + d4, 0.0D, 0.0D, 0.0D); - } else { - world.spawnParticle(particleName, d0, d1, d2, 0.0D, 0.0D, 0.0D); - if (particleName2 != null) { - world.spawnParticle((String) particleName2, d0, d1, d2, 0.0D, 0.0D, 0.0D); - } - } - } - } - - public static int rgbtoHexValue(final int r, final int g, final int b) { - if ((r > 255) || (g > 255) || (b > 255) || (r < 0) || (g < 0) || (b < 0)) { - return 0; - } - final Color c = new Color(r, g, b); - String temp = Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase(); - temp = Utils.appenedHexNotationToString(String.valueOf(temp)); - Logger.WARNING("Made " + temp + " - Hopefully it's not a mess."); - Logger.WARNING("It will decode into " + Integer.decode(temp) + "."); - return Integer.decode(temp); - } - - /* - * http://javadevnotes.com/java-left-pad-string-with-zeros-examples - */ - public static String padWithZerosLefts(final String originalString, final int length) { - final StringBuilder sb = new StringBuilder(); - while ((sb.length() + originalString.length()) < length) { - sb.append('0'); - } - sb.append(originalString); - final String paddedString = sb.toString(); - return paddedString; - } - - public static String padWithZerosRight(final int value, final int length) { - String originalString = String.valueOf(value); - final StringBuilder sb = new StringBuilder(); - while ((sb.length() + originalString.length()) < length) { - sb.append('0'); - } - //sb.append(originalString); - if (sb.length() > 0) - originalString = (originalString + sb.toString()); - final String paddedString = sb.toString(); - return originalString; - } - - /* - * Original Code by Chandana Napagoda - - * https://cnapagoda.blogspot.com.au/2011/03/java-hex-color-code-generator. - * html - */ - public static Map hexColourGenerator(final int colorCount) { - final int maxColorValue = 16777215; - // this is decimal value of the "FFFFFF" - final int devidedvalue = maxColorValue / colorCount; - int countValue = 0; - final HashMap hexColorMap = new HashMap<>(); - for (int a = 0; (a < colorCount) && (maxColorValue >= countValue); a++) { - if (a != 0) { - countValue += devidedvalue; - hexColorMap.put(a, Integer.toHexString(0x10000 | countValue).substring(1).toUpperCase()); - } else { - hexColorMap.put(a, Integer.toHexString(0x10000 | countValue).substring(1).toUpperCase()); - } - } - return hexColorMap; - } - - /* - * Original Code by Chandana Napagoda - - * https://cnapagoda.blogspot.com.au/2011/03/java-hex-color-code-generator. - * html - */ - public static Map hexColourGeneratorRandom(final int colorCount) { - final HashMap hexColorMap = new HashMap<>(); - for (int a = 0; a < colorCount; a++) { - String code = "" + (int) (Math.random() * 256); - code = code + code + code; - final int i = Integer.parseInt(code); - hexColorMap.put(a, Integer.toHexString(0x1000000 | i).substring(1).toUpperCase()); - Logger.WARNING("" + Integer.toHexString(0x1000000 | i).substring(1).toUpperCase()); - } - return hexColorMap; - } - - public static String appenedHexNotationToString(final Object hexAsStringOrInt) { - final String hexChar = "0x"; - String result; - if (hexAsStringOrInt.getClass() == String.class) { - - if (((String) hexAsStringOrInt).length() != 6) { - final String temp = padWithZerosLefts((String) hexAsStringOrInt, 6); - result = temp; - } - result = hexChar + hexAsStringOrInt; - return result; - } else if (hexAsStringOrInt.getClass() == Integer.class || hexAsStringOrInt.getClass() == int.class) { - String aa = String.valueOf(hexAsStringOrInt); - if (aa.length() != 6) { - final String temp = padWithZerosLefts(aa, 6); - result = temp; - } - else { - result = hexChar + String.valueOf(hexAsStringOrInt); - } - return result; - } else { - return null; - } - } - - public static Integer appenedHexNotationToInteger(final int hexAsStringOrInt) { - final String hexChar = "0x"; - String result; - Logger.WARNING(String.valueOf(hexAsStringOrInt)); - result = hexChar + String.valueOf(hexAsStringOrInt); - return Integer.getInteger(result); - } - - public static boolean doesEntryExistAlreadyInOreDictionary(final String OreDictName) { - if (OreDictionary.getOres(OreDictName).size() != 0) { - return true; - } - return false; - } - - public static boolean invertBoolean(final boolean booleans) { - if (booleans == true) { - return false; - } - return true; - } - - public static File getMcDir() { - if (Utils.isClient()) { - if (Minecraft.getMinecraft() != null) { - return Minecraft.getMinecraft().mcDataDir; - } - } - return new File("."); - } - - private static short cellID = 15; - - public static ItemStack createInternalNameAndFluidCell(final String s) { - Logger.WARNING("1"); - final InternalName yourName = EnumHelper.addEnum(InternalName.class, s, new Class[0], new Object[0]); - Logger.WARNING("2 " + yourName.name()); - final ItemCell item = (ItemCell) Ic2Items.cell.getItem(); - Logger.WARNING("3 " + item.getUnlocalizedName()); - try { - Logger.WARNING("4"); - final Class clz = item.getClass(); - Logger.WARNING("5 " + clz.getSimpleName()); - final Method methode = clz.getDeclaredMethod("addCell", int.class, InternalName.class, Block[].class); - Logger.WARNING("6 " + methode.getName()); - methode.setAccessible(true); - Logger.WARNING("7 " + methode.isAccessible()); - final ItemStack temp = (ItemStack) methode.invoke(item, cellID++, yourName, new Block[0]); - Logger.WARNING("Successfully created " + temp.getDisplayName() + "s."); - FluidContainerRegistry.registerFluidContainer(FluidUtils.getFluidStack(s.toLowerCase(), 1000), temp.copy(), - Ic2Items.cell.copy()); - ItemUtils.addItemToOreDictionary(temp.copy(), "cell" + s); - return temp; - } catch (final Exception e) { - e.printStackTrace(); - } - return null; - } - - public static ItemStack createInternalNameAndFluidCellNoOreDict(final String s) { - Logger.WARNING("1"); - final InternalName yourName = EnumHelper.addEnum(InternalName.class, s, new Class[0], new Object[0]); - Logger.WARNING("2 " + yourName.name()); - final ItemCell item = (ItemCell) Ic2Items.cell.getItem(); - Logger.WARNING("3 " + item.getUnlocalizedName()); - try { - Logger.WARNING("4"); - final Class clz = item.getClass(); - Logger.WARNING("5 " + clz.getSimpleName()); - final Method methode = clz.getDeclaredMethod("addCell", int.class, InternalName.class, Block[].class); - Logger.WARNING("6 " + methode.getName()); - methode.setAccessible(true); - Logger.WARNING("7 " + methode.isAccessible()); - final ItemStack temp = (ItemStack) methode.invoke(item, cellID++, yourName, new Block[0]); - Logger.WARNING("Successfully created " + temp.getDisplayName() + "s."); - FluidContainerRegistry.registerFluidContainer(FluidUtils.getFluidStack(s.toLowerCase(), 1000), temp.copy(), - Ic2Items.cell.copy()); - // ItemUtils.addItemToOreDictionary(temp.copy(), "cell"+s); - return temp; - } catch (final Exception e) { - e.printStackTrace(); - } - return null; - } - - public static String sanitizeString(final String input, final char[] aDontRemove) { - - String output; - AutoMap aToRemoveMap = new AutoMap(); - - aToRemoveMap.put(" "); - aToRemoveMap.put("-"); - aToRemoveMap.put("_"); - aToRemoveMap.put("~"); - aToRemoveMap.put("?"); - aToRemoveMap.put("!"); - aToRemoveMap.put("@"); - aToRemoveMap.put("#"); - aToRemoveMap.put("$"); - aToRemoveMap.put("%"); - aToRemoveMap.put("^"); - aToRemoveMap.put("&"); - aToRemoveMap.put("*"); - aToRemoveMap.put("("); - aToRemoveMap.put(")"); - aToRemoveMap.put("{"); - aToRemoveMap.put("}"); - aToRemoveMap.put("["); - aToRemoveMap.put("]"); - aToRemoveMap.put(" "); - - for (String s : aToRemoveMap) { - for (char e : aDontRemove) { - if (s.charAt(0) == e) { - aToRemoveMap.remove("s"); - } - } - } - output = input; - for (String A : aToRemoveMap) { - output = output.replace(A, ""); - } - return output; - - } - - public static String sanitizeString(final String input) { - String temp; - String output; - - temp = input.replace(" ", ""); - temp = temp.replace("-", ""); - temp = temp.replace("_", ""); - temp = temp.replace("?", ""); - temp = temp.replace("!", ""); - temp = temp.replace("@", ""); - temp = temp.replace("#", ""); - temp = temp.replace("(", ""); - temp = temp.replace(")", ""); - temp = temp.replace("{", ""); - temp = temp.replace("}", ""); - temp = temp.replace("[", ""); - temp = temp.replace("]", ""); - temp = temp.replace(" ", ""); - output = temp; - return output; - - } - - public static String sanitizeStringKeepBrackets(final String input) { - String temp; - String output; - - temp = input.replace(" ", ""); - temp = temp.replace("-", ""); - temp = temp.replace("_", ""); - temp = temp.replace("?", ""); - temp = temp.replace("!", ""); - temp = temp.replace("@", ""); - temp = temp.replace("#", ""); - temp = temp.replace(" ", ""); - output = temp; - return output; - - } - - public static String[] parseVersion(final String version) { - return parseVersion(version, "//."); - } - - public static String[] parseVersion(final String version, final String delimiter) { - final String[] versionArray = version.split(delimiter); - return versionArray; - } - - public static Versioning compareModVersion(final String currentVersion, final String expectedVersion) { - return compareModVersion(currentVersion, expectedVersion, "//."); - } - - public static Versioning compareModVersion(final String currentVersion, final String expectedVersion, - final String delimiter) { - final String[] a = parseVersion(currentVersion, delimiter); - final String[] b = parseVersion(expectedVersion, delimiter); - final int[] c = new int[a.length]; - final int[] d = new int[b.length]; - for (int r = 0; r < a.length; r++) { - c[r] = Integer.parseInt(a[r]); - } - for (int r = 0; r < b.length; r++) { - d[r] = Integer.parseInt(b[r]); - } - final Versioning[] e = new Versioning[MathUtils.returnLargestNumber(c.length, d.length)]; - for (int r = 0; r < e.length; r++) { - - if (c[r] > d[r]) { - e[r] = Versioning.NEWER; - } else if (c[r] < d[r]) { - e[r] = Versioning.OLDER; - } else if (c[r] == d[r]) { - e[r] = Versioning.EQUAL; - } - } - - for (int r = 0; r < e.length; r++) { - if (e[0] == Versioning.NEWER) { - return Versioning.NEWER; - } else if (e[0] == Versioning.OLDER) { - return Versioning.OLDER; - } else { - if (e[r] == Versioning.OLDER) { - - } - - return Versioning.NEWER; - } - } - - return null; - } - - public static ToolMaterial generateToolMaterialFromGT(final Materials gtMaterial) { - final String name = Utils.sanitizeString(gtMaterial.mDefaultLocalName); - final int harvestLevel = gtMaterial.mToolQuality; - final int durability = gtMaterial.mDurability; - final float damage = gtMaterial.mToolQuality; - final int efficiency = (int) gtMaterial.mToolSpeed; - final int enchantability = gtMaterial.mEnchantmentToolsLevel; - final ToolMaterial temp = EnumHelper.addToolMaterial(name, harvestLevel, durability, efficiency, damage, - enchantability); - return temp; - - } - - public static ToolMaterial generateToolMaterial(final Material material) { - final String name = material.getLocalizedName(); - final int harvestLevel = material.vHarvestLevel; - final int durability = (int) material.vDurability; - final float damage = material.vToolQuality; - final int efficiency = material.vToolQuality; - // int enchantability = material.mEnchantmentToolsLevel; - Logger.INFO("ToolMaterial stats for " + material.getLocalizedName() + " | harvestLevel:" + harvestLevel - + " | durability:" + durability + " | toolQuality:" + damage + " | toolSpeed:" + damage); - final ToolMaterial temp = EnumHelper.addToolMaterial(name, harvestLevel, durability, efficiency, damage, 0); - return temp; - - } - - public static enum Versioning { - EQUAL(0), NEWER(1), OLDER(-1); - private final int versioningInfo; - - private Versioning(final int versionStatus) { - this.versioningInfo = versionStatus; - } - - public int getTexture() { - return this.versioningInfo; - } - } + public static final int WILDCARD_VALUE = Short.MAX_VALUE; + + public static final boolean isServer() { + return FMLCommonHandler.instance().getEffectiveSide().isServer(); + } + + public static final boolean isClient() { + return FMLCommonHandler.instance().getEffectiveSide().isClient(); + } + + static class ShortTimerTask extends TimerTask { + @Override + public void run() { + Logger.WARNING("Timer expired."); + } + } + + public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final long size) { + return getTcAspectStack(aspect.name(), (int) size); + } + + public static TC_AspectStack getTcAspectStack(final String aspect, final long size) { + return getTcAspectStack(aspect, (int) size); + } + + public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final int size) { + return getTcAspectStack(aspect.name(), size); + } + + public static TC_AspectStack getTcAspectStack(final String aspect, final int size) { + + TC_AspectStack returnValue = null; + + if (aspect.toUpperCase().equals("COGNITIO")) { + // Adds in Compat for older GT Versions which Misspell aspects. + try { + if (EnumUtils.isValidEnum(TC_Aspects.class, "COGNITIO")) { + Logger.WARNING("TC Aspect found - " + aspect); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITIO"), size); + } else { + Logger.INFO( + "Fallback TC Aspect found - " + aspect + + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITO"), size); + } + } catch (final NoSuchFieldError r) { + Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); + } + } else if (aspect.toUpperCase().equals("EXANIMUS")) { + // Adds in Compat for older GT Versions which Misspell aspects. + try { + if (EnumUtils.isValidEnum(TC_Aspects.class, "EXANIMUS")) { + Logger.WARNING("TC Aspect found - " + aspect); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXANIMUS"), size); + } else { + Logger.INFO( + "Fallback TC Aspect found - " + aspect + + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXAMINIS"), size); + } + } catch (final NoSuchFieldError r) { + Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); + } + + } else if (aspect.toUpperCase().equals("PRAECANTATIO")) { + // Adds in Compat for older GT Versions which Misspell aspects. + try { + if (EnumUtils.isValidEnum(TC_Aspects.class, "PRAECANTATIO")) { + Logger.WARNING("TC Aspect found - " + aspect); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTATIO"), size); + } else { + Logger.INFO( + "Fallback TC Aspect found - " + aspect + + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); + returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTIO"), size); + } + } catch (final NoSuchFieldError r) { + Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); + } + } else { + Logger.WARNING("TC Aspect found - " + aspect); + returnValue = new TC_AspectStack(TC_Aspects.valueOf(aspect), size); + } + + return returnValue; + } + + public static boolean containsMatch(final boolean strict, final ItemStack[] inputs, final ItemStack... targets) { + for (final ItemStack input : inputs) { + for (final ItemStack target : targets) { + if (itemMatches(target, input, strict)) { + return true; + } + } + } + return false; + } + + public static boolean itemMatches(final ItemStack target, final ItemStack input, final boolean strict) { + if ((input == null) || (target == null)) { + return false; + } + return ((target.getItem() == input.getItem()) + && (((target.getItemDamage() == WILDCARD_VALUE) && !strict) + || (target.getItemDamage() == input.getItemDamage()))); + } + + // Register an event to both busses. + public static void registerEvent(Object o) { + MinecraftForge.EVENT_BUS.register(o); + FMLCommonHandler.instance().bus().register(o); + } + + public static void paintBox(final Graphics g, final int MinA, final int MinB, final int MaxA, final int MaxB) { + g.drawRect(MinA, MinB, MaxA, MaxB); + } + + // Send a message to all players on the server + public static void sendServerMessage(final String translationKey) { + sendServerMessage(new ChatComponentText(translationKey)); + } + + // Send a message to all players on the server + public static void sendServerMessage(final IChatComponent chatComponent) { + MinecraftServer.getServer().getConfigurationManager().sendChatMsg(chatComponent); + } + + /** + * Returns if that Liquid is IC2Steam. + */ + public static boolean isIC2Steam(final FluidStack aFluid) { + if (aFluid == null) { + return false; + } + return aFluid.isFluidEqual(getIC2Steam(1)); + } + + /** + * Returns a Liquid Stack with given amount of IC2Steam. + */ + public static FluidStack getIC2Steam(final long aAmount) { + return FluidRegistry.getFluidStack("ic2steam", (int) aAmount); + } + + /* + * public static void recipeBuilderBlock(ItemStack slot_1, ItemStack slot_2, + * ItemStack slot_3, ItemStack slot_4, ItemStack slot_5, ItemStack slot_6, + * ItemStack slot_7, ItemStack slot_8, ItemStack slot_9, Block resultBlock){ + * GameRegistry.addRecipe(new ItemStack(resultBlock), new Object[] {"ABC", + * "DEF", "GHI", 'A',slot_1,'B',slot_2,'C',slot_3, + * 'D',slot_4,'E',slot_5,'F',slot_6, 'G',slot_7,'H',slot_8,'I',slot_9 }); } + */ + + public static String checkCorrectMiningToolForBlock(final Block currentBlock, final World currentWorld) { + String correctTool = ""; + if (!currentWorld.isRemote) { + try { + correctTool = currentBlock.getHarvestTool(0); + Logger.WARNING(correctTool); + + } catch (final NullPointerException e) { + + } + } + + return correctTool; + } + + /** + * + * @param colourStr + * e.g. "#FFFFFF" + * @return String - formatted "rgb(0,0,0)" + */ + public static String hex2RgbFormatted(final String hexString) { + final Color c = new Color( + Integer.valueOf(hexString.substring(1, 3), 16), + Integer.valueOf(hexString.substring(3, 5), 16), + Integer.valueOf(hexString.substring(5, 7), 16)); + + final StringBuffer sb = new StringBuffer(); + sb.append("rgb("); + sb.append(c.getRed()); + sb.append(","); + sb.append(c.getGreen()); + sb.append(","); + sb.append(c.getBlue()); + sb.append(")"); + return sb.toString(); + } + + /** + * + * @param colourStr + * e.g. "#FFFFFF" + * @return + */ + public static Color hex2Rgb(final String colorStr) { + return new Color( + Integer.valueOf(colorStr.substring(1, 3), 16), + Integer.valueOf(colorStr.substring(3, 5), 16), + Integer.valueOf(colorStr.substring(5, 7), 16)); + } + + /** + * + * @param colourInt + * e.g. 0XFFFFFF + * @return Colour + */ + public static Color hex2Rgb(final int colourInt) { + return Color.decode(String.valueOf(colourInt)); + } + + /** + * + * @param colourInt + * e.g. 0XFFFFFF + * @return short[] + */ + public static short[] hex2RgbShort(final int colourInt) { + final Color rgb = Color.decode(String.valueOf(colourInt)); + final short[] rgba = { + (short) rgb.getRed(), (short) rgb.getGreen(), (short) rgb.getBlue(), (short) rgb.getAlpha() + }; + return rgba; + } + + public static Timer ShortTimer(final int seconds) { + Timer timer; + timer = new Timer(); + timer.schedule(new ShortTimerTask(), seconds * 1000); + return timer; + } + + public static String byteToHex(final byte b) { + final int i = b & 0xFF; + return Integer.toHexString(i); + } + + public static Object[] convertListToArray(final List sourceList) { + final Object[] targetArray = sourceList.toArray(new Object[sourceList.size()]); + return targetArray; + } + + public static List convertArrayToFixedSizeList(final Object[] sourceArray) { + final List targetList = Arrays.asList(sourceArray); + return targetList; + } + + public static List convertArrayToList(final Object[] sourceArray) { + final List targetList = new ArrayList<>(Arrays.asList(sourceArray)); + return targetList; + } + + public static List convertArrayListToList(final ArrayList sourceArray) { + final List targetList = new ArrayList(Arrays.asList(sourceArray)); + return targetList; + } + + public static void spawnCustomParticle(final Entity entity) { + GTplusplus.proxy.generateMysteriousParticles(entity); + } + + public static void spawnFX( + final World world, final int x, final int y, final int z, final String particleName, Object particleName2) { + if (!world.isRemote) { + if ((particleName2 == null) || particleName2.equals("")) { + particleName2 = particleName; + } + final int l = MathUtils.randInt(0, 4); + final double d0 = x + 0.5F; + final double d1 = y + 0.7F; + final double d2 = z + 0.5F; + final double d3 = 0.2199999988079071D; + final double d4 = 0.27000001072883606D; + + if (l == 1) { + world.spawnParticle(particleName, d0 - d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D); + } else if (l == 2) { + world.spawnParticle((String) particleName2, d0 + d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D); + } else if (l == 3) { + world.spawnParticle(particleName, d0, d1 + d3, d2 - d4, 0.0D, 0.0D, 0.0D); + } else if (l == 4) { + world.spawnParticle((String) particleName2, d0, d1 + d3, d2 + d4, 0.0D, 0.0D, 0.0D); + } else { + world.spawnParticle(particleName, d0, d1, d2, 0.0D, 0.0D, 0.0D); + if (particleName2 != null) { + world.spawnParticle((String) particleName2, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + } + } + + public static int rgbtoHexValue(final int r, final int g, final int b) { + if ((r > 255) || (g > 255) || (b > 255) || (r < 0) || (g < 0) || (b < 0)) { + return 0; + } + final Color c = new Color(r, g, b); + String temp = Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase(); + temp = Utils.appenedHexNotationToString(String.valueOf(temp)); + Logger.WARNING("Made " + temp + " - Hopefully it's not a mess."); + Logger.WARNING("It will decode into " + Integer.decode(temp) + "."); + return Integer.decode(temp); + } + + /* + * http://javadevnotes.com/java-left-pad-string-with-zeros-examples + */ + public static String padWithZerosLefts(final String originalString, final int length) { + final StringBuilder sb = new StringBuilder(); + while ((sb.length() + originalString.length()) < length) { + sb.append('0'); + } + sb.append(originalString); + final String paddedString = sb.toString(); + return paddedString; + } + + public static String padWithZerosRight(final int value, final int length) { + String originalString = String.valueOf(value); + final StringBuilder sb = new StringBuilder(); + while ((sb.length() + originalString.length()) < length) { + sb.append('0'); + } + // sb.append(originalString); + if (sb.length() > 0) originalString = (originalString + sb.toString()); + final String paddedString = sb.toString(); + return originalString; + } + + /* + * Original Code by Chandana Napagoda - + * https://cnapagoda.blogspot.com.au/2011/03/java-hex-color-code-generator. + * html + */ + public static Map hexColourGenerator(final int colorCount) { + final int maxColorValue = 16777215; + // this is decimal value of the "FFFFFF" + final int devidedvalue = maxColorValue / colorCount; + int countValue = 0; + final HashMap hexColorMap = new HashMap<>(); + for (int a = 0; (a < colorCount) && (maxColorValue >= countValue); a++) { + if (a != 0) { + countValue += devidedvalue; + hexColorMap.put( + a, + Integer.toHexString(0x10000 | countValue).substring(1).toUpperCase()); + } else { + hexColorMap.put( + a, + Integer.toHexString(0x10000 | countValue).substring(1).toUpperCase()); + } + } + return hexColorMap; + } + + /* + * Original Code by Chandana Napagoda - + * https://cnapagoda.blogspot.com.au/2011/03/java-hex-color-code-generator. + * html + */ + public static Map hexColourGeneratorRandom(final int colorCount) { + final HashMap hexColorMap = new HashMap<>(); + for (int a = 0; a < colorCount; a++) { + String code = "" + (int) (Math.random() * 256); + code = code + code + code; + final int i = Integer.parseInt(code); + hexColorMap.put(a, Integer.toHexString(0x1000000 | i).substring(1).toUpperCase()); + Logger.WARNING("" + Integer.toHexString(0x1000000 | i).substring(1).toUpperCase()); + } + return hexColorMap; + } + + public static String appenedHexNotationToString(final Object hexAsStringOrInt) { + final String hexChar = "0x"; + String result; + if (hexAsStringOrInt.getClass() == String.class) { + + if (((String) hexAsStringOrInt).length() != 6) { + final String temp = padWithZerosLefts((String) hexAsStringOrInt, 6); + result = temp; + } + result = hexChar + hexAsStringOrInt; + return result; + } else if (hexAsStringOrInt.getClass() == Integer.class || hexAsStringOrInt.getClass() == int.class) { + String aa = String.valueOf(hexAsStringOrInt); + if (aa.length() != 6) { + final String temp = padWithZerosLefts(aa, 6); + result = temp; + } else { + result = hexChar + String.valueOf(hexAsStringOrInt); + } + return result; + } else { + return null; + } + } + + public static Integer appenedHexNotationToInteger(final int hexAsStringOrInt) { + final String hexChar = "0x"; + String result; + Logger.WARNING(String.valueOf(hexAsStringOrInt)); + result = hexChar + String.valueOf(hexAsStringOrInt); + return Integer.getInteger(result); + } + + public static boolean doesEntryExistAlreadyInOreDictionary(final String OreDictName) { + if (OreDictionary.getOres(OreDictName).size() != 0) { + return true; + } + return false; + } + + public static boolean invertBoolean(final boolean booleans) { + if (booleans == true) { + return false; + } + return true; + } + + public static File getMcDir() { + if (Utils.isClient()) { + if (Minecraft.getMinecraft() != null) { + return Minecraft.getMinecraft().mcDataDir; + } + } + return new File("."); + } + + private static short cellID = 15; + + public static ItemStack createInternalNameAndFluidCell(final String s) { + Logger.WARNING("1"); + final InternalName yourName = EnumHelper.addEnum(InternalName.class, s, new Class[0], new Object[0]); + Logger.WARNING("2 " + yourName.name()); + final ItemCell item = (ItemCell) Ic2Items.cell.getItem(); + Logger.WARNING("3 " + item.getUnlocalizedName()); + try { + Logger.WARNING("4"); + final Class clz = item.getClass(); + Logger.WARNING("5 " + clz.getSimpleName()); + final Method methode = clz.getDeclaredMethod("addCell", int.class, InternalName.class, Block[].class); + Logger.WARNING("6 " + methode.getName()); + methode.setAccessible(true); + Logger.WARNING("7 " + methode.isAccessible()); + final ItemStack temp = (ItemStack) methode.invoke(item, cellID++, yourName, new Block[0]); + Logger.WARNING("Successfully created " + temp.getDisplayName() + "s."); + FluidContainerRegistry.registerFluidContainer( + FluidUtils.getFluidStack(s.toLowerCase(), 1000), temp.copy(), Ic2Items.cell.copy()); + ItemUtils.addItemToOreDictionary(temp.copy(), "cell" + s); + return temp; + } catch (final Exception e) { + e.printStackTrace(); + } + return null; + } + + public static ItemStack createInternalNameAndFluidCellNoOreDict(final String s) { + Logger.WARNING("1"); + final InternalName yourName = EnumHelper.addEnum(InternalName.class, s, new Class[0], new Object[0]); + Logger.WARNING("2 " + yourName.name()); + final ItemCell item = (ItemCell) Ic2Items.cell.getItem(); + Logger.WARNING("3 " + item.getUnlocalizedName()); + try { + Logger.WARNING("4"); + final Class clz = item.getClass(); + Logger.WARNING("5 " + clz.getSimpleName()); + final Method methode = clz.getDeclaredMethod("addCell", int.class, InternalName.class, Block[].class); + Logger.WARNING("6 " + methode.getName()); + methode.setAccessible(true); + Logger.WARNING("7 " + methode.isAccessible()); + final ItemStack temp = (ItemStack) methode.invoke(item, cellID++, yourName, new Block[0]); + Logger.WARNING("Successfully created " + temp.getDisplayName() + "s."); + FluidContainerRegistry.registerFluidContainer( + FluidUtils.getFluidStack(s.toLowerCase(), 1000), temp.copy(), Ic2Items.cell.copy()); + // ItemUtils.addItemToOreDictionary(temp.copy(), "cell"+s); + return temp; + } catch (final Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String sanitizeString(final String input, final char[] aDontRemove) { + + String output; + AutoMap aToRemoveMap = new AutoMap(); + + aToRemoveMap.put(" "); + aToRemoveMap.put("-"); + aToRemoveMap.put("_"); + aToRemoveMap.put("~"); + aToRemoveMap.put("?"); + aToRemoveMap.put("!"); + aToRemoveMap.put("@"); + aToRemoveMap.put("#"); + aToRemoveMap.put("$"); + aToRemoveMap.put("%"); + aToRemoveMap.put("^"); + aToRemoveMap.put("&"); + aToRemoveMap.put("*"); + aToRemoveMap.put("("); + aToRemoveMap.put(")"); + aToRemoveMap.put("{"); + aToRemoveMap.put("}"); + aToRemoveMap.put("["); + aToRemoveMap.put("]"); + aToRemoveMap.put(" "); + + for (String s : aToRemoveMap) { + for (char e : aDontRemove) { + if (s.charAt(0) == e) { + aToRemoveMap.remove("s"); + } + } + } + output = input; + for (String A : aToRemoveMap) { + output = output.replace(A, ""); + } + return output; + } + + public static String sanitizeString(final String input) { + String temp; + String output; + + temp = input.replace(" ", ""); + temp = temp.replace("-", ""); + temp = temp.replace("_", ""); + temp = temp.replace("?", ""); + temp = temp.replace("!", ""); + temp = temp.replace("@", ""); + temp = temp.replace("#", ""); + temp = temp.replace("(", ""); + temp = temp.replace(")", ""); + temp = temp.replace("{", ""); + temp = temp.replace("}", ""); + temp = temp.replace("[", ""); + temp = temp.replace("]", ""); + temp = temp.replace(" ", ""); + output = temp; + return output; + } + + public static String sanitizeStringKeepBrackets(final String input) { + String temp; + String output; + + temp = input.replace(" ", ""); + temp = temp.replace("-", ""); + temp = temp.replace("_", ""); + temp = temp.replace("?", ""); + temp = temp.replace("!", ""); + temp = temp.replace("@", ""); + temp = temp.replace("#", ""); + temp = temp.replace(" ", ""); + output = temp; + return output; + } + + public static String[] parseVersion(final String version) { + return parseVersion(version, "//."); + } + + public static String[] parseVersion(final String version, final String delimiter) { + final String[] versionArray = version.split(delimiter); + return versionArray; + } + + public static Versioning compareModVersion(final String currentVersion, final String expectedVersion) { + return compareModVersion(currentVersion, expectedVersion, "//."); + } + + public static Versioning compareModVersion( + final String currentVersion, final String expectedVersion, final String delimiter) { + final String[] a = parseVersion(currentVersion, delimiter); + final String[] b = parseVersion(expectedVersion, delimiter); + final int[] c = new int[a.length]; + final int[] d = new int[b.length]; + for (int r = 0; r < a.length; r++) { + c[r] = Integer.parseInt(a[r]); + } + for (int r = 0; r < b.length; r++) { + d[r] = Integer.parseInt(b[r]); + } + final Versioning[] e = new Versioning[MathUtils.returnLargestNumber(c.length, d.length)]; + for (int r = 0; r < e.length; r++) { + + if (c[r] > d[r]) { + e[r] = Versioning.NEWER; + } else if (c[r] < d[r]) { + e[r] = Versioning.OLDER; + } else if (c[r] == d[r]) { + e[r] = Versioning.EQUAL; + } + } + + for (int r = 0; r < e.length; r++) { + if (e[0] == Versioning.NEWER) { + return Versioning.NEWER; + } else if (e[0] == Versioning.OLDER) { + return Versioning.OLDER; + } else { + if (e[r] == Versioning.OLDER) {} + + return Versioning.NEWER; + } + } + + return null; + } + + public static ToolMaterial generateToolMaterialFromGT(final Materials gtMaterial) { + final String name = Utils.sanitizeString(gtMaterial.mDefaultLocalName); + final int harvestLevel = gtMaterial.mToolQuality; + final int durability = gtMaterial.mDurability; + final float damage = gtMaterial.mToolQuality; + final int efficiency = (int) gtMaterial.mToolSpeed; + final int enchantability = gtMaterial.mEnchantmentToolsLevel; + final ToolMaterial temp = + EnumHelper.addToolMaterial(name, harvestLevel, durability, efficiency, damage, enchantability); + return temp; + } + + public static ToolMaterial generateToolMaterial(final Material material) { + final String name = material.getLocalizedName(); + final int harvestLevel = material.vHarvestLevel; + final int durability = (int) material.vDurability; + final float damage = material.vToolQuality; + final int efficiency = material.vToolQuality; + // int enchantability = material.mEnchantmentToolsLevel; + Logger.INFO("ToolMaterial stats for " + material.getLocalizedName() + " | harvestLevel:" + harvestLevel + + " | durability:" + durability + " | toolQuality:" + damage + " | toolSpeed:" + damage); + final ToolMaterial temp = EnumHelper.addToolMaterial(name, harvestLevel, durability, efficiency, damage, 0); + return temp; + } + + public static enum Versioning { + EQUAL(0), + NEWER(1), + OLDER(-1); + private final int versioningInfo; + + private Versioning(final int versionStatus) { + this.versioningInfo = versionStatus; + } + + public int getTexture() { + return this.versioningInfo; + } + } public static String addBookTitleLocalization(final String aTitle) { return GT_LanguageManager.addStringLocalization( - new StringBuilder().append("Book.").append(aTitle).append(".Name").toString(), aTitle, !GregTech_API.sPostloadFinished); + new StringBuilder() + .append("Book.") + .append(aTitle) + .append(".Name") + .toString(), + aTitle, + !GregTech_API.sPostloadFinished); } public static String[] addBookPagesLocalization(final String aTitle, final String[] aPages) { String[] aLocalizationPages = new String[aPages.length]; for (byte i = 0; i < aPages.length; i = (byte) (i + 1)) { - aLocalizationPages[i] = GT_LanguageManager - .addStringLocalization(new StringBuilder().append("Book.").append(aTitle).append(".Page") - .append((i < 10) ? new StringBuilder().append("0").append(i).toString() : Byte.valueOf(i)) - .toString(), aPages[i], !GregTech_API.sPostloadFinished); + aLocalizationPages[i] = GT_LanguageManager.addStringLocalization( + new StringBuilder() + .append("Book.") + .append(aTitle) + .append(".Page") + .append( + (i < 10) + ? new StringBuilder() + .append("0") + .append(i) + .toString() + : Byte.valueOf(i)) + .toString(), + aPages[i], + !GregTech_API.sPostloadFinished); } return aLocalizationPages; } - public static ItemStack getWrittenBook(final ItemStack aBook, final int aID, final String aMapping, final String aTitle, final String aAuthor, - final String[] aPages) { - if (GT_Utility.isStringInvalid(aMapping)) { - return null; - } - ItemStack rStack = CORE.sBookList.get(aMapping); - if (rStack != null) { - return GT_Utility.copyAmount(1L, new Object[] { rStack }); - } - if ((GT_Utility.isStringInvalid(aTitle)) || (GT_Utility.isStringInvalid(aAuthor)) || (aPages.length <= 0)) { - return null; - } - final int vMeta = aID; - rStack = (aBook == null ? new ItemStack(ModItems.itemCustomBook, 1, vMeta) : aBook); - final NBTTagCompound tNBT = new NBTTagCompound(); + public static ItemStack getWrittenBook( + final ItemStack aBook, + final int aID, + final String aMapping, + final String aTitle, + final String aAuthor, + final String[] aPages) { + if (GT_Utility.isStringInvalid(aMapping)) { + return null; + } + ItemStack rStack = CORE.sBookList.get(aMapping); + if (rStack != null) { + return GT_Utility.copyAmount(1L, new Object[] {rStack}); + } + if ((GT_Utility.isStringInvalid(aTitle)) || (GT_Utility.isStringInvalid(aAuthor)) || (aPages.length <= 0)) { + return null; + } + final int vMeta = aID; + rStack = (aBook == null ? new ItemStack(ModItems.itemCustomBook, 1, vMeta) : aBook); + final NBTTagCompound tNBT = new NBTTagCompound(); String localizationTitle = addBookTitleLocalization(aTitle); - tNBT.setString("title", localizationTitle); - tNBT.setString("author", aAuthor); - final NBTTagList tNBTList = new NBTTagList(); + tNBT.setString("title", localizationTitle); + tNBT.setString("author", aAuthor); + final NBTTagList tNBTList = new NBTTagList(); final String[] aLocalizationPages = addBookPagesLocalization(aTitle, aPages); for (byte i = 0; i < aPages.length; i = (byte) (i + 1)) { - aPages[i] = aLocalizationPages[i].replaceAll("
", "\n"); - if (i < 48) { - if (aPages[i].length() < 256) { - tNBTList.appendTag(new NBTTagString(aPages[i])); - } - else { - Logger.INFO("WARNING: String for written Book too long! -> "+aPages[i]); - GT_Log.err.println(new StringBuilder().append("WARNING: String for written Book too long! -> ") - .append(aPages[i]).toString()); - } - } else { - Logger.INFO("WARNING: Too much Pages for written Book! -> "+aTitle); - GT_Log.err.println(new StringBuilder().append("WARNING: Too much Pages for written Book! -> ") - .append(aTitle).toString()); - break; - } - } - tNBTList.appendTag(new NBTTagString(new StringBuilder().append("Credits to ").append(aAuthor) - .append(" for writing this Book. This was Book Nr. ").append(aID) - .append(" at its creation. Gotta get 'em all!").toString())); - tNBT.setTag("pages", tNBTList); - rStack.setTagCompound(tNBT); - GT_Log.out.println(new StringBuilder().append("GT++_Mod: Added Book to Book++ List - Mapping: '") - .append(aMapping).append("' - Name: '").append(aTitle).append("' - Author: '").append(aAuthor) - .append("'").toString()); - NBTUtils.createIntegerTagCompound(rStack, "stats", "mMeta", vMeta); - CORE.sBookList.put(aMapping, rStack); - Logger.INFO("Creating book: " + aTitle + " by " + aAuthor + ". Using Meta " + vMeta + "."); - return GT_Utility.copy(new Object[] { rStack }); - } - - @SuppressWarnings({ "unused", "unchecked" }) - public static Pair getGregtechVersion(){ - Pair version; - if (GT_Mod.VERSION == 509){ - Class clazz; - try { - - if (LoadedMods.BeyondRealityCore) { - //Safely assume it's Beyond Reality running .28-pre (If it's not, tough shit really?) - return new Pair(9, 28); - } - - clazz = (Class) ReflectionUtils.getClass("gregtech.GT_Mod"); - Field mSubversion = ReflectionUtils.getField(clazz, "SUBVERSION"); - if (mSubversion != null){ - int mSub = 0; - mSub = mSubversion.getInt(clazz); - if (mSub != 0){ - version = new Pair(9, mSub); - return version; - } - } - } - catch (Throwable t){ - - } - } - //5.08.33 - else if (GT_Mod.VERSION == 508){ - version = new Pair(8, 33); - return version; - - } - //5.07.07 - else if (GT_Mod.VERSION == 507){ - version = new Pair(7, 7); - return version; - - } - //Returb Bad Value - version = new Pair(0, 0); - return version; - } - - public static int getGregtechVersionAsInt(){ - Pair ver = getGregtechVersion(); - return 50000+(ver.getKey()*100)+(ver.getValue()); - } - - public static String getGregtechVersionAsString(){ - Pair ver = getGregtechVersion(); - return "5."+ver.getKey()+"."+ver.getValue(); - } - - public static int getGregtechSubVersion(){ - Pair ver = getGregtechVersion(); - return ver.getValue(); - } - - public static SecureRandom generateSecureRandom(){ - SecureRandom secRan; - String secRanType; - - if (SystemUtils.isWindows()){ - secRanType = "Windows-PRNG"; - } - else { - secRanType = "NativePRNG"; - } - try { - secRan = SecureRandom.getInstance(secRanType); - // Default constructor would have returned insecure SHA1PRNG algorithm, so make an explicit call. - byte[] b = new byte[64] ; - secRan.nextBytes(b); - return secRan; - } - catch (NoSuchAlgorithmException e) { - return null; - } - } - - - public static String calculateChecksumMD5(Object bytes) { - byte[] result = new byte[] {}; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutput out = null; - try { - out = new ObjectOutputStream(bos); - out.writeObject(bytes); - out.flush(); - result = bos.toByteArray(); - } - catch (IOException e) { - } finally { - try { - bos.close(); - } - catch (IOException e) {} - } - return calculateChecksumMD5(result); - } - - public static String calculateChecksumMD5(byte[] bytes) { - MessageDigest md; - try { - md = MessageDigest.getInstance("MD5"); - md.update(bytes); - byte[] digest = md.digest(); - String myHash = DatatypeConverter.printHexBinary(digest).toUpperCase(); - return myHash; - } - catch (NoSuchAlgorithmException e) { - return null; - } - } - - public static boolean createNewMobSpawner(int aID, Entity aEntity) { - if (aEntity instanceof Entity) { - Class c = aEntity.getClass(); - return createNewMobSpawner(aID, c); - } - return false; - } - - public static boolean createNewMobSpawner(int aID, Class aEntity) { - Logger.INFO("[Spawn] Generating new spawner for entity with class ("+aEntity.getSimpleName()+")."); - if (TileEntityGenericSpawner.registerNewMobSpawner(aID, (Class) aEntity)) { - EntityRegistration x = EntityRegistry.instance().lookupModSpawn((Class) aEntity, true); - if (x != null) { - Logger.INFO("[Spawn] Registration for "+x.getEntityName()+" successful"); - return true; - } - else { - Logger.INFO("[Spawn] Registration for "+aEntity.getSimpleName()+" successful"); - return true; - } - } - Logger.INFO("[Spawn] Mob Spawner creation for "+aEntity.getName()+" failed"); - return false; - } - - public static long getMillisSince(long aStartTime, long aCurrentTime) { - return (aCurrentTime - aStartTime); - } - - public static long getSecondsFromMillis(long aMillis) { - return (aMillis/1000); - } - - public static long getTicksFromSeconds(long aSeconds) { - return (aSeconds*20); - } - - public static byte getTier(long l) { - byte i = -1; - do { - ++i; - if (i >= GT_Values.V.length) { - return i; - } - } while (l > GT_Values.V[i]); - i = (byte) MathUtils.getValueWithinRange(i, 0, 15); - return i; - } + aPages[i] = aLocalizationPages[i].replaceAll("
", "\n"); + if (i < 48) { + if (aPages[i].length() < 256) { + tNBTList.appendTag(new NBTTagString(aPages[i])); + } else { + Logger.INFO("WARNING: String for written Book too long! -> " + aPages[i]); + GT_Log.err.println(new StringBuilder() + .append("WARNING: String for written Book too long! -> ") + .append(aPages[i]) + .toString()); + } + } else { + Logger.INFO("WARNING: Too much Pages for written Book! -> " + aTitle); + GT_Log.err.println(new StringBuilder() + .append("WARNING: Too much Pages for written Book! -> ") + .append(aTitle) + .toString()); + break; + } + } + tNBTList.appendTag(new NBTTagString(new StringBuilder() + .append("Credits to ") + .append(aAuthor) + .append(" for writing this Book. This was Book Nr. ") + .append(aID) + .append(" at its creation. Gotta get 'em all!") + .toString())); + tNBT.setTag("pages", tNBTList); + rStack.setTagCompound(tNBT); + GT_Log.out.println(new StringBuilder() + .append("GT++_Mod: Added Book to Book++ List - Mapping: '") + .append(aMapping) + .append("' - Name: '") + .append(aTitle) + .append("' - Author: '") + .append(aAuthor) + .append("'") + .toString()); + NBTUtils.createIntegerTagCompound(rStack, "stats", "mMeta", vMeta); + CORE.sBookList.put(aMapping, rStack); + Logger.INFO("Creating book: " + aTitle + " by " + aAuthor + ". Using Meta " + vMeta + "."); + return GT_Utility.copy(new Object[] {rStack}); + } + + @SuppressWarnings({"unused", "unchecked"}) + public static Pair getGregtechVersion() { + Pair version; + if (GT_Mod.VERSION == 509) { + Class clazz; + try { + + if (LoadedMods.BeyondRealityCore) { + // Safely assume it's Beyond Reality running .28-pre (If it's not, tough shit really?) + return new Pair(9, 28); + } + + clazz = (Class) ReflectionUtils.getClass("gregtech.GT_Mod"); + Field mSubversion = ReflectionUtils.getField(clazz, "SUBVERSION"); + if (mSubversion != null) { + int mSub = 0; + mSub = mSubversion.getInt(clazz); + if (mSub != 0) { + version = new Pair(9, mSub); + return version; + } + } + } catch (Throwable t) { + + } + } + // 5.08.33 + else if (GT_Mod.VERSION == 508) { + version = new Pair(8, 33); + return version; + + } + // 5.07.07 + else if (GT_Mod.VERSION == 507) { + version = new Pair(7, 7); + return version; + } + // Returb Bad Value + version = new Pair(0, 0); + return version; + } + + public static int getGregtechVersionAsInt() { + Pair ver = getGregtechVersion(); + return 50000 + (ver.getKey() * 100) + (ver.getValue()); + } + + public static String getGregtechVersionAsString() { + Pair ver = getGregtechVersion(); + return "5." + ver.getKey() + "." + ver.getValue(); + } + + public static int getGregtechSubVersion() { + Pair ver = getGregtechVersion(); + return ver.getValue(); + } + + public static SecureRandom generateSecureRandom() { + SecureRandom secRan; + String secRanType; + + if (SystemUtils.isWindows()) { + secRanType = "Windows-PRNG"; + } else { + secRanType = "NativePRNG"; + } + try { + secRan = SecureRandom.getInstance(secRanType); + // Default constructor would have returned insecure SHA1PRNG algorithm, so make an explicit call. + byte[] b = new byte[64]; + secRan.nextBytes(b); + return secRan; + } catch (NoSuchAlgorithmException e) { + return null; + } + } + + public static String calculateChecksumMD5(Object bytes) { + byte[] result = new byte[] {}; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutput out = null; + try { + out = new ObjectOutputStream(bos); + out.writeObject(bytes); + out.flush(); + result = bos.toByteArray(); + } catch (IOException e) { + } finally { + try { + bos.close(); + } catch (IOException e) { + } + } + return calculateChecksumMD5(result); + } + + public static String calculateChecksumMD5(byte[] bytes) { + MessageDigest md; + try { + md = MessageDigest.getInstance("MD5"); + md.update(bytes); + byte[] digest = md.digest(); + String myHash = DatatypeConverter.printHexBinary(digest).toUpperCase(); + return myHash; + } catch (NoSuchAlgorithmException e) { + return null; + } + } + public static boolean createNewMobSpawner(int aID, Entity aEntity) { + if (aEntity instanceof Entity) { + Class c = aEntity.getClass(); + return createNewMobSpawner(aID, c); + } + return false; + } + + public static boolean createNewMobSpawner(int aID, Class aEntity) { + Logger.INFO("[Spawn] Generating new spawner for entity with class (" + aEntity.getSimpleName() + ")."); + if (TileEntityGenericSpawner.registerNewMobSpawner(aID, (Class) aEntity)) { + EntityRegistration x = EntityRegistry.instance().lookupModSpawn((Class) aEntity, true); + if (x != null) { + Logger.INFO("[Spawn] Registration for " + x.getEntityName() + " successful"); + return true; + } else { + Logger.INFO("[Spawn] Registration for " + aEntity.getSimpleName() + " successful"); + return true; + } + } + Logger.INFO("[Spawn] Mob Spawner creation for " + aEntity.getName() + " failed"); + return false; + } + + public static long getMillisSince(long aStartTime, long aCurrentTime) { + return (aCurrentTime - aStartTime); + } + + public static long getSecondsFromMillis(long aMillis) { + return (aMillis / 1000); + } + + public static long getTicksFromSeconds(long aSeconds) { + return (aSeconds * 20); + } + + public static byte getTier(long l) { + byte i = -1; + do { + ++i; + if (i >= GT_Values.V.length) { + return i; + } + } while (l > GT_Values.V[i]); + i = (byte) MathUtils.getValueWithinRange(i, 0, 15); + return i; + } } diff --git a/src/main/java/gtPlusPlus/core/util/data/AES.java b/src/main/java/gtPlusPlus/core/util/data/AES.java index 1183cdd8e7..e782a48148 100644 --- a/src/main/java/gtPlusPlus/core/util/data/AES.java +++ b/src/main/java/gtPlusPlus/core/util/data/AES.java @@ -1 +1,153 @@ -\u0070\u0061\u0063\u006b\u0061\u0067\u0065\u0020\u0067\u0074\u0050\u006c\u0075\u0073\u0050\u006c\u0075\u0073\u002e\u0063\u006f\u0072\u0065\u002e\u0075\u0074\u0069\u006c\u002e\u0064\u0061\u0074\u0061\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u0069\u006f\u002e\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u006d\u0061\u0074\u0068\u002e\u0042\u0069\u0067\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u006e\u0069\u006f\u002e\u0063\u0068\u0061\u0072\u0073\u0065\u0074\u002e\u0053\u0074\u0061\u006e\u0064\u0061\u0072\u0064\u0043\u0068\u0061\u0072\u0073\u0065\u0074\u0073\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u0073\u0065\u0063\u0075\u0072\u0069\u0074\u0079\u002e\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u0073\u0065\u0063\u0075\u0072\u0069\u0074\u0079\u002e\u004e\u006f\u0053\u0075\u0063\u0068\u0041\u006c\u0067\u006f\u0072\u0069\u0074\u0068\u006d\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u0075\u0074\u0069\u006c\u002e\u0041\u0072\u0072\u0061\u0079\u0073\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u002e\u0075\u0074\u0069\u006c\u002e\u0042\u0061\u0073\u0065\u0036\u0034\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u0078\u002e\u0063\u0072\u0079\u0070\u0074\u006f\u002e\u0043\u0069\u0070\u0068\u0065\u0072\u003b\u000d\u000a\u0069\u006d\u0070\u006f\u0072\u0074\u0020\u006a\u0061\u0076\u0061\u0078\u002e\u0063\u0072\u0079\u0070\u0074\u006f\u002e\u0073\u0070\u0065\u0063\u002e\u0053\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0053\u0070\u0065\u0063\u003b\u000d\u000a\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0041\u0045\u0053\u0020\u007b\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0065\u0063\u0072\u0065\u0074\u003b\u003b\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0053\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0053\u0070\u0065\u0063\u0020\u0073\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u003b\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u006b\u0065\u0079\u003b\u0009\u000d\u000a\u0009\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0041\u0045\u0053\u0028\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0074\u0068\u0069\u0073\u0028\u0022\u0044\u0061\u0072\u006b\u006e\u0065\u0073\u0073\u0020\u0049\u006e\u0020\u0054\u0068\u0065\u0069\u0072\u0020\u0048\u0065\u0061\u0072\u0074\u0073\u0022\u0029\u003b\u0009\u0009\u000d\u000a\u0009\u007d\u0009\u000d\u000a\u0009\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0041\u0045\u0053\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0061\u0053\u0065\u0063\u0072\u0065\u0074\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0073\u0065\u0063\u0072\u0065\u0074\u0020\u003d\u0020\u0061\u0053\u0065\u0063\u0072\u0065\u0074\u003b\u000d\u000a\u0009\u0009\u006b\u0065\u0079\u0020\u003d\u0020\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0067\u0065\u0074\u0048\u0061\u0073\u0068\u0065\u0064\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0073\u0065\u0063\u0072\u0065\u0074\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u0073\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0020\u003d\u0020\u0067\u0065\u006e\u0065\u0072\u0061\u0074\u0065\u004b\u0065\u0079\u0028\u006b\u0065\u0079\u0029\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0067\u0065\u0074\u0048\u0061\u0073\u0068\u0065\u0064\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0061\u0053\u0074\u0072\u0069\u006e\u0067\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0074\u006f\u0048\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0067\u0065\u0074\u0053\u0048\u0041\u0028\u0061\u0053\u0074\u0072\u0069\u006e\u0067\u0029\u0029\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u0067\u0065\u0074\u0053\u0048\u0041\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0069\u006e\u0070\u0075\u0074\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u0020\u006d\u0064\u003b\u000d\u000a\u0009\u0009\u0074\u0072\u0079\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u006d\u0064\u0020\u003d\u0020\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u002e\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0028\u0022\u0053\u0048\u0041\u002d\u0032\u0035\u0036\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006d\u0064\u002e\u0064\u0069\u0067\u0065\u0073\u0074\u0028\u0069\u006e\u0070\u0075\u0074\u002e\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0053\u0074\u0061\u006e\u0064\u0061\u0072\u0064\u0043\u0068\u0061\u0072\u0073\u0065\u0074\u0073\u002e\u0055\u0054\u0046\u005f\u0038\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u004e\u006f\u0053\u0075\u0063\u0068\u0041\u006c\u0067\u006f\u0072\u0069\u0074\u0068\u006d\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0065\u002e\u0070\u0072\u0069\u006e\u0074\u0053\u0074\u0061\u0063\u006b\u0054\u0072\u0061\u0063\u0065\u0028\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0065\u0077\u0020\u0062\u0079\u0074\u0065\u005b\u005d\u007b\u007d\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0074\u006f\u0048\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u0068\u0061\u0073\u0068\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0042\u0069\u0067\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020\u003d\u0020\u006e\u0065\u0077\u0020\u0042\u0069\u0067\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u0028\u0031\u002c\u0020\u0068\u0061\u0073\u0068\u0029\u003b\u000d\u000a\u0009\u0009\u0053\u0074\u0072\u0069\u006e\u0067\u0042\u0075\u0069\u006c\u0064\u0065\u0072\u0020\u0068\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u003d\u0020\u006e\u0065\u0077\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0042\u0075\u0069\u006c\u0064\u0065\u0072\u0028\u006e\u0075\u006d\u0062\u0065\u0072\u002e\u0074\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0031\u0036\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u0077\u0068\u0069\u006c\u0065\u0020\u0028\u0068\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u006c\u0065\u006e\u0067\u0074\u0068\u0028\u0029\u0020\u003c\u0020\u0033\u0032\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0068\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u0069\u006e\u0073\u0065\u0072\u0074\u0028\u0030\u002c\u0020\u0027\u0030\u0027\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0068\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u0074\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0029\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0061\u004b\u0065\u0079\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u0061\u004b\u0065\u0079\u0044\u0061\u0074\u0061\u003b\u000d\u000a\u0009\u0009\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u0020\u0073\u0068\u0061\u003b\u000d\u000a\u0009\u0009\u0074\u0072\u0079\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0073\u0068\u0061\u0020\u003d\u0020\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u002e\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0028\u0022\u0053\u0048\u0041\u002d\u0032\u0035\u0036\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0073\u0068\u0061\u002e\u0064\u0069\u0067\u0065\u0073\u0074\u0028\u0061\u004b\u0065\u0079\u002e\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0053\u0074\u0061\u006e\u0064\u0061\u0072\u0064\u0043\u0068\u0061\u0072\u0073\u0065\u0074\u0073\u002e\u0055\u0054\u0046\u005f\u0038\u0029\u0029\u003b\u0020\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u004e\u006f\u0053\u0075\u0063\u0068\u0041\u006c\u0067\u006f\u0072\u0069\u0074\u0068\u006d\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0031\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0065\u0031\u002e\u0070\u0072\u0069\u006e\u0074\u0053\u0074\u0061\u0063\u006b\u0054\u0072\u0061\u0063\u0065\u0028\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0074\u0072\u0079\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0009\u0061\u004b\u0065\u0079\u0044\u0061\u0074\u0061\u0020\u003d\u0020\u0061\u004b\u0065\u0079\u002e\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0022\u0055\u0054\u0046\u002d\u0038\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0009\u0073\u0068\u0061\u0020\u003d\u0020\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0044\u0069\u0067\u0065\u0073\u0074\u002e\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0028\u0022\u0053\u0048\u0041\u002d\u0031\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0009\u0061\u004b\u0065\u0079\u0044\u0061\u0074\u0061\u0020\u003d\u0020\u0073\u0068\u0061\u002e\u0064\u0069\u0067\u0065\u0073\u0074\u0028\u006b\u0065\u0079\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0009\u0061\u004b\u0065\u0079\u0044\u0061\u0074\u0061\u0020\u003d\u0020\u0041\u0072\u0072\u0061\u0079\u0073\u002e\u0063\u006f\u0070\u0079\u004f\u0066\u0028\u006b\u0065\u0079\u002c\u0020\u0031\u0036\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0061\u004b\u0065\u0079\u0044\u0061\u0074\u0061\u003b\u000d\u000a\u0009\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u004e\u006f\u0053\u0075\u0063\u0068\u0041\u006c\u0067\u006f\u0072\u0069\u0074\u0068\u006d\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0009\u0065\u002e\u0070\u0072\u0069\u006e\u0074\u0053\u0074\u0061\u0063\u006b\u0054\u0072\u0061\u0063\u0065\u0028\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0009\u0065\u002e\u0070\u0072\u0069\u006e\u0074\u0053\u0074\u0061\u0063\u006b\u0054\u0072\u0061\u0063\u0065\u0028\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u007d\u0009\u0009\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0065\u0077\u0020\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u007b\u007d\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0072\u0069\u0076\u0061\u0074\u0065\u0020\u0066\u0069\u006e\u0061\u006c\u0020\u0053\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0053\u0070\u0065\u0063\u0020\u0067\u0065\u006e\u0065\u0072\u0061\u0074\u0065\u004b\u0065\u0079\u0028\u0062\u0079\u0074\u0065\u005b\u005d\u0020\u0061\u004b\u0065\u0079\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0065\u0077\u0020\u0053\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0053\u0070\u0065\u0063\u0028\u0061\u004b\u0065\u0079\u002c\u0020\u0022\u0041\u0045\u0053\u0022\u0029\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0074\u0072\u0054\u006f\u0045\u006e\u0063\u0072\u0079\u0070\u0074\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0074\u0072\u0079\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0043\u0069\u0070\u0068\u0065\u0072\u0020\u0063\u0069\u0070\u0068\u0065\u0072\u0020\u003d\u0020\u0043\u0069\u0070\u0068\u0065\u0072\u002e\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0028\u0022\u0041\u0045\u0053\u002f\u0045\u0043\u0042\u002f\u0050\u004b\u0043\u0053\u0035\u0050\u0061\u0064\u0064\u0069\u006e\u0067\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0063\u0069\u0070\u0068\u0065\u0072\u002e\u0069\u006e\u0069\u0074\u0028\u0043\u0069\u0070\u0068\u0065\u0072\u002e\u0045\u004e\u0043\u0052\u0059\u0050\u0054\u005f\u004d\u004f\u0044\u0045\u002c\u0020\u0073\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0042\u0061\u0073\u0065\u0036\u0034\u002e\u0067\u0065\u0074\u0045\u006e\u0063\u006f\u0064\u0065\u0072\u0028\u0029\u002e\u0065\u006e\u0063\u006f\u0064\u0065\u0054\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0063\u0069\u0070\u0068\u0065\u0072\u002e\u0064\u006f\u0046\u0069\u006e\u0061\u006c\u0028\u0073\u0074\u0072\u0054\u006f\u0045\u006e\u0063\u0072\u0079\u0070\u0074\u002e\u0067\u0065\u0074\u0042\u0079\u0074\u0065\u0073\u0028\u0022\u0055\u0054\u0046\u002d\u0038\u0022\u0029\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0045\u0072\u0072\u006f\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0069\u006e\u0067\u003a\u0020\u0022\u0020\u002b\u0020\u0065\u002e\u0074\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0075\u006c\u006c\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u0009\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0064\u0065\u0063\u006f\u0064\u0065\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0074\u0072\u0054\u006f\u0044\u0065\u0063\u0072\u0079\u0070\u0074\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u0074\u0072\u0079\u0020\u007b\u000d\u000a\u0009\u0009\u0009\u0043\u0069\u0070\u0068\u0065\u0072\u0020\u0063\u0069\u0070\u0068\u0065\u0072\u0020\u003d\u0020\u0043\u0069\u0070\u0068\u0065\u0072\u002e\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0028\u0022\u0041\u0045\u0053\u002f\u0045\u0043\u0042\u002f\u0050\u004b\u0043\u0053\u0035\u0050\u0041\u0044\u0044\u0049\u004e\u0047\u0022\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0063\u0069\u0070\u0068\u0065\u0072\u002e\u0069\u006e\u0069\u0074\u0028\u0043\u0069\u0070\u0068\u0065\u0072\u002e\u0044\u0045\u0043\u0052\u0059\u0050\u0054\u005f\u004d\u004f\u0044\u0045\u002c\u0020\u0073\u0065\u0063\u0072\u0065\u0074\u004b\u0065\u0079\u0029\u003b\u000d\u000a\u0009\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0065\u0077\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0063\u0069\u0070\u0068\u0065\u0072\u002e\u0064\u006f\u0046\u0069\u006e\u0061\u006c\u0028\u0042\u0061\u0073\u0065\u0036\u0034\u002e\u0067\u0065\u0074\u0044\u0065\u0063\u006f\u0064\u0065\u0072\u0028\u0029\u002e\u0064\u0065\u0063\u006f\u0064\u0065\u0028\u0073\u0074\u0072\u0054\u006f\u0044\u0065\u0063\u0072\u0079\u0070\u0074\u0029\u0029\u0029\u003b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b\u000d\u000a\u0009\u0009\u007d\u000d\u000a\u0009\u0009\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u006e\u0075\u006c\u006c\u003b\u000d\u000a\u0009\u007d\u000d\u000a\u007d \ No newline at end of file +package gtPlusPlus.core.util.data; + +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +public class AES { + + private final String secret; + ; + + private final SecretKeySpec secretKey; + + private final byte[] key; + + public AES() { + + this("Darkness In Their Hearts"); + } + + public AES(String aSecret) { + + secret = aSecret; + + key = getBytes(getHashedString(secret)); + + secretKey = generateKey(key); + } + + private static final String getHashedString(String aString) { + + return toHexString(getSHA(aString)); + } + + private static final byte[] getSHA(String input) { + + MessageDigest md; + + try { + + md = MessageDigest.getInstance("SHA-256"); + + return md.digest(input.getBytes(StandardCharsets.UTF_8)); + + } catch (NoSuchAlgorithmException e) { + + e.printStackTrace(); + } + + return new byte[] {}; + } + + private static final String toHexString(byte[] hash) { + + BigInteger number = new BigInteger(1, hash); + + StringBuilder hexString = new StringBuilder(number.toString(16)); + + while (hexString.length() < 32) { + + hexString.insert(0, '0'); + } + + return hexString.toString(); + } + + private final byte[] getBytes(String aKey) { + + byte[] aKeyData; + + MessageDigest sha; + + try { + + sha = MessageDigest.getInstance("SHA-256"); + + return sha.digest(aKey.getBytes(StandardCharsets.UTF_8)); + + } catch (NoSuchAlgorithmException e1) { + + e1.printStackTrace(); + + try { + + aKeyData = aKey.getBytes("UTF-8"); + + sha = MessageDigest.getInstance("SHA-1"); + + aKeyData = sha.digest(key); + + aKeyData = Arrays.copyOf(key, 16); + + return aKeyData; + + } catch (NoSuchAlgorithmException e) { + + e.printStackTrace(); + + } catch (UnsupportedEncodingException e) { + + e.printStackTrace(); + } + } + + return new byte[] {}; + } + + private final SecretKeySpec generateKey(byte[] aKey) { + + return new SecretKeySpec(aKey, "AES"); + } + + public String encode(String strToEncrypt) { + + try { + + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + + return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); + + } catch (Exception e) { + + System.out.println("Error while encrypting: " + e.toString()); + } + + return null; + } + + public String decode(String strToDecrypt) { + + try { + + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); + + cipher.init(Cipher.DECRYPT_MODE, secretKey); + + return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); + + } catch (Exception e) { + + } + + return null; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java b/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java index 62f703f5f5..8630ac5abf 100644 --- a/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java @@ -1,121 +1,115 @@ package gtPlusPlus.core.util.data; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; public class ArrayUtils { - public static V[] expandArray(final V[] someArray, final V newValueToAdd) { - V[] series = someArray; - series = addElement(series, newValueToAdd); - return series; - } + public static V[] expandArray(final V[] someArray, final V newValueToAdd) { + V[] series = someArray; + series = addElement(series, newValueToAdd); + return series; + } - private static V[] addElement(V[] series, final V newValueToAdd) { - series = Arrays.copyOf(series, series.length + 1); - series[series.length - 1] = newValueToAdd; - return series; - } - - public static V[] insertElementAtIndex(V[] aArray, int aIndex, V aObjectToInsert) { - V[] newArray = Arrays.copyOf(aArray, aArray.length + 1); - for (int i=0;i Object getMostCommonElement(List 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(); - }*/ + private static V[] addElement(V[] series, final V newValueToAdd) { + series = Arrays.copyOf(series, series.length + 1); + series[series.length - 1] = newValueToAdd; + return series; + } + public static 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 Object[] removeNulls(final Object[] v) { - List list = new ArrayList(Arrays.asList(v)); - list.removeAll(Collections.singleton((Object)null)); - return list.toArray(new Object[list.size()]); - } - - public static ItemStack[] removeNulls(final ItemStack[] v) { - List list = new ArrayList(Arrays.asList(v)); - list.removeAll(Collections.singleton((ItemStack)null)); - return list.toArray(new ItemStack[list.size()]); - } + /*public static Object getMostCommonElement(List 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(); + }*/ - @SuppressWarnings("unchecked") - public static Set combineSetData(Set S, Set J) { - Set mData = new HashSet(); - T[] array1 = (T[]) S.toArray(); - Collections.addAll(mData, array1); - T[] array2 = (T[]) J.toArray(); - Collections.addAll(mData, array2); - return mData; - } + public static Object[] removeNulls(final Object[] v) { + List list = new ArrayList(Arrays.asList(v)); + list.removeAll(Collections.singleton((Object) null)); + return list.toArray(new Object[list.size()]); + } - public static AutoMap mergeTwoMaps(AutoMap a, AutoMap b) { - AutoMap c = new AutoMap(); - for (A g : a.values()) { - c.put(g); - } - for (A g : b.values()) { - c.put(g); - } - return c; - } - - public static T[][] rotateArrayClockwise(T[][] mat) { - Logger.INFO("Rotating Array 90' Clockwise"); - try { - final int M = mat.length; - final int N = mat[0].length; - Logger.INFO("Dimension X: "+M); - Logger.INFO("Dimension Z: "+N); - @SuppressWarnings("unchecked") - T[][] ret = (T[][]) new Object[N][M]; - for (int r = 0; r < M; r++) { - for (int c = 0; c < N; c++) { - ret[c][M-1-r] = mat[r][c]; - } - } - Logger.INFO("Returning Rotated Array"); - return ret; - } - catch (Throwable t) { - t.printStackTrace(); - return null; - } - } + public static ItemStack[] removeNulls(final ItemStack[] v) { + List list = new ArrayList(Arrays.asList(v)); + list.removeAll(Collections.singleton((ItemStack) null)); + return list.toArray(new ItemStack[list.size()]); + } - public static String toString(Object[] aArray, String string) { - return org.apache.commons.lang3.ArrayUtils.toString(aArray, string); - } + @SuppressWarnings("unchecked") + public static Set combineSetData(Set S, Set J) { + Set mData = new HashSet(); + T[] array1 = (T[]) S.toArray(); + Collections.addAll(mData, array1); + T[] array2 = (T[]) J.toArray(); + Collections.addAll(mData, array2); + return mData; + } - public static String toString(Object[] aArray) { - return org.apache.commons.lang3.ArrayUtils.toString(aArray); - } + public static AutoMap mergeTwoMaps(AutoMap a, AutoMap b) { + AutoMap c = new AutoMap(); + for (A g : a.values()) { + c.put(g); + } + for (A g : b.values()) { + c.put(g); + } + return c; + } - public static Object[] getArrayFromArrayList(ArrayList aArrayList) { - Object[] aGenericArray = new Object[aArrayList.size()]; - int aIndex = 0; - for (T object : aArrayList) { - aGenericArray[aIndex++] = object; - } - return aGenericArray; - } + public static T[][] rotateArrayClockwise(T[][] mat) { + Logger.INFO("Rotating Array 90' Clockwise"); + try { + final int M = mat.length; + final int N = mat[0].length; + Logger.INFO("Dimension X: " + M); + Logger.INFO("Dimension Z: " + N); + @SuppressWarnings("unchecked") + T[][] ret = (T[][]) new Object[N][M]; + for (int r = 0; r < M; r++) { + for (int c = 0; c < N; c++) { + ret[c][M - 1 - r] = mat[r][c]; + } + } + Logger.INFO("Returning Rotated Array"); + return ret; + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + } -} + public static String toString(Object[] aArray, String string) { + return org.apache.commons.lang3.ArrayUtils.toString(aArray, string); + } + public static String toString(Object[] aArray) { + return org.apache.commons.lang3.ArrayUtils.toString(aArray); + } + + public static Object[] getArrayFromArrayList(ArrayList aArrayList) { + Object[] aGenericArray = new Object[aArrayList.size()]; + int aIndex = 0; + for (T object : aArrayList) { + aGenericArray[aIndex++] = object; + } + return aGenericArray; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/data/EnumUtils.java b/src/main/java/gtPlusPlus/core/util/data/EnumUtils.java index edcc071b54..2a74edb5aa 100644 --- a/src/main/java/gtPlusPlus/core/util/data/EnumUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/EnumUtils.java @@ -5,47 +5,42 @@ import com.google.common.base.Optional; public class EnumUtils { - /** - * Returns the value of an Enum if it exists. - * If value is not found, case-insensitive search will occur. - * If value still not found, an IllegalArgumentException is thrown. - **/ - public static > T getValue(Class enumeration, String name) { - Optional j = Enums.getIfPresent(enumeration, name); - T VALUE; - if (j == null || !j.isPresent()) { - VALUE = valueOfIgnoreCase(enumeration, name); - } - else { - VALUE = j.get(); - } - return VALUE; - } - - /** - * Finds the value of the given enumeration by name, case-insensitive. - * Throws an IllegalArgumentException if no match is found. - **/ - private static > T valueOfIgnoreCase(Class enumeration, String name) { + /** + * Returns the value of an Enum if it exists. + * If value is not found, case-insensitive search will occur. + * If value still not found, an IllegalArgumentException is thrown. + **/ + public static > T getValue(Class enumeration, String name) { + Optional j = Enums.getIfPresent(enumeration, name); + T VALUE; + if (j == null || !j.isPresent()) { + VALUE = valueOfIgnoreCase(enumeration, name); + } else { + VALUE = j.get(); + } + return VALUE; + } - for (T enumValue : enumeration.getEnumConstants()) { - if (enumValue.name().equalsIgnoreCase(name)) { - return enumValue; - } - } + /** + * Finds the value of the given enumeration by name, case-insensitive. + * Throws an IllegalArgumentException if no match is found. + **/ + private static > T valueOfIgnoreCase(Class enumeration, String name) { - throw new IllegalArgumentException(String.format( - "There is no value with name '%s' in Enum %s", - name, enumeration.getName() - )); - } + for (T enumValue : enumeration.getEnumConstants()) { + if (enumValue.name().equalsIgnoreCase(name)) { + return enumValue; + } + } - public static Object getValue(Class class1, String materialName, boolean bool) { - if (Enum.class.isInstance(class1)){ - return getValue(class1, materialName); - } - return null; - } - - + throw new IllegalArgumentException( + String.format("There is no value with name '%s' in Enum %s", name, enumeration.getName())); + } + + public static Object getValue(Class class1, String materialName, boolean bool) { + if (Enum.class.isInstance(class1)) { + return getValue(class1, materialName); + } + return null; + } } diff --git a/src/main/java/gtPlusPlus/core/util/data/FileUtils.java b/src/main/java/gtPlusPlus/core/util/data/FileUtils.java index bec5e0eeff..19f868c2a9 100644 --- a/src/main/java/gtPlusPlus/core/util/data/FileUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/FileUtils.java @@ -1,5 +1,7 @@ package gtPlusPlus.core.util.data; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.Utils; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; @@ -11,94 +13,89 @@ import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.util.Utils; - public class FileUtils { - private static final Charset utf8 = StandardCharsets.UTF_8; + private static final Charset utf8 = StandardCharsets.UTF_8; + + public static boolean doesFileExist(File f) { + if (f != null && f.exists() && !f.isDirectory()) { + return true; + } + return false; + } - public static boolean doesFileExist(File f) { - if (f != null && f.exists() && !f.isDirectory()) { - return true; - } - return false; - } + public static File createFile(String path, String filename, String extension) { + File file = new File(Utils.getMcDir(), path + filename + extension); + return createFile(file); + } - public static File createFile(String path, String filename, String extension) { - File file = new File(Utils.getMcDir(), path + filename + extension); - return createFile(file); - } - - public static File createFile(File aFile) { - boolean blnCreated = false; - Logger.INFO("Trying to use path "+aFile.getPath()); - try { - Logger.INFO("Trying to use path "+aFile.getCanonicalPath()); - Logger.INFO("Trying to use absolute path "+aFile.getAbsolutePath()); - blnCreated = aFile.createNewFile(); - } catch (IOException ioe) { - Logger.INFO("Error while creating a new empty file :" + ioe); - return null; - } - return blnCreated ? aFile : null; - } + public static File createFile(File aFile) { + boolean blnCreated = false; + Logger.INFO("Trying to use path " + aFile.getPath()); + try { + Logger.INFO("Trying to use path " + aFile.getCanonicalPath()); + Logger.INFO("Trying to use absolute path " + aFile.getAbsolutePath()); + blnCreated = aFile.createNewFile(); + } catch (IOException ioe) { + Logger.INFO("Error while creating a new empty file :" + ioe); + return null; + } + return blnCreated ? aFile : null; + } - public static File getFile(String filename, String extension) { - return getFile("", filename, extension); - } + public static File getFile(String filename, String extension) { + return getFile("", filename, extension); + } - public static File getFile(String path, String filename, String extension) { - if (path == null || path.length() <= 0) { - path = ""; - } - else { - path = path + "/"; - } - if (filename == null || filename.length() <= 0) { - return null; - } - if (extension == null || extension.length() <= 0) { - extension = ".txt"; - } - else { - extension = "." + extension; - } - File file = new File(Utils.getMcDir(), path + filename + extension); - boolean doesExist = doesFileExist(file); + public static File getFile(String path, String filename, String extension) { + if (path == null || path.length() <= 0) { + path = ""; + } else { + path = path + "/"; + } + if (filename == null || filename.length() <= 0) { + return null; + } + if (extension == null || extension.length() <= 0) { + extension = ".txt"; + } else { + extension = "." + extension; + } + File file = new File(Utils.getMcDir(), path + filename + extension); + boolean doesExist = doesFileExist(file); - if (doesExist) { - Logger.INFO("Found File: " + file.getAbsolutePath()); - return file; - } else { - Logger.INFO("Creating file, as it was not found."); - return createFile(path, filename, extension); - } - } + if (doesExist) { + Logger.INFO("Found File: " + file.getAbsolutePath()); + return file; + } else { + Logger.INFO("Creating file, as it was not found."); + return createFile(path, filename, extension); + } + } - public static boolean appendListToFile(File file, List content) { - try { - long oldSize; - long newSize; - if (doesFileExist(file)) { - Path p = Paths.get(file.getPath()); - if (p != null && Files.isWritable(p)) { - oldSize = Files.size(p); - try { - Files.write(p, content, utf8, StandardOpenOption.APPEND); - } catch (IOException e) { - e.printStackTrace(); - } - newSize = Files.size(p); - return newSize > oldSize; - } - } - } catch (IOException e) { - } - return false; - } + public static boolean appendListToFile(File file, List content) { + try { + long oldSize; + long newSize; + if (doesFileExist(file)) { + Path p = Paths.get(file.getPath()); + if (p != null && Files.isWritable(p)) { + oldSize = Files.size(p); + try { + Files.write(p, content, utf8, StandardOpenOption.APPEND); + } catch (IOException e) { + e.printStackTrace(); + } + newSize = Files.size(p); + return newSize > oldSize; + } + } + } catch (IOException e) { + } + return false; + } - /** + /** * Reads the contents of a file line by line to a List of Strings using the default encoding for the VM. * The file is always closed. * @@ -109,10 +106,9 @@ public class FileUtils { */ public static List readLines(File file) { try { - return org.apache.commons.io.FileUtils.readLines(file, utf8); - } - catch (IOException e) { - return new ArrayList(); - } + return org.apache.commons.io.FileUtils.readLines(file, utf8); + } catch (IOException e) { + return new ArrayList(); + } } } diff --git a/src/main/java/gtPlusPlus/core/util/data/LocaleUtils.java b/src/main/java/gtPlusPlus/core/util/data/LocaleUtils.java index d1a35a661b..a67262c4bd 100644 --- a/src/main/java/gtPlusPlus/core/util/data/LocaleUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/LocaleUtils.java @@ -1,90 +1,82 @@ package gtPlusPlus.core.util.data; -import java.io.*; - import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.registry.GameData; - +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import java.io.*; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - public class LocaleUtils { - public static boolean generateFakeLocaleFile() { - for (ModContainer modcontainer : Loader.instance().getModList()){ - if (modcontainer.getModId().toLowerCase().equals("miscutils")) { - String S = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; - writeToFile(S); - dumpItemsAndBlocksForModContainer(modcontainer); - } - } - return true; - } + public static boolean generateFakeLocaleFile() { + for (ModContainer modcontainer : Loader.instance().getModList()) { + if (modcontainer.getModId().toLowerCase().equals("miscutils")) { + String S = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; + writeToFile(S); + dumpItemsAndBlocksForModContainer(modcontainer); + } + } + return true; + } + + public static boolean dumpItemsAndBlocksForModContainer(ModContainer mod) { + writeToFile("Dumping Items from " + mod.getModId() + "."); + for (Object C : GameData.getItemRegistry()) { + + try { + + if (C != null) { + if (C instanceof Item) { + Item R = (Item) C; + ItemStack IS = ItemUtils.getSimpleStack(R); + String modid = ItemUtils.getModId(IS); + if (modid.equals("miscutils") || modid.equals("ToxicEverglades")) { + String S = "[" + modid + "] " + IS.getUnlocalizedName() + ".name="; + writeToFile(S); + } + } + } - public static boolean dumpItemsAndBlocksForModContainer(ModContainer mod) { - writeToFile("Dumping Items from "+mod.getModId()+"."); - for (Object C : GameData.getItemRegistry()) { - - try { - - if (C != null) { - if (C instanceof Item) { - Item R = (Item) C; - ItemStack IS = ItemUtils.getSimpleStack(R); - String modid = ItemUtils.getModId(IS); - if (modid.equals("miscutils") || modid.equals("ToxicEverglades")) { - String S = "["+modid+"] "+IS.getUnlocalizedName()+".name="; - writeToFile(S); - } - } - } - - } - catch (Throwable T) {} - - } - writeToFile("Dumping Blocks from "+mod.getModId()+"."); - for (Object B : GameData.getBlockRegistry()) { - - try { - - if (B != null) { - if (B instanceof Block) { - Block R = (Block) B; - ItemStack IS = ItemUtils.getSimpleStack(R); - String modid = ItemUtils.getModId(IS); - if (modid.equals("miscutils") || modid.equals("ToxicEverglades")) { - String S = "["+modid+"] "+IS.getUnlocalizedName()+".name="; - writeToFile(S); - } - } - } - - } - catch (Throwable T) {} - - } + } catch (Throwable T) { + } + } + writeToFile("Dumping Blocks from " + mod.getModId() + "."); + for (Object B : GameData.getBlockRegistry()) { + try { - return true; - } + if (B != null) { + if (B instanceof Block) { + Block R = (Block) B; + ItemStack IS = ItemUtils.getSimpleStack(R); + String modid = ItemUtils.getModId(IS); + if (modid.equals("miscutils") || modid.equals("ToxicEverglades")) { + String S = "[" + modid + "] " + IS.getUnlocalizedName() + ".name="; + writeToFile(S); + } + } + } - public static void writeToFile(String S) { - try { - File F = new File(Utils.getMcDir(), "config/GTplusplus/en_US.lang"); - BufferedWriter writer; - writer = new BufferedWriter(new FileWriter(F, true)); - writer.write(S); - writer.newLine(); - writer.close(); - } - catch (IOException e) {} - } + } catch (Throwable T) { + } + } + return true; + } + public static void writeToFile(String S) { + try { + File F = new File(Utils.getMcDir(), "config/GTplusplus/en_US.lang"); + BufferedWriter writer; + writer = new BufferedWriter(new FileWriter(F, true)); + writer.write(S); + writer.newLine(); + writer.close(); + } catch (IOException e) { + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/data/LoggingUtils.java b/src/main/java/gtPlusPlus/core/util/data/LoggingUtils.java index 8415ab32fe..16c04f2c34 100644 --- a/src/main/java/gtPlusPlus/core/util/data/LoggingUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/LoggingUtils.java @@ -5,45 +5,43 @@ import java.util.Date; public class LoggingUtils { - public static void profileLog(final Object o) { - try { - String content; - final File file = new File("GregtechTimingsTC.txt"); - // if file doesnt exists, then create it - if (!file.exists()) { - file.createNewFile(); - final FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); - final BufferedWriter bw = new BufferedWriter(fw); - bw.write("============================================================"); - bw.write(System.lineSeparator()); - bw.close(); - } - if (o instanceof String) { - content = (String) o; - } else { - content = o.toString(); - } - final FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); - final BufferedWriter bw = new BufferedWriter(fw); - bw.write(content); - bw.write(System.lineSeparator()); - bw.close(); - System.out.println("Data Logged."); + public static void profileLog(final Object o) { + try { + String content; + final File file = new File("GregtechTimingsTC.txt"); + // if file doesnt exists, then create it + if (!file.exists()) { + file.createNewFile(); + final FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); + final BufferedWriter bw = new BufferedWriter(fw); + bw.write("============================================================"); + bw.write(System.lineSeparator()); + bw.close(); + } + if (o instanceof String) { + content = (String) o; + } else { + content = o.toString(); + } + final FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); + final BufferedWriter bw = new BufferedWriter(fw); + bw.write(content); + bw.write(System.lineSeparator()); + bw.close(); + System.out.println("Data Logged."); - } catch (final IOException e) { - System.out.println("Data logging failed."); - } - } - - public static boolean logCurrentSystemTime(final String message) { - final Date date = new Date(System.currentTimeMillis()); - try { - profileLog(message + " | " + date.toString()); - return true; - } catch (final Throwable r) { - return false; - } - - } + } catch (final IOException e) { + System.out.println("Data logging failed."); + } + } + public static boolean logCurrentSystemTime(final String message) { + final Date date = new Date(System.currentTimeMillis()); + try { + profileLog(message + " | " + date.toString()); + return true; + } catch (final Throwable r) { + return false; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/data/StringUtils.java b/src/main/java/gtPlusPlus/core/util/data/StringUtils.java index 2372d04c15..af40dbae41 100644 --- a/src/main/java/gtPlusPlus/core/util/data/StringUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/StringUtils.java @@ -6,214 +6,219 @@ import gtPlusPlus.core.util.Utils; public class StringUtils { - public static String superscript(String str) { - str = str.replaceAll("0", "\u2070"); - str = str.replaceAll("1", "\u00B9"); - str = str.replaceAll("2", "\u00B2"); - str = str.replaceAll("3", "\u00B3"); - str = str.replaceAll("4", "\u2074"); - str = str.replaceAll("5", "\u2075"); - str = str.replaceAll("6", "\u2076"); - str = str.replaceAll("7", "\u2077"); - str = str.replaceAll("8", "\u2078"); - str = str.replaceAll("9", "\u2079"); - return str; - } - - public static String subscript(String str) { - str = str.replaceAll("0", "\u2080"); - str = str.replaceAll("1", "\u2081"); - str = str.replaceAll("2", "\u2082"); - str = str.replaceAll("3", "\u2083"); - str = str.replaceAll("4", "\u2084"); - str = str.replaceAll("5", "\u2085"); - str = str.replaceAll("6", "\u2086"); - str = str.replaceAll("7", "\u2087"); - str = str.replaceAll("8", "\u2088"); - str = str.replaceAll("9", "\u2089"); - return str; - } - - public static boolean containsSuperOrSubScript(final String s){ - if (s.contains(StringUtils.superscript("0"))) { - return true; - } - else if (s.contains(StringUtils.superscript("1"))) { - return true; - } - else if (s.contains(StringUtils.superscript("2"))) { - return true; - } - else if (s.contains(StringUtils.superscript("3"))) { - return true; - } - else if (s.contains(StringUtils.superscript("4"))) { - return true; - } - else if (s.contains(StringUtils.superscript("5"))) { - return true; - } - else if (s.contains(StringUtils.superscript("6"))) { - return true; - } - else if (s.contains(StringUtils.superscript("7"))) { - return true; - } - else if (s.contains(StringUtils.superscript("8"))) { - return true; - } - else if (s.contains(StringUtils.superscript("9"))) { - return true; - } - if (s.contains(StringUtils.subscript("0"))) { - return true; - } - else if (s.contains(StringUtils.subscript("1"))) { - return true; - } - else if (s.contains(StringUtils.subscript("2"))) { - return true; - } - else if (s.contains(StringUtils.subscript("3"))) { - return true; - } - else if (s.contains(StringUtils.subscript("4"))) { - return true; - } - else if (s.contains(StringUtils.subscript("5"))) { - return true; - } - else if (s.contains(StringUtils.subscript("6"))) { - return true; - } - else if (s.contains(StringUtils.subscript("7"))) { - return true; - } - else if (s.contains(StringUtils.subscript("8"))) { - return true; - } - else if (s.contains(StringUtils.subscript("9"))) { - return true; - } - return false; - } - - //Can call this Enum for formatting. - public static enum TextUtils { - blue('1'), green('2'), teal('3'), maroon('4'), purple('5'), orange('6'), lightGray('7'), darkGray('8'), lightBlue( - '9'), black('0'), lime('a'), aqua('b'), red('c'), pink('d'), yellow('e'), white('f'); - - private char colourValue; - private TextUtils(final char value) { - this.colourValue = value; - } - public String colour() { - return getFormatter() + this.colourValue; - } - private String getFormatter() { - return "\u00A7"; // Returns §. - } - } - - public static String firstLetterCaps(String data) { - String firstLetter = data.substring(0,1).toUpperCase(); - String restLetters = data.substring(1).toLowerCase(); - return firstLetter + restLetters; - } - - public static String getDataStringFromArray(V[] parameterTypes) { - if (parameterTypes == null || parameterTypes.length == 0) { - return "empty/null"; - } - else { - String aData = ""; - for (V y : parameterTypes) { - if (y != null) { - aData += ", "+y.toString(); - } - } - return aData; - } - } - - - - /** - * Is this a special regex character for delimination? (.$|()[]{}^?*+\\) - * @param aChar - The char to test - * @return - Is this a special character? - */ - public static boolean isSpecialCharacter(char aChar) { - if (aChar == '"' || aChar == '.' || aChar == '$' || aChar == '|' || aChar == '(' || aChar == ')' || aChar == '[' - || aChar == ']' || aChar == '{' || aChar == '}' || aChar == '^' || aChar == '?' || aChar == '*' - || aChar == '+' || aChar == '\\') { - return true; - } - return false; - } - - public static boolean isEscaped(String aString) { - return aString.substring(0, 1).equals("\\"); - } - - public static String splitAndUppercase(String aInput, String aDelim) { - - if (!isEscaped(aDelim)) { - boolean isSpecial = false; - for (int o=0;o aTemp = new AutoMap(); - for (String s : aSplit) { - Logger.INFO("Found: "+s); - s = s.replace(".", ""); - s = Utils.sanitizeString(s); - s = firstLetterCaps(s); - Logger.INFO("Formatted & Captilized: "+s); - aTemp.put(s); - } - Logger.INFO("Rebuilding"); - String aReturn = ""; - for (String s : aTemp) { - aReturn += s; - Logger.INFO("Step: "+aReturn); - } - return aReturn; - } - } - - public static int characterCount(String aString, char aChar) { - return characterCount(aString, ""+aChar); - } - - public static int characterCount(String aString, String aChar) { - int aLength = aString.length(); - int aFound = 0; - if (aLength == 0 || !aString.contains(aChar)) { - return 0; - } - else { - for (int index = 0; index < aLength; index++) { - if (aString.substring(index, index+1).equals(aChar)) { - aFound++; - } - } - return aFound; - } - } + public static String superscript(String str) { + str = str.replaceAll("0", "\u2070"); + str = str.replaceAll("1", "\u00B9"); + str = str.replaceAll("2", "\u00B2"); + str = str.replaceAll("3", "\u00B3"); + str = str.replaceAll("4", "\u2074"); + str = str.replaceAll("5", "\u2075"); + str = str.replaceAll("6", "\u2076"); + str = str.replaceAll("7", "\u2077"); + str = str.replaceAll("8", "\u2078"); + str = str.replaceAll("9", "\u2079"); + return str; + } + + public static String subscript(String str) { + str = str.replaceAll("0", "\u2080"); + str = str.replaceAll("1", "\u2081"); + str = str.replaceAll("2", "\u2082"); + str = str.replaceAll("3", "\u2083"); + str = str.replaceAll("4", "\u2084"); + str = str.replaceAll("5", "\u2085"); + str = str.replaceAll("6", "\u2086"); + str = str.replaceAll("7", "\u2087"); + str = str.replaceAll("8", "\u2088"); + str = str.replaceAll("9", "\u2089"); + return str; + } + + public static boolean containsSuperOrSubScript(final String s) { + if (s.contains(StringUtils.superscript("0"))) { + return true; + } else if (s.contains(StringUtils.superscript("1"))) { + return true; + } else if (s.contains(StringUtils.superscript("2"))) { + return true; + } else if (s.contains(StringUtils.superscript("3"))) { + return true; + } else if (s.contains(StringUtils.superscript("4"))) { + return true; + } else if (s.contains(StringUtils.superscript("5"))) { + return true; + } else if (s.contains(StringUtils.superscript("6"))) { + return true; + } else if (s.contains(StringUtils.superscript("7"))) { + return true; + } else if (s.contains(StringUtils.superscript("8"))) { + return true; + } else if (s.contains(StringUtils.superscript("9"))) { + return true; + } + if (s.contains(StringUtils.subscript("0"))) { + return true; + } else if (s.contains(StringUtils.subscript("1"))) { + return true; + } else if (s.contains(StringUtils.subscript("2"))) { + return true; + } else if (s.contains(StringUtils.subscript("3"))) { + return true; + } else if (s.contains(StringUtils.subscript("4"))) { + return true; + } else if (s.contains(StringUtils.subscript("5"))) { + return true; + } else if (s.contains(StringUtils.subscript("6"))) { + return true; + } else if (s.contains(StringUtils.subscript("7"))) { + return true; + } else if (s.contains(StringUtils.subscript("8"))) { + return true; + } else if (s.contains(StringUtils.subscript("9"))) { + return true; + } + return false; + } + + // Can call this Enum for formatting. + public static enum TextUtils { + blue('1'), + green('2'), + teal('3'), + maroon('4'), + purple('5'), + orange('6'), + lightGray('7'), + darkGray('8'), + lightBlue('9'), + black('0'), + lime('a'), + aqua('b'), + red('c'), + pink('d'), + yellow('e'), + white('f'); + + private char colourValue; + + private TextUtils(final char value) { + this.colourValue = value; + } + + public String colour() { + return getFormatter() + this.colourValue; + } + + private String getFormatter() { + return "\u00A7"; // Returns §. + } + } + + public static String firstLetterCaps(String data) { + String firstLetter = data.substring(0, 1).toUpperCase(); + String restLetters = data.substring(1).toLowerCase(); + return firstLetter + restLetters; + } + + public static String getDataStringFromArray(V[] parameterTypes) { + if (parameterTypes == null || parameterTypes.length == 0) { + return "empty/null"; + } else { + String aData = ""; + for (V y : parameterTypes) { + if (y != null) { + aData += ", " + y.toString(); + } + } + return aData; + } + } + + /** + * Is this a special regex character for delimination? (.$|()[]{}^?*+\\) + * @param aChar - The char to test + * @return - Is this a special character? + */ + public static boolean isSpecialCharacter(char aChar) { + if (aChar == '"' + || aChar == '.' + || aChar == '$' + || aChar == '|' + || aChar == '(' + || aChar == ')' + || aChar == '[' + || aChar == ']' + || aChar == '{' + || aChar == '}' + || aChar == '^' + || aChar == '?' + || aChar == '*' + || aChar == '+' + || aChar == '\\') { + return true; + } + return false; + } + + public static boolean isEscaped(String aString) { + return aString.substring(0, 1).equals("\\"); + } + + public static String splitAndUppercase(String aInput, String aDelim) { + + if (!isEscaped(aDelim)) { + boolean isSpecial = false; + for (int o = 0; o < aInput.length(); o++) { + if (isSpecialCharacter(aInput.charAt(o))) { + isSpecial = true; + } + } + if (isSpecial) { + aDelim = "\\" + aDelim; + } + } + + Logger.INFO("Splitting " + aInput); + String[] aSplit = aInput.split(aDelim); + Logger.INFO("Split into " + aSplit == null ? "" + 0 : aSplit.length + " parts."); + if (aSplit == null || aSplit.length == 0) { + return aInput; + } else { + AutoMap aTemp = new AutoMap(); + for (String s : aSplit) { + Logger.INFO("Found: " + s); + s = s.replace(".", ""); + s = Utils.sanitizeString(s); + s = firstLetterCaps(s); + Logger.INFO("Formatted & Captilized: " + s); + aTemp.put(s); + } + Logger.INFO("Rebuilding"); + String aReturn = ""; + for (String s : aTemp) { + aReturn += s; + Logger.INFO("Step: " + aReturn); + } + return aReturn; + } + } + + public static int characterCount(String aString, char aChar) { + return characterCount(aString, "" + aChar); + } + + public static int characterCount(String aString, String aChar) { + int aLength = aString.length(); + int aFound = 0; + if (aLength == 0 || !aString.contains(aChar)) { + return 0; + } else { + for (int index = 0; index < aLength; index++) { + if (aString.substring(index, index + 1).equals(aChar)) { + aFound++; + } + } + return aFound; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/data/UUIDUtils.java b/src/main/java/gtPlusPlus/core/util/data/UUIDUtils.java index d6b32314b1..71634b3af7 100644 --- a/src/main/java/gtPlusPlus/core/util/data/UUIDUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/UUIDUtils.java @@ -5,21 +5,20 @@ import java.util.UUID; public class UUIDUtils { - //UUID Methods below created by https://gist.github.com/jeffjohnson9046 - //https://gist.github.com/jeffjohnson9046/c663dd22bbe6bb0b3f5e + // UUID Methods below created by https://gist.github.com/jeffjohnson9046 + // https://gist.github.com/jeffjohnson9046/c663dd22bbe6bb0b3f5e - public static byte[] getBytesFromUUID(UUID uuid) { - ByteBuffer bb = ByteBuffer.wrap(new byte[16]); - bb.putLong(uuid.getMostSignificantBits()); - bb.putLong(uuid.getLeastSignificantBits()); - return bb.array(); - } - - public static UUID getUUIDFromBytes(byte[] bytes) { - ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); - Long high = byteBuffer.getLong(); - Long low = byteBuffer.getLong(); - return new UUID(high, low); - } + public static byte[] getBytesFromUUID(UUID uuid) { + ByteBuffer bb = ByteBuffer.wrap(new byte[16]); + bb.putLong(uuid.getMostSignificantBits()); + bb.putLong(uuid.getLeastSignificantBits()); + return bb.array(); + } + public static UUID getUUIDFromBytes(byte[] bytes) { + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + Long high = byteBuffer.getLong(); + Long low = byteBuffer.getLong(); + return new UUID(high, low); + } } diff --git a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_INIT.java b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_INIT.java index f8fc15c778..a6441ee558 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_INIT.java +++ b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_INIT.java @@ -4,34 +4,25 @@ import gtPlusPlus.preloader.CORE_Preloader; public class DEBUG_INIT { - public static void registerBlocks(){ - //Debug Loading - if (CORE_Preloader.DEBUG_MODE){ - - } - } - - public static void registerItems(){ - /*ModItems.itemDebugShapeSpawner = new DEBUG_ITEM_ShapeSpawner("itemDebugShapeSpawner", AddToCreativeTab.tabMisc, 1, 500); - GameRegistry.registerItem(ModItems.itemDebugShapeSpawner, "itemDebugShapeSpawner"); - ModItems.itemBedLocator_Base = new BedLocator_Base("itemBedLocator_Base"); - GameRegistry.registerItem(ModItems.itemBedLocator_Base, "itemBedLocator_Base"); - ModItems.itemBaseItemWithCharge = new BaseItemWithCharge("itemBaseItemWithCharge", 0, 1000); - GameRegistry.registerItem(ModItems.itemBaseItemWithCharge, "itemBaseItemWithCharge");*/ - } - - public static void registerTEs(){ - - } - - public static void registerMisc(){ - - - - } - - public static void registerHandlers(){ - //MinecraftForge.EVENT_BUS.register(new DEBUG_ScreenOverlay()); - } - + public static void registerBlocks() { + // Debug Loading + if (CORE_Preloader.DEBUG_MODE) {} + } + + public static void registerItems() { + /*ModItems.itemDebugShapeSpawner = new DEBUG_ITEM_ShapeSpawner("itemDebugShapeSpawner", AddToCreativeTab.tabMisc, 1, 500); + GameRegistry.registerItem(ModItems.itemDebugShapeSpawner, "itemDebugShapeSpawner"); + ModItems.itemBedLocator_Base = new BedLocator_Base("itemBedLocator_Base"); + GameRegistry.registerItem(ModItems.itemBedLocator_Base, "itemBedLocator_Base"); + ModItems.itemBaseItemWithCharge = new BaseItemWithCharge("itemBaseItemWithCharge", 0, 1000); + GameRegistry.registerItem(ModItems.itemBaseItemWithCharge, "itemBaseItemWithCharge");*/ + } + + public static void registerTEs() {} + + public static void registerMisc() {} + + public static void registerHandlers() { + // MinecraftForge.EVENT_BUS.register(new DEBUG_ScreenOverlay()); + } } diff --git a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ITEM_ShapeSpawner.java b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ITEM_ShapeSpawner.java index d1e65afe3e..cd8ca0e536 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ITEM_ShapeSpawner.java +++ b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ITEM_ShapeSpawner.java @@ -2,57 +2,50 @@ package gtPlusPlus.core.util.debug; import static net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK; -import java.util.List; - import cpw.mods.fml.common.eventhandler.SubscribeEvent; - +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.base.BaseItemGeneric; +import java.util.List; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.BaseItemGeneric; import net.minecraftforge.event.entity.player.PlayerInteractEvent; -public class DEBUG_ITEM_ShapeSpawner extends BaseItemGeneric{ - - public DEBUG_ITEM_ShapeSpawner(String s, CreativeTabs c, int stackSize, int maxDmg) { - super(s, c, stackSize, maxDmg); - s = "itemDebugShapeSpawner"; - c = AddToCreativeTab.tabMisc; - stackSize = 1; - maxDmg = 500; - } - - @Override - public ItemStack onItemRightClick(final ItemStack stack, final World world, final EntityPlayer player){ - - if (!world.isRemote){ - Logger.INFO("Constructing the shape for the "+"VACUUM FREEZER"); - final Thread thread = new Thread(new DEBUG_TimerThread(world, player)); - thread.start(); - } - return stack; - } - - - - @SubscribeEvent - public void playerInteractEventHandler(final PlayerInteractEvent event) - { - if (event.isCanceled() || event.world.isRemote || (event.action != RIGHT_CLICK_BLOCK)) { - return; - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { - list.add(EnumChatFormatting.GOLD+"For Testing Gregtech Shapes!"); - super.addInformation(stack, aPlayer, list, bool); - } - +public class DEBUG_ITEM_ShapeSpawner extends BaseItemGeneric { + + public DEBUG_ITEM_ShapeSpawner(String s, CreativeTabs c, int stackSize, int maxDmg) { + super(s, c, stackSize, maxDmg); + s = "itemDebugShapeSpawner"; + c = AddToCreativeTab.tabMisc; + stackSize = 1; + maxDmg = 500; + } + + @Override + public ItemStack onItemRightClick(final ItemStack stack, final World world, final EntityPlayer player) { + + if (!world.isRemote) { + Logger.INFO("Constructing the shape for the " + "VACUUM FREEZER"); + final Thread thread = new Thread(new DEBUG_TimerThread(world, player)); + thread.start(); + } + return stack; + } + + @SubscribeEvent + public void playerInteractEventHandler(final PlayerInteractEvent event) { + if (event.isCanceled() || event.world.isRemote || (event.action != RIGHT_CLICK_BLOCK)) { + return; + } + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + @Override + public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { + list.add(EnumChatFormatting.GOLD + "For Testing Gregtech Shapes!"); + super.addInformation(stack, aPlayer, list, bool); + } } diff --git a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_MULTIBLOCK_ShapeSpawner.java b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_MULTIBLOCK_ShapeSpawner.java index 2e46b171f9..b4d2480a02 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_MULTIBLOCK_ShapeSpawner.java +++ b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_MULTIBLOCK_ShapeSpawner.java @@ -2,13 +2,6 @@ package gtPlusPlus.core.util.debug; import static gregtech.api.enums.GT_Values.V; -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.ConfigCategories; @@ -27,892 +20,966 @@ import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; import gregtech.api.util.GT_Utility; import gregtech.common.items.GT_MetaGenerated_Tool_01; - +import java.util.ArrayList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; public abstract class DEBUG_MULTIBLOCK_ShapeSpawner extends MetaTileEntity { - public static boolean disableMaintenance; - public boolean mMachine = false, mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, mSolderingTool = false, mCrowbar = false, mRunningOnLoad = false; - public int mPollution = 0, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mEfficiencyIncrease = 0, mUpdate = 0, mStartUpCheck = 100, mRuntime = 0, mEfficiency = 0; - public ItemStack[] mOutputItems = null; - public FluidStack[] mOutputFluids = null; - public ArrayList mInputHatches = new ArrayList<>(); - public ArrayList mOutputHatches = new ArrayList<>(); - public ArrayList mInputBusses = new ArrayList<>(); - public ArrayList mOutputBusses = new ArrayList<>(); - public ArrayList mDynamoHatches = new ArrayList<>(); - public ArrayList mMufflerHatches = new ArrayList<>(); - public ArrayList mEnergyHatches = new ArrayList<>(); - public ArrayList mMaintenanceHatches = new ArrayList<>(); - - public DEBUG_MULTIBLOCK_ShapeSpawner(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional, 2); - DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false); - } - - public DEBUG_MULTIBLOCK_ShapeSpawner(final String aName) { - super(aName, 2); - DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance = GregTech_API.sMachineFile.get(ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false); - } - - public static boolean isValidMetaTileEntity(final MetaTileEntity aMetaTileEntity) { - return (aMetaTileEntity.getBaseMetaTileEntity() != null) && (aMetaTileEntity.getBaseMetaTileEntity().getMetaTileEntity() == aMetaTileEntity) && !aMetaTileEntity.getBaseMetaTileEntity().isDead(); - } - - @Override - public boolean allowCoverOnSide(final byte aSide, final GT_ItemStack aCoverID) { - return aSide != this.getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(final byte aFacing) { - return true; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return aIndex > 0; - } - - @Override - public int getProgresstime() { - return this.mProgresstime; - } - - @Override - public int maxProgresstime() { - return this.mMaxProgresstime; - } - - @Override - public int increaseProgress(final int aProgress) { - return aProgress; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("mEUt", this.mEUt); - aNBT.setInteger("mProgresstime", this.mProgresstime); - aNBT.setInteger("mMaxProgresstime", this.mMaxProgresstime); - aNBT.setInteger("mEfficiencyIncrease", this.mEfficiencyIncrease); - aNBT.setInteger("mEfficiency", this.mEfficiency); - aNBT.setInteger("mPollution", this.mPollution); - aNBT.setInteger("mRuntime", this.mRuntime); - - if (this.mOutputItems != null) { - for (int i = 0; i < this.mOutputItems.length; i++) { - if (this.mOutputItems[i] != null) { - final NBTTagCompound tNBT = new NBTTagCompound(); - this.mOutputItems[i].writeToNBT(tNBT); - aNBT.setTag("mOutputItem" + i, tNBT); - } - } - } - if (this.mOutputFluids != null) { - for (int i = 0; i < this.mOutputFluids.length; i++) { - if (this.mOutputFluids[i] != null) { - final NBTTagCompound tNBT = new NBTTagCompound(); - this.mOutputFluids[i].writeToNBT(tNBT); - aNBT.setTag("mOutputFluids" + i, tNBT); - } - } - } - - aNBT.setBoolean("mWrench", this.mWrench); - aNBT.setBoolean("mScrewdriver", this.mScrewdriver); - aNBT.setBoolean("mSoftHammer", this.mSoftHammer); - aNBT.setBoolean("mHardHammer", this.mHardHammer); - aNBT.setBoolean("mSolderingTool", this.mSolderingTool); - aNBT.setBoolean("mCrowbar", this.mCrowbar); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mEUt = aNBT.getInteger("mEUt"); - this.mProgresstime = aNBT.getInteger("mProgresstime"); - this.mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - if (this.mMaxProgresstime > 0) { - this.mRunningOnLoad = true; - } - this.mEfficiencyIncrease = aNBT.getInteger("mEfficiencyIncrease"); - this.mEfficiency = aNBT.getInteger("mEfficiency"); - this.mPollution = aNBT.getInteger("mPollution"); - this.mRuntime = aNBT.getInteger("mRuntime"); - this.mOutputItems = new ItemStack[this.getAmountOfOutputs()]; - for (int i = 0; i < this.mOutputItems.length; i++) { - this.mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); - } - this.mOutputFluids = new FluidStack[this.getAmountOfOutputs()]; - for (int i = 0; i < this.mOutputFluids.length; i++) { - this.mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i); - } - this.mWrench = aNBT.getBoolean("mWrench"); - this.mScrewdriver = aNBT.getBoolean("mScrewdriver"); - this.mSoftHammer = aNBT.getBoolean("mSoftHammer"); - this.mHardHammer = aNBT.getBoolean("mHardHammer"); - this.mSolderingTool = aNBT.getBoolean("mSolderingTool"); - this.mCrowbar = aNBT.getBoolean("mCrowbar"); - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - aBaseMetaTileEntity.openGUI(aPlayer); - return true; - } - - @Override - public Object getServerGUI(final int aID, final InventoryPlayer aPlayerInventory, final IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_Container_MultiMachine(aPlayerInventory, aBaseMetaTileEntity); - } - - @Override - public Object getClientGUI(final int aID, final InventoryPlayer aPlayerInventory, final IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), "MultiblockDisplay.png"); - } - - @Override - public byte getTileEntityBaseType() { - return 2; - } - - @Override - public void onMachineBlockUpdate() { - this.mUpdate = 50; - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (this.mEfficiency < 0) { - this.mEfficiency = 0; - } - if ((--this.mUpdate == 0) || (--this.mStartUpCheck == 0)) { - this.mInputHatches.clear(); - this.mInputBusses.clear(); - this.mOutputHatches.clear(); - this.mOutputBusses.clear(); - this.mDynamoHatches.clear(); - this.mEnergyHatches.clear(); - this.mMufflerHatches.clear(); - this.mMaintenanceHatches.clear(); - this.mMachine = this.checkMachine(aBaseMetaTileEntity, this.mInventory[1]); - } - if (this.mStartUpCheck < 0) { - if (this.mMachine) { - for (final GT_MetaTileEntity_Hatch_Maintenance tHatch : this.mMaintenanceHatches) { - if (isValidMetaTileEntity(tHatch)) { - if (!DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance) { - if (tHatch.mWrench) { - this.mWrench = true; - } - if (tHatch.mScrewdriver) { - this.mScrewdriver = true; - } - if (tHatch.mSoftHammer) { - this.mSoftHammer = true; - } - if (tHatch.mHardHammer) { - this.mHardHammer = true; - } - if (tHatch.mSolderingTool) { - this.mSolderingTool = true; - } - if (tHatch.mCrowbar) { - this.mCrowbar = true; - } - } else { - this.mWrench = true; - this.mScrewdriver = true; - this.mSoftHammer = true; - this.mHardHammer = true; - this.mSolderingTool = true; - this.mCrowbar = true; - } - - tHatch.mWrench = false; - tHatch.mScrewdriver = false; - tHatch.mSoftHammer = false; - tHatch.mHardHammer = false; - tHatch.mSolderingTool = false; - tHatch.mCrowbar = false; - } - } - if (this.getRepairStatus() > 0) { - if ((this.mMaxProgresstime > 0) && this.doRandomMaintenanceDamage()) { - if (this.onRunningTick(this.mInventory[1])) { - if (!this.polluteEnvironment(this.getPollutionPerTick(this.mInventory[1]))) { - this.stopMachine(); - } - if ((this.mMaxProgresstime > 0) && (++this.mProgresstime >= this.mMaxProgresstime)) { - if (this.mOutputItems != null) { - for (final ItemStack tStack : this.mOutputItems) { - if (tStack != null) { - try { - GT_Mod.achievements.issueAchivementHatch(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), tStack); - } catch (final Exception e) { - } - this.addOutput(tStack); - } - } - } - if ((this.mOutputFluids != null) && (this.mOutputFluids.length == 1)) { - for (final FluidStack tStack : this.mOutputFluids) { - if (tStack != null) { - this.addOutput(tStack); - } - } - } else if ((this.mOutputFluids != null) && (this.mOutputFluids.length > 1)) { - this.addFluidOutputs(this.mOutputFluids); - } - this.mEfficiency = Math.max(0, Math.min(this.mEfficiency + this.mEfficiencyIncrease, this.getMaxEfficiency(this.mInventory[1]) - ((this.getIdealStatus() - this.getRepairStatus()) * 1000))); - this.mOutputItems = null; - this.mProgresstime = 0; - this.mMaxProgresstime = 0; - this.mEfficiencyIncrease = 0; - if (aBaseMetaTileEntity.isAllowedToWork()) { - this.checkRecipe(this.mInventory[1]); - } - if ((this.mOutputFluids != null) && (this.mOutputFluids.length > 0)) { - if (this.mOutputFluids.length > 1) { - GT_Mod.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "oilplant"); - } - } - } - } - } else { - if (((aTick % 100) == 0) || aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified()) { - - if (aBaseMetaTileEntity.isAllowedToWork()) { - this.checkRecipe(this.mInventory[1]); - } - if (this.mMaxProgresstime <= 0) { - this.mEfficiency = Math.max(0, this.mEfficiency - 1000); - } - } - } - } else { - this.stopMachine(); - } - } else { - this.stopMachine(); - } - } - aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (this.mWrench ? 0 : 1) | (this.mScrewdriver ? 0 : 2) | (this.mSoftHammer ? 0 : 4) | (this.mHardHammer ? 0 : 8) | (this.mSolderingTool ? 0 : 16) | (this.mCrowbar ? 0 : 32) | (this.mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(this.mMaxProgresstime > 0); - } - } - - public boolean polluteEnvironment(final int aPollutionLevel) { - this.mPollution += aPollutionLevel; - for (final GT_MetaTileEntity_Hatch_Muffler tHatch : this.mMufflerHatches) { - if (isValidMetaTileEntity(tHatch)) { - if (this.mPollution >= 10000) { - if (tHatch.polluteEnvironment()) { - this.mPollution -= 10000; - } - } else { - break; - } - } - } - return this.mPollution < 10000; - } - - /** - * Called every tick the Machine runs - */ - public boolean onRunningTick(final ItemStack aStack) { - if (this.mEUt > 0) { - this.addEnergyOutput(((long) this.mEUt * this.mEfficiency) / 10000); - return true; - } - if (this.mEUt < 0) { - if (!this.drainEnergyInput(((long) -this.mEUt * 10000) / Math.max(1000, this.mEfficiency))) { - this.stopMachine(); - return false; - } - } - return true; - } - - /** - * Checks if this is a Correct Machine Part for this kind of Machine (Turbine Rotor for example) - */ - public abstract boolean isCorrectMachinePart(ItemStack aStack); - - /** - * Checks the Recipe - */ - public abstract boolean checkRecipe(ItemStack aStack); - - /** - * Checks the Machine. You have to assign the MetaTileEntities for the Hatches here. - */ - public abstract boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack); - - /** - * Gets the maximum Efficiency that spare Part can get (0 - 10000) - */ - public abstract int getMaxEfficiency(ItemStack aStack); - - /** - * Gets the pollution this Device outputs to a Muffler per tick (10000 = one Pullution Block) - */ - public abstract int getPollutionPerTick(ItemStack aStack); - - /** - * Gets the damage to the ItemStack, usually 0 or 1. - */ - public abstract int getDamageToComponent(ItemStack aStack); - - /** - * Gets the Amount of possibly outputted Items for loading the Output Stack Array from NBT. - * This should be the largest Amount that can ever happen legitimately. - */ - public abstract int getAmountOfOutputs(); - - /** - * If it explodes when the Component has to be replaced. - */ - public abstract boolean explodesOnComponentBreak(ItemStack aStack); - - public void stopMachine() { - this.mOutputItems = null; - this.mEUt = 0; - this.mEfficiency = 0; - this.mProgresstime = 0; - this.mMaxProgresstime = 0; - this.mEfficiencyIncrease = 0; - this.getBaseMetaTileEntity().disableWorking(); - } - - public int getRepairStatus() { - return (this.mWrench ? 1 : 0) + (this.mScrewdriver ? 1 : 0) + (this.mSoftHammer ? 1 : 0) + (this.mHardHammer ? 1 : 0) + (this.mSolderingTool ? 1 : 0) + (this.mCrowbar ? 1 : 0); - } - - public int getIdealStatus() { - return 6; - } - - public boolean doRandomMaintenanceDamage() { - if (!this.isCorrectMachinePart(this.mInventory[1]) || (this.getRepairStatus() == 0)) { - this.stopMachine(); - return false; - } - if (this.mRuntime++ > 1000) { - this.mRuntime = 0; - if (this.getBaseMetaTileEntity().getRandomNumber(6000) == 0) { - switch (this.getBaseMetaTileEntity().getRandomNumber(6)) { - case 0: - this.mWrench = false; - break; - case 1: - this.mScrewdriver = false; - break; - case 2: - this.mSoftHammer = false; - break; - case 3: - this.mHardHammer = false; - break; - case 4: - this.mSolderingTool = false; - break; - case 5: - this.mCrowbar = false; - break; - } - } - if ((this.mInventory[1] != null) && (this.getBaseMetaTileEntity().getRandomNumber(2) == 0) && !this.mInventory[1].getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.")) { - if (this.mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { - final NBTTagCompound tNBT = this.mInventory[1].getTagCompound(); - if (tNBT != null) { - NBTTagCompound tNBT2 = tNBT.getCompoundTag("GT.CraftingComponents"); - if (!tNBT.getBoolean("mDis")) { - tNBT2 = new NBTTagCompound(); - final Materials tMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(this.mInventory[1]); - final ItemStack tTurbine = GT_OreDictUnificator.get(OrePrefixes.turbineBlade, tMaterial, 1); - final int i = this.mInventory[1].getItemDamage(); - if (i == 170) { - ItemStack tStack = GT_Utility.copyAmount(1, tTurbine); - tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); - tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Magnalium, 1); - tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); - } else if (i == 172) { - ItemStack tStack = GT_Utility.copyAmount(1, tTurbine); - tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound())); - tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 1); - tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); - } else if (i == 174) { - ItemStack tStack = GT_Utility.copyAmount(2, tTurbine); - tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); - tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 1); - tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); - } else if (i == 176) { - ItemStack tStack = GT_Utility.copyAmount(2, tTurbine); - tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound())); - tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound())); - tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Americium, 1); - tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); - } - tNBT.setTag("GT.CraftingComponents", tNBT2); - tNBT.setBoolean("mDis", true); - this.mInventory[1].setTagCompound(tNBT); - - } - } - - ((GT_MetaGenerated_Tool) this.mInventory[1].getItem()).doDamage(this.mInventory[1], (long) Math.min(this.mEUt / 5, Math.pow(this.mEUt, 0.7))); - if (this.mInventory[1].stackSize == 0) { - this.mInventory[1] = null; - } - } - } - } - return true; - } - - public void explodeMultiblock() { - this.mInventory[1] = null; - for (final MetaTileEntity tTileEntity : this.mInputBusses) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mOutputBusses) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mInputHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mOutputHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mDynamoHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mMufflerHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mEnergyHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - for (final MetaTileEntity tTileEntity : this.mMaintenanceHatches) { - tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); - } - this.getBaseMetaTileEntity().doExplosion(V[8]); - } - - public boolean addEnergyOutput(final long aEU) { - if (aEU <= 0) { - return true; - } - for (final GT_MetaTileEntity_Hatch_Dynamo tHatch : this.mDynamoHatches) { - if (isValidMetaTileEntity(tHatch)) { - if (tHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(aEU, false)) { - return true; - } - } - } - return false; - } - - public long getMaxInputVoltage() { - long rVoltage = 0; - for (final GT_MetaTileEntity_Hatch_Energy tHatch : this.mEnergyHatches) { - if (isValidMetaTileEntity(tHatch)) { - rVoltage += tHatch.getBaseMetaTileEntity().getInputVoltage(); - } - } - return rVoltage; - } - - public boolean drainEnergyInput(final long aEU) { - if (aEU <= 0) { - return true; - } - for (final GT_MetaTileEntity_Hatch_Energy tHatch : this.mEnergyHatches) { - if (isValidMetaTileEntity(tHatch)) { - if (tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEU, false)) { - return true; - } - } - } - return false; - } - - public boolean addOutput(final FluidStack aLiquid) { - if (aLiquid == null) { - return false; - } - final FluidStack tLiquid = aLiquid.copy(); - for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { - if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid) ? tHatch.outputsSteam() : tHatch.outputsLiquids()) { - final int tAmount = tHatch.fill(tLiquid, false); - if (tAmount >= tLiquid.amount) { - return tHatch.fill(tLiquid, true) >= tLiquid.amount; - } else if (tAmount > 0) { - tLiquid.amount = tLiquid.amount - tHatch.fill(tLiquid, true); - } - } - } - return false; - } - - private void addFluidOutputs(final FluidStack[] mOutputFluids2) { - for (int i = 0; i < mOutputFluids2.length; i++) { - if ((this.mOutputHatches.size() > i) && (this.mOutputHatches.get(i) != null) && (mOutputFluids2[i] != null) && isValidMetaTileEntity(this.mOutputHatches.get(i))) { - this.mOutputHatches.get(i).fill(mOutputFluids2[i], true); - } - } - - } - - public boolean depleteInput(final FluidStack aLiquid) { - if (aLiquid == null) { - return false; - } - for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch)) { - FluidStack tLiquid = tHatch.getFluid(); - if ((tLiquid != null) && tLiquid.isFluidEqual(aLiquid)) { - tLiquid = tHatch.drain(aLiquid.amount, false); - if ((tLiquid != null) && (tLiquid.amount >= aLiquid.amount)) { - tLiquid = tHatch.drain(aLiquid.amount, true); - return (tLiquid != null) && (tLiquid.amount >= aLiquid.amount); - } - } - } - } - return false; - } - - public boolean addOutput(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - aStack = GT_Utility.copy(aStack); - // FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true); - // if (aLiquid == null) { - for (final GT_MetaTileEntity_Hatch_OutputBus tHatch : this.mOutputBusses) { - if (isValidMetaTileEntity(tHatch)) { - for (int i = tHatch.getSizeInventory() - 1; i >= 0; i--) { - if (tHatch.getBaseMetaTileEntity().addStackToSlot(i, aStack)) { - return true; - } - } - } - } - for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { - if (isValidMetaTileEntity(tHatch) && tHatch.outputsItems()) { - if (tHatch.getBaseMetaTileEntity().addStackToSlot(1, aStack)) { - return true; - } - } - } - // }else { - // for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) { - // if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid)?tHatch.outputsSteam():tHatch.outputsLiquids()) { - // int tAmount = tHatch.fill(aLiquid, false); - // if (tAmount >= aLiquid.amount) { - // return tHatch.fill(aLiquid, true) >= aLiquid.amount; - // } - // } - // } - // } - return false; - } - - public boolean depleteInput(final ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - final FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true); - if (aLiquid != null) { - return this.depleteInput(aLiquid); - } - for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch)) { - if (GT_Utility.areStacksEqual(aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(0))) { - if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) { - tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize); - return true; - } - } - } - } - for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch)) { - for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { - if (GT_Utility.areStacksEqual(aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(i))) { - if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) { - tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize); - return true; - } - } - } - } - } - return false; - } - - public ArrayList getStoredOutputs() { - final ArrayList rList = new ArrayList<>(); - for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { - if (isValidMetaTileEntity(tHatch)) { - rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(1)); - } - } - for (final GT_MetaTileEntity_Hatch_OutputBus tHatch : this.mOutputBusses) { - if (isValidMetaTileEntity(tHatch)) { - for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { - rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i)); - } - } - } - return rList; - } - - public ArrayList getStoredFluids() { - final ArrayList rList = new ArrayList<>(); - for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch) && (tHatch.getFillableStack() != null)) { - rList.add(tHatch.getFillableStack()); - } - } - return rList; - } - - public ArrayList getStoredInputs() { - final ArrayList rList = new ArrayList<>(); - for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch) && (tHatch.getBaseMetaTileEntity().getStackInSlot(0) != null)) { - rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(0)); - } - } - for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { - tHatch.mRecipeMap = this.getRecipeMap(); - if (isValidMetaTileEntity(tHatch)) { - for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { - if (tHatch.getBaseMetaTileEntity().getStackInSlot(i) != null) { - rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i)); - } - } - } - } - return rList; - } - - public GT_Recipe_Map getRecipeMap() { - return null; - } - - public void updateSlots() { - for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { - if (isValidMetaTileEntity(tHatch)) { - tHatch.updateSlots(); - } - } - for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { - if (isValidMetaTileEntity(tHatch)) { - tHatch.updateSlots(); - } - } - } - - public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - return false; - } - - public boolean addMaintenanceToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - return false; - } - - public boolean addEnergyInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - return false; - } - - public boolean addDynamoToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - return false; - } - - public boolean addMufflerToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - return false; - } - - public boolean addInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); - return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - return false; - } - - public boolean addOutputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; - return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - return false; - } - - @Override - public String[] getInfoData() { - return new String[]{"Progress:", (this.mProgresstime / 20) + "secs", (this.mMaxProgresstime / 20) + "secs", "Efficiency:", (this.mEfficiency / 100.0F) + "%", "Problems:", "" + (this.getIdealStatus() - this.getRepairStatus())}; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, final byte aSide, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, final byte aSide, final ItemStack aStack) { - return false; - } + public static boolean disableMaintenance; + public boolean mMachine = false, + mWrench = false, + mScrewdriver = false, + mSoftHammer = false, + mHardHammer = false, + mSolderingTool = false, + mCrowbar = false, + mRunningOnLoad = false; + public int mPollution = 0, + mProgresstime = 0, + mMaxProgresstime = 0, + mEUt = 0, + mEfficiencyIncrease = 0, + mUpdate = 0, + mStartUpCheck = 100, + mRuntime = 0, + mEfficiency = 0; + public ItemStack[] mOutputItems = null; + public FluidStack[] mOutputFluids = null; + public ArrayList mInputHatches = new ArrayList<>(); + public ArrayList mOutputHatches = new ArrayList<>(); + public ArrayList mInputBusses = new ArrayList<>(); + public ArrayList mOutputBusses = new ArrayList<>(); + public ArrayList mDynamoHatches = new ArrayList<>(); + public ArrayList mMufflerHatches = new ArrayList<>(); + public ArrayList mEnergyHatches = new ArrayList<>(); + public ArrayList mMaintenanceHatches = new ArrayList<>(); + + public DEBUG_MULTIBLOCK_ShapeSpawner(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional, 2); + DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance = GregTech_API.sMachineFile.get( + ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false); + } + + public DEBUG_MULTIBLOCK_ShapeSpawner(final String aName) { + super(aName, 2); + DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance = GregTech_API.sMachineFile.get( + ConfigCategories.machineconfig, "MultiBlockMachines.disableMaintenance", false); + } + + public static boolean isValidMetaTileEntity(final MetaTileEntity aMetaTileEntity) { + return (aMetaTileEntity.getBaseMetaTileEntity() != null) + && (aMetaTileEntity.getBaseMetaTileEntity().getMetaTileEntity() == aMetaTileEntity) + && !aMetaTileEntity.getBaseMetaTileEntity().isDead(); + } + + @Override + public boolean allowCoverOnSide(final byte aSide, final GT_ItemStack aCoverID) { + return aSide != this.getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(final byte aFacing) { + return true; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return aIndex > 0; + } + + @Override + public int getProgresstime() { + return this.mProgresstime; + } + + @Override + public int maxProgresstime() { + return this.mMaxProgresstime; + } + + @Override + public int increaseProgress(final int aProgress) { + return aProgress; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("mEUt", this.mEUt); + aNBT.setInteger("mProgresstime", this.mProgresstime); + aNBT.setInteger("mMaxProgresstime", this.mMaxProgresstime); + aNBT.setInteger("mEfficiencyIncrease", this.mEfficiencyIncrease); + aNBT.setInteger("mEfficiency", this.mEfficiency); + aNBT.setInteger("mPollution", this.mPollution); + aNBT.setInteger("mRuntime", this.mRuntime); + + if (this.mOutputItems != null) { + for (int i = 0; i < this.mOutputItems.length; i++) { + if (this.mOutputItems[i] != null) { + final NBTTagCompound tNBT = new NBTTagCompound(); + this.mOutputItems[i].writeToNBT(tNBT); + aNBT.setTag("mOutputItem" + i, tNBT); + } + } + } + if (this.mOutputFluids != null) { + for (int i = 0; i < this.mOutputFluids.length; i++) { + if (this.mOutputFluids[i] != null) { + final NBTTagCompound tNBT = new NBTTagCompound(); + this.mOutputFluids[i].writeToNBT(tNBT); + aNBT.setTag("mOutputFluids" + i, tNBT); + } + } + } + + aNBT.setBoolean("mWrench", this.mWrench); + aNBT.setBoolean("mScrewdriver", this.mScrewdriver); + aNBT.setBoolean("mSoftHammer", this.mSoftHammer); + aNBT.setBoolean("mHardHammer", this.mHardHammer); + aNBT.setBoolean("mSolderingTool", this.mSolderingTool); + aNBT.setBoolean("mCrowbar", this.mCrowbar); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mEUt = aNBT.getInteger("mEUt"); + this.mProgresstime = aNBT.getInteger("mProgresstime"); + this.mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); + if (this.mMaxProgresstime > 0) { + this.mRunningOnLoad = true; + } + this.mEfficiencyIncrease = aNBT.getInteger("mEfficiencyIncrease"); + this.mEfficiency = aNBT.getInteger("mEfficiency"); + this.mPollution = aNBT.getInteger("mPollution"); + this.mRuntime = aNBT.getInteger("mRuntime"); + this.mOutputItems = new ItemStack[this.getAmountOfOutputs()]; + for (int i = 0; i < this.mOutputItems.length; i++) { + this.mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); + } + this.mOutputFluids = new FluidStack[this.getAmountOfOutputs()]; + for (int i = 0; i < this.mOutputFluids.length; i++) { + this.mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i); + } + this.mWrench = aNBT.getBoolean("mWrench"); + this.mScrewdriver = aNBT.getBoolean("mScrewdriver"); + this.mSoftHammer = aNBT.getBoolean("mSoftHammer"); + this.mHardHammer = aNBT.getBoolean("mHardHammer"); + this.mSolderingTool = aNBT.getBoolean("mSolderingTool"); + this.mCrowbar = aNBT.getBoolean("mCrowbar"); + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + aBaseMetaTileEntity.openGUI(aPlayer); + return true; + } + + @Override + public Object getServerGUI( + final int aID, final InventoryPlayer aPlayerInventory, final IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_Container_MultiMachine(aPlayerInventory, aBaseMetaTileEntity); + } + + @Override + public Object getClientGUI( + final int aID, final InventoryPlayer aPlayerInventory, final IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_MultiMachine( + aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), "MultiblockDisplay.png"); + } + + @Override + public byte getTileEntityBaseType() { + return 2; + } + + @Override + public void onMachineBlockUpdate() { + this.mUpdate = 50; + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (this.mEfficiency < 0) { + this.mEfficiency = 0; + } + if ((--this.mUpdate == 0) || (--this.mStartUpCheck == 0)) { + this.mInputHatches.clear(); + this.mInputBusses.clear(); + this.mOutputHatches.clear(); + this.mOutputBusses.clear(); + this.mDynamoHatches.clear(); + this.mEnergyHatches.clear(); + this.mMufflerHatches.clear(); + this.mMaintenanceHatches.clear(); + this.mMachine = this.checkMachine(aBaseMetaTileEntity, this.mInventory[1]); + } + if (this.mStartUpCheck < 0) { + if (this.mMachine) { + for (final GT_MetaTileEntity_Hatch_Maintenance tHatch : this.mMaintenanceHatches) { + if (isValidMetaTileEntity(tHatch)) { + if (!DEBUG_MULTIBLOCK_ShapeSpawner.disableMaintenance) { + if (tHatch.mWrench) { + this.mWrench = true; + } + if (tHatch.mScrewdriver) { + this.mScrewdriver = true; + } + if (tHatch.mSoftHammer) { + this.mSoftHammer = true; + } + if (tHatch.mHardHammer) { + this.mHardHammer = true; + } + if (tHatch.mSolderingTool) { + this.mSolderingTool = true; + } + if (tHatch.mCrowbar) { + this.mCrowbar = true; + } + } else { + this.mWrench = true; + this.mScrewdriver = true; + this.mSoftHammer = true; + this.mHardHammer = true; + this.mSolderingTool = true; + this.mCrowbar = true; + } + + tHatch.mWrench = false; + tHatch.mScrewdriver = false; + tHatch.mSoftHammer = false; + tHatch.mHardHammer = false; + tHatch.mSolderingTool = false; + tHatch.mCrowbar = false; + } + } + if (this.getRepairStatus() > 0) { + if ((this.mMaxProgresstime > 0) && this.doRandomMaintenanceDamage()) { + if (this.onRunningTick(this.mInventory[1])) { + if (!this.polluteEnvironment(this.getPollutionPerTick(this.mInventory[1]))) { + this.stopMachine(); + } + if ((this.mMaxProgresstime > 0) && (++this.mProgresstime >= this.mMaxProgresstime)) { + if (this.mOutputItems != null) { + for (final ItemStack tStack : this.mOutputItems) { + if (tStack != null) { + try { + GT_Mod.achievements.issueAchivementHatch( + aBaseMetaTileEntity + .getWorld() + .getPlayerEntityByName( + aBaseMetaTileEntity.getOwnerName()), + tStack); + } catch (final Exception e) { + } + this.addOutput(tStack); + } + } + } + if ((this.mOutputFluids != null) && (this.mOutputFluids.length == 1)) { + for (final FluidStack tStack : this.mOutputFluids) { + if (tStack != null) { + this.addOutput(tStack); + } + } + } else if ((this.mOutputFluids != null) && (this.mOutputFluids.length > 1)) { + this.addFluidOutputs(this.mOutputFluids); + } + this.mEfficiency = Math.max( + 0, + Math.min( + this.mEfficiency + this.mEfficiencyIncrease, + this.getMaxEfficiency(this.mInventory[1]) + - ((this.getIdealStatus() - this.getRepairStatus()) + * 1000))); + this.mOutputItems = null; + this.mProgresstime = 0; + this.mMaxProgresstime = 0; + this.mEfficiencyIncrease = 0; + if (aBaseMetaTileEntity.isAllowedToWork()) { + this.checkRecipe(this.mInventory[1]); + } + if ((this.mOutputFluids != null) && (this.mOutputFluids.length > 0)) { + if (this.mOutputFluids.length > 1) { + GT_Mod.achievements.issueAchievement( + aBaseMetaTileEntity + .getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + "oilplant"); + } + } + } + } + } else { + if (((aTick % 100) == 0) + || aBaseMetaTileEntity.hasWorkJustBeenEnabled() + || aBaseMetaTileEntity.hasInventoryBeenModified()) { + + if (aBaseMetaTileEntity.isAllowedToWork()) { + this.checkRecipe(this.mInventory[1]); + } + if (this.mMaxProgresstime <= 0) { + this.mEfficiency = Math.max(0, this.mEfficiency - 1000); + } + } + } + } else { + this.stopMachine(); + } + } else { + this.stopMachine(); + } + } + aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) + | (this.mWrench ? 0 : 1) + | (this.mScrewdriver ? 0 : 2) + | (this.mSoftHammer ? 0 : 4) + | (this.mHardHammer ? 0 : 8) + | (this.mSolderingTool ? 0 : 16) + | (this.mCrowbar ? 0 : 32) + | (this.mMachine ? 0 : 64)); + aBaseMetaTileEntity.setActive(this.mMaxProgresstime > 0); + } + } + + public boolean polluteEnvironment(final int aPollutionLevel) { + this.mPollution += aPollutionLevel; + for (final GT_MetaTileEntity_Hatch_Muffler tHatch : this.mMufflerHatches) { + if (isValidMetaTileEntity(tHatch)) { + if (this.mPollution >= 10000) { + if (tHatch.polluteEnvironment()) { + this.mPollution -= 10000; + } + } else { + break; + } + } + } + return this.mPollution < 10000; + } + + /** + * Called every tick the Machine runs + */ + public boolean onRunningTick(final ItemStack aStack) { + if (this.mEUt > 0) { + this.addEnergyOutput(((long) this.mEUt * this.mEfficiency) / 10000); + return true; + } + if (this.mEUt < 0) { + if (!this.drainEnergyInput(((long) -this.mEUt * 10000) / Math.max(1000, this.mEfficiency))) { + this.stopMachine(); + return false; + } + } + return true; + } + + /** + * Checks if this is a Correct Machine Part for this kind of Machine (Turbine Rotor for example) + */ + public abstract boolean isCorrectMachinePart(ItemStack aStack); + + /** + * Checks the Recipe + */ + public abstract boolean checkRecipe(ItemStack aStack); + + /** + * Checks the Machine. You have to assign the MetaTileEntities for the Hatches here. + */ + public abstract boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack); + + /** + * Gets the maximum Efficiency that spare Part can get (0 - 10000) + */ + public abstract int getMaxEfficiency(ItemStack aStack); + + /** + * Gets the pollution this Device outputs to a Muffler per tick (10000 = one Pullution Block) + */ + public abstract int getPollutionPerTick(ItemStack aStack); + + /** + * Gets the damage to the ItemStack, usually 0 or 1. + */ + public abstract int getDamageToComponent(ItemStack aStack); + + /** + * Gets the Amount of possibly outputted Items for loading the Output Stack Array from NBT. + * This should be the largest Amount that can ever happen legitimately. + */ + public abstract int getAmountOfOutputs(); + + /** + * If it explodes when the Component has to be replaced. + */ + public abstract boolean explodesOnComponentBreak(ItemStack aStack); + + public void stopMachine() { + this.mOutputItems = null; + this.mEUt = 0; + this.mEfficiency = 0; + this.mProgresstime = 0; + this.mMaxProgresstime = 0; + this.mEfficiencyIncrease = 0; + this.getBaseMetaTileEntity().disableWorking(); + } + + public int getRepairStatus() { + return (this.mWrench ? 1 : 0) + + (this.mScrewdriver ? 1 : 0) + + (this.mSoftHammer ? 1 : 0) + + (this.mHardHammer ? 1 : 0) + + (this.mSolderingTool ? 1 : 0) + + (this.mCrowbar ? 1 : 0); + } + + public int getIdealStatus() { + return 6; + } + + public boolean doRandomMaintenanceDamage() { + if (!this.isCorrectMachinePart(this.mInventory[1]) || (this.getRepairStatus() == 0)) { + this.stopMachine(); + return false; + } + if (this.mRuntime++ > 1000) { + this.mRuntime = 0; + if (this.getBaseMetaTileEntity().getRandomNumber(6000) == 0) { + switch (this.getBaseMetaTileEntity().getRandomNumber(6)) { + case 0: + this.mWrench = false; + break; + case 1: + this.mScrewdriver = false; + break; + case 2: + this.mSoftHammer = false; + break; + case 3: + this.mHardHammer = false; + break; + case 4: + this.mSolderingTool = false; + break; + case 5: + this.mCrowbar = false; + break; + } + } + if ((this.mInventory[1] != null) + && (this.getBaseMetaTileEntity().getRandomNumber(2) == 0) + && !this.mInventory[1].getUnlocalizedName().startsWith("gt.blockmachines.basicmachine.")) { + if (this.mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { + final NBTTagCompound tNBT = this.mInventory[1].getTagCompound(); + if (tNBT != null) { + NBTTagCompound tNBT2 = tNBT.getCompoundTag("GT.CraftingComponents"); + if (!tNBT.getBoolean("mDis")) { + tNBT2 = new NBTTagCompound(); + final Materials tMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(this.mInventory[1]); + final ItemStack tTurbine = GT_OreDictUnificator.get(OrePrefixes.turbineBlade, tMaterial, 1); + final int i = this.mInventory[1].getItemDamage(); + if (i == 170) { + ItemStack tStack = GT_Utility.copyAmount(1, tTurbine); + tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); + tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Magnalium, 1); + tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); + } else if (i == 172) { + ItemStack tStack = GT_Utility.copyAmount(1, tTurbine); + tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound())); + tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 1); + tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); + } else if (i == 174) { + ItemStack tStack = GT_Utility.copyAmount(2, tTurbine); + tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); + tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 1); + tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); + } else if (i == 176) { + ItemStack tStack = GT_Utility.copyAmount(2, tTurbine); + tNBT2.setTag("Ingredient.0", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.1", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.2", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.3", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.5", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.6", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.7", tStack.writeToNBT(new NBTTagCompound())); + tNBT2.setTag("Ingredient.8", tStack.writeToNBT(new NBTTagCompound())); + tStack = GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Americium, 1); + tNBT2.setTag("Ingredient.4", tStack.writeToNBT(new NBTTagCompound())); + } + tNBT.setTag("GT.CraftingComponents", tNBT2); + tNBT.setBoolean("mDis", true); + this.mInventory[1].setTagCompound(tNBT); + } + } + + ((GT_MetaGenerated_Tool) this.mInventory[1].getItem()) + .doDamage(this.mInventory[1], (long) Math.min(this.mEUt / 5, Math.pow(this.mEUt, 0.7))); + if (this.mInventory[1].stackSize == 0) { + this.mInventory[1] = null; + } + } + } + } + return true; + } + + public void explodeMultiblock() { + this.mInventory[1] = null; + for (final MetaTileEntity tTileEntity : this.mInputBusses) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mOutputBusses) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mInputHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mOutputHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mDynamoHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mMufflerHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mEnergyHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + for (final MetaTileEntity tTileEntity : this.mMaintenanceHatches) { + tTileEntity.getBaseMetaTileEntity().doExplosion(V[8]); + } + this.getBaseMetaTileEntity().doExplosion(V[8]); + } + + public boolean addEnergyOutput(final long aEU) { + if (aEU <= 0) { + return true; + } + for (final GT_MetaTileEntity_Hatch_Dynamo tHatch : this.mDynamoHatches) { + if (isValidMetaTileEntity(tHatch)) { + if (tHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(aEU, false)) { + return true; + } + } + } + return false; + } + + public long getMaxInputVoltage() { + long rVoltage = 0; + for (final GT_MetaTileEntity_Hatch_Energy tHatch : this.mEnergyHatches) { + if (isValidMetaTileEntity(tHatch)) { + rVoltage += tHatch.getBaseMetaTileEntity().getInputVoltage(); + } + } + return rVoltage; + } + + public boolean drainEnergyInput(final long aEU) { + if (aEU <= 0) { + return true; + } + for (final GT_MetaTileEntity_Hatch_Energy tHatch : this.mEnergyHatches) { + if (isValidMetaTileEntity(tHatch)) { + if (tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEU, false)) { + return true; + } + } + } + return false; + } + + public boolean addOutput(final FluidStack aLiquid) { + if (aLiquid == null) { + return false; + } + final FluidStack tLiquid = aLiquid.copy(); + for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { + if (isValidMetaTileEntity(tHatch) && GT_ModHandler.isSteam(aLiquid) + ? tHatch.outputsSteam() + : tHatch.outputsLiquids()) { + final int tAmount = tHatch.fill(tLiquid, false); + if (tAmount >= tLiquid.amount) { + return tHatch.fill(tLiquid, true) >= tLiquid.amount; + } else if (tAmount > 0) { + tLiquid.amount = tLiquid.amount - tHatch.fill(tLiquid, true); + } + } + } + return false; + } + + private void addFluidOutputs(final FluidStack[] mOutputFluids2) { + for (int i = 0; i < mOutputFluids2.length; i++) { + if ((this.mOutputHatches.size() > i) + && (this.mOutputHatches.get(i) != null) + && (mOutputFluids2[i] != null) + && isValidMetaTileEntity(this.mOutputHatches.get(i))) { + this.mOutputHatches.get(i).fill(mOutputFluids2[i], true); + } + } + } + + public boolean depleteInput(final FluidStack aLiquid) { + if (aLiquid == null) { + return false; + } + for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch)) { + FluidStack tLiquid = tHatch.getFluid(); + if ((tLiquid != null) && tLiquid.isFluidEqual(aLiquid)) { + tLiquid = tHatch.drain(aLiquid.amount, false); + if ((tLiquid != null) && (tLiquid.amount >= aLiquid.amount)) { + tLiquid = tHatch.drain(aLiquid.amount, true); + return (tLiquid != null) && (tLiquid.amount >= aLiquid.amount); + } + } + } + } + return false; + } + + public boolean addOutput(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) { + return false; + } + aStack = GT_Utility.copy(aStack); + // FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true); + // if (aLiquid == null) { + for (final GT_MetaTileEntity_Hatch_OutputBus tHatch : this.mOutputBusses) { + if (isValidMetaTileEntity(tHatch)) { + for (int i = tHatch.getSizeInventory() - 1; i >= 0; i--) { + if (tHatch.getBaseMetaTileEntity().addStackToSlot(i, aStack)) { + return true; + } + } + } + } + for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { + if (isValidMetaTileEntity(tHatch) && tHatch.outputsItems()) { + if (tHatch.getBaseMetaTileEntity().addStackToSlot(1, aStack)) { + return true; + } + } + } + // }else { + // for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) { + // if (isValidMetaTileEntity(tHatch) && + // GT_ModHandler.isSteam(aLiquid)?tHatch.outputsSteam():tHatch.outputsLiquids()) { + // int tAmount = tHatch.fill(aLiquid, false); + // if (tAmount >= aLiquid.amount) { + // return tHatch.fill(aLiquid, true) >= aLiquid.amount; + // } + // } + // } + // } + return false; + } + + public boolean depleteInput(final ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) { + return false; + } + final FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true); + if (aLiquid != null) { + return this.depleteInput(aLiquid); + } + for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch)) { + if (GT_Utility.areStacksEqual( + aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(0))) { + if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) { + tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize); + return true; + } + } + } + } + for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch)) { + for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { + if (GT_Utility.areStacksEqual( + aStack, tHatch.getBaseMetaTileEntity().getStackInSlot(i))) { + if (tHatch.getBaseMetaTileEntity().getStackInSlot(0).stackSize >= aStack.stackSize) { + tHatch.getBaseMetaTileEntity().decrStackSize(0, aStack.stackSize); + return true; + } + } + } + } + } + return false; + } + + public ArrayList getStoredOutputs() { + final ArrayList rList = new ArrayList<>(); + for (final GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { + if (isValidMetaTileEntity(tHatch)) { + rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(1)); + } + } + for (final GT_MetaTileEntity_Hatch_OutputBus tHatch : this.mOutputBusses) { + if (isValidMetaTileEntity(tHatch)) { + for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { + rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i)); + } + } + } + return rList; + } + + public ArrayList getStoredFluids() { + final ArrayList rList = new ArrayList<>(); + for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch) && (tHatch.getFillableStack() != null)) { + rList.add(tHatch.getFillableStack()); + } + } + return rList; + } + + public ArrayList getStoredInputs() { + final ArrayList rList = new ArrayList<>(); + for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch) && (tHatch.getBaseMetaTileEntity().getStackInSlot(0) != null)) { + rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(0)); + } + } + for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { + tHatch.mRecipeMap = this.getRecipeMap(); + if (isValidMetaTileEntity(tHatch)) { + for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { + if (tHatch.getBaseMetaTileEntity().getStackInSlot(i) != null) { + rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i)); + } + } + } + } + return rList; + } + + public GT_Recipe_Map getRecipeMap() { + return null; + } + + public void updateSlots() { + for (final GT_MetaTileEntity_Hatch_Input tHatch : this.mInputHatches) { + if (isValidMetaTileEntity(tHatch)) { + tHatch.updateSlots(); + } + } + for (final GT_MetaTileEntity_Hatch_InputBus tHatch : this.mInputBusses) { + if (isValidMetaTileEntity(tHatch)) { + tHatch.updateSlots(); + } + } + } + + public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { + return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { + return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { + return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { + return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); + } + return false; + } + + public boolean addMaintenanceToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); + } + return false; + } + + public boolean addEnergyInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); + } + return false; + } + + public boolean addDynamoToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); + } + return false; + } + + public boolean addMufflerToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); + } + return false; + } + + public boolean addInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); + return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); + return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); + } + return false; + } + + public boolean addOutputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).mMachineBlock = (byte) aBaseCasingIndex; + return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); + } + return false; + } + + @Override + public String[] getInfoData() { + return new String[] { + "Progress:", + (this.mProgresstime / 20) + "secs", + (this.mMaxProgresstime / 20) + "secs", + "Efficiency:", + (this.mEfficiency / 100.0F) + "%", + "Problems:", + "" + (this.getIdealStatus() - this.getRepairStatus()) + }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean allowPullStack( + final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, final byte aSide, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack( + final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, final byte aSide, final ItemStack aStack) { + return false; + } } diff --git a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ScreenOverlay.java b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ScreenOverlay.java index 1c6a8e9278..de29c35820 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ScreenOverlay.java +++ b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_ScreenOverlay.java @@ -1,47 +1,45 @@ package gtPlusPlus.core.util.debug; import cpw.mods.fml.common.eventhandler.SubscribeEvent; - import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.item.Item; - import net.minecraftforge.client.event.RenderGameOverlayEvent; public class DEBUG_ScreenOverlay extends Gui { - int width, height; - Minecraft mc = Minecraft.getMinecraft(); - - @SubscribeEvent - public void eventHandler(final RenderGameOverlayEvent.Text event) - { + int width, height; + Minecraft mc = Minecraft.getMinecraft(); - //if (mc.thePlayer.getHeldItem().equals(ModItems.itemStaballoyPickaxe)){ - final ScaledResolution res = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); - final FontRenderer fontRender = this.mc.fontRenderer; - this.width = res.getScaledWidth(); - this.height = res.getScaledHeight(); - Minecraft.getMinecraft().entityRenderer.setupOverlayRendering(); - final String str = "Words"; - Item heldItem = null; + @SubscribeEvent + public void eventHandler(final RenderGameOverlayEvent.Text event) { - try{heldItem = this.mc.thePlayer.getHeldItem().getItem(); + // if (mc.thePlayer.getHeldItem().equals(ModItems.itemStaballoyPickaxe)){ + final ScaledResolution res = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); + final FontRenderer fontRender = this.mc.fontRenderer; + this.width = res.getScaledWidth(); + this.height = res.getScaledHeight(); + Minecraft.getMinecraft().entityRenderer.setupOverlayRendering(); + final String str = "Words"; + Item heldItem = null; - if (heldItem != null){ - /*if (heldItem instanceof StaballoyPickaxe){ + try { + heldItem = this.mc.thePlayer.getHeldItem().getItem(); - int dmg =((StaballoyPickaxe) heldItem).getDamage(((StaballoyPickaxe) heldItem).thisPickaxe); + if (heldItem != null) { + /*if (heldItem instanceof StaballoyPickaxe){ - ((StaballoyPickaxe) heldItem).checkFacing(((StaballoyPickaxe) heldItem).localWorld); - str = "DAMAGE: "+ dmg +" | FACING: "+((StaballoyPickaxe) heldItem).FACING+" | FACING_HORIZONTAL: "+((StaballoyPickaxe) heldItem).FACING_HORIZONTAL+" | LOOKING DIRECTION: "+((StaballoyPickaxe) heldItem).lookingDirection; + int dmg =((StaballoyPickaxe) heldItem).getDamage(((StaballoyPickaxe) heldItem).thisPickaxe); - drawString(fontRender, str, (this.width - fontRender.getStringWidth(str)) / 2, this.height / 10, 0xFFAA00); - }*/ - } - }catch(final NullPointerException e){} + ((StaballoyPickaxe) heldItem).checkFacing(((StaballoyPickaxe) heldItem).localWorld); + str = "DAMAGE: "+ dmg +" | FACING: "+((StaballoyPickaxe) heldItem).FACING+" | FACING_HORIZONTAL: "+((StaballoyPickaxe) heldItem).FACING_HORIZONTAL+" | LOOKING DIRECTION: "+((StaballoyPickaxe) heldItem).lookingDirection; - } -} \ No newline at end of file + drawString(fontRender, str, (this.width - fontRender.getStringWidth(str)) / 2, this.height / 10, 0xFFAA00); + }*/ + } + } catch (final NullPointerException e) { + } + } +} diff --git a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_TimerThread.java b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_TimerThread.java index 50d12871cb..004657ebcc 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/DEBUG_TimerThread.java +++ b/src/main/java/gtPlusPlus/core/util/debug/DEBUG_TimerThread.java @@ -1,64 +1,62 @@ package gtPlusPlus.core.util.debug; +import gtPlusPlus.api.objects.Logger; import java.util.concurrent.TimeUnit; - import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.world.World; - -import gtPlusPlus.api.objects.Logger; import net.minecraftforge.common.util.ForgeDirection; public class DEBUG_TimerThread implements Runnable { - private final World world; - private final EntityPlayer player; - - - public DEBUG_TimerThread(final World WORLD, final EntityPlayer PLAYER) { - this.world = WORLD; - this.player = PLAYER; - } - - @Override - public void run(){ - int xDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posX).offsetX; - int zDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posZ).offsetZ; - - final int stepX = Minecraft.getMinecraft().objectMouseOver.blockX; - final int stepY = Minecraft.getMinecraft().objectMouseOver.blockY; - final int stepZ = Minecraft.getMinecraft().objectMouseOver.blockZ; - Logger.INFO("Clicked on a Block @ "+"[X:"+stepX+"][Y:"+stepY+"][Z:"+stepZ+"]"+" with xDir:"+xDir+" zDir:"+zDir); - this.world.setBlock(stepX, stepY, stepZ, Blocks.bedrock,0,3); - Logger.INFO("Makng it Bedrock for future investment."); - //for (int i = -1; i <= 1; i++) { - //stepX = stepX+i; - for (int i = stepX-1; i <= (stepX+1); i++){ - for (int j = stepZ-1; j <= (stepZ+1); j++){ - for (int h = stepY-1; h <= (stepY+1); h++){ - - xDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posX).offsetX; - zDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posZ).offsetZ; - - //for (int j = -1; j <= 1; j++) { - //stepZ = stepZ+j; - //for (int h = -1; h <= 1; h++) { - //stepY = stepY+h; - Logger.INFO("Placing Block @ "+"[X:"+i+"][Y:"+h+"][Z:"+j+"]"+" with xDir:"+xDir+" zDir:"+zDir); - if ((h != 0) || ((((xDir + i) != 0) || ((zDir + j) != 0)) && ((i != 0) || (j != 0)))) { - this.world.setBlock(i, h, j, Blocks.stone,0,3); - } - else { - Logger.INFO("Not even sure what this is for, but I got here."); - } - try { - TimeUnit.MILLISECONDS.sleep(500); - } catch (final InterruptedException e1) { - e1.printStackTrace(); - } - } - } - } - } -} \ No newline at end of file + private final World world; + private final EntityPlayer player; + + public DEBUG_TimerThread(final World WORLD, final EntityPlayer PLAYER) { + this.world = WORLD; + this.player = PLAYER; + } + + @Override + public void run() { + int xDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posX).offsetX; + int zDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posZ).offsetZ; + + final int stepX = Minecraft.getMinecraft().objectMouseOver.blockX; + final int stepY = Minecraft.getMinecraft().objectMouseOver.blockY; + final int stepZ = Minecraft.getMinecraft().objectMouseOver.blockZ; + Logger.INFO("Clicked on a Block @ " + "[X:" + stepX + "][Y:" + stepY + "][Z:" + stepZ + "]" + " with xDir:" + + xDir + " zDir:" + zDir); + this.world.setBlock(stepX, stepY, stepZ, Blocks.bedrock, 0, 3); + Logger.INFO("Makng it Bedrock for future investment."); + // for (int i = -1; i <= 1; i++) { + // stepX = stepX+i; + for (int i = stepX - 1; i <= (stepX + 1); i++) { + for (int j = stepZ - 1; j <= (stepZ + 1); j++) { + for (int h = stepY - 1; h <= (stepY + 1); h++) { + + xDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posX).offsetX; + zDir = ForgeDirection.getOrientation(this.player.getPlayerCoordinates().posZ).offsetZ; + + // for (int j = -1; j <= 1; j++) { + // stepZ = stepZ+j; + // for (int h = -1; h <= 1; h++) { + // stepY = stepY+h; + Logger.INFO("Placing Block @ " + "[X:" + i + "][Y:" + h + "][Z:" + j + "]" + " with xDir:" + xDir + + " zDir:" + zDir); + if ((h != 0) || ((((xDir + i) != 0) || ((zDir + j) != 0)) && ((i != 0) || (j != 0)))) { + this.world.setBlock(i, h, j, Blocks.stone, 0, 3); + } else { + Logger.INFO("Not even sure what this is for, but I got here."); + } + try { + TimeUnit.MILLISECONDS.sleep(500); + } catch (final InterruptedException e1) { + e1.printStackTrace(); + } + } + } + } + } +} diff --git a/src/main/java/gtPlusPlus/core/util/debug/UtilityGL11Debug.java b/src/main/java/gtPlusPlus/core/util/debug/UtilityGL11Debug.java index 7cb1054d53..cf3580f5b7 100644 --- a/src/main/java/gtPlusPlus/core/util/debug/UtilityGL11Debug.java +++ b/src/main/java/gtPlusPlus/core/util/debug/UtilityGL11Debug.java @@ -1,343 +1,1139 @@ package gtPlusPlus.core.util.debug; import java.nio.ByteBuffer; - import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; - /** * User: The Grey Ghost * Date: 9/02/14 */ -public class UtilityGL11Debug -{ - public class GLproperty - { - public GLproperty(final int init_gLconstant, final String init_name, final String init_description, final String init_category, final String init_fetchCommand) { - this.gLconstant = init_gLconstant; - this.name = init_name; - this.description = init_description; - this.category = init_category; - this.fetchCommand = init_fetchCommand; - } +public class UtilityGL11Debug { + public class GLproperty { + public GLproperty( + final int init_gLconstant, + final String init_name, + final String init_description, + final String init_category, + final String init_fetchCommand) { + this.gLconstant = init_gLconstant; + this.name = init_name; + this.description = init_description; + this.category = init_category; + this.fetchCommand = init_fetchCommand; + } - public int gLconstant; - public String name; - public String description; - public String category; - public String fetchCommand; - } + public int gLconstant; + public String name; + public String description; + public String category; + public String fetchCommand; + } - public static UtilityGL11Debug instance = new UtilityGL11Debug(); + public static UtilityGL11Debug instance = new UtilityGL11Debug(); - public GLproperty[] propertyList = + public GLproperty[] propertyList = { + new GLproperty(GL11.GL_CURRENT_COLOR, "GL_CURRENT_COLOR", "Current color", "current", "glGetFloatv()"), + new GLproperty(GL11.GL_CURRENT_INDEX, "GL_CURRENT_INDEX", "Current color index", "current", "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_TEXTURE_COORDS, + "GL_CURRENT_TEXTURE_COORDS", + "Current texture coordinates", + "current", + "glGetFloatv()"), + new GLproperty(GL11.GL_CURRENT_NORMAL, "GL_CURRENT_NORMAL", "Current normal", "current", "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_POSITION, + "GL_CURRENT_RASTER_POSITION", + "Current raster position", + "current", + "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_DISTANCE, + "GL_CURRENT_RASTER_DISTANCE", + "Current raster distance", + "current", + "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_COLOR, + "GL_CURRENT_RASTER_COLOR", + "Color associated with raster position", + "current", + "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_INDEX, + "GL_CURRENT_RASTER_INDEX", + "Color index associated with raster position", + "current", + "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_TEXTURE_COORDS, + "GL_CURRENT_RASTER_TEXTURE_COORDS", + "Texture coordinates associated with raster position", + "current", + "glGetFloatv()"), + new GLproperty( + GL11.GL_CURRENT_RASTER_POSITION_VALID, + "GL_CURRENT_RASTER_POSITION_VALID", + "Raster position valid bit", + "current", + "glGetBooleanv()"), + new GLproperty(GL11.GL_EDGE_FLAG, "GL_EDGE_FLAG", "Edge flag", "current", "glGetBooleanv()"), + new GLproperty(GL11.GL_VERTEX_ARRAY, "GL_VERTEX_ARRAY", "Vertex array enable", "vertex-array", "glIsEnabled()"), + new GLproperty( + GL11.GL_VERTEX_ARRAY_SIZE, + "GL_VERTEX_ARRAY_SIZE", + "Coordinates per vertex", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_VERTEX_ARRAY_TYPE, + "GL_VERTEX_ARRAY_TYPE", + "Type of vertex coordinates", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_VERTEX_ARRAY_STRIDE, + "GL_VERTEX_ARRAY_STRIDE", + "Stride between vertices", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_VERTEX_ARRAY_POINTER, + "GL_VERTEX_ARRAY_POINTER", + "Pointer to the vertex array", + "vertex-array", + "glGetPointerv()"), + new GLproperty(GL11.GL_NORMAL_ARRAY, "GL_NORMAL_ARRAY", "Normal array enable", "vertex-array", "glIsEnabled()"), + new GLproperty( + GL11.GL_NORMAL_ARRAY_TYPE, + "GL_NORMAL_ARRAY_TYPE", + "Type of normal coordinates", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_NORMAL_ARRAY_STRIDE, + "GL_NORMAL_ARRAY_STRIDE", + "Stride between normals", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_NORMAL_ARRAY_POINTER, + "GL_NORMAL_ARRAY_POINTER", + "Pointer to the normal array", + "vertex-array", + "glGetPointerv()"), + new GLproperty( + GL11.GL_COLOR_ARRAY, "GL_COLOR_ARRAY", "RGBA color array enable", "vertex-array", "glIsEnabled()"), + new GLproperty( + GL11.GL_COLOR_ARRAY_SIZE, + "GL_COLOR_ARRAY_SIZE", + "Colors per vertex", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_ARRAY_TYPE, + "GL_COLOR_ARRAY_TYPE", + "Type of color components", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_ARRAY_STRIDE, + "GL_COLOR_ARRAY_STRIDE", + "Stride between colors", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_ARRAY_POINTER, + "GL_COLOR_ARRAY_POINTER", + "Pointer to the color array", + "vertex-array", + "glGetPointerv()"), + new GLproperty( + GL11.GL_INDEX_ARRAY, "GL_INDEX_ARRAY", "Color-index array enable", "vertex-array", "glIsEnabled()"), + new GLproperty( + GL11.GL_INDEX_ARRAY_TYPE, + "GL_INDEX_ARRAY_TYPE", + "Type of color indices", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_INDEX_ARRAY_STRIDE, + "GL_INDEX_ARRAY_STRIDE", + "Stride between color indices", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_INDEX_ARRAY_POINTER, + "GL_INDEX_ARRAY_POINTER", + "Pointer to the index array", + "vertex-array", + "glGetPointerv()"), + new GLproperty( + GL11.GL_TEXTURE_COORD_ARRAY, + "GL_TEXTURE_COORD_ARRAY", + "Texture coordinate array enable", + "vertex-array", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_COORD_ARRAY_SIZE, + "GL_TEXTURE_COORD_ARRAY_SIZE", + "Texture coordinates per element", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE_COORD_ARRAY_TYPE, + "GL_TEXTURE_COORD_ARRAY_TYPE", + "Type of texture coordinates", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE_COORD_ARRAY_STRIDE, + "GL_TEXTURE_COORD_ARRAY_STRIDE", + "Stride between texture coordinates", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE_COORD_ARRAY_POINTER, + "GL_TEXTURE_COORD_ARRAY_POINTER", + "Pointer to the texture coordinate array", + "vertex-array", + "glGetPointerv()"), + new GLproperty( + GL11.GL_EDGE_FLAG_ARRAY, + "GL_EDGE_FLAG_ARRAY", + "Edge flag array enable", + "vertex-array", + "glIsEnabled()"), + new GLproperty( + GL11.GL_EDGE_FLAG_ARRAY_STRIDE, + "GL_EDGE_FLAG_ARRAY_STRIDE", + "Stride between edge flags", + "vertex-array", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_EDGE_FLAG_ARRAY_POINTER, + "GL_EDGE_FLAG_ARRAY_POINTER", + "Pointer to the edge flag array", + "vertex-array", + "glGetPointerv()"), + new GLproperty( + GL11.GL_MODELVIEW_MATRIX, "GL_MODELVIEW_MATRIX", "Modelview matrix stack", "matrix", "glGetFloatv()"), + new GLproperty( + GL11.GL_PROJECTION_MATRIX, + "GL_PROJECTION_MATRIX", + "Projection matrix stack", + "matrix", + "glGetFloatv()"), + new GLproperty(GL11.GL_TEXTURE_MATRIX, "GL_TEXTURE_MATRIX", "Texture matrix stack", "matrix", "glGetFloatv()"), + new GLproperty(GL11.GL_VIEWPORT, "GL_VIEWPORT", "Viewport origin and extent", "viewport", "glGetIntegerv()"), + new GLproperty(GL11.GL_DEPTH_RANGE, "GL_DEPTH_RANGE", "Depth range near and far", "viewport", "glGetFloatv()"), + new GLproperty( + GL11.GL_MODELVIEW_STACK_DEPTH, + "GL_MODELVIEW_STACK_DEPTH", + "Modelview matrix stack pointer", + "matrix", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_PROJECTION_STACK_DEPTH, + "GL_PROJECTION_STACK_DEPTH", + "Projection matrix stack pointer", + "matrix", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE_STACK_DEPTH, + "GL_TEXTURE_STACK_DEPTH", + "Texture matrix stack pointer", + "matrix", + "glGetIntegerv()"), + new GLproperty(GL11.GL_MATRIX_MODE, "GL_MATRIX_MODE", "Current matrix mode", "transform", "glGetIntegerv()"), + new GLproperty( + GL11.GL_NORMALIZE, + "GL_NORMALIZE", + "Current normal normalization on/off", + "transform/ enable", + "glIsEnabled()"), + new GLproperty(GL11.GL_FOG_COLOR, "GL_FOG_COLOR", "Fog color", "fog", "glGetFloatv()"), + new GLproperty(GL11.GL_FOG_INDEX, "GL_FOG_INDEX", "Fog index", "fog", "glGetFloatv()"), + new GLproperty(GL11.GL_FOG_DENSITY, "GL_FOG_DENSITY", "Exponential fog density", "fog", "glGetFloatv()"), + new GLproperty(GL11.GL_FOG_START, "GL_FOG_START", "Linear fog start", "fog", "glGetFloatv()"), + new GLproperty(GL11.GL_FOG_END, "GL_FOG_END", "Linear fog end", "fog", "glGetFloatv()"), + new GLproperty(GL11.GL_FOG_MODE, "GL_FOG_MODE", "Fog mode", "fog", "glGetIntegerv()"), + new GLproperty(GL11.GL_FOG, "GL_FOG", "True if fog enabled", "fog/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_SHADE_MODEL, "GL_SHADE_MODEL", "glShadeModel() setting", "lighting", "glGetIntegerv()"), + new GLproperty( + GL11.GL_LIGHTING, "GL_LIGHTING", "True if lighting is enabled", "lighting/e nable", "glIsEnabled()"), + new GLproperty( + GL11.GL_COLOR_MATERIAL, + "GL_COLOR_MATERIAL", + "True if color tracking is enabled", + "lighting", + "glIsEnabled()"), + new GLproperty( + GL11.GL_COLOR_MATERIAL_PARAMETER, + "GL_COLOR_MATERIAL_PARAMETER", + "Material properties tracking current color", + "lighting", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_MATERIAL_FACE, + "GL_COLOR_MATERIAL_FACE", + "Face(s) affected by color tracking", + "lighting", + "glGetIntegerv()"), + new GLproperty(GL11.GL_AMBIENT, "GL_AMBIENT", "Ambient material color", "lighting", "glGetMaterialfv()"), + new GLproperty(GL11.GL_DIFFUSE, "GL_DIFFUSE", "Diffuse material color", "lighting", "glGetMaterialfv()"), + new GLproperty(GL11.GL_SPECULAR, "GL_SPECULAR", "Specular material color", "lighting", "glGetMaterialfv()"), + new GLproperty(GL11.GL_EMISSION, "GL_EMISSION", "Emissive material color", "lighting", "glGetMaterialfv()"), + new GLproperty( + GL11.GL_SHININESS, "GL_SHININESS", "Specular exponent of material", "lighting", "glGetMaterialfv()"), + new GLproperty( + GL11.GL_LIGHT_MODEL_AMBIENT, + "GL_LIGHT_MODEL_AMBIENT", + "Ambient scene color", + "lighting", + "glGetFloatv()"), + new GLproperty( + GL11.GL_LIGHT_MODEL_LOCAL_VIEWER, + "GL_LIGHT_MODEL_LOCAL_VIEWER", + "Viewer is local", + "lighting", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_LIGHT_MODEL_TWO_SIDE, + "GL_LIGHT_MODEL_TWO_SIDE", + "Use two-sided lighting", + "lighting", + "glGetBooleanv()"), + new GLproperty(GL11.GL_AMBIENT, "GL_AMBIENT", "Ambient intensity of light i", "lighting", "glGetLightfv()"), + new GLproperty(GL11.GL_DIFFUSE, "GL_DIFFUSE", "Diffuse intensity of light i", "lighting", "glGetLightfv()"), + new GLproperty(GL11.GL_SPECULAR, "GL_SPECULAR", "Specular intensity of light i", "lighting", "glGetLightfv()"), + new GLproperty(GL11.GL_POSITION, "GL_POSITION", "Position of light i", "lighting", "glGetLightfv()"), + new GLproperty( + GL11.GL_CONSTANT_ATTENUATION, + "GL_CONSTANT_ATTENUATION", + "Constant attenuation factor", + "lighting", + "glGetLightfv()"), + new GLproperty( + GL11.GL_LINEAR_ATTENUATION, + "GL_LINEAR_ATTENUATION", + "Linear attenuation factor", + "lighting", + "glGetLightfv()"), + new GLproperty( + GL11.GL_QUADRATIC_ATTENUATION, + "GL_QUADRATIC_ATTENUATION", + "Quadratic attenuation factor", + "lighting", + "glGetLightfv()"), + new GLproperty( + GL11.GL_SPOT_DIRECTION, + "GL_SPOT_DIRECTION", + "Spotlight direction of light i", + "lighting", + "glGetLightfv()"), + new GLproperty( + GL11.GL_SPOT_EXPONENT, + "GL_SPOT_EXPONENT", + "Spotlight exponent of light i", + "lighting", + "glGetLightfv()"), + new GLproperty( + GL11.GL_SPOT_CUTOFF, "GL_SPOT_CUTOFF", "Spotlight angle of light i", "lighting", "glGetLightfv()"), + new GLproperty(GL11.GL_LIGHT0, "GL_LIGHT0", "True if light 0 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT1, "GL_LIGHT1", "True if light 1 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT2, "GL_LIGHT2", "True if light 2 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT3, "GL_LIGHT3", "True if light 3 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT4, "GL_LIGHT4", "True if light 4 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT5, "GL_LIGHT5", "True if light 5 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT6, "GL_LIGHT6", "True if light 6 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LIGHT7, "GL_LIGHT7", "True if light 7 enabled", "lighting/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_COLOR_INDEXES, + "GL_COLOR_INDEXES", + "ca, cd, and cs for color-index lighting", + "lighting/e nable", + "glGetMaterialfv()"), + new GLproperty(GL11.GL_POINT_SIZE, "GL_POINT_SIZE", "Point size", "point", "glGetFloatv()"), + new GLproperty( + GL11.GL_POINT_SMOOTH, "GL_POINT_SMOOTH", "Point antialiasing on", "point/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_LINE_WIDTH, "GL_LINE_WIDTH", "Line width", "line", "glGetFloatv()"), + new GLproperty(GL11.GL_LINE_SMOOTH, "GL_LINE_SMOOTH", "Line antialiasing on", "line/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_LINE_STIPPLE_PATTERN, "GL_LINE_STIPPLE_PATTERN", "Line stipple", "line", "glGetIntegerv()"), + new GLproperty( + GL11.GL_LINE_STIPPLE_REPEAT, + "GL_LINE_STIPPLE_REPEAT", + "Line stipple repeat", + "line", + "glGetIntegerv()"), + new GLproperty(GL11.GL_LINE_STIPPLE, "GL_LINE_STIPPLE", "Line stipple enable", "line/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_CULL_FACE, "GL_CULL_FACE", "Polygon culling enabled", "polygon/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_CULL_FACE_MODE, + "GL_CULL_FACE_MODE", + "Cull front-/back-facing polygons", + "polygon", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_FRONT_FACE, + "GL_FRONT_FACE", + "Polygon front-face CW/CCW indicator", + "polygon", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_POLYGON_SMOOTH, + "GL_POLYGON_SMOOTH", + "Polygon antialiasing on", + "polygon/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_POLYGON_MODE, + "GL_POLYGON_MODE", + "Polygon rasterization mode (front and back)", + "polygon", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_POLYGON_OFFSET_FACTOR, + "GL_POLYGON_OFFSET_FACTOR", + "Polygon offset factor", + "polygon", + "glGetFloatv()"), + new GLproperty( + GL11.GL_POLYGON_OFFSET_POINT, + "GL_POLYGON_OFFSET_POINT", + "Polygon offset enable for GL_POINT mode rasterization", + "polygon/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_POLYGON_OFFSET_LINE, + "GL_POLYGON_OFFSET_LINE", + "Polygon offset enable for GL_LINE mode rasterization", + "polygon/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_POLYGON_OFFSET_FILL, + "GL_POLYGON_OFFSET_FILL", + "Polygon offset enable for GL_FILL mode rasterization", + "polygon/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_POLYGON_STIPPLE, + "GL_POLYGON_STIPPLE", + "Polygon stipple enable", + "polygon/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_1D, + "GL_TEXTURE_1D", + "True if 1-D texturing enabled ", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_2D, + "GL_TEXTURE_2D", + "True if 2-D texturing enabled ", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_BINDING_1D, + "GL_TEXTURE_BINDING_1D", + "Texture object bound to GL_TEXTURE_1D", + "texture", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE_BINDING_2D, + "GL_TEXTURE_BINDING_2D", + "Texture object bound to GL_TEXTURE_2D", + "texture", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_TEXTURE, "GL_TEXTURE", "x-D texture image at level of detail i", "UNUSED", "glGetTexImage()"), + new GLproperty( + GL11.GL_TEXTURE_WIDTH, + "GL_TEXTURE_WIDTH", + "x-D texture image i's width", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_HEIGHT, + "GL_TEXTURE_HEIGHT", + "x-D texture image i's height", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_BORDER, + "GL_TEXTURE_BORDER", + "x-D texture image i's border width", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_RED_SIZE, + "GL_TEXTURE_RED_SIZE", + "x-D texture image i's red resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_GREEN_SIZE, + "GL_TEXTURE_GREEN_SIZE", + "x-D texture image i's green resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_BLUE_SIZE, + "GL_TEXTURE_BLUE_SIZE", + "x-D texture image i's blue resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_ALPHA_SIZE, + "GL_TEXTURE_ALPHA_SIZE", + "x-D texture image i's alpha resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_LUMINANCE_SIZE, + "GL_TEXTURE_LUMINANCE_SIZE", + "x-D texture image i's luminance resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_INTENSITY_SIZE, + "GL_TEXTURE_INTENSITY_SIZE", + "x-D texture image i's intensity resolution", + "UNUSED", + "glGetTexLevelParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_BORDER_COLOR, + "GL_TEXTURE_BORDER_COLOR", + "Texture border color", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_MIN_FILTER, + "GL_TEXTURE_MIN_FILTER", + "Texture minification function", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_MAG_FILTER, + "GL_TEXTURE_MAG_FILTER", + "Texture magnification function", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_WRAP_S, + "GL_TEXTURE_WRAP_S", + "Texture wrap mode (x is S or T)", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_WRAP_T, + "GL_TEXTURE_WRAP_T", + "Texture wrap mode (x is S or T)", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_PRIORITY, + "GL_TEXTURE_PRIORITY", + "Texture object priority", + "texture", + "glGetTexParameter*()"), + new GLproperty( + GL11.GL_TEXTURE_ENV_MODE, + "GL_TEXTURE_ENV_MODE", + "Texture application function", + "texture", + "glGetTexEnviv()"), + new GLproperty( + GL11.GL_TEXTURE_ENV_COLOR, + "GL_TEXTURE_ENV_COLOR", + "Texture environment color", + "texture", + "glGetTexEnvfv()"), + new GLproperty( + GL11.GL_TEXTURE_GEN_S, + "GL_TEXTURE_GEN_S", + "Texgen enabled (x is S, T, R, or Q)", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_GEN_T, + "GL_TEXTURE_GEN_T", + "Texgen enabled (x is S, T, R, or Q)", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_GEN_R, + "GL_TEXTURE_GEN_R", + "Texgen enabled (x is S, T, R, or Q)", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_TEXTURE_GEN_Q, + "GL_TEXTURE_GEN_Q", + "Texgen enabled (x is S, T, R, or Q)", + "texture/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_EYE_PLANE, "GL_EYE_PLANE", "Texgen plane equation coefficients", "texture", "glGetTexGenfv()"), + new GLproperty( + GL11.GL_OBJECT_PLANE, + "GL_OBJECT_PLANE", + "Texgen object linear coefficients", + "texture", + "glGetTexGenfv()"), + new GLproperty( + GL11.GL_TEXTURE_GEN_MODE, + "GL_TEXTURE_GEN_MODE", + "Function used for texgen", + "texture", + "glGetTexGeniv()"), + new GLproperty( + GL11.GL_SCISSOR_TEST, "GL_SCISSOR_TEST", "Scissoring enabled", "scissor/enable", "glIsEnabled()"), + new GLproperty(GL11.GL_SCISSOR_BOX, "GL_SCISSOR_BOX", "Scissor box", "scissor", "glGetIntegerv()"), + new GLproperty( + GL11.GL_ALPHA_TEST, "GL_ALPHA_TEST", "Alpha test enabled", "color-buffer/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_ALPHA_TEST_FUNC, + "GL_ALPHA_TEST_FUNC", + "Alpha test function", + "color-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ALPHA_TEST_REF, + "GL_ALPHA_TEST_REF", + "Alpha test reference value", + "color-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_TEST, + "GL_STENCIL_TEST", + "Stenciling enabled", + "stencil-buffer/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_STENCIL_FUNC, "GL_STENCIL_FUNC", "Stencil function", "stencil-buffer", "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_VALUE_MASK, + "GL_STENCIL_VALUE_MASK", + "Stencil mask", + "stencil-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_REF, "GL_STENCIL_REF", "Stencil reference value", "stencil-buffer", "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_FAIL, "GL_STENCIL_FAIL", "Stencil fail action", "stencil-buffer", "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_PASS_DEPTH_FAIL, + "GL_STENCIL_PASS_DEPTH_FAIL", + "Stencil depth buffer fail action", + "stencil-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_PASS_DEPTH_PASS, + "GL_STENCIL_PASS_DEPTH_PASS", + "Stencil depth buffer pass action", + "stencil-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_DEPTH_TEST, "GL_DEPTH_TEST", "Depth buffer enabled", "depth-buffer/ena ble", "glIsEnabled()"), + new GLproperty( + GL11.GL_DEPTH_FUNC, "GL_DEPTH_FUNC", "Depth buffer test function", "depth-buffer", "glGetIntegerv()"), + new GLproperty(GL11.GL_BLEND, "GL_BLEND", "Blending enabled", "color-buffer/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_BLEND_SRC, "GL_BLEND_SRC", "Blending source function", "color-buffer", "glGetIntegerv()"), + new GLproperty( + GL11.GL_BLEND_DST, "GL_BLEND_DST", "Blending destination function", "color-buffer", "glGetIntegerv()"), + new GLproperty(GL11.GL_DITHER, "GL_DITHER", "Dithering enabled", "color-buffer/enable", "glIsEnabled()"), + new GLproperty( + GL11.GL_INDEX_LOGIC_OP, + "GL_INDEX_LOGIC_OP", + "Color index logical operation enabled", + "color-buffer/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_COLOR_LOGIC_OP, + "GL_COLOR_LOGIC_OP", + "RGBA color logical operation enabled", + "color-buffer/enable", + "glIsEnabled()"), + new GLproperty( + GL11.GL_LOGIC_OP_MODE, + "GL_LOGIC_OP_MODE", + "Logical operation function", + "color-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_DRAW_BUFFER, + "GL_DRAW_BUFFER", + "Buffers selected for drawing", + "color-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_INDEX_WRITEMASK, + "GL_INDEX_WRITEMASK", + "Color-index writemask", + "color-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_WRITEMASK, + "GL_COLOR_WRITEMASK", + "Color write enables; R, G, B, or A", + "color-buffer", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_DEPTH_WRITEMASK, + "GL_DEPTH_WRITEMASK", + "Depth buffer enabled for writing", + "depth-buffer", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_STENCIL_WRITEMASK, + "GL_STENCIL_WRITEMASK", + "Stencil-buffer writemask", + "stencil-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_COLOR_CLEAR_VALUE, + "GL_COLOR_CLEAR_VALUE", + "Color-buffer clear value (RGBA mode)", + "color-buffer", + "glGetFloatv()"), + new GLproperty( + GL11.GL_INDEX_CLEAR_VALUE, + "GL_INDEX_CLEAR_VALUE", + "Color-buffer clear value (color-index mode)", + "color-buffer", + "glGetFloatv()"), + new GLproperty( + GL11.GL_DEPTH_CLEAR_VALUE, + "GL_DEPTH_CLEAR_VALUE", + "Depth-buffer clear value", + "depth-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_CLEAR_VALUE, + "GL_STENCIL_CLEAR_VALUE", + "Stencil-buffer clear value", + "stencil-buffer", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ACCUM_CLEAR_VALUE, + "GL_ACCUM_CLEAR_VALUE", + "Accumulation-buffer clear value", + "accum-buffer", + "glGetFloatv()"), + new GLproperty( + GL11.GL_UNPACK_SWAP_BYTES, + "GL_UNPACK_SWAP_BYTES", + "Value of GL_UNPACK_SWAP_BYTES", + "pixel-store", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_UNPACK_LSB_FIRST, + "GL_UNPACK_LSB_FIRST", + "Value of GL_UNPACK_LSB_FIRST", + "pixel-store", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_UNPACK_ROW_LENGTH, + "GL_UNPACK_ROW_LENGTH", + "Value of GL_UNPACK_ROW_LENGTH", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_UNPACK_SKIP_ROWS, + "GL_UNPACK_SKIP_ROWS", + "Value of GL_UNPACK_SKIP_ROWS", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_UNPACK_SKIP_PIXELS, + "GL_UNPACK_SKIP_PIXELS", + "Value of GL_UNPACK_SKIP_PIXELS", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_UNPACK_ALIGNMENT, + "GL_UNPACK_ALIGNMENT", + "Value of GL_UNPACK_ALIGNMENT", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_PACK_SWAP_BYTES, + "GL_PACK_SWAP_BYTES", + "Value of GL_PACK_SWAP_BYTES", + "pixel-store", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_PACK_LSB_FIRST, + "GL_PACK_LSB_FIRST", + "Value of GL_PACK_LSB_FIRST", + "pixel-store", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_PACK_ROW_LENGTH, + "GL_PACK_ROW_LENGTH", + "Value of GL_PACK_ROW_LENGTH", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_PACK_SKIP_ROWS, + "GL_PACK_SKIP_ROWS", + "Value of GL_PACK_SKIP_ROWS", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_PACK_SKIP_PIXELS, + "GL_PACK_SKIP_PIXELS", + "Value of GL_PACK_SKIP_PIXELS", + "pixel-store", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_PACK_ALIGNMENT, + "GL_PACK_ALIGNMENT", + "Value of GL_PACK_ALIGNMENT", + "pixel-store", + "glGetIntegerv()"), + new GLproperty(GL11.GL_MAP_COLOR, "GL_MAP_COLOR", "True if colors are mapped", "pixel", "glGetBooleanv()"), + new GLproperty( + GL11.GL_MAP_STENCIL, "GL_MAP_STENCIL", "True if stencil values are mapped", "pixel", "glGetBooleanv()"), + new GLproperty(GL11.GL_INDEX_SHIFT, "GL_INDEX_SHIFT", "Value of GL_INDEX_SHIFT", "pixel", "glGetIntegerv()"), + new GLproperty(GL11.GL_INDEX_OFFSET, "GL_INDEX_OFFSET", "Value of GL_INDEX_OFFSET", "pixel", "glGetIntegerv()"), + new GLproperty(GL11.GL_ZOOM_X, "GL_ZOOM_X", "x zoom factor", "pixel", "glGetFloatv()"), + new GLproperty(GL11.GL_ZOOM_Y, "GL_ZOOM_Y", "y zoom factor", "pixel", "glGetFloatv()"), + new GLproperty(GL11.GL_READ_BUFFER, "GL_READ_BUFFER", "Read source buffer", "pixel", "glGetIntegerv()"), + new GLproperty(GL11.GL_ORDER, "GL_ORDER", "1D map order", "capability", "glGetMapiv()"), + new GLproperty(GL11.GL_ORDER, "GL_ORDER", "2D map orders", "capability", "glGetMapiv()"), + new GLproperty(GL11.GL_COEFF, "GL_COEFF", "1D control points", "capability", "glGetMapfv()"), + new GLproperty(GL11.GL_COEFF, "GL_COEFF", "2D control points", "capability", "glGetMapfv()"), + new GLproperty(GL11.GL_DOMAIN, "GL_DOMAIN", "1D domain endpoints", "capability", "glGetMapfv()"), + new GLproperty(GL11.GL_DOMAIN, "GL_DOMAIN", "2D domain endpoints", "capability", "glGetMapfv()"), + new GLproperty(GL11.GL_MAP1_GRID_DOMAIN, "GL_MAP1_GRID_DOMAIN", "1D grid endpoints", "eval", "glGetFloatv()"), + new GLproperty(GL11.GL_MAP2_GRID_DOMAIN, "GL_MAP2_GRID_DOMAIN", "2D grid endpoints", "eval", "glGetFloatv()"), + new GLproperty( + GL11.GL_MAP1_GRID_SEGMENTS, "GL_MAP1_GRID_SEGMENTS", "1D grid divisions", "eval", "glGetFloatv()"), + new GLproperty( + GL11.GL_MAP2_GRID_SEGMENTS, "GL_MAP2_GRID_SEGMENTS", "2D grid divisions", "eval", "glGetFloatv()"), + new GLproperty( + GL11.GL_AUTO_NORMAL, + "GL_AUTO_NORMAL", + "True if automatic normal generation enabled", + "eval", + "glIsEnabled()"), + new GLproperty( + GL11.GL_PERSPECTIVE_CORRECTION_HINT, + "GL_PERSPECTIVE_CORRECTION_HINT", + "Perspective correction hint", + "hint", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_POINT_SMOOTH_HINT, "GL_POINT_SMOOTH_HINT", "Point smooth hint", "hint", "glGetIntegerv()"), + new GLproperty(GL11.GL_LINE_SMOOTH_HINT, "GL_LINE_SMOOTH_HINT", "Line smooth hint", "hint", "glGetIntegerv()"), + new GLproperty( + GL11.GL_POLYGON_SMOOTH_HINT, + "GL_POLYGON_SMOOTH_HINT", + "Polygon smooth hint", + "hint", + "glGetIntegerv()"), + new GLproperty(GL11.GL_FOG_HINT, "GL_FOG_HINT", "Fog hint", "hint", "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_LIGHTS, "GL_MAX_LIGHTS", "Maximum number of lights", "capability", "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_CLIP_PLANES, + "GL_MAX_CLIP_PLANES", + "Maximum number of user clipping planes", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_MODELVIEW_STACK_DEPTH, + "GL_MAX_MODELVIEW_STACK_DEPTH", + "Maximum modelview-matrix stack depth", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_PROJECTION_STACK_DEPTH, + "GL_MAX_PROJECTION_STACK_DEPTH", + "Maximum projection-matrix stack depth", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_TEXTURE_STACK_DEPTH, + "GL_MAX_TEXTURE_STACK_DEPTH", + "Maximum depth of texture matrix stack", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_SUBPIXEL_BITS, + "GL_SUBPIXEL_BITS", + "Number of bits of subpixel precision in x and y", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_TEXTURE_SIZE, + "GL_MAX_TEXTURE_SIZE", + "See discussion in Texture Proxy in Chapter 9", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_PIXEL_MAP_TABLE, + "GL_MAX_PIXEL_MAP_TABLE", + "Maximum size of a glPixelMap() translation table", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_NAME_STACK_DEPTH, + "GL_MAX_NAME_STACK_DEPTH", + "Maximum selection-name stack depth", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_LIST_NESTING, + "GL_MAX_LIST_NESTING", + "Maximum display-list call nesting", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_EVAL_ORDER, + "GL_MAX_EVAL_ORDER", + "Maximum evaluator polynomial order", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_VIEWPORT_DIMS, + "GL_MAX_VIEWPORT_DIMS", + "Maximum viewport dimensions", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_ATTRIB_STACK_DEPTH, + "GL_MAX_ATTRIB_STACK_DEPTH", + "Maximum depth of the attribute stack", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_MAX_CLIENT_ATTRIB_STACK_DEPTH, + "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH", + "Maximum depth of the client attribute stack", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_AUX_BUFFERS, "GL_AUX_BUFFERS", "Number of auxiliary buffers", "capability", "glGetBooleanv()"), + new GLproperty( + GL11.GL_RGBA_MODE, "GL_RGBA_MODE", "True if color buffers store RGBA", "capability", "glGetBooleanv()"), + new GLproperty( + GL11.GL_INDEX_MODE, + "GL_INDEX_MODE", + "True if color buffers store indices", + "capability", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_DOUBLEBUFFER, + "GL_DOUBLEBUFFER", + "True if front and back buffers exist", + "capability", + "glGetBooleanv()"), + new GLproperty( + GL11.GL_STEREO, "GL_STEREO", "True if left and right buffers exist", "capability", "glGetBooleanv()"), + new GLproperty( + GL11.GL_POINT_SIZE_RANGE, + "GL_POINT_SIZE_RANGE", + "Range (low to high) of antialiased point sizes", + "capability", + "glGetFloatv()"), + new GLproperty( + GL11.GL_POINT_SIZE_GRANULARITY, + "GL_POINT_SIZE_GRANULARITY", + "Antialiased point-size granularity", + "capability", + "glGetFloatv()"), + new GLproperty( + GL11.GL_LINE_WIDTH_RANGE, + "GL_LINE_WIDTH_RANGE", + "Range (low to high) of antialiased line widths", + "capability", + "glGetFloatv()"), + new GLproperty( + GL11.GL_LINE_WIDTH_GRANULARITY, + "GL_LINE_WIDTH_GRANULARITY", + "Antialiased line-width granularity", + "capability", + "glGetFloatv()"), + new GLproperty( + GL11.GL_RED_BITS, + "GL_RED_BITS", + "Number of bits per red component in color buffers", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_GREEN_BITS, + "GL_GREEN_BITS", + "Number of bits per green component in color buffers", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_BLUE_BITS, + "GL_BLUE_BITS", + "Number of bits per blue component in color buffers", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ALPHA_BITS, + "GL_ALPHA_BITS", + "Number of bits per alpha component in color buffers", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_INDEX_BITS, + "GL_INDEX_BITS", + "Number of bits per index in color buffers", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_DEPTH_BITS, + "GL_DEPTH_BITS", + "Number of depth-buffer bitplanes", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_STENCIL_BITS, + "GL_STENCIL_BITS", + "Number of stencil bitplanes", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ACCUM_RED_BITS, + "GL_ACCUM_RED_BITS", + "Number of bits per red component in the accumulation buffer", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ACCUM_GREEN_BITS, + "GL_ACCUM_GREEN_BITS", + "Number of bits per green component in the accumulation buffer", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ACCUM_BLUE_BITS, + "GL_ACCUM_BLUE_BITS", + "Number of bits per blue component in the accumulation buffer", + "capability", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ACCUM_ALPHA_BITS, + "GL_ACCUM_ALPHA_BITS", + "Number of bits per alpha component in the accumulation buffer", + "capability", + "glGetIntegerv()"), + new GLproperty(GL11.GL_LIST_BASE, "GL_LIST_BASE", "Setting of glListBase()", "list", "glGetIntegerv()"), + new GLproperty( + GL11.GL_LIST_INDEX, + "GL_LIST_INDEX", + "Number of display list under construction; 0 if none", + "current", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_LIST_MODE, + "GL_LIST_MODE", + "Mode of display list under construction; undefined if none", + "current", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_ATTRIB_STACK_DEPTH, + "GL_ATTRIB_STACK_DEPTH", + "Attribute stack pointer", + "current", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_CLIENT_ATTRIB_STACK_DEPTH, + "GL_CLIENT_ATTRIB_STACK_DEPTH", + "Client attribute stack pointer", + "current", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_NAME_STACK_DEPTH, "GL_NAME_STACK_DEPTH", "Name stack depth", "current", "glGetIntegerv()"), + new GLproperty(GL11.GL_RENDER_MODE, "GL_RENDER_MODE", "glRenderMode() setting", "current", "glGetIntegerv()"), + new GLproperty( + GL11.GL_SELECTION_BUFFER_POINTER, + "GL_SELECTION_BUFFER_POINTER", + "Pointer to selection buffer", + "select", + "glGetPointerv()"), + new GLproperty( + GL11.GL_SELECTION_BUFFER_SIZE, + "GL_SELECTION_BUFFER_SIZE", + "Size of selection buffer", + "select", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_FEEDBACK_BUFFER_POINTER, + "GL_FEEDBACK_BUFFER_POINTER", + "Pointer to feedback buffer", + "feedback", + "glGetPointerv()"), + new GLproperty( + GL11.GL_FEEDBACK_BUFFER_SIZE, + "GL_FEEDBACK_BUFFER_SIZE", + "Size of feedback buffer", + "feedback", + "glGetIntegerv()"), + new GLproperty( + GL11.GL_FEEDBACK_BUFFER_TYPE, + "GL_FEEDBACK_BUFFER_TYPE", + "Type of feedback buffer", + "feedback", + "glGetIntegerv()"), + }; - { - new GLproperty(GL11.GL_CURRENT_COLOR, "GL_CURRENT_COLOR", "Current color", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_INDEX, "GL_CURRENT_INDEX", "Current color index", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_TEXTURE_COORDS, "GL_CURRENT_TEXTURE_COORDS", "Current texture coordinates", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_NORMAL, "GL_CURRENT_NORMAL", "Current normal", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_POSITION, "GL_CURRENT_RASTER_POSITION", "Current raster position", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_DISTANCE, "GL_CURRENT_RASTER_DISTANCE", "Current raster distance", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_COLOR, "GL_CURRENT_RASTER_COLOR", "Color associated with raster position", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_INDEX, "GL_CURRENT_RASTER_INDEX", "Color index associated with raster position", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_TEXTURE_COORDS, "GL_CURRENT_RASTER_TEXTURE_COORDS", "Texture coordinates associated with raster position", "current", "glGetFloatv()"), - new GLproperty(GL11.GL_CURRENT_RASTER_POSITION_VALID, "GL_CURRENT_RASTER_POSITION_VALID", "Raster position valid bit", "current", "glGetBooleanv()"), - new GLproperty(GL11.GL_EDGE_FLAG, "GL_EDGE_FLAG", "Edge flag", "current", "glGetBooleanv()"), - new GLproperty(GL11.GL_VERTEX_ARRAY, "GL_VERTEX_ARRAY", "Vertex array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_VERTEX_ARRAY_SIZE, "GL_VERTEX_ARRAY_SIZE", "Coordinates per vertex", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_VERTEX_ARRAY_TYPE, "GL_VERTEX_ARRAY_TYPE", "Type of vertex coordinates", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_VERTEX_ARRAY_STRIDE, "GL_VERTEX_ARRAY_STRIDE", "Stride between vertices", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_VERTEX_ARRAY_POINTER, "GL_VERTEX_ARRAY_POINTER", "Pointer to the vertex array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_NORMAL_ARRAY, "GL_NORMAL_ARRAY", "Normal array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_NORMAL_ARRAY_TYPE, "GL_NORMAL_ARRAY_TYPE", "Type of normal coordinates", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_NORMAL_ARRAY_STRIDE, "GL_NORMAL_ARRAY_STRIDE", "Stride between normals", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_NORMAL_ARRAY_POINTER, "GL_NORMAL_ARRAY_POINTER", "Pointer to the normal array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_COLOR_ARRAY, "GL_COLOR_ARRAY", "RGBA color array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_COLOR_ARRAY_SIZE, "GL_COLOR_ARRAY_SIZE", "Colors per vertex", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_ARRAY_TYPE, "GL_COLOR_ARRAY_TYPE", "Type of color components", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_ARRAY_STRIDE, "GL_COLOR_ARRAY_STRIDE", "Stride between colors", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_ARRAY_POINTER, "GL_COLOR_ARRAY_POINTER", "Pointer to the color array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_INDEX_ARRAY, "GL_INDEX_ARRAY", "Color-index array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_INDEX_ARRAY_TYPE, "GL_INDEX_ARRAY_TYPE", "Type of color indices", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_INDEX_ARRAY_STRIDE, "GL_INDEX_ARRAY_STRIDE", "Stride between color indices", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_INDEX_ARRAY_POINTER, "GL_INDEX_ARRAY_POINTER", "Pointer to the index array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_TEXTURE_COORD_ARRAY, "GL_TEXTURE_COORD_ARRAY", "Texture coordinate array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_COORD_ARRAY_SIZE, "GL_TEXTURE_COORD_ARRAY_SIZE", "Texture coordinates per element", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE_COORD_ARRAY_TYPE, "GL_TEXTURE_COORD_ARRAY_TYPE", "Type of texture coordinates", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE_COORD_ARRAY_STRIDE, "GL_TEXTURE_COORD_ARRAY_STRIDE", "Stride between texture coordinates", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE_COORD_ARRAY_POINTER, "GL_TEXTURE_COORD_ARRAY_POINTER", "Pointer to the texture coordinate array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_EDGE_FLAG_ARRAY, "GL_EDGE_FLAG_ARRAY", "Edge flag array enable", "vertex-array", "glIsEnabled()"), - new GLproperty(GL11.GL_EDGE_FLAG_ARRAY_STRIDE, "GL_EDGE_FLAG_ARRAY_STRIDE", "Stride between edge flags", "vertex-array", "glGetIntegerv()"), - new GLproperty(GL11.GL_EDGE_FLAG_ARRAY_POINTER, "GL_EDGE_FLAG_ARRAY_POINTER", "Pointer to the edge flag array", "vertex-array", "glGetPointerv()"), - new GLproperty(GL11.GL_MODELVIEW_MATRIX, "GL_MODELVIEW_MATRIX", "Modelview matrix stack", "matrix", "glGetFloatv()"), - new GLproperty(GL11.GL_PROJECTION_MATRIX, "GL_PROJECTION_MATRIX", "Projection matrix stack", "matrix", "glGetFloatv()"), - new GLproperty(GL11.GL_TEXTURE_MATRIX, "GL_TEXTURE_MATRIX", "Texture matrix stack", "matrix", "glGetFloatv()"), - new GLproperty(GL11.GL_VIEWPORT, "GL_VIEWPORT", "Viewport origin and extent", "viewport", "glGetIntegerv()"), - new GLproperty(GL11.GL_DEPTH_RANGE, "GL_DEPTH_RANGE", "Depth range near and far", "viewport", "glGetFloatv()"), - new GLproperty(GL11.GL_MODELVIEW_STACK_DEPTH, "GL_MODELVIEW_STACK_DEPTH", "Modelview matrix stack pointer", "matrix", "glGetIntegerv()"), - new GLproperty(GL11.GL_PROJECTION_STACK_DEPTH, "GL_PROJECTION_STACK_DEPTH", "Projection matrix stack pointer", "matrix", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE_STACK_DEPTH, "GL_TEXTURE_STACK_DEPTH", "Texture matrix stack pointer", "matrix", "glGetIntegerv()"), - new GLproperty(GL11.GL_MATRIX_MODE, "GL_MATRIX_MODE", "Current matrix mode", "transform", "glGetIntegerv()"), - new GLproperty(GL11.GL_NORMALIZE, "GL_NORMALIZE", "Current normal normalization on/off", "transform/ enable", "glIsEnabled()"), - new GLproperty(GL11.GL_FOG_COLOR, "GL_FOG_COLOR", "Fog color", "fog", "glGetFloatv()"), - new GLproperty(GL11.GL_FOG_INDEX, "GL_FOG_INDEX", "Fog index", "fog", "glGetFloatv()"), - new GLproperty(GL11.GL_FOG_DENSITY, "GL_FOG_DENSITY", "Exponential fog density", "fog", "glGetFloatv()"), - new GLproperty(GL11.GL_FOG_START, "GL_FOG_START", "Linear fog start", "fog", "glGetFloatv()"), - new GLproperty(GL11.GL_FOG_END, "GL_FOG_END", "Linear fog end", "fog", "glGetFloatv()"), - new GLproperty(GL11.GL_FOG_MODE, "GL_FOG_MODE", "Fog mode", "fog", "glGetIntegerv()"), - new GLproperty(GL11.GL_FOG, "GL_FOG", "True if fog enabled", "fog/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_SHADE_MODEL, "GL_SHADE_MODEL", "glShadeModel() setting", "lighting", "glGetIntegerv()"), - new GLproperty(GL11.GL_LIGHTING, "GL_LIGHTING", "True if lighting is enabled", "lighting/e nable", "glIsEnabled()"), - new GLproperty(GL11.GL_COLOR_MATERIAL, "GL_COLOR_MATERIAL", "True if color tracking is enabled", "lighting", "glIsEnabled()"), - new GLproperty(GL11.GL_COLOR_MATERIAL_PARAMETER, "GL_COLOR_MATERIAL_PARAMETER", "Material properties tracking current color", "lighting", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_MATERIAL_FACE, "GL_COLOR_MATERIAL_FACE", "Face(s) affected by color tracking", "lighting", "glGetIntegerv()"), - new GLproperty(GL11.GL_AMBIENT, "GL_AMBIENT", "Ambient material color", "lighting", "glGetMaterialfv()"), - new GLproperty(GL11.GL_DIFFUSE, "GL_DIFFUSE", "Diffuse material color", "lighting", "glGetMaterialfv()"), - new GLproperty(GL11.GL_SPECULAR, "GL_SPECULAR", "Specular material color", "lighting", "glGetMaterialfv()"), - new GLproperty(GL11.GL_EMISSION, "GL_EMISSION", "Emissive material color", "lighting", "glGetMaterialfv()"), - new GLproperty(GL11.GL_SHININESS, "GL_SHININESS", "Specular exponent of material", "lighting", "glGetMaterialfv()"), - new GLproperty(GL11.GL_LIGHT_MODEL_AMBIENT, "GL_LIGHT_MODEL_AMBIENT", "Ambient scene color", "lighting", "glGetFloatv()"), - new GLproperty(GL11.GL_LIGHT_MODEL_LOCAL_VIEWER, "GL_LIGHT_MODEL_LOCAL_VIEWER", "Viewer is local", "lighting", "glGetBooleanv()"), - new GLproperty(GL11.GL_LIGHT_MODEL_TWO_SIDE, "GL_LIGHT_MODEL_TWO_SIDE", "Use two-sided lighting", "lighting", "glGetBooleanv()"), - new GLproperty(GL11.GL_AMBIENT, "GL_AMBIENT", "Ambient intensity of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_DIFFUSE, "GL_DIFFUSE", "Diffuse intensity of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_SPECULAR, "GL_SPECULAR", "Specular intensity of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_POSITION, "GL_POSITION", "Position of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_CONSTANT_ATTENUATION, "GL_CONSTANT_ATTENUATION", "Constant attenuation factor", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_LINEAR_ATTENUATION, "GL_LINEAR_ATTENUATION", "Linear attenuation factor", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_QUADRATIC_ATTENUATION, "GL_QUADRATIC_ATTENUATION", "Quadratic attenuation factor", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_SPOT_DIRECTION, "GL_SPOT_DIRECTION", "Spotlight direction of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_SPOT_EXPONENT, "GL_SPOT_EXPONENT", "Spotlight exponent of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_SPOT_CUTOFF, "GL_SPOT_CUTOFF", "Spotlight angle of light i", "lighting", "glGetLightfv()"), - new GLproperty(GL11.GL_LIGHT0, "GL_LIGHT0", "True if light 0 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT1, "GL_LIGHT1", "True if light 1 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT2, "GL_LIGHT2", "True if light 2 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT3, "GL_LIGHT3", "True if light 3 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT4, "GL_LIGHT4", "True if light 4 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT5, "GL_LIGHT5", "True if light 5 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT6, "GL_LIGHT6", "True if light 6 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LIGHT7, "GL_LIGHT7", "True if light 7 enabled", "lighting/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_COLOR_INDEXES, "GL_COLOR_INDEXES", "ca, cd, and cs for color-index lighting", "lighting/e nable", "glGetMaterialfv()"), - new GLproperty(GL11.GL_POINT_SIZE, "GL_POINT_SIZE", "Point size", "point", "glGetFloatv()"), - new GLproperty(GL11.GL_POINT_SMOOTH, "GL_POINT_SMOOTH", "Point antialiasing on", "point/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LINE_WIDTH, "GL_LINE_WIDTH", "Line width", "line", "glGetFloatv()"), - new GLproperty(GL11.GL_LINE_SMOOTH, "GL_LINE_SMOOTH", "Line antialiasing on", "line/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LINE_STIPPLE_PATTERN, "GL_LINE_STIPPLE_PATTERN", "Line stipple", "line", "glGetIntegerv()"), - new GLproperty(GL11.GL_LINE_STIPPLE_REPEAT, "GL_LINE_STIPPLE_REPEAT", "Line stipple repeat", "line", "glGetIntegerv()"), - new GLproperty(GL11.GL_LINE_STIPPLE, "GL_LINE_STIPPLE", "Line stipple enable", "line/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_CULL_FACE, "GL_CULL_FACE", "Polygon culling enabled", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE", "Cull front-/back-facing polygons", "polygon", "glGetIntegerv()"), - new GLproperty(GL11.GL_FRONT_FACE, "GL_FRONT_FACE", "Polygon front-face CW/CCW indicator", "polygon", "glGetIntegerv()"), - new GLproperty(GL11.GL_POLYGON_SMOOTH, "GL_POLYGON_SMOOTH", "Polygon antialiasing on", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_POLYGON_MODE, "GL_POLYGON_MODE", "Polygon rasterization mode (front and back)", "polygon", "glGetIntegerv()"), - new GLproperty(GL11.GL_POLYGON_OFFSET_FACTOR, "GL_POLYGON_OFFSET_FACTOR", "Polygon offset factor", "polygon", "glGetFloatv()"), - new GLproperty(GL11.GL_POLYGON_OFFSET_POINT, "GL_POLYGON_OFFSET_POINT", "Polygon offset enable for GL_POINT mode rasterization", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_POLYGON_OFFSET_LINE, "GL_POLYGON_OFFSET_LINE", "Polygon offset enable for GL_LINE mode rasterization", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL", "Polygon offset enable for GL_FILL mode rasterization", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_POLYGON_STIPPLE, "GL_POLYGON_STIPPLE", "Polygon stipple enable", "polygon/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_1D, "GL_TEXTURE_1D", "True if 1-D texturing enabled ", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_2D, "GL_TEXTURE_2D", "True if 2-D texturing enabled ", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_BINDING_1D, "GL_TEXTURE_BINDING_1D", "Texture object bound to GL_TEXTURE_1D", "texture", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE_BINDING_2D, "GL_TEXTURE_BINDING_2D", "Texture object bound to GL_TEXTURE_2D", "texture", "glGetIntegerv()"), - new GLproperty(GL11.GL_TEXTURE, "GL_TEXTURE", "x-D texture image at level of detail i", "UNUSED", "glGetTexImage()"), - new GLproperty(GL11.GL_TEXTURE_WIDTH, "GL_TEXTURE_WIDTH", "x-D texture image i's width", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_HEIGHT, "GL_TEXTURE_HEIGHT", "x-D texture image i's height", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_BORDER, "GL_TEXTURE_BORDER", "x-D texture image i's border width", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_RED_SIZE, "GL_TEXTURE_RED_SIZE", "x-D texture image i's red resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_GREEN_SIZE, "GL_TEXTURE_GREEN_SIZE", "x-D texture image i's green resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_BLUE_SIZE, "GL_TEXTURE_BLUE_SIZE", "x-D texture image i's blue resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_ALPHA_SIZE, "GL_TEXTURE_ALPHA_SIZE", "x-D texture image i's alpha resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_LUMINANCE_SIZE, "GL_TEXTURE_LUMINANCE_SIZE", "x-D texture image i's luminance resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_INTENSITY_SIZE, "GL_TEXTURE_INTENSITY_SIZE", "x-D texture image i's intensity resolution", "UNUSED", "glGetTexLevelParameter*()"), - new GLproperty(GL11.GL_TEXTURE_BORDER_COLOR, "GL_TEXTURE_BORDER_COLOR", "Texture border color", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_MIN_FILTER, "GL_TEXTURE_MIN_FILTER", "Texture minification function", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_MAG_FILTER, "GL_TEXTURE_MAG_FILTER", "Texture magnification function", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_WRAP_S, "GL_TEXTURE_WRAP_S", "Texture wrap mode (x is S or T)", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_WRAP_T, "GL_TEXTURE_WRAP_T", "Texture wrap mode (x is S or T)", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_PRIORITY, "GL_TEXTURE_PRIORITY", "Texture object priority", "texture", "glGetTexParameter*()"), - new GLproperty(GL11.GL_TEXTURE_ENV_MODE, "GL_TEXTURE_ENV_MODE", "Texture application function", "texture", "glGetTexEnviv()"), - new GLproperty(GL11.GL_TEXTURE_ENV_COLOR, "GL_TEXTURE_ENV_COLOR", "Texture environment color", "texture", "glGetTexEnvfv()"), - new GLproperty(GL11.GL_TEXTURE_GEN_S, "GL_TEXTURE_GEN_S", "Texgen enabled (x is S, T, R, or Q)", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_GEN_T, "GL_TEXTURE_GEN_T", "Texgen enabled (x is S, T, R, or Q)", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_GEN_R, "GL_TEXTURE_GEN_R", "Texgen enabled (x is S, T, R, or Q)", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_TEXTURE_GEN_Q, "GL_TEXTURE_GEN_Q", "Texgen enabled (x is S, T, R, or Q)", "texture/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_EYE_PLANE, "GL_EYE_PLANE", "Texgen plane equation coefficients", "texture", "glGetTexGenfv()"), - new GLproperty(GL11.GL_OBJECT_PLANE, "GL_OBJECT_PLANE", "Texgen object linear coefficients", "texture", "glGetTexGenfv()"), - new GLproperty(GL11.GL_TEXTURE_GEN_MODE, "GL_TEXTURE_GEN_MODE", "Function used for texgen", "texture", "glGetTexGeniv()"), - new GLproperty(GL11.GL_SCISSOR_TEST, "GL_SCISSOR_TEST", "Scissoring enabled", "scissor/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_SCISSOR_BOX, "GL_SCISSOR_BOX", "Scissor box", "scissor", "glGetIntegerv()"), - new GLproperty(GL11.GL_ALPHA_TEST, "GL_ALPHA_TEST", "Alpha test enabled", "color-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_ALPHA_TEST_FUNC, "GL_ALPHA_TEST_FUNC", "Alpha test function", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_ALPHA_TEST_REF, "GL_ALPHA_TEST_REF", "Alpha test reference value", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_TEST, "GL_STENCIL_TEST", "Stenciling enabled", "stencil-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_STENCIL_FUNC, "GL_STENCIL_FUNC", "Stencil function", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_VALUE_MASK, "GL_STENCIL_VALUE_MASK", "Stencil mask", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_REF, "GL_STENCIL_REF", "Stencil reference value", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_FAIL, "GL_STENCIL_FAIL", "Stencil fail action", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_PASS_DEPTH_FAIL, "GL_STENCIL_PASS_DEPTH_FAIL", "Stencil depth buffer fail action", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_PASS_DEPTH_PASS, "GL_STENCIL_PASS_DEPTH_PASS", "Stencil depth buffer pass action", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_DEPTH_TEST, "GL_DEPTH_TEST", "Depth buffer enabled", "depth-buffer/ena ble", "glIsEnabled()"), - new GLproperty(GL11.GL_DEPTH_FUNC, "GL_DEPTH_FUNC", "Depth buffer test function", "depth-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_BLEND, "GL_BLEND", "Blending enabled", "color-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_BLEND_SRC, "GL_BLEND_SRC", "Blending source function", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_BLEND_DST, "GL_BLEND_DST", "Blending destination function", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_DITHER, "GL_DITHER", "Dithering enabled", "color-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_INDEX_LOGIC_OP, "GL_INDEX_LOGIC_OP", "Color index logical operation enabled", "color-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_COLOR_LOGIC_OP, "GL_COLOR_LOGIC_OP", "RGBA color logical operation enabled", "color-buffer/enable", "glIsEnabled()"), - new GLproperty(GL11.GL_LOGIC_OP_MODE, "GL_LOGIC_OP_MODE", "Logical operation function", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_DRAW_BUFFER, "GL_DRAW_BUFFER", "Buffers selected for drawing", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_INDEX_WRITEMASK, "GL_INDEX_WRITEMASK", "Color-index writemask", "color-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK", "Color write enables; R, G, B, or A", "color-buffer", "glGetBooleanv()"), - new GLproperty(GL11.GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK", "Depth buffer enabled for writing", "depth-buffer", "glGetBooleanv()"), - new GLproperty(GL11.GL_STENCIL_WRITEMASK, "GL_STENCIL_WRITEMASK", "Stencil-buffer writemask", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE", "Color-buffer clear value (RGBA mode)", "color-buffer", "glGetFloatv()"), - new GLproperty(GL11.GL_INDEX_CLEAR_VALUE, "GL_INDEX_CLEAR_VALUE", "Color-buffer clear value (color-index mode)", "color-buffer", "glGetFloatv()"), - new GLproperty(GL11.GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE", "Depth-buffer clear value", "depth-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_CLEAR_VALUE, "GL_STENCIL_CLEAR_VALUE", "Stencil-buffer clear value", "stencil-buffer", "glGetIntegerv()"), - new GLproperty(GL11.GL_ACCUM_CLEAR_VALUE, "GL_ACCUM_CLEAR_VALUE", "Accumulation-buffer clear value", "accum-buffer", "glGetFloatv()"), - new GLproperty(GL11.GL_UNPACK_SWAP_BYTES, "GL_UNPACK_SWAP_BYTES", "Value of GL_UNPACK_SWAP_BYTES", "pixel-store", "glGetBooleanv()"), - new GLproperty(GL11.GL_UNPACK_LSB_FIRST, "GL_UNPACK_LSB_FIRST", "Value of GL_UNPACK_LSB_FIRST", "pixel-store", "glGetBooleanv()"), - new GLproperty(GL11.GL_UNPACK_ROW_LENGTH, "GL_UNPACK_ROW_LENGTH", "Value of GL_UNPACK_ROW_LENGTH", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_UNPACK_SKIP_ROWS, "GL_UNPACK_SKIP_ROWS", "Value of GL_UNPACK_SKIP_ROWS", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_UNPACK_SKIP_PIXELS, "GL_UNPACK_SKIP_PIXELS", "Value of GL_UNPACK_SKIP_PIXELS", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT", "Value of GL_UNPACK_ALIGNMENT", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_PACK_SWAP_BYTES, "GL_PACK_SWAP_BYTES", "Value of GL_PACK_SWAP_BYTES", "pixel-store", "glGetBooleanv()"), - new GLproperty(GL11.GL_PACK_LSB_FIRST, "GL_PACK_LSB_FIRST", "Value of GL_PACK_LSB_FIRST", "pixel-store", "glGetBooleanv()"), - new GLproperty(GL11.GL_PACK_ROW_LENGTH, "GL_PACK_ROW_LENGTH", "Value of GL_PACK_ROW_LENGTH", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_PACK_SKIP_ROWS, "GL_PACK_SKIP_ROWS", "Value of GL_PACK_SKIP_ROWS", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_PACK_SKIP_PIXELS, "GL_PACK_SKIP_PIXELS", "Value of GL_PACK_SKIP_PIXELS", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT", "Value of GL_PACK_ALIGNMENT", "pixel-store", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAP_COLOR, "GL_MAP_COLOR", "True if colors are mapped", "pixel", "glGetBooleanv()"), - new GLproperty(GL11.GL_MAP_STENCIL, "GL_MAP_STENCIL", "True if stencil values are mapped", "pixel", "glGetBooleanv()"), - new GLproperty(GL11.GL_INDEX_SHIFT, "GL_INDEX_SHIFT", "Value of GL_INDEX_SHIFT", "pixel", "glGetIntegerv()"), - new GLproperty(GL11.GL_INDEX_OFFSET, "GL_INDEX_OFFSET", "Value of GL_INDEX_OFFSET", "pixel", "glGetIntegerv()"), - new GLproperty(GL11.GL_ZOOM_X, "GL_ZOOM_X", "x zoom factor", "pixel", "glGetFloatv()"), - new GLproperty(GL11.GL_ZOOM_Y, "GL_ZOOM_Y", "y zoom factor", "pixel", "glGetFloatv()"), - new GLproperty(GL11.GL_READ_BUFFER, "GL_READ_BUFFER", "Read source buffer", "pixel", "glGetIntegerv()"), - new GLproperty(GL11.GL_ORDER, "GL_ORDER", "1D map order", "capability", "glGetMapiv()"), - new GLproperty(GL11.GL_ORDER, "GL_ORDER", "2D map orders", "capability", "glGetMapiv()"), - new GLproperty(GL11.GL_COEFF, "GL_COEFF", "1D control points", "capability", "glGetMapfv()"), - new GLproperty(GL11.GL_COEFF, "GL_COEFF", "2D control points", "capability", "glGetMapfv()"), - new GLproperty(GL11.GL_DOMAIN, "GL_DOMAIN", "1D domain endpoints", "capability", "glGetMapfv()"), - new GLproperty(GL11.GL_DOMAIN, "GL_DOMAIN", "2D domain endpoints", "capability", "glGetMapfv()"), - new GLproperty(GL11.GL_MAP1_GRID_DOMAIN, "GL_MAP1_GRID_DOMAIN", "1D grid endpoints", "eval", "glGetFloatv()"), - new GLproperty(GL11.GL_MAP2_GRID_DOMAIN, "GL_MAP2_GRID_DOMAIN", "2D grid endpoints", "eval", "glGetFloatv()"), - new GLproperty(GL11.GL_MAP1_GRID_SEGMENTS, "GL_MAP1_GRID_SEGMENTS", "1D grid divisions", "eval", "glGetFloatv()"), - new GLproperty(GL11.GL_MAP2_GRID_SEGMENTS, "GL_MAP2_GRID_SEGMENTS", "2D grid divisions", "eval", "glGetFloatv()"), - new GLproperty(GL11.GL_AUTO_NORMAL, "GL_AUTO_NORMAL", "True if automatic normal generation enabled", "eval", "glIsEnabled()"), - new GLproperty(GL11.GL_PERSPECTIVE_CORRECTION_HINT, "GL_PERSPECTIVE_CORRECTION_HINT", "Perspective correction hint", "hint", "glGetIntegerv()"), - new GLproperty(GL11.GL_POINT_SMOOTH_HINT, "GL_POINT_SMOOTH_HINT", "Point smooth hint", "hint", "glGetIntegerv()"), - new GLproperty(GL11.GL_LINE_SMOOTH_HINT, "GL_LINE_SMOOTH_HINT", "Line smooth hint", "hint", "glGetIntegerv()"), - new GLproperty(GL11.GL_POLYGON_SMOOTH_HINT, "GL_POLYGON_SMOOTH_HINT", "Polygon smooth hint", "hint", "glGetIntegerv()"), - new GLproperty(GL11.GL_FOG_HINT, "GL_FOG_HINT", "Fog hint", "hint", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_LIGHTS, "GL_MAX_LIGHTS", "Maximum number of lights", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_CLIP_PLANES, "GL_MAX_CLIP_PLANES", "Maximum number of user clipping planes", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_MODELVIEW_STACK_DEPTH, "GL_MAX_MODELVIEW_STACK_DEPTH", "Maximum modelview-matrix stack depth", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_PROJECTION_STACK_DEPTH, "GL_MAX_PROJECTION_STACK_DEPTH", "Maximum projection-matrix stack depth", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_TEXTURE_STACK_DEPTH, "GL_MAX_TEXTURE_STACK_DEPTH", "Maximum depth of texture matrix stack", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_SUBPIXEL_BITS, "GL_SUBPIXEL_BITS", "Number of bits of subpixel precision in x and y", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_TEXTURE_SIZE, "GL_MAX_TEXTURE_SIZE", "See discussion in Texture Proxy in Chapter 9", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_PIXEL_MAP_TABLE, "GL_MAX_PIXEL_MAP_TABLE", "Maximum size of a glPixelMap() translation table", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_NAME_STACK_DEPTH, "GL_MAX_NAME_STACK_DEPTH", "Maximum selection-name stack depth", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_LIST_NESTING, "GL_MAX_LIST_NESTING", "Maximum display-list call nesting", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_EVAL_ORDER, "GL_MAX_EVAL_ORDER", "Maximum evaluator polynomial order", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_VIEWPORT_DIMS, "GL_MAX_VIEWPORT_DIMS", "Maximum viewport dimensions", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_ATTRIB_STACK_DEPTH, "GL_MAX_ATTRIB_STACK_DEPTH", "Maximum depth of the attribute stack", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_MAX_CLIENT_ATTRIB_STACK_DEPTH, "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH", "Maximum depth of the client attribute stack", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_AUX_BUFFERS, "GL_AUX_BUFFERS", "Number of auxiliary buffers", "capability", "glGetBooleanv()"), - new GLproperty(GL11.GL_RGBA_MODE, "GL_RGBA_MODE", "True if color buffers store RGBA", "capability", "glGetBooleanv()"), - new GLproperty(GL11.GL_INDEX_MODE, "GL_INDEX_MODE", "True if color buffers store indices", "capability", "glGetBooleanv()"), - new GLproperty(GL11.GL_DOUBLEBUFFER, "GL_DOUBLEBUFFER", "True if front and back buffers exist", "capability", "glGetBooleanv()"), - new GLproperty(GL11.GL_STEREO, "GL_STEREO", "True if left and right buffers exist", "capability", "glGetBooleanv()"), - new GLproperty(GL11.GL_POINT_SIZE_RANGE, "GL_POINT_SIZE_RANGE", "Range (low to high) of antialiased point sizes", "capability", "glGetFloatv()"), - new GLproperty(GL11.GL_POINT_SIZE_GRANULARITY, "GL_POINT_SIZE_GRANULARITY", "Antialiased point-size granularity", "capability", "glGetFloatv()"), - new GLproperty(GL11.GL_LINE_WIDTH_RANGE, "GL_LINE_WIDTH_RANGE", "Range (low to high) of antialiased line widths", "capability", "glGetFloatv()"), - new GLproperty(GL11.GL_LINE_WIDTH_GRANULARITY, "GL_LINE_WIDTH_GRANULARITY", "Antialiased line-width granularity", "capability", "glGetFloatv()"), - new GLproperty(GL11.GL_RED_BITS, "GL_RED_BITS", "Number of bits per red component in color buffers", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_GREEN_BITS, "GL_GREEN_BITS", "Number of bits per green component in color buffers", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_BLUE_BITS, "GL_BLUE_BITS", "Number of bits per blue component in color buffers", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_ALPHA_BITS, "GL_ALPHA_BITS", "Number of bits per alpha component in color buffers", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_INDEX_BITS, "GL_INDEX_BITS", "Number of bits per index in color buffers", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_DEPTH_BITS, "GL_DEPTH_BITS", "Number of depth-buffer bitplanes", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_STENCIL_BITS, "GL_STENCIL_BITS", "Number of stencil bitplanes", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_ACCUM_RED_BITS, "GL_ACCUM_RED_BITS", "Number of bits per red component in the accumulation buffer", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_ACCUM_GREEN_BITS, "GL_ACCUM_GREEN_BITS", "Number of bits per green component in the accumulation buffer", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_ACCUM_BLUE_BITS, "GL_ACCUM_BLUE_BITS", "Number of bits per blue component in the accumulation buffer", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_ACCUM_ALPHA_BITS, "GL_ACCUM_ALPHA_BITS", "Number of bits per alpha component in the accumulation buffer", "capability", "glGetIntegerv()"), - new GLproperty(GL11.GL_LIST_BASE, "GL_LIST_BASE", "Setting of glListBase()", "list", "glGetIntegerv()"), - new GLproperty(GL11.GL_LIST_INDEX, "GL_LIST_INDEX", "Number of display list under construction; 0 if none", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_LIST_MODE, "GL_LIST_MODE", "Mode of display list under construction; undefined if none", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_ATTRIB_STACK_DEPTH, "GL_ATTRIB_STACK_DEPTH", "Attribute stack pointer", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_CLIENT_ATTRIB_STACK_DEPTH, "GL_CLIENT_ATTRIB_STACK_DEPTH", "Client attribute stack pointer", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_NAME_STACK_DEPTH, "GL_NAME_STACK_DEPTH", "Name stack depth", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_RENDER_MODE, "GL_RENDER_MODE", "glRenderMode() setting", "current", "glGetIntegerv()"), - new GLproperty(GL11.GL_SELECTION_BUFFER_POINTER, "GL_SELECTION_BUFFER_POINTER", "Pointer to selection buffer", "select", "glGetPointerv()"), - new GLproperty(GL11.GL_SELECTION_BUFFER_SIZE, "GL_SELECTION_BUFFER_SIZE", "Size of selection buffer", "select", "glGetIntegerv()"), - new GLproperty(GL11.GL_FEEDBACK_BUFFER_POINTER, "GL_FEEDBACK_BUFFER_POINTER", "Pointer to feedback buffer", "feedback", "glGetPointerv()"), - new GLproperty(GL11.GL_FEEDBACK_BUFFER_SIZE, "GL_FEEDBACK_BUFFER_SIZE", "Size of feedback buffer", "feedback", "glGetIntegerv()"), - new GLproperty(GL11.GL_FEEDBACK_BUFFER_TYPE, "GL_FEEDBACK_BUFFER_TYPE", "Type of feedback buffer", "feedback", "glGetIntegerv()"), - }; + public static void dumpOpenGLstate() {} - public static void dumpOpenGLstate() - { - } + public static void dumpAllIsEnabled() // Call This + { + for (int i = 0; i < instance.propertyList.length; ++i) { - public static void dumpAllIsEnabled() //Call This - { - for (int i = 0; i < instance.propertyList.length; ++i) + if (instance.propertyList[i].fetchCommand == "glIsEnabled()") { - { - if (instance.propertyList[i].fetchCommand == "glIsEnabled()") + System.out.print(instance.propertyList[i].name + ":"); + System.out.print(GL11.glIsEnabled(instance.propertyList[i].gLconstant)); + System.out.println(" (" + instance.propertyList[i].description + ")"); + } + } + } - { - System.out.print(instance.propertyList[i].name + ":"); - System.out.print(GL11.glIsEnabled(instance.propertyList[i].gLconstant)); - System.out.println(" (" + instance.propertyList[i].description + ")"); - } - } - } + public static void dumpAllType(final String type) { - public static void dumpAllType(final String type) + for (int i = 0; i < instance.propertyList.length; ++i) { - { - for (int i = 0; i < instance.propertyList.length; ++i) + if (instance.propertyList[i].category.equals(type)) { - { - if (instance.propertyList[i].category.equals(type)) + System.out.print(instance.propertyList[i].name + ":"); + System.out.println(getPropertyAsString(i)); + System.out.println(" (" + instance.propertyList[i].description + ")"); + } + } + } - { - System.out.print(instance.propertyList[i].name + ":"); - System.out.println(getPropertyAsString(i)); - System.out.println(" (" + instance.propertyList[i].description + ")"); - } - } - } + private static String getPropertyAsString(final int propertyListIndex) { + final int gLconstant = instance.propertyList[propertyListIndex].gLconstant; + if (instance.propertyList[propertyListIndex].fetchCommand.equals("glIsEnabled()")) { + return "" + GL11.glIsEnabled(gLconstant); + } - private static String getPropertyAsString(final int propertyListIndex) - { - final int gLconstant = instance.propertyList[propertyListIndex].gLconstant; - if (instance.propertyList[propertyListIndex].fetchCommand.equals("glIsEnabled()")) { - return "" + GL11.glIsEnabled(gLconstant); - } + if (instance.propertyList[propertyListIndex].fetchCommand == "glGetBooleanv()") { - if (instance.propertyList[propertyListIndex].fetchCommand == "glGetBooleanv()") + final ByteBuffer params = BufferUtils.createByteBuffer(16); - { - final ByteBuffer params = BufferUtils.createByteBuffer(16); + GL11.glGetBoolean(gLconstant, params); + String out = ""; + for (int i = 0; i < params.capacity(); ++i) { - GL11.glGetBoolean(gLconstant, params); - String out = ""; - for (int i = 0; i < params.capacity(); ++i) + out += (i == 0 ? "" : ", ") + params.get(i); + } + return out; + } - { - out += (i == 0 ? "" : ", ") + params.get(i); - } - return out; - } - - return ""; - } + return ""; + } } - diff --git a/src/main/java/gtPlusPlus/core/util/math/MathUtils.java b/src/main/java/gtPlusPlus/core/util/math/MathUtils.java index 4ff929c643..54a5ef8668 100644 --- a/src/main/java/gtPlusPlus/core/util/math/MathUtils.java +++ b/src/main/java/gtPlusPlus/core/util/math/MathUtils.java @@ -1,811 +1,772 @@ package gtPlusPlus.core.util.math; -import java.text.NumberFormat; -import java.util.Map; -import java.util.Random; - import gregtech.api.enums.GT_Values; - import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.Utils; +import java.text.NumberFormat; +import java.util.Map; +import java.util.Random; 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 - * Integer.MAX_VALUE - 1. - * - * @param min Minimim value - * @param max Maximim value. Must be greater than min. - * @return Integer between min and max, inclusive. - * @see java.util.Random#nextInt(int) - */ - public static int randInt(final int min, final int max) { - // nextInt is normally exclusive of the top value, - // so add 1 to make it inclusive - return rand.nextInt((max - min) + 1) + min; - } - - public static double getChanceOfXOverYRuns(final double x, final double y){ - return (1-Math.pow((1-x), y)); - } - - - /** - * Returns a psuedo-random number between min and max, inclusive. - * The difference between min and max can be at most - * Long.MAX_VALUE - 1. - * - * @param min Minimim value - * @param max Maximim value. Must be greater than min. - * @return Long between min and max, inclusive. - * @see java.util.Random#nextLong(long) - */ - public static long randLong(final long min, final long max) { - // nextInt is normally exclusive of the top value, - // so add 1 to make it inclusive - return MathUtils.nextLong(rand,(max - min) + 1) + min; - } - private static long nextLong(final Random rng, final long n) { - // error checking and 2^x checking removed for simplicity. - long bits, val; - do { - bits = (rng.nextLong() << 1) >>> 1; - val = bits % n; - } while (((bits-val)+(n-1)) < 0L); - return val; - } - - - /** - * Returns a psuedo-random number between min and max, inclusive. - * The difference between min and max can be at most - * Double.MAX_VALUE - 1. - * - * @param min Minimim value - * @param max Maximim value. Must be greater than min. - * @return Double between min and max, inclusive. - * @see java.util.Random#nextDouble(double) - */ - public static double randDouble(final double min, final double max) { - // nextInt is normally exclusive of the top value, - // so add 1 to make it inclusive - return MathUtils.nextDouble(rand,(max - min) + 1) + min; - } - - private static double nextDouble(final Random rng, final double n) { - // error checking and 2^x checking removed for simplicity. - double bits, val; - do { - bits = (rng.nextLong() << 1) >>> 1; - val = bits % n; - } while (((bits-val)+(n-1)) < 0L); - return val; - } - - /** - * Returns a psuedo-random number between min and max, inclusive. - * The difference between min and max can be at most - * Float.MAX_VALUE - 1. - * - * @param min Minimim value - * @param max Maximim value. Must be greater than min. - * @return Float between min and max, inclusive. - * @see java.util.Random#nextFloat(float) - */ - public static float randFloat(final float min, final float max) { - // nextInt is normally exclusive of the top value, - // so add 1 to make it inclusive - return MathUtils.nextFloat(rand,(max - min) + 1) + min; - } - - private static float nextFloat(final Random rng, final float n) { - // error checking and 2^x checking removed for simplicity. - float bits, val; - do { - bits = (rng.nextLong() << 1) >>> 1; - val = bits % n; - } while (((bits-val)+(n-1)) < 0L); - return val; - } - - - /** - * Returns a percentage. - * The returned number is the % of X in Y. - * Supports Doubles. - * - * @param current Current value. - * @param max Maximim value. Must be greater than min. - * @return double between min and max, inclusive. - */ - public static double findPercentage(final double current, final double max){ - return Math.round(((current / max) * 100) * 100.00) / 100.00; - } - - /** - * Returns a percentage. - * The returned number is the % of X in Y. - * Supports Floats. - * - * @param current Current value. - * @param max Maximim value. Must be greater than min. - * @return double between min and max, inclusive. - */ - public static float findPercentage(final float current, final float max){ - return (float) (Math.round(((current / max) * 100) * 100.00) / 100.00); - } - - public static int findPercentageOfInt(long input, float percentage){ - return (int)(input*(percentage/100.0f)); - } - - - //Smooth Rounding Function - /** - * Returns a double. - * The returned number is d rounded to the nearest d.01. - * Supports Doubles. - * - * @param current Current value. - * @return double Rounded value. - */ - public static double decimalRounding(final double d) { - return Math.round(d * 2) / 2.0; - } - - - //Smooth Rounding Function (Nearest 5) - /** - * Returns a double. - * The returned number is d rounded to the nearest d.5. - * Supports Doubles. - * - * @param current Current value. - * @return double Rounded value. - */ - public static double decimalRoundingToWholes(final double d) { - return 5*(Math.round(d/5)); - } - - //Smooth Rounding Function - /** - * Returns a integer. - * The returned number is d rounded to the nearest flat integer. - * Supports Doubles as input. - * - * @param current Current value. - * @return integer Rounded value. - */ - public static int roundToClosestInt(final double d) { - return (int) (Math.round(d * 2) / 2.0); - } - - public static int roundToClosestMultiple(final double number, final int multiple) { - int result = multiple; - if ((number % multiple) == 0) { - return (int) number; - } - // If not already multiple of given number - if ((number % multiple) != 0) { - final int division = (int) ((number / multiple) + 1); - result = division * multiple; - } - return result; - } - - - //Smooth Rounding Function - /** - * Returns a long. - * The returned number is d rounded to the nearest flat long. - * Supports Doubles as input. - * - * @param current Current value. - * @return long Rounded value. - */ - public static long roundToClosestLong(final double d) { - return (long) (Math.round(d * 2) / 2.0); - } - - - /** - * Returns a boolean. - * The returned boolean is wether or not X evenly fits in to Y. - * Supports ints. - * - * @param x Value A. - * @param y Value B. Must be greater than min. - * @return boolean Whether or not it divides evenly. - */ - public static boolean divideXintoY(final int x, final int y){ - if ((x % y) == 0) - { - return true; - } - return false; - } - - - /** - * Returns a boolean. - * The returned boolean is based on the odd/eveness of the input. - * Supports ints. - * - * @param x Value A. - * @return boolean Whether or not it divides evenly. - */ - public static boolean isNumberEven(final long x){ - if ((x % 2) == 0) - { - return true; - } - return false; - } - - - - /** - * Returns an int. - * The returned number is the value on i + 273.15F. - * Supports ints. - * - * @param i Temp in Celcius. - * @return int The celcius temp returned as Kelvin, rounded to the readest whole. - */ - public static float celsiusToKelvin(final int i){ - final double f = i + 273.15F; - return (int)decimalRoundingToWholes(f); - } - - - /** - * Returns a hexInteger. - * The returned number is the hex value of the input. - * Supports ints. - * - * @param input Current value. - * @return hexInteger. - */ - public static int getHexNumberFromInt(final int input){ - final String result = Integer.toHexString(input); - final int resultINT = Integer.getInteger(result); - return resultINT; - } - - - /** - * Returns a hexInteger. - * The returned value is between min and max. - * Supports ints. - * - * @param min Minimum value. - * @param max Maximium value. Must be greater than min. - * @return hexInteger between min and max, inclusive. - */ - public static int generateRandomHexValue(final int min, final int max){ - return getHexNumberFromInt(randInt(min, max)); - } - - - /** - * Returns a random hex value. - * The returned value is between 000000-ffffff. - * - * @return hexInteger between min and max, inclusive. - */ - public static int generateSingularRandomHexValue(){ - String temp; - final int randomInt = randInt(1, 5); - final Map colours = Utils.hexColourGeneratorRandom(5); - - if ((colours.get(randomInt) != null) && (colours.size() > 0)){ - temp = colours.get(randomInt); - } - else { - temp = "0F0F0F"; - } - - Logger.WARNING("Operating with "+temp); - temp = Utils.appenedHexNotationToString(String.valueOf(temp)); - Logger.WARNING("Made "+temp+" - Hopefully it's not a mess."); - Logger.WARNING("It will decode into "+Integer.decode(temp)+"."); - return Integer.decode(temp); - } - - public static long[] simplifyNumbersToSmallestForm(final long[] inputArray){ - final long GCD = gcd(inputArray); - final long[] outputArray = new long[inputArray.length]; - for (int i=0;i 0) { - return outputArray; - } - return new long[] {}; - } - - private static long gcd(long a, long b){ - while (b > 0) - { - final long temp = b; - b = a % b; // % is remainder - a = temp; - } - return a; - } - - private static long gcd(final long[] input){ - long result = input[0]; - for(int i = 1; i < input.length; i++) { - result = gcd(result, input[i]); - } - return result; - } - - final public static int getRgbAsHex(final short[] RGBA){ - final int returnValue = Utils.rgbtoHexValue(RGBA[0], RGBA[1], RGBA[2]); - return (returnValue == 0) ? 0 : returnValue; - } - - - public final static int returnLargestNumber(final int a, final int b){ - if (a > b){ - return a; - } - else if (a == b){ - return a; - } - else { - return b; - } - } - - public static byte safeByte(long number){ - return number>Byte.MAX_VALUE ? Byte.MAX_VALUE :(byte)number; - } - - public static short safeShort(long number){ - return number>Short.MAX_VALUE ? Short.MAX_VALUE :(short)number; - } - - public static int safeInt(long number, int margin){ - return number>Integer.MAX_VALUE-margin ? Integer.MAX_VALUE-margin :(int)number; - } - - public static int safeInt(long number){ - return number>GT_Values.V[GT_Values.V.length-1] ? safeInt(GT_Values.V[GT_Values.V.length-1],1) : number aDataSet) { - byte[] aNewSet = new byte[aDataSet.size()]; - for (int u=0;u aDataSet) { - short[] aNewSet = new short[aDataSet.size()]; - for (int u=0;u aDataSet) { - int[] aNewSet = new int[aDataSet.size()]; - for (int u=0;u aDataSet) { - float[] aNewSet = new float[aDataSet.size()]; - for (int u=0;u aDataSet) { - long[] aNewSet = new long[aDataSet.size()]; - for (int u=0;u aDataSet) { - double[] aNewSet = new double[aDataSet.size()]; - for (int u=0;u 0) { - return -aPositive; - } - else if (aPositive < 0) { - return +aPositive; - } - else { - return 0; - } - } - - public static V safeCast(Object aNumberType) { - long a1; - double a2; - a1 = Long.parseLong(aNumberType.toString()); - a2 = Double.parseDouble(aNumberType.toString()); - - if ((aNumberType.getClass() == byte.class) || (aNumberType instanceof Byte)){ - if (a1 >= Byte.MIN_VALUE && a1 <= Byte.MAX_VALUE) { - String s = ""+a1; - Byte s1 = Byte.valueOf(s); - return (V) s1; - } - } - else if ((aNumberType.getClass() == short.class) || (aNumberType instanceof Short)){ - if (a1 >= Short.MIN_VALUE && a1 <= Short.MAX_VALUE) { - String s = ""+a1; - Short s1 = Short.valueOf(s); - return (V) s1; - - } - } - else if ((aNumberType.getClass() == int.class) || (aNumberType instanceof Integer)){ - if (a1 >= Integer.MIN_VALUE && a1 <= Integer.MAX_VALUE) { - String s = ""+a1; - Integer s1 = Integer.valueOf(s); - return (V) s1; - - } - } - else if ((aNumberType.getClass() == long.class) || (aNumberType instanceof Long)){ - if (a1 >= Long.MIN_VALUE && a1 <= Long.MAX_VALUE) { - String s = ""+a1; - Long s1 = Long.valueOf(s); - return (V) s1; - } - } - else if ((aNumberType.getClass() == float.class) || (aNumberType instanceof Float)){ - if (a2 >= Float.MIN_VALUE && a2 <= Float.MAX_VALUE) { - String s = ""+a1; - Float s1 = Float.valueOf(s); - return (V) s1; - - } - } - else if ((aNumberType.getClass() == double.class) || (aNumberType instanceof Double)){ - if (a2 >= Double.MIN_VALUE && a2 <= Double.MAX_VALUE) { - String s = ""+a1; - Double s1 = Double.valueOf(s); - return (V) s1; - - } - } - - Integer o = 0; - return (V) o; - - } - - public static byte getSafeByte(Byte b) { - Byte a = safeCast(b); - return a.byteValue(); - } - - public static short getSafeShort(Short b) { - Short a = safeCast(b); - return a.shortValue(); - } - - public static int getSafeInt(Integer b) { - Integer a = safeCast(b); - return a.intValue(); - } - - public static long getSafeLong(Long b) { - Long a = safeCast(b); - return a.longValue(); - } - - public static float getSafeFloat(Float b) { - Float a = safeCast(b); - return a.floatValue(); - } - - public static double getSafeDouble(Double b) { - Double a = safeCast(b); - return a.doubleValue(); - } - - - public static long safeCast_IntToLong(int o) { - long i = o; - return i; - } - - public static int safeCast_LongToInt(long o) { - if (o > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } - else { - int i = (int) o; - return i; - } - } - - public static short safeCast_IntToShort(int o) { - if (o > Short.MAX_VALUE) { - return Short.MAX_VALUE; - } - else { - short i = (short) o; - return i; - } - } - - public static int safeCast_ShortToInt(short o) { - int i = (int) o; - return i; - } - - public static byte safeCast_ShortToByte(short o) { - if (o > Byte.MAX_VALUE) { - return Byte.MAX_VALUE; - } - else { - byte i = (byte) o; - return i; - } - } - - public static short safeCast_ByteToshort(byte o) { - short i = (short) o; - return i; - } - - /** - * Balances a number within a range. - * @param aInput - The number to balance - * @param aMin - The minimum bounds - * @param aMax - The maximum bounds - * @return - An Integer which will be between the bounds, or a boundary value. - */ - public static int balance(int aInput, int aMin, int aMax) { - return Math.max(Math.min(aInput, aMax), aMin); - } - - /** - * Balances a number within a range. - * @param aInput - The number to balance - * @param aMin - The minimum bounds - * @param aMax - The maximum bounds - * @return - A Number which will be between the bounds, or a boundary value. - */ - public static Number balance(Number aInput, Number aMin, Number aMax) { - return max(min(aInput, aMax), aMin); - } - - /** - * Balances a number within a range. - * @param aInput - The number to balance - * @param aMin - The minimum bounds - * @param aMax - The maximum bounds - * @return - An Integer which will be between the bounds, or a boundary value. - */ - public static int balanceInt(Number aInput, Number aMin, Number aMax) { - return MathUtils.safeCast_LongToInt((long) balance(max(min(aInput, aMax), aMin), Integer.MIN_VALUE, Integer.MAX_VALUE)); - } - - /** - * Balances a number within a range. - * @param aInput - The number to balance - * @param aMin - The minimum bounds - * @param aMax - The maximum bounds - * @return - A Long which will be between the bounds, or a boundary value. - */ - public static long balanceLong(Number aInput, Number aMin, Number aMax) { - return (long) balance(max(min(aInput, aMax), aMin), Long.MIN_VALUE, Long.MAX_VALUE); - } - - public static int getValueWithinRange(int i, int aMin, int aMax) { - int aAmount = Math.max(Math.min(i, aMax), aMin); - return aAmount; - } - - public static Pair splitLongIntoIntegers(long aLong){ - int aIntMaxInLong = (int) Math.min(Integer.MAX_VALUE, Math.floor(aLong/Integer.MAX_VALUE)); - int aRemainder = (int) (aLong - (aIntMaxInLong * Integer.MAX_VALUE)); - return new Pair(aIntMaxInLong, aRemainder); - } - - - - - /** - * Returns the smaller of two {@code Number}s. That is, - * the result the argument closer to the value of - * {@link Long#MIN_VALUE}. If the arguments have the same - * value, the result is that same value. - * - * @param a an argument. - * @param b another argument. - * @return the smaller of {@code a} and {@code b}. - */ - public static Number min(Number a, Number b) { - return (a.longValue() <= b.longValue()) ? a : b; - } - - /** - * Returns the greater of two {@code Number}s. That is, the - * result is the argument closer to the value of - * {@link Long#MAX_VALUE}. If the arguments have the same value, - * the result is that same value. - * - * @param a an argument. - * @param b another argument. - * @return the larger of {@code a} and {@code b}. - */ - public static Number max(Number a, Number b) { - return (a.longValue() >= b.longValue()) ? a : b; - } - - public static long combineTwoIntegersToLong(int a, int b) { - long val = (((long) a) << 32) | (b & 0xffffffffL); - return val; - } - - public static int[] splitLongIntoTwoIntegers(long aNum) { - int a = (int) (aNum >> 32); - int b = (int) aNum; - return new int[] {a, b}; - } - - public static String formatNumbers(long aNumber) { - return sNumberFormat.format(aNumber); - } - - public static String formatNumbers(double aNumber) { - return sNumberFormat.format(aNumber); - } - - + static final 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 + * Integer.MAX_VALUE - 1. + * + * @param min Minimim value + * @param max Maximim value. Must be greater than min. + * @return Integer between min and max, inclusive. + * @see java.util.Random#nextInt(int) + */ + public static int randInt(final int min, final int max) { + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + return rand.nextInt((max - min) + 1) + min; + } + + public static double getChanceOfXOverYRuns(final double x, final double y) { + return (1 - Math.pow((1 - x), y)); + } + + /** + * Returns a psuedo-random number between min and max, inclusive. + * The difference between min and max can be at most + * Long.MAX_VALUE - 1. + * + * @param min Minimim value + * @param max Maximim value. Must be greater than min. + * @return Long between min and max, inclusive. + * @see java.util.Random#nextLong(long) + */ + public static long randLong(final long min, final long max) { + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + return MathUtils.nextLong(rand, (max - min) + 1) + min; + } + + private static long nextLong(final Random rng, final long n) { + // error checking and 2^x checking removed for simplicity. + long bits, val; + do { + bits = (rng.nextLong() << 1) >>> 1; + val = bits % n; + } while (((bits - val) + (n - 1)) < 0L); + return val; + } + + /** + * Returns a psuedo-random number between min and max, inclusive. + * The difference between min and max can be at most + * Double.MAX_VALUE - 1. + * + * @param min Minimim value + * @param max Maximim value. Must be greater than min. + * @return Double between min and max, inclusive. + * @see java.util.Random#nextDouble(double) + */ + public static double randDouble(final double min, final double max) { + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + return MathUtils.nextDouble(rand, (max - min) + 1) + min; + } + + private static double nextDouble(final Random rng, final double n) { + // error checking and 2^x checking removed for simplicity. + double bits, val; + do { + bits = (rng.nextLong() << 1) >>> 1; + val = bits % n; + } while (((bits - val) + (n - 1)) < 0L); + return val; + } + + /** + * Returns a psuedo-random number between min and max, inclusive. + * The difference between min and max can be at most + * Float.MAX_VALUE - 1. + * + * @param min Minimim value + * @param max Maximim value. Must be greater than min. + * @return Float between min and max, inclusive. + * @see java.util.Random#nextFloat(float) + */ + public static float randFloat(final float min, final float max) { + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + return MathUtils.nextFloat(rand, (max - min) + 1) + min; + } + + private static float nextFloat(final Random rng, final float n) { + // error checking and 2^x checking removed for simplicity. + float bits, val; + do { + bits = (rng.nextLong() << 1) >>> 1; + val = bits % n; + } while (((bits - val) + (n - 1)) < 0L); + return val; + } + + /** + * Returns a percentage. + * The returned number is the % of X in Y. + * Supports Doubles. + * + * @param current Current value. + * @param max Maximim value. Must be greater than min. + * @return double between min and max, inclusive. + */ + public static double findPercentage(final double current, final double max) { + return Math.round(((current / max) * 100) * 100.00) / 100.00; + } + + /** + * Returns a percentage. + * The returned number is the % of X in Y. + * Supports Floats. + * + * @param current Current value. + * @param max Maximim value. Must be greater than min. + * @return double between min and max, inclusive. + */ + public static float findPercentage(final float current, final float max) { + return (float) (Math.round(((current / max) * 100) * 100.00) / 100.00); + } + + public static int findPercentageOfInt(long input, float percentage) { + return (int) (input * (percentage / 100.0f)); + } + + // Smooth Rounding Function + /** + * Returns a double. + * The returned number is d rounded to the nearest d.01. + * Supports Doubles. + * + * @param current Current value. + * @return double Rounded value. + */ + public static double decimalRounding(final double d) { + return Math.round(d * 2) / 2.0; + } + + // Smooth Rounding Function (Nearest 5) + /** + * Returns a double. + * The returned number is d rounded to the nearest d.5. + * Supports Doubles. + * + * @param current Current value. + * @return double Rounded value. + */ + public static double decimalRoundingToWholes(final double d) { + return 5 * (Math.round(d / 5)); + } + + // Smooth Rounding Function + /** + * Returns a integer. + * The returned number is d rounded to the nearest flat integer. + * Supports Doubles as input. + * + * @param current Current value. + * @return integer Rounded value. + */ + public static int roundToClosestInt(final double d) { + return (int) (Math.round(d * 2) / 2.0); + } + + public static int roundToClosestMultiple(final double number, final int multiple) { + int result = multiple; + if ((number % multiple) == 0) { + return (int) number; + } + // If not already multiple of given number + if ((number % multiple) != 0) { + final int division = (int) ((number / multiple) + 1); + result = division * multiple; + } + return result; + } + + // Smooth Rounding Function + /** + * Returns a long. + * The returned number is d rounded to the nearest flat long. + * Supports Doubles as input. + * + * @param current Current value. + * @return long Rounded value. + */ + public static long roundToClosestLong(final double d) { + return (long) (Math.round(d * 2) / 2.0); + } + + /** + * Returns a boolean. + * The returned boolean is wether or not X evenly fits in to Y. + * Supports ints. + * + * @param x Value A. + * @param y Value B. Must be greater than min. + * @return boolean Whether or not it divides evenly. + */ + public static boolean divideXintoY(final int x, final int y) { + if ((x % y) == 0) { + return true; + } + return false; + } + + /** + * Returns a boolean. + * The returned boolean is based on the odd/eveness of the input. + * Supports ints. + * + * @param x Value A. + * @return boolean Whether or not it divides evenly. + */ + public static boolean isNumberEven(final long x) { + if ((x % 2) == 0) { + return true; + } + return false; + } + + /** + * Returns an int. + * The returned number is the value on i + 273.15F. + * Supports ints. + * + * @param i Temp in Celcius. + * @return int The celcius temp returned as Kelvin, rounded to the readest whole. + */ + public static float celsiusToKelvin(final int i) { + final double f = i + 273.15F; + return (int) decimalRoundingToWholes(f); + } + + /** + * Returns a hexInteger. + * The returned number is the hex value of the input. + * Supports ints. + * + * @param input Current value. + * @return hexInteger. + */ + public static int getHexNumberFromInt(final int input) { + final String result = Integer.toHexString(input); + final int resultINT = Integer.getInteger(result); + return resultINT; + } + + /** + * Returns a hexInteger. + * The returned value is between min and max. + * Supports ints. + * + * @param min Minimum value. + * @param max Maximium value. Must be greater than min. + * @return hexInteger between min and max, inclusive. + */ + public static int generateRandomHexValue(final int min, final int max) { + return getHexNumberFromInt(randInt(min, max)); + } + + /** + * Returns a random hex value. + * The returned value is between 000000-ffffff. + * + * @return hexInteger between min and max, inclusive. + */ + public static int generateSingularRandomHexValue() { + String temp; + final int randomInt = randInt(1, 5); + final Map colours = Utils.hexColourGeneratorRandom(5); + + if ((colours.get(randomInt) != null) && (colours.size() > 0)) { + temp = colours.get(randomInt); + } else { + temp = "0F0F0F"; + } + + Logger.WARNING("Operating with " + temp); + temp = Utils.appenedHexNotationToString(String.valueOf(temp)); + Logger.WARNING("Made " + temp + " - Hopefully it's not a mess."); + Logger.WARNING("It will decode into " + Integer.decode(temp) + "."); + return Integer.decode(temp); + } + + public static long[] simplifyNumbersToSmallestForm(final long[] inputArray) { + final long GCD = gcd(inputArray); + final long[] outputArray = new long[inputArray.length]; + for (int i = 0; i < inputArray.length; i++) { + if (GCD != 0) { + outputArray[i] = (inputArray[i] / GCD); + } else { + outputArray[i] = inputArray[i]; + } + } + if (outputArray.length > 0) { + return outputArray; + } + return new long[] {}; + } + + private static long gcd(long a, long b) { + while (b > 0) { + final long temp = b; + b = a % b; // % is remainder + a = temp; + } + return a; + } + + private static long gcd(final long[] input) { + long result = input[0]; + for (int i = 1; i < input.length; i++) { + result = gcd(result, input[i]); + } + return result; + } + + public static final int getRgbAsHex(final short[] RGBA) { + final int returnValue = Utils.rgbtoHexValue(RGBA[0], RGBA[1], RGBA[2]); + return (returnValue == 0) ? 0 : returnValue; + } + + public static final int returnLargestNumber(final int a, final int b) { + if (a > b) { + return a; + } else if (a == b) { + return a; + } else { + return b; + } + } + + public static byte safeByte(long number) { + return number > Byte.MAX_VALUE ? Byte.MAX_VALUE : (byte) number; + } + + public static short safeShort(long number) { + return number > Short.MAX_VALUE ? Short.MAX_VALUE : (short) number; + } + + public static int safeInt(long number, int margin) { + return number > Integer.MAX_VALUE - margin ? Integer.MAX_VALUE - margin : (int) number; + } + + public static int safeInt(long number) { + return number > GT_Values.V[GT_Values.V.length - 1] + ? safeInt(GT_Values.V[GT_Values.V.length - 1], 1) + : number < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) number; + } + + public static int getRandomFromArray(int[] mValues) { + int[] mLargeChanceArray = new int[(mValues.length - 1) * 1000]; + int mValueSelection; + for (int g = 0; g < mLargeChanceArray.length; g++) { + mValueSelection = randInt(0, mValues.length - 1); + mLargeChanceArray[g] = mValues[mValueSelection]; + } + return mLargeChanceArray[randInt(0, mLargeChanceArray.length - 1)]; + } + + /* + * Averages + */ + + public static byte getByteAverage(AutoMap aDataSet) { + byte[] aNewSet = new byte[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + byte b = getSafeByte(aDataSet.get(u)); + aNewSet[u] = b; + } + return getByteAverage(aNewSet); + } + + public static short getShortAverage(AutoMap aDataSet) { + short[] aNewSet = new short[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + short b = getSafeShort(aDataSet.get(u)); + aNewSet[u] = b; + } + return getShortAverage(aNewSet); + } + + public static int getIntAverage(AutoMap aDataSet) { + int[] aNewSet = new int[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + int b = getSafeInt(aDataSet.get(u)); + aNewSet[u] = b; + } + return getIntAverage(aNewSet); + } + + public static float getFloatAverage(AutoMap aDataSet) { + float[] aNewSet = new float[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + float b = getSafeFloat(aDataSet.get(u)); + aNewSet[u] = b; + } + return getFloatAverage(aNewSet); + } + + public static long getLongAverage(AutoMap aDataSet) { + long[] aNewSet = new long[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + long b = getSafeLong(aDataSet.get(u)); + aNewSet[u] = b; + } + return getLongAverage(aNewSet); + } + + public static double getDoubleAverage(AutoMap aDataSet) { + double[] aNewSet = new double[aDataSet.size()]; + for (int u = 0; u < aDataSet.size(); u++) { + double b = getSafeDouble(aDataSet.get(u)); + aNewSet[u] = b; + } + return getDoubleAverage(aNewSet); + } + + public static byte getByteAverage(byte[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + byte total = 0; + for (byte i : aDataSet) { + total += i; + } + byte result = safeByte(total / divisor); + return result; + } + + public static short getShortAverage(short[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + Logger.WARNING("Calculating Average Short. Divisor: " + divisor); + short total = 0; + for (short i : aDataSet) { + Logger.WARNING("Adding " + i); + total += i; + } + short result = safeShort((total / divisor)); + Logger.WARNING("Average: " + result); + return result; + } + + public static int getIntAverage(int[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + int total = 0; + for (int i : aDataSet) { + total += i; + } + int result = safeInt(total / divisor); + return result; + } + + public static float getFloatAverage(float[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + float total = 0; + for (float i : aDataSet) { + total += i; + } + float result = (total / divisor); + return result; + } + + public static long getLongAverage(long[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + long total = 0; + for (long i : aDataSet) { + total += i; + } + long result = (total / divisor); + return result; + } + + public static double getDoubleAverage(double[] aDataSet) { + if (aDataSet.length <= 0) { + return 0; + } + int divisor = aDataSet.length; + double total = 0; + for (double i : aDataSet) { + total += i; + } + double result = (total / divisor); + return result; + } + + public static int howManyPlaces(int aValueForGen) { + if (aValueForGen < 0) { + aValueForGen = makeNegative(aValueForGen); + } + String a = String.valueOf(aValueForGen); + return a.length(); + } + + /** + * Inverts the value, making Positives into Negatives and vice versa. + * @param aPositive - An int value, either positive or negative. + * @return - Inverted int Value. + */ + public static int makeNegative(int aPositive) { + if (aPositive > 0) { + return -aPositive; + } else if (aPositive < 0) { + return +aPositive; + } else { + return 0; + } + } + + public static V safeCast(Object aNumberType) { + long a1; + double a2; + a1 = Long.parseLong(aNumberType.toString()); + a2 = Double.parseDouble(aNumberType.toString()); + + if ((aNumberType.getClass() == byte.class) || (aNumberType instanceof Byte)) { + if (a1 >= Byte.MIN_VALUE && a1 <= Byte.MAX_VALUE) { + String s = "" + a1; + Byte s1 = Byte.valueOf(s); + return (V) s1; + } + } else if ((aNumberType.getClass() == short.class) || (aNumberType instanceof Short)) { + if (a1 >= Short.MIN_VALUE && a1 <= Short.MAX_VALUE) { + String s = "" + a1; + Short s1 = Short.valueOf(s); + return (V) s1; + } + } else if ((aNumberType.getClass() == int.class) || (aNumberType instanceof Integer)) { + if (a1 >= Integer.MIN_VALUE && a1 <= Integer.MAX_VALUE) { + String s = "" + a1; + Integer s1 = Integer.valueOf(s); + return (V) s1; + } + } else if ((aNumberType.getClass() == long.class) || (aNumberType instanceof Long)) { + if (a1 >= Long.MIN_VALUE && a1 <= Long.MAX_VALUE) { + String s = "" + a1; + Long s1 = Long.valueOf(s); + return (V) s1; + } + } else if ((aNumberType.getClass() == float.class) || (aNumberType instanceof Float)) { + if (a2 >= Float.MIN_VALUE && a2 <= Float.MAX_VALUE) { + String s = "" + a1; + Float s1 = Float.valueOf(s); + return (V) s1; + } + } else if ((aNumberType.getClass() == double.class) || (aNumberType instanceof Double)) { + if (a2 >= Double.MIN_VALUE && a2 <= Double.MAX_VALUE) { + String s = "" + a1; + Double s1 = Double.valueOf(s); + return (V) s1; + } + } + + Integer o = 0; + return (V) o; + } + + public static byte getSafeByte(Byte b) { + Byte a = safeCast(b); + return a.byteValue(); + } + + public static short getSafeShort(Short b) { + Short a = safeCast(b); + return a.shortValue(); + } + + public static int getSafeInt(Integer b) { + Integer a = safeCast(b); + return a.intValue(); + } + + public static long getSafeLong(Long b) { + Long a = safeCast(b); + return a.longValue(); + } + + public static float getSafeFloat(Float b) { + Float a = safeCast(b); + return a.floatValue(); + } + + public static double getSafeDouble(Double b) { + Double a = safeCast(b); + return a.doubleValue(); + } + + public static long safeCast_IntToLong(int o) { + long i = o; + return i; + } + + public static int safeCast_LongToInt(long o) { + if (o > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } else { + int i = (int) o; + return i; + } + } + + public static short safeCast_IntToShort(int o) { + if (o > Short.MAX_VALUE) { + return Short.MAX_VALUE; + } else { + short i = (short) o; + return i; + } + } + + public static int safeCast_ShortToInt(short o) { + int i = (int) o; + return i; + } + + public static byte safeCast_ShortToByte(short o) { + if (o > Byte.MAX_VALUE) { + return Byte.MAX_VALUE; + } else { + byte i = (byte) o; + return i; + } + } + + public static short safeCast_ByteToshort(byte o) { + short i = (short) o; + return i; + } + + /** + * Balances a number within a range. + * @param aInput - The number to balance + * @param aMin - The minimum bounds + * @param aMax - The maximum bounds + * @return - An Integer which will be between the bounds, or a boundary value. + */ + public static int balance(int aInput, int aMin, int aMax) { + return Math.max(Math.min(aInput, aMax), aMin); + } + + /** + * Balances a number within a range. + * @param aInput - The number to balance + * @param aMin - The minimum bounds + * @param aMax - The maximum bounds + * @return - A Number which will be between the bounds, or a boundary value. + */ + public static Number balance(Number aInput, Number aMin, Number aMax) { + return max(min(aInput, aMax), aMin); + } + + /** + * Balances a number within a range. + * @param aInput - The number to balance + * @param aMin - The minimum bounds + * @param aMax - The maximum bounds + * @return - An Integer which will be between the bounds, or a boundary value. + */ + public static int balanceInt(Number aInput, Number aMin, Number aMax) { + return MathUtils.safeCast_LongToInt( + (long) balance(max(min(aInput, aMax), aMin), Integer.MIN_VALUE, Integer.MAX_VALUE)); + } + + /** + * Balances a number within a range. + * @param aInput - The number to balance + * @param aMin - The minimum bounds + * @param aMax - The maximum bounds + * @return - A Long which will be between the bounds, or a boundary value. + */ + public static long balanceLong(Number aInput, Number aMin, Number aMax) { + return (long) balance(max(min(aInput, aMax), aMin), Long.MIN_VALUE, Long.MAX_VALUE); + } + + public static int getValueWithinRange(int i, int aMin, int aMax) { + int aAmount = Math.max(Math.min(i, aMax), aMin); + return aAmount; + } + + public static Pair splitLongIntoIntegers(long aLong) { + int aIntMaxInLong = (int) Math.min(Integer.MAX_VALUE, Math.floor(aLong / Integer.MAX_VALUE)); + int aRemainder = (int) (aLong - (aIntMaxInLong * Integer.MAX_VALUE)); + return new Pair(aIntMaxInLong, aRemainder); + } + + /** + * Returns the smaller of two {@code Number}s. That is, + * the result the argument closer to the value of + * {@link Long#MIN_VALUE}. If the arguments have the same + * value, the result is that same value. + * + * @param a an argument. + * @param b another argument. + * @return the smaller of {@code a} and {@code b}. + */ + public static Number min(Number a, Number b) { + return (a.longValue() <= b.longValue()) ? a : b; + } + + /** + * Returns the greater of two {@code Number}s. That is, the + * result is the argument closer to the value of + * {@link Long#MAX_VALUE}. If the arguments have the same value, + * the result is that same value. + * + * @param a an argument. + * @param b another argument. + * @return the larger of {@code a} and {@code b}. + */ + public static Number max(Number a, Number b) { + return (a.longValue() >= b.longValue()) ? a : b; + } + + public static long combineTwoIntegersToLong(int a, int b) { + long val = (((long) a) << 32) | (b & 0xffffffffL); + return val; + } + + public static int[] splitLongIntoTwoIntegers(long aNum) { + int a = (int) (aNum >> 32); + int b = (int) aNum; + return new int[] {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/main/java/gtPlusPlus/core/util/minecraft/ClientUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/ClientUtils.java index 806f83d830..ce14c07489 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/ClientUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/ClientUtils.java @@ -7,12 +7,11 @@ import gtPlusPlus.core.lib.CORE; public class ClientUtils { - static { - if (FMLCommonHandler.instance().getSide() == Side.SERVER) { - Logger.ERROR("Something tried to access the ClientUtils class from the Server Side."); - Logger.ERROR("Soft crashing to prevent data corruption."); - CORE.crash(); - } - } - + static { + if (FMLCommonHandler.instance().getSide() == Side.SERVER) { + Logger.ERROR("Something tried to access the ClientUtils class from the Server Side."); + Logger.ERROR("Soft crashing to prevent data corruption."); + CORE.crash(); + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/EnchantingUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/EnchantingUtils.java index 2f273d5f7f..3871d11941 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/EnchantingUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/EnchantingUtils.java @@ -6,97 +6,84 @@ import net.minecraftforge.fluids.FluidStack; public class EnchantingUtils { - - public static final int XP_PER_BOTTLE = 8; - public static final int RATIO = 20; - public static final int LIQUID_PER_XP_BOTTLE = 160; - public static final double RATIO_MOB_ESSENCE_TO_LIQUID_XP = 13.32; - - public static int liquidToXpRatio(final int liquid) { - return liquid / RATIO; - } - - public static int xpToLiquidRatio(final int xp) { - return xp * RATIO; - } - - public static FluidStack getEssenceFromLiquidXp(final int xpAmount){ - if (xpAmount <= 0){ - return null; - } - return getMobEssence((int) (xpAmount*RATIO_MOB_ESSENCE_TO_LIQUID_XP)); - } - - public static FluidStack getLiquidXpFromEssence(final int essenceAmount){ - if (essenceAmount <= 0){ - return null; - } - return getLiquidXP((int) (essenceAmount/RATIO_MOB_ESSENCE_TO_LIQUID_XP)); - } - - public static int getLiquidForLevel(final int level) { - final int xp = getExperienceForLevel(level); - return xpToLiquidRatio(xp); - } - - public static int getLevelForLiquid(final int liquid) { - final int xp = liquidToXpRatio(liquid); - return getLevelForExperience(xp); - } - - public static int getExperienceForLevel(final int level) { - if (level == 0) { - return 0; - } - if ((level > 0) && (level < 16)) { - return level * 17; - } - if ((level > 15) && (level < 31)) { - return (int) (((1.5 * Math.pow(level, 2.0)) - (29.5 * level)) + 360.0); - } - return (int) (((3.5 * Math.pow(level, 2.0)) - (151.5 * level)) + 2220.0); - } - - public static int getXpToNextLevel(final int level) { - final int levelXP = getLevelForExperience(level); - final int nextXP = getExperienceForLevel(level + 1); - return nextXP - levelXP; - } - - public static int getLevelForExperience(final int experience) { - int i; - for (i = 0; getExperienceForLevel(i) <= experience; ++i) { - } - return i - 1; - } - - - - - - - - //Xp Fluids - public static FluidStack getMobEssence(final int amount){ - Logger.WARNING("Trying to get a fluid stack of Mob Essence."); - try { - return FluidRegistry.getFluidStack("mobessence", amount).copy(); - } - catch (final Throwable e){ - return null; - } - - } - - public static FluidStack getLiquidXP(final int amount){ - Logger.WARNING("Trying to get a fluid stack of Liquid XP."); - try { - return FluidRegistry.getFluidStack("xpjuice", amount).copy(); - } - catch (final Throwable e){ - return null; - } - - } - + public static final int XP_PER_BOTTLE = 8; + public static final int RATIO = 20; + public static final int LIQUID_PER_XP_BOTTLE = 160; + public static final double RATIO_MOB_ESSENCE_TO_LIQUID_XP = 13.32; + + public static int liquidToXpRatio(final int liquid) { + return liquid / RATIO; + } + + public static int xpToLiquidRatio(final int xp) { + return xp * RATIO; + } + + public static FluidStack getEssenceFromLiquidXp(final int xpAmount) { + if (xpAmount <= 0) { + return null; + } + return getMobEssence((int) (xpAmount * RATIO_MOB_ESSENCE_TO_LIQUID_XP)); + } + + public static FluidStack getLiquidXpFromEssence(final int essenceAmount) { + if (essenceAmount <= 0) { + return null; + } + return getLiquidXP((int) (essenceAmount / RATIO_MOB_ESSENCE_TO_LIQUID_XP)); + } + + public static int getLiquidForLevel(final int level) { + final int xp = getExperienceForLevel(level); + return xpToLiquidRatio(xp); + } + + public static int getLevelForLiquid(final int liquid) { + final int xp = liquidToXpRatio(liquid); + return getLevelForExperience(xp); + } + + public static int getExperienceForLevel(final int level) { + if (level == 0) { + return 0; + } + if ((level > 0) && (level < 16)) { + return level * 17; + } + if ((level > 15) && (level < 31)) { + return (int) (((1.5 * Math.pow(level, 2.0)) - (29.5 * level)) + 360.0); + } + return (int) (((3.5 * Math.pow(level, 2.0)) - (151.5 * level)) + 2220.0); + } + + public static int getXpToNextLevel(final int level) { + final int levelXP = getLevelForExperience(level); + final int nextXP = getExperienceForLevel(level + 1); + return nextXP - levelXP; + } + + public static int getLevelForExperience(final int experience) { + int i; + for (i = 0; getExperienceForLevel(i) <= experience; ++i) {} + return i - 1; + } + + // Xp Fluids + public static FluidStack getMobEssence(final int amount) { + Logger.WARNING("Trying to get a fluid stack of Mob Essence."); + try { + return FluidRegistry.getFluidStack("mobessence", amount).copy(); + } catch (final Throwable e) { + return null; + } + } + + public static FluidStack getLiquidXP(final int amount) { + Logger.WARNING("Trying to get a fluid stack of Liquid XP."); + try { + return FluidRegistry.getFluidStack("xpjuice", amount).copy(); + } catch (final Throwable e) { + return null; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/EnergyUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/EnergyUtils.java index 8b02ea9c7c..207faeefce 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/EnergyUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/EnergyUtils.java @@ -9,126 +9,115 @@ import net.minecraft.item.ItemStack; public class EnergyUtils { - public static class EU { - - public static boolean isElectricItem(ItemStack aStack) { - if (aStack == null || aStack.getItem() == null || aStack.getItem() instanceof ItemRedstone) { - return false; - } - if (aStack.getItem() instanceof ISpecialElectricItem) { - return true; - } - else if (aStack.getItem() instanceof IElectricItem) { - return true; - } - else if (aStack.getItem() instanceof IElectricItemManager) { - return true; - } - else { - return GT_ModHandler.isElectricItem(aStack); - } - } - - public static boolean isChargerItem(ItemStack aStack) { - return GT_ModHandler.isChargerItem(aStack); - } - - public static boolean charge(ItemStack aStack, int aEnergyToInsert, int aTier) { - return 0 != GT_ModHandler.chargeElectricItem(aStack, aEnergyToInsert, aTier, true, false); - } - - public static boolean discharge(ItemStack aStack, int aEnergyToDrain, int aTier) { - if (isElectricItem(aStack)) { - int tTier = ((IElectricItem) aStack.getItem()).getTier(aStack); - int aDischargeValue = GT_ModHandler.dischargeElectricItem(aStack, aEnergyToDrain, tTier, true, false, false); - //Logger.INFO("Trying to drain "+aDischargeValue); - return aDischargeValue > 0; - } - else { - return false; - } - } - - public static long getMaxStorage(ItemStack aStack) { - if (isElectricItem(aStack)) { - if (aStack.getItem() instanceof ISpecialElectricItem) { - ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); - return (long) bStack.getMaxCharge(aStack); - } - if (aStack.getItem() instanceof IElectricItem) { - IElectricItem bStack = (IElectricItem) aStack.getItem(); - return (long) bStack.getMaxCharge(aStack); - } - if (aStack.getItem() instanceof IElectricItemManager) { - IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); - return (long) bStack.getCharge(aStack); - } - } - else { - return 0; - } - return 0; - } - - public static long getCharge(ItemStack aStack) { - if (isElectricItem(aStack)) { - if (aStack.getItem() instanceof ISpecialElectricItem) { - ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); - return (long) bStack.getManager(aStack).getCharge(aStack); - } - if (aStack.getItem() instanceof IElectricItemManager) { - IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); - return (long) bStack.getCharge(aStack); - } - } - else { - return 0; - } - return 0; - } - - public static boolean hasCharge(ItemStack aStack) { - if (isElectricItem(aStack)) { - if (aStack.getItem() instanceof ISpecialElectricItem) { - ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); - return bStack.canProvideEnergy(aStack); - } - if (aStack.getItem() instanceof IElectricItem) { - IElectricItem bStack = (IElectricItem) aStack.getItem(); - return bStack.canProvideEnergy(aStack); - } - if (aStack.getItem() instanceof IElectricItemManager) { - IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); - return bStack.getCharge(aStack) > 0; - } - } - else { - return false; - } - return false; - } - - public static int getTier(ItemStack aStack) { - if (isElectricItem(aStack)) { - if (aStack.getItem() instanceof ISpecialElectricItem) { - ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); - return bStack.getTier(aStack); - } - if (aStack.getItem() instanceof IElectricItem) { - IElectricItem bStack = (IElectricItem) aStack.getItem(); - return bStack.getTier(aStack); - } - } - else { - return 0; - } - return 0; - } - - } - - public static class RF { - - } - + public static class EU { + + public static boolean isElectricItem(ItemStack aStack) { + if (aStack == null || aStack.getItem() == null || aStack.getItem() instanceof ItemRedstone) { + return false; + } + if (aStack.getItem() instanceof ISpecialElectricItem) { + return true; + } else if (aStack.getItem() instanceof IElectricItem) { + return true; + } else if (aStack.getItem() instanceof IElectricItemManager) { + return true; + } else { + return GT_ModHandler.isElectricItem(aStack); + } + } + + public static boolean isChargerItem(ItemStack aStack) { + return GT_ModHandler.isChargerItem(aStack); + } + + public static boolean charge(ItemStack aStack, int aEnergyToInsert, int aTier) { + return 0 != GT_ModHandler.chargeElectricItem(aStack, aEnergyToInsert, aTier, true, false); + } + + public static boolean discharge(ItemStack aStack, int aEnergyToDrain, int aTier) { + if (isElectricItem(aStack)) { + int tTier = ((IElectricItem) aStack.getItem()).getTier(aStack); + int aDischargeValue = + GT_ModHandler.dischargeElectricItem(aStack, aEnergyToDrain, tTier, true, false, false); + // Logger.INFO("Trying to drain "+aDischargeValue); + return aDischargeValue > 0; + } else { + return false; + } + } + + public static long getMaxStorage(ItemStack aStack) { + if (isElectricItem(aStack)) { + if (aStack.getItem() instanceof ISpecialElectricItem) { + ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); + return (long) bStack.getMaxCharge(aStack); + } + if (aStack.getItem() instanceof IElectricItem) { + IElectricItem bStack = (IElectricItem) aStack.getItem(); + return (long) bStack.getMaxCharge(aStack); + } + if (aStack.getItem() instanceof IElectricItemManager) { + IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); + return (long) bStack.getCharge(aStack); + } + } else { + return 0; + } + return 0; + } + + public static long getCharge(ItemStack aStack) { + if (isElectricItem(aStack)) { + if (aStack.getItem() instanceof ISpecialElectricItem) { + ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); + return (long) bStack.getManager(aStack).getCharge(aStack); + } + if (aStack.getItem() instanceof IElectricItemManager) { + IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); + return (long) bStack.getCharge(aStack); + } + } else { + return 0; + } + return 0; + } + + public static boolean hasCharge(ItemStack aStack) { + if (isElectricItem(aStack)) { + if (aStack.getItem() instanceof ISpecialElectricItem) { + ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); + return bStack.canProvideEnergy(aStack); + } + if (aStack.getItem() instanceof IElectricItem) { + IElectricItem bStack = (IElectricItem) aStack.getItem(); + return bStack.canProvideEnergy(aStack); + } + if (aStack.getItem() instanceof IElectricItemManager) { + IElectricItemManager bStack = (IElectricItemManager) aStack.getItem(); + return bStack.getCharge(aStack) > 0; + } + } else { + return false; + } + return false; + } + + public static int getTier(ItemStack aStack) { + if (isElectricItem(aStack)) { + if (aStack.getItem() instanceof ISpecialElectricItem) { + ISpecialElectricItem bStack = (ISpecialElectricItem) aStack.getItem(); + return bStack.getTier(aStack); + } + if (aStack.getItem() instanceof IElectricItem) { + IElectricItem bStack = (IElectricItem) aStack.getItem(); + return bStack.getTier(aStack); + } + } else { + return 0; + } + return 0; + } + } + + public static class RF {} } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java index fda7b0b738..9c6fab90cd 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java @@ -1,11 +1,5 @@ package gtPlusPlus.core.util.minecraft; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - import cpw.mods.fml.common.registry.EntityRegistry; import gregtech.api.util.GT_Utility; import gtPlusPlus.api.objects.data.AutoMap; @@ -15,6 +9,11 @@ import gtPlusPlus.core.handler.events.EntityDeathHandler; import gtPlusPlus.core.util.reflect.ReflectionUtils; import ic2.core.IC2Potion; import ic2.core.item.armor.ItemArmorHazmat; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; import net.minecraft.block.Block; import net.minecraft.entity.*; import net.minecraft.entity.player.EntityPlayer; @@ -28,93 +27,99 @@ import net.minecraft.world.biome.BiomeGenBase; public class EntityUtils { - public static void setEntityOnFire(final Entity aEntity, final int length){ - if (!isEntityImmuneToFire(aEntity)) { - aEntity.setFire(length); - } - } - - public static boolean isEntityOnFire(final Entity aEntity) { - Field aIsOnFire = ReflectionUtils.getField(Entity.class, "fire"); - if (aIsOnFire != null) { - int aFireTime = (int) ReflectionUtils.getFieldValue(aIsOnFire, aEntity); - return aFireTime > 0; - } - return false; - } - - public static boolean isEntityImmuneToFire(Entity aEntity) { - return aEntity.isImmuneToFire(); - } + public static void setEntityOnFire(final Entity aEntity, final int length) { + if (!isEntityImmuneToFire(aEntity)) { + aEntity.setFire(length); + } + } - public static int getFacingDirection(final Entity entity){ - final int d = MathHelper.floor_double((entity.rotationYaw * 4.0F) / 360 + 0.50) & 3; - return d; - } + public static boolean isEntityOnFire(final Entity aEntity) { + Field aIsOnFire = ReflectionUtils.getField(Entity.class, "fire"); + if (aIsOnFire != null) { + int aFireTime = (int) ReflectionUtils.getFieldValue(aIsOnFire, aEntity); + return aFireTime > 0; + } + return false; + } - @Deprecated - public static Block findBlockUnderEntityNonBoundingBox(final Entity parEntity){ - final int blockX = MathHelper.floor_double(parEntity.posX); - final int blockY = MathHelper.floor_double(parEntity.posY-0.2D - parEntity.yOffset); - final int blockZ = MathHelper.floor_double(parEntity.posZ); - return parEntity.worldObj.getBlock(blockX, blockY, blockZ); - } + public static boolean isEntityImmuneToFire(Entity aEntity) { + return aEntity.isImmuneToFire(); + } - public static Block findBlockUnderEntity(final Entity parEntity){ - final int blockX = MathHelper.floor_double(parEntity.posX); - final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY)-1; - final int blockZ = MathHelper.floor_double(parEntity.posZ); - return parEntity.worldObj.getBlock(blockX, blockY, blockZ); - } + public static int getFacingDirection(final Entity entity) { + final int d = MathHelper.floor_double((entity.rotationYaw * 4.0F) / 360 + 0.50) & 3; + return d; + } - public static BlockPos findBlockPosUnderEntity(final Entity parEntity){ - final int blockX = MathHelper.floor_double(parEntity.posX); - final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY)-1; - final int blockZ = MathHelper.floor_double(parEntity.posZ); - return new BlockPos(blockX, blockY, blockZ, parEntity.worldObj); - } - - public static BlockPos findBlockPosOfEntity(final Entity parEntity){ - final int blockX = MathHelper.floor_double(parEntity.posX); - final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY); - final int blockZ = MathHelper.floor_double(parEntity.posZ); - return new BlockPos(blockX, blockY, blockZ, parEntity.worldObj); - } + @Deprecated + public static Block findBlockUnderEntityNonBoundingBox(final Entity parEntity) { + final int blockX = MathHelper.floor_double(parEntity.posX); + final int blockY = MathHelper.floor_double(parEntity.posY - 0.2D - parEntity.yOffset); + final int blockZ = MathHelper.floor_double(parEntity.posZ); + return parEntity.worldObj.getBlock(blockX, blockY, blockZ); + } - //TODO - public static void registerEntityToBiomeSpawns(final Class classy, final EnumCreatureType EntityType, final BiomeGenBase baseBiomeGen){ - EntityRegistry.addSpawn(classy, 6, 1, 5, EntityType, baseBiomeGen); //change the values to vary the spawn rarity, biome, etc. - } + public static Block findBlockUnderEntity(final Entity parEntity) { + final int blockX = MathHelper.floor_double(parEntity.posX); + final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY) - 1; + final int blockZ = MathHelper.floor_double(parEntity.posZ); + return parEntity.worldObj.getBlock(blockX, blockY, blockZ); + } + + public static BlockPos findBlockPosUnderEntity(final Entity parEntity) { + final int blockX = MathHelper.floor_double(parEntity.posX); + final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY) - 1; + final int blockZ = MathHelper.floor_double(parEntity.posZ); + return new BlockPos(blockX, blockY, blockZ, parEntity.worldObj); + } + + public static BlockPos findBlockPosOfEntity(final Entity parEntity) { + final int blockX = MathHelper.floor_double(parEntity.posX); + final int blockY = MathHelper.floor_double(parEntity.boundingBox.minY); + final int blockZ = MathHelper.floor_double(parEntity.posZ); + return new BlockPos(blockX, blockY, blockZ, parEntity.worldObj); + } + + // TODO + public static void registerEntityToBiomeSpawns( + final Class classy, final EnumCreatureType EntityType, final BiomeGenBase baseBiomeGen) { + EntityRegistry.addSpawn( + classy, 6, 1, 5, EntityType, baseBiomeGen); // change the values to vary the spawn rarity, biome, etc. + } + + public static boolean applyRadiationDamageToEntity( + final int stackSize, final int radiationLevel, final World world, final Entity entityHolding) { + if (!world.isRemote) { + if ((radiationLevel > 0) && (entityHolding instanceof EntityLivingBase)) { + final EntityLivingBase entityLiving = (EntityLivingBase) entityHolding; + if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode) { + if (!ItemArmorHazmat.hasCompleteHazmat(entityLiving) + && !GT_Utility.isWearingFullRadioHazmat(entityLiving)) { + int duration; + if (entityLiving.getActivePotionEffect(IC2Potion.radiation) != null) { + // Utils.LOG_INFO("t"); + duration = (radiationLevel * 5) + + entityLiving + .getActivePotionEffect(IC2Potion.radiation) + .getDuration(); + } else { + // Utils.LOG_INFO("f"); + duration = radiationLevel * 30; + } + // IC2Potion.radiation.applyTo(entityLiving, duration, damage * 15); + applyRadioactivity(entityLiving, radiationLevel, stackSize); + } + } + } + return true; + } + return false; + } - public static boolean applyRadiationDamageToEntity(final int stackSize, final int radiationLevel, final World world, final Entity entityHolding){ - if (!world.isRemote){ - if ((radiationLevel > 0) && (entityHolding instanceof EntityLivingBase)) { - final EntityLivingBase entityLiving = (EntityLivingBase) entityHolding; - if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode){ - if (!ItemArmorHazmat.hasCompleteHazmat(entityLiving) && !GT_Utility.isWearingFullRadioHazmat(entityLiving)) { - int duration; - if (entityLiving.getActivePotionEffect(IC2Potion.radiation) != null){ - //Utils.LOG_INFO("t"); - duration = (radiationLevel*5)+entityLiving.getActivePotionEffect(IC2Potion.radiation).getDuration(); - } - else { - //Utils.LOG_INFO("f"); - duration = radiationLevel*30; - } - //IC2Potion.radiation.applyTo(entityLiving, duration, damage * 15); - applyRadioactivity(entityLiving, radiationLevel, stackSize); - } - } - } - return true; - } - return false; - } - public static boolean isWearingFullFrostHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Frost(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } @@ -122,7 +127,7 @@ public class EntityUtils { public static boolean isWearingFullHeatHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Fire(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } @@ -130,7 +135,7 @@ public class EntityUtils { public static boolean isWearingFullBioHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Biohazard(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } @@ -138,7 +143,7 @@ public class EntityUtils { public static boolean isWearingFullRadioHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Radiation(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } @@ -146,7 +151,7 @@ public class EntityUtils { public static boolean isWearingFullElectroHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Electricity(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } @@ -154,137 +159,186 @@ public class EntityUtils { public static boolean isWearingFullGasHazmat(EntityLivingBase aEntity) { for (byte i = 1; i < 5; i++) if (!HazmatUtils.providesProtetion_Gas(aEntity.getEquipmentInSlot(i))) { - return false; + return false; } return true; } - + public static boolean applyRadioactivity(EntityLivingBase aEntity, int aLevel, int aAmountOfItems) { - if (aLevel > 0 && aEntity != null && aEntity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD && aEntity.getCreatureAttribute() != EnumCreatureAttribute.ARTHROPOD && !ItemArmorHazmat.hasCompleteHazmat(aEntity)) { + if (aLevel > 0 + && aEntity != null + && aEntity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD + && aEntity.getCreatureAttribute() != EnumCreatureAttribute.ARTHROPOD + && !ItemArmorHazmat.hasCompleteHazmat(aEntity)) { PotionEffect tEffect = null; - aEntity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, aLevel * 140 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.moveSlowdown)) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, aLevel * 150 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.digSlowdown)) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect(new PotionEffect(Potion.confusion.id, aLevel * 130 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.confusion)) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect(new PotionEffect(Potion.weakness.id, aLevel * 150 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.weakness)) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect(new PotionEffect(Potion.hunger.id, aLevel * 130 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.hunger)) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect(new PotionEffect(IC2Potion.radiation.id, aLevel * 180 * aAmountOfItems + Math.max(0, ((tEffect = aEntity.getActivePotionEffect(Potion.potionTypes[24])) == null ? 0 : tEffect.getDuration())), Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + Potion.moveSlowdown.id, + aLevel * 140 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.moveSlowdown)) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + Potion.digSlowdown.id, + aLevel * 150 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.digSlowdown)) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + Potion.confusion.id, + aLevel * 130 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.confusion)) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + Potion.weakness.id, + aLevel * 150 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.weakness)) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + Potion.hunger.id, + aLevel * 130 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.hunger)) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect(new PotionEffect( + IC2Potion.radiation.id, + aLevel * 180 * aAmountOfItems + + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.potionTypes[24])) == null + ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); return true; } return false; } - public static boolean applyHeatDamageToEntity(final int heatLevel, final World world, final Entity entityHolding){ - if (!world.isRemote){ - if ((heatLevel > 0) && (entityHolding instanceof EntityLivingBase)) { - final EntityLivingBase entityLiving = (EntityLivingBase) entityHolding; - if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode){ - if (!GT_Utility.isWearingFullHeatHazmat(entityLiving)) { - return GT_Utility.applyHeatDamage(entityLiving, heatLevel); - } - } - } - } - return false; - } + public static boolean applyHeatDamageToEntity(final int heatLevel, final World world, final Entity entityHolding) { + if (!world.isRemote) { + if ((heatLevel > 0) && (entityHolding instanceof EntityLivingBase)) { + final EntityLivingBase entityLiving = (EntityLivingBase) entityHolding; + if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode) { + if (!GT_Utility.isWearingFullHeatHazmat(entityLiving)) { + return GT_Utility.applyHeatDamage(entityLiving, heatLevel); + } + } + } + } + return false; + } + /** + * Static Version of the method used in {@code doFireDamage(entity, int)} to save memory. + */ + private static volatile Method dealFireDamage = null; - /** - * Static Version of the method used in {@code doFireDamage(entity, int)} to save memory. - */ - private volatile static Method dealFireDamage = null; + /** + * Reflective Call to do Fire Damage to an entity (Does not set entity on fire though) + */ + public static synchronized boolean doFireDamage(Entity entity, int amount) { + if (dealFireDamage == null) { + dealFireDamage = ReflectionUtils.getMethod(Entity.class, "dealFireDamage", int.class); + } else { + try { + dealFireDamage.invoke(entity, amount); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + } + } + return false; + } - /** - * Reflective Call to do Fire Damage to an entity (Does not set entity on fire though) - */ - public synchronized static boolean doFireDamage(Entity entity, int amount){ - if (dealFireDamage == null){ - dealFireDamage = ReflectionUtils.getMethod(Entity.class, "dealFireDamage", int.class); - } - else { - try { - dealFireDamage.invoke(entity, amount); - } - catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {} - } - return false; - } + public static void doDamage(Entity entity, DamageSource dmg, int i) { + entity.attackEntityFrom(dmg, i); + } - public static void doDamage(Entity entity, DamageSource dmg, int i) { - entity.attackEntityFrom(dmg, i); - } + public static boolean isTileEntityRegistered(Class aTileClass, String aTileName) { + Field aRegistry = ReflectionUtils.getField( + ReflectionUtils.getClass("net.minecraft.tileentity.TileEntity"), "nameToClassMap"); + Field aRegistry2 = ReflectionUtils.getField( + ReflectionUtils.getClass("net.minecraft.tileentity.TileEntity"), "classToNameMap"); + try { + Object o = aRegistry.get(null); + if (o != null) { + Map nameToClassMap = (Map) o; + if (!nameToClassMap.containsKey(aTileName)) { + o = aRegistry2.get(null); + if (o != null) { + Map classToNameMap = (Map) o; + if (!classToNameMap.containsKey(aTileClass)) { + return false; + } else { + return true; + } + } + } else { + return true; + } + } + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + return false; + } - public static boolean isTileEntityRegistered(Class aTileClass, String aTileName) { - Field aRegistry = ReflectionUtils.getField(ReflectionUtils.getClass("net.minecraft.tileentity.TileEntity"), "nameToClassMap"); - Field aRegistry2 = ReflectionUtils.getField(ReflectionUtils.getClass("net.minecraft.tileentity.TileEntity"), "classToNameMap"); - try { - Object o = aRegistry.get(null); - if (o != null) { - Map nameToClassMap = (Map) o; - if (!nameToClassMap.containsKey(aTileName)) { - o = aRegistry2.get(null); - if (o != null) { - Map classToNameMap = (Map) o; - if (!classToNameMap.containsKey(aTileClass)) { - return false; - } - else { - return true; - } - } - } - else { - return true; - } - } - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - return false; - } + public static double getDistance(Entity p1, Entity p2) { + return Math.sqrt( + Math.pow(p1.posX - p2.posX, 2) + Math.pow(p1.posY - p2.posY, 2) + Math.pow(p1.posZ - p2.posZ, 2)); + } - public static double getDistance(Entity p1, Entity p2) { - return Math.sqrt( Math.pow(p1.posX - p2.posX, 2) + Math.pow(p1.posY - p2.posY, 2) + Math.pow(p1.posZ - p2.posZ, 2)); - } + public static AutoMap getEntitiesWithinBoundingBoxExcluding(Entity aExclusion, AABB aBoundingBox) { + if (aExclusion == null) { + return new AutoMap(); + } else { + List aEntities = + aBoundingBox.world().getEntitiesWithinAABBExcludingEntity(aExclusion, aBoundingBox.get()); + return new AutoMap(aEntities); + } + } - public static AutoMap getEntitiesWithinBoundingBoxExcluding(Entity aExclusion, AABB aBoundingBox){ - if (aExclusion == null) { - return new AutoMap(); - } - else { - List aEntities = aBoundingBox.world().getEntitiesWithinAABBExcludingEntity(aExclusion, aBoundingBox.get()); - return new AutoMap(aEntities); - } - } + public static AutoMap getEntitiesWithinBoundingBox(Class aEntityType, AABB aBoundingBox) { + if (aEntityType == null) { + return new AutoMap(); + } else { + List aEntities = aBoundingBox.world().getEntitiesWithinAABB(aEntityType, aBoundingBox.get()); + return new AutoMap(aEntities); + } + } - public static AutoMap getEntitiesWithinBoundingBox(Class aEntityType, AABB aBoundingBox){ - if (aEntityType == null) { - return new AutoMap(); - } - else { - List aEntities = aBoundingBox.world().getEntitiesWithinAABB(aEntityType, aBoundingBox.get()); - return new AutoMap(aEntities); - } - } - - /** - * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. Simplified function with static Max drop size of 1. - * @param aMobClass - The Base Class you want to drop this item. - * @param aStack - The ItemStack, stack size is not respected. - * @param aChance - Chance out of 10000, where 100 is 1%. (1 = 0.01% - this is ok) - */ - public static void registerDropsForMob(Class aMobClass, ItemStack aStack, int aChance) { - registerDropsForMob(aMobClass, aStack, 1, aChance); - } - - /** - * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. - * @param aMobClass - The Base Class you want to drop this item. - * @param aStack - The ItemStack, stack size is not respected. - * @param aMaxAmount - The maximum size of the ItemStack which drops. - * @param aChance - Chance out of 10000, where 100 is 1%. (1 = 0.01% - this is ok) - */ - public static void registerDropsForMob(Class aMobClass, ItemStack aStack, int aMaxAmount, int aChance) { - EntityDeathHandler.registerDropsForMob(aMobClass, aStack, aMaxAmount, aChance); - } + /** + * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. Simplified function with static Max drop size of 1. + * @param aMobClass - The Base Class you want to drop this item. + * @param aStack - The ItemStack, stack size is not respected. + * @param aChance - Chance out of 10000, where 100 is 1%. (1 = 0.01% - this is ok) + */ + public static void registerDropsForMob(Class aMobClass, ItemStack aStack, int aChance) { + registerDropsForMob(aMobClass, aStack, 1, aChance); + } + /** + * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. + * @param aMobClass - The Base Class you want to drop this item. + * @param aStack - The ItemStack, stack size is not respected. + * @param aMaxAmount - The maximum size of the ItemStack which drops. + * @param aChance - Chance out of 10000, where 100 is 1%. (1 = 0.01% - this is ok) + */ + public static void registerDropsForMob(Class aMobClass, ItemStack aStack, int aMaxAmount, int aChance) { + EntityDeathHandler.registerDropsForMob(aMobClass, aStack, aMaxAmount, aChance); + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java index fe190fa107..2125eff0e5 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java @@ -1,7 +1,5 @@ package gtPlusPlus.core.util.minecraft; -import java.util.HashMap; - import gregtech.api.enums.Dyes; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -16,6 +14,7 @@ import gtPlusPlus.core.material.MaterialStack; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import java.util.HashMap; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -26,643 +25,810 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; public class FluidUtils { - - private static HashMap sFluidCache = new HashMap(); - - public static FluidStack getWater(final int amount){ - return FluidUtils.getFluidStack("water", amount); - } - - public static FluidStack getDistilledWater(final int amount){ - return FluidUtils.getFluidStack("ic2distilledwater", amount); - } - - public static FluidStack getHotWater(final int amount) { - return FluidUtils.getFluidStack("ic2hotwater", amount); - } - - public static FluidStack getLava(final int amount){ - return FluidUtils.getFluidStack("lava", amount); - } - - public static FluidStack getPahoehoeLava(final int amount){ - return FluidUtils.getFluidStack("ic2pahoehoelava", amount); - } - - public static FluidStack getMilk(final int amount){ - return FluidUtils.getFluidStack("milk", amount); - } - - public static FluidStack getColdCoolant(final int amount){ - return FluidUtils.getFluidStack("ic2coolant", amount); - } - - public static FluidStack getHotCoolant(final int amount){ - return FluidUtils.getFluidStack("ic2hotcoolant", amount); - } - - public static FluidStack getSteam(final int amount){ - return FluidUtils.getFluidStack("steam", amount); - } - - public static FluidStack getIC2Steam(final int amount){ - return FluidUtils.getFluidStack("ic2steam", amount); - } - - public static FluidStack getSuperHeatedSteam(final int amount){ - return FluidUtils.getFluidStack("ic2superheatedsteam", amount); - } - - @Deprecated - /** - * Do not use - Gives third tier steam - Not implemented - * @param amount - * @return - */ - public static FluidStack getHyperSteam(final int amount){ - return FluidUtils.getFluidStack("water", amount); - } - - public static FluidStack getUUA(final int amount){ - return FluidUtils.getFluidStack("uuamplifier", amount); - } - - public static FluidStack getUUM(final int amount){ - return FluidUtils.getFluidStack("ic2uumatter", amount); - } - - public static FluidStack getHydrofluoricAcid(int amount) { - return FluidUtils.getFluidStack("hydrofluoricacid", amount); - } - - public static Fluid sGregtechHydrofluoricAcid = null; - - public static FluidStack getHydrofluoricAcidGT(int amount) { - if (sGregtechHydrofluoricAcid == null) { - FluidStack aGTHF = FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 1); - sGregtechHydrofluoricAcid = aGTHF != null ? aGTHF.getFluid() : getHydrofluoricAcid(1).getFluid(); - } - return FluidUtils.getFluidStack(sGregtechHydrofluoricAcid, amount); - } - - public static boolean doesHydrofluoricAcidGtExist() { - if (sGregtechHydrofluoricAcid == null) { - getHydrofluoricAcidGT(1); - } - return sGregtechHydrofluoricAcid != null && sGregtechHydrofluoricAcid != getHydrofluoricAcid(1).getFluid(); - } - - private static FluidStack createFluidStack(Fluid aFluid, int aAmount) { - if (aFluid != null) { - return new FluidStack(aFluid, aAmount); - } - return null; - } - - public static FluidStack getFluidStack(final String aFluidName, final int aAmount){ - Fluid aFluid = sFluidCache.get(aFluidName); - if (aFluid != null) { - return createFluidStack(aFluid, aAmount); - } - else { - Fluid aLookupFluid = FluidRegistry.getFluid(aFluidName); - if (aLookupFluid != null) { - sFluidCache.put(aFluidName, aLookupFluid); - return createFluidStack(aLookupFluid, aAmount); - } - } - return null; - } - - public static FluidStack getFluidStack(final FluidStack aFluidStack, final int aAmount) { - if (aFluidStack == null) { - return null; - } - return new FluidStack(aFluidStack, aAmount); - } - - public static FluidStack getFluidStack(final Fluid aFluid, final int aAmount) { - if (aFluid == null) { - return null; - } - return new FluidStack(aFluid, aAmount); - } - - public static FluidStack[] getFluidStackArray(final String fluidName, final int amount){ - Logger.WARNING("Trying to get a fluid stack of "+fluidName); - try { - final FluidStack[] singleFluid = {getFluidStack(fluidName, amount)}; - return singleFluid; - } - catch (final Throwable e){ - return null; - } - - } - - public static FluidStack[] getFluidStackArray(final FluidStack fluidName, final int amount){ - Logger.WARNING("Trying to get a fluid stack of "+fluidName); - try { - final FluidStack[] singleFluid = {getFluidStack(fluidName, amount)}; - return singleFluid; - } - catch (final Throwable e){ - return null; - } - - } - - public static Fluid addGtFluid(final String aName, final String aLocalized, final GT_Materials aMaterial, final int aState, final long aTemperatureK, final ItemStack aFullContainer, final ItemStack aEmptyContainer, final int aFluidAmount) { - return addGtFluid(aName, aLocalized, aMaterial, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, true); - } - - - public static Fluid addGtFluid(final String aName, final String aLocalized, final GT_Materials aMaterial, final int aState, final long aTemperatureK, final ItemStack aFullContainer, final ItemStack aEmptyContainer, final int aFluidAmount, final boolean aGenerateCell) { - Fluid g = addGTFluid(aName, "fluid.autogenerated", aLocalized, aMaterial != null ? aMaterial.mRGBa : new short[]{255, 255, 255, 0}, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell); - if (g != null) { - if (aMaterial != null) { - switch (aState) { - case 1: { - aMaterial.mFluid = (g); - break; - } - case 2: { - aMaterial.mGas = (g); - break; - } - case 3: { - aMaterial.mPlasma = (g); - break; - } - } - } - return g; - } - return null; - } - - 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); - } - - 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) { - return addGTFluid("fluid."+aName, "fluid.autogenerated", aLocalized, aRGBa, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell); - } - - public static Fluid addGTFluidNoPrefix(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(aName, "fluid.autogenerated", aLocalized, aRGBa, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell); - } - //Gass - public static Fluid addGtGas(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(aName, "fluid.autogenerated", aLocalized, aRGBa, aState, aTemperatureK, aFullContainer, aEmptyContainer, aFluidAmount, aGenerateCell); - } - - public static Fluid addGTPlasma(final Material aMaterial) { - if (aMaterial.getLocalizedName().toLowerCase().contains("clay") || (aMaterial.getComposites().size()>1) || aMaterial.getLocalizedName().toLowerCase().contains("wrought")){ - return null; - } - Logger.INFO("Generating a "+aMaterial.getLocalizedName()+" Plasma Cell"); - if (aMaterial.vComponentCount != 1){ - Logger.INFO("Compound made from: "); - for (final MaterialStack x : aMaterial.getComposites()){ - Logger.INFO(x.getStackMaterial().getLocalizedName()); - } - Logger.INFO("Material is a composite, not generating plasma."); - return null; - } - - ItemStack temp = null; - //Generate a Cell if we need to - if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cellPlasma"+aMaterial.getUnlocalizedName(), 1) == null){ - new BaseItemPlasmaCell(aMaterial); - temp = aMaterial.getPlasmaCell(1); - } - else { - temp = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cellPlasma"+aMaterial.getUnlocalizedName(), 1); - } - if (temp != null){ - return addGTFluid( - "plasma." + Utils.sanitizeString(aMaterial.getLocalizedName().toLowerCase()), - "plasma.autogenerated", - aMaterial.getLocalizedName() + " Plasma", - aMaterial.getRGBA(), - 3, - 10000, - temp, - ItemUtils.getEmptyCell(), - 1000, - false); - } - return null; - } - - 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()); - - String aLocalName = (aLocalized == null) ? aName : aLocalized; - - Fluid rFluid; - Fluid gFluid = FluidRegistry.getFluid(aName); - FluidStack aCheck = FluidUtils.getWildcardFluidStack(aName.toLowerCase(), 1000); - boolean register = false; - if (aCheck != null) { - rFluid = aCheck.getFluid(); - } - else if (gFluid != null) { - rFluid = gFluid; - } - else { - rFluid = new FluidGT6(aName, aTexture, (aRGBa != null) ? aRGBa : Dyes._NULL.getRGBA()); - register = true; - - } - - if (register) { - GT_LanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalName); - if (FluidRegistry.registerFluid(rFluid)) { - switch (aState) { - case 0: { - rFluid.setGaseous(false); - rFluid.setViscosity(10000); - break; - } - case 1: - case 4: { - rFluid.setGaseous(false); - rFluid.setViscosity(1000); - break; - } - case 2: { - rFluid.setGaseous(true); - rFluid.setDensity(-100); - rFluid.setViscosity(200); - break; - } - case 3: { - rFluid.setGaseous(true); - rFluid.setDensity(-10000); - rFluid.setViscosity(10); - rFluid.setLuminosity(15); - break; - } - } - } - } - - - String aNameNonMolten = aLocalName.contains("Molten") ? aLocalName.replace("Molten", "") : aLocalName; - - if (aFullContainer == null) { - 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; - //Generate a Cell if we need to - if (aGenerateFilledCell && aFullContainer == null) { - String aMatName = aNameOriginal; - if (aMatName.contains("molten.")) { - aMatName = aMatName.replace("molten.", ""); - aMatName = aMatName.substring(0, 1).toUpperCase() + aMatName.substring(1); - } - if (aMatName.contains("fluid.")) { - aMatName = aMatName.replace("fluid.", ""); - aMatName = aMatName.substring(0, 1).toUpperCase() + aMatName.substring(1); - } - Logger.INFO("Generating cell for "+aMatName+", "+aLocalName); - tempCell = new BaseItemComponent(aMatName, aLocalName, aRGBa); - aFullContainer = ItemUtils.getSimpleStack(tempCell); - } - - if ((rFluid.getTemperature() == new Fluid("test").getTemperature()) || (rFluid.getTemperature() <= 0)) { - rFluid.setTemperature((int) (aTemperatureK)); - } - if ((aFullContainer != null) && (aEmptyContainer != null) && !FluidContainerRegistry.registerFluidContainer(new FluidStack(rFluid, aFluidAmount), aFullContainer, aEmptyContainer)) { - CORE.RA.addFluidCannerRecipe(CI.emptyCells(1), aFullContainer, new FluidStack(rFluid, aFluidAmount)); - } - else { - //Utils.LOG_INFO("Failed creating recipes to fill/empty cells of "+aName+"."); - } - return rFluid; - } - - public static boolean valid(final Object aStack) { - return (aStack != null) && (aStack instanceof ItemStack) && (((ItemStack)aStack).getItem() != null) && (((ItemStack)aStack).stackSize >= 0); - } - - public static boolean invalid(final Object aStack) { - return (aStack == null) || !(aStack instanceof ItemStack) || (((ItemStack)aStack).getItem() == null) || (((ItemStack)aStack).stackSize < 0); - } - - public static boolean equal(final ItemStack aStack1, final ItemStack aStack2) { - return equal(aStack1, aStack2, false); - } - - public static boolean equal(final ItemStack aStack1, final ItemStack aStack2, final boolean aIgnoreNBT) { - return (aStack1 != null) && (aStack2 != null) && equal_(aStack1, aStack2, aIgnoreNBT); - } - - public static boolean equal_(final ItemStack aStack1, final ItemStack aStack2, final boolean aIgnoreNBT) { - return (aStack1.getItem() == aStack2.getItem()) && (aIgnoreNBT || ((aStack1.getTagCompound() == null == (aStack2.getTagCompound() == null)) && ((aStack1.getTagCompound() == null) || aStack1.getTagCompound().equals(aStack2.getTagCompound())))) && ((meta(aStack1) == meta(aStack2)) || (meta(aStack1) == 32767) || (meta(aStack2) == 32767)); - } - - public static ItemStack copy(final Object... aStacks) { - for (final Object tStack : aStacks) { - if (valid(tStack)) { - return ((ItemStack)tStack).copy(); - } - } - return null; - } - - public static ItemStack copyMeta(final long aMetaData, final Object... aStacks) { - final ItemStack rStack = copy(aStacks); - if (invalid(rStack)) { - return null; - } - return meta(rStack, aMetaData); - } - - public static short meta(final ItemStack aStack) { - return (short)Items.feather.getDamage(aStack); - } - - public static ItemStack meta(final ItemStack aStack, final long aMeta) { - Items.feather.setDamage(aStack, (short)aMeta); - return aStack; - } - - public static ItemStack amount(final long aAmount, final Object... aStacks) { - final ItemStack rStack = copy(aStacks); - if (invalid(rStack)) { - return null; - } - rStack.stackSize = (int)aAmount; - return rStack; - } - - public static ItemStack container(final ItemStack aStack, final boolean aCheckIFluidContainerItems) { - if (invalid(aStack)) { - return null; - } - if (aStack.getItem().hasContainerItem(aStack)) { - return aStack.getItem().getContainerItem(aStack); - } - if (equal(aStack, ItemUtils.getEmptyCell(), true)) { - return null; - } - if (aCheckIFluidContainerItems && (aStack.getItem() instanceof IFluidContainerItem) && (((IFluidContainerItem)aStack.getItem()).getCapacity(aStack) > 0)) { - final ItemStack tStack = amount(1L, aStack); - ((IFluidContainerItem)aStack.getItem()).drain(tStack, Integer.MAX_VALUE, true); - if (!equal(aStack, tStack)) { - return tStack; - } - return null; - } - if (equal(aStack, ItemList.IC2_ForgeHammer.get(1)) || equal(aStack, ItemList.IC2_WireCutter.get(1))) { - return copyMeta(meta(aStack) + 1, aStack); - } - return null; - } - - public static ItemStack container(final ItemStack aStack, final boolean aCheckIFluidContainerItems, final int aStacksize) { - return amount(aStacksize, container(aStack, aCheckIFluidContainerItems)); - } - - public final static Fluid generateFluid(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, boolean aGenerateCell){ - FluidStack aFStack = (FluidUtils.getFluidStack("molten"+"."+unlocalizedName.toLowerCase(), 1)); - if (aFStack == null){ - Logger.WARNING("Generating our own fluid."); -/* ItemStack cell = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1); - if (cell == null){ - final Item temp = new BaseItemComponent(unlocalizedName, localizedName, RGBA); - cell = ItemUtils.getSimpleStack(temp); - }*/ - final Fluid gtFluid = FluidUtils.addGTFluid( - unlocalizedName, - "Molten "+localizedName, - RGBA, - 4, - MeltingPoint, - null, - ItemUtils.getEmptyCell(), - 1000, - aGenerateCell); - - return gtFluid; - } - else { - Logger.INFO("FLUID GENERATION FAILED FOR "+localizedName+", ALREADY EXISTS"); - return aFStack.getFluid(); - } - } - - public final static Fluid generateFluidNonMolten(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, final boolean aGenerateCell){ - return generateFluidNonMolten(unlocalizedName, localizedName, MeltingPoint, RGBA, null, null, 0, aGenerateCell); - } - - - public final static Fluid generateFluidNonMolten(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, final ItemStack dustStack, final ItemStack dustStack2){ - return generateFluidNonMolten(unlocalizedName, localizedName, MeltingPoint, RGBA, dustStack, dustStack2, 144, true); - } - - public final static Fluid generateFluidNonMolten(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, final ItemStack dustStack, final ItemStack dustStack2, final boolean aGenerateCell){ - return generateFluidNonMolten(unlocalizedName, localizedName, MeltingPoint, RGBA, dustStack, dustStack2, 144, aGenerateCell); - } - - public final static Fluid generateFluidNonMolten(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, ItemStack dustStack, final ItemStack dustStack2, final int amountPerItem, final boolean aGenerateCell){ - if (dustStack == null){ - dustStack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dust"+Utils.sanitizeString(localizedName), 1); - } - FluidStack aFStack = (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1)); - if (aFStack == null){ - Logger.WARNING("Generating our own fluid."); - - final Fluid gtFluid = FluidUtils.addGTFluidNonMolten( - unlocalizedName, - localizedName, - RGBA, - 4, - MeltingPoint, - null, - ItemUtils.getEmptyCell(), - 1000, - aGenerateCell); - - if (dustStack != null){ - CORE.RA.addFluidExtractionRecipe( - dustStack, //Input 2 - FluidUtils.getFluidStack(gtFluid, amountPerItem), //Fluid Output - 1*20, //Duration - 16 //Eu Tick - ); - } - if (dustStack2 != null){ - CORE.RA.addFluidExtractionRecipe( - dustStack2, //Input 2 - FluidUtils.getFluidStack(gtFluid, amountPerItem), //Fluid Output - 1*20, //Duration - 16 //Eu Tick - ); - } - - return gtFluid; - } - else { - Logger.INFO("FLUID GENERATION FAILED FOR "+localizedName+", ALREADY EXISTS"); - return aFStack.getFluid(); - } - } - - public final static Fluid generateFluidNoPrefix(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA){ - return generateFluidNoPrefix(unlocalizedName, localizedName, MeltingPoint, RGBA, true); - } - - public final static Fluid generateFluidNoPrefix(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, final boolean aGenerateCell){ - Fluid gtFluid; - if (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1) == null){ - Logger.WARNING("Generating our own fluid."); - gtFluid = FluidUtils.addGTFluidNoPrefix( - unlocalizedName, - localizedName, - RGBA, - 4, - MeltingPoint, - null, - ItemUtils.getEmptyCell(), - 1000, - aGenerateCell); - } - else { - gtFluid = FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1).getFluid(); - } - //Generate a Cell if we need to -// if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1) == null){ -// new BaseItemCell(unlocalizedName, localizedName, RGBA, gtFluid); -// } - return gtFluid; - } - - public final static Fluid generateGas(final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA, final boolean aGenerateCell){ - Fluid gtFluid; - if (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1) == null){ - Logger.WARNING("Generating our own gas."); - gtFluid = FluidUtils.addGtGas( - unlocalizedName, - localizedName, - RGBA, - 3, - MeltingPoint, - null, - ItemUtils.getEmptyCell(), - 1000, - aGenerateCell); - } - else { - gtFluid = FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1).getFluid(); - } - //Generate a Cell if we need to -/* if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1) == null){ - new BaseItemCell(unlocalizedName, localizedName, RGBA, gtFluid); - }*/ - return gtFluid; - } - - - - - public static FluidStack getMobEssence(final int amount){ - return EnchantingUtils.getMobEssence(amount); - } - - public static FluidStack getLiquidXP(final int amount){ - return EnchantingUtils.getLiquidXP(amount); - } - - public static boolean doesFluidExist(String aFluidName) { - FluidStack aFStack1 = (FluidUtils.getFluidStack("molten"+"."+aFluidName.toLowerCase(), 1)); - FluidStack aFStack2 = (FluidUtils.getFluidStack("fluid"+"."+aFluidName.toLowerCase(), 1)); - FluidStack aFStack3 = (FluidUtils.getFluidStack(aFluidName.toLowerCase(), 1)); - FluidStack aFStack4 = (FluidUtils.getFluidStack(aFluidName, 1)); - FluidStack aFStack5 = (FluidUtils.getFluidStack("liquid_"+aFluidName.toLowerCase(), 1)); - FluidStack aFStack6 = (FluidUtils.getFluidStack("liquid"+"."+aFluidName.toLowerCase(), 1)); - 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(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) { - return aFStack1; - } - if (aFStack2 != null) { - return aFStack2; - } - if (aFStack3 != null) { - return aFStack3; - } - if (aFStack4 != null) { - return aFStack4; - } - if (aFStack5 != null) { - return aFStack5; - } - if (aFStack6 != null) { - return aFStack6; - } - return null; - } - - public static FluidStack getWildcardFluidStack(Materials aMaterial, int amount) { - FluidStack aFStack1 = aMaterial.getFluid(amount); - FluidStack aFStack2 = aMaterial.getGas(amount); - FluidStack aFStack3 = aMaterial.getMolten(amount); - FluidStack aFStack4 = aMaterial.getSolid(amount); - if (aFStack1 != null) { - return aFStack1; - } - else if (aFStack2 != null) { - return aFStack2; - } - else if (aFStack3 != null) { - return aFStack3; - } - else if (aFStack4 != null) { - return aFStack4; - } - else { - return null; - } - } - - public static FluidStack getAir(int aAmount) { - return FluidUtils.getFluidStack("air", aAmount); - } - + private static HashMap sFluidCache = new HashMap(); + + public static FluidStack getWater(final int amount) { + return FluidUtils.getFluidStack("water", amount); + } + + public static FluidStack getDistilledWater(final int amount) { + return FluidUtils.getFluidStack("ic2distilledwater", amount); + } + + public static FluidStack getHotWater(final int amount) { + return FluidUtils.getFluidStack("ic2hotwater", amount); + } + + public static FluidStack getLava(final int amount) { + return FluidUtils.getFluidStack("lava", amount); + } + + public static FluidStack getPahoehoeLava(final int amount) { + return FluidUtils.getFluidStack("ic2pahoehoelava", amount); + } + + public static FluidStack getMilk(final int amount) { + return FluidUtils.getFluidStack("milk", amount); + } + + public static FluidStack getColdCoolant(final int amount) { + return FluidUtils.getFluidStack("ic2coolant", amount); + } + + public static FluidStack getHotCoolant(final int amount) { + return FluidUtils.getFluidStack("ic2hotcoolant", amount); + } + + public static FluidStack getSteam(final int amount) { + return FluidUtils.getFluidStack("steam", amount); + } + + public static FluidStack getIC2Steam(final int amount) { + return FluidUtils.getFluidStack("ic2steam", amount); + } + + public static FluidStack getSuperHeatedSteam(final int amount) { + return FluidUtils.getFluidStack("ic2superheatedsteam", amount); + } + + @Deprecated + /** + * Do not use - Gives third tier steam - Not implemented + * @param amount + * @return + */ + public static FluidStack getHyperSteam(final int amount) { + return FluidUtils.getFluidStack("water", amount); + } + + public static FluidStack getUUA(final int amount) { + return FluidUtils.getFluidStack("uuamplifier", amount); + } + + public static FluidStack getUUM(final int amount) { + return FluidUtils.getFluidStack("ic2uumatter", amount); + } + + public static FluidStack getHydrofluoricAcid(int amount) { + return FluidUtils.getFluidStack("hydrofluoricacid", amount); + } + + public static Fluid sGregtechHydrofluoricAcid = null; + + public static FluidStack getHydrofluoricAcidGT(int amount) { + if (sGregtechHydrofluoricAcid == null) { + FluidStack aGTHF = FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 1); + sGregtechHydrofluoricAcid = + aGTHF != null ? aGTHF.getFluid() : getHydrofluoricAcid(1).getFluid(); + } + return FluidUtils.getFluidStack(sGregtechHydrofluoricAcid, amount); + } + + public static boolean doesHydrofluoricAcidGtExist() { + if (sGregtechHydrofluoricAcid == null) { + getHydrofluoricAcidGT(1); + } + return sGregtechHydrofluoricAcid != null + && sGregtechHydrofluoricAcid != getHydrofluoricAcid(1).getFluid(); + } + + private static FluidStack createFluidStack(Fluid aFluid, int aAmount) { + if (aFluid != null) { + return new FluidStack(aFluid, aAmount); + } + return null; + } + + public static FluidStack getFluidStack(final String aFluidName, final int aAmount) { + Fluid aFluid = sFluidCache.get(aFluidName); + if (aFluid != null) { + return createFluidStack(aFluid, aAmount); + } else { + Fluid aLookupFluid = FluidRegistry.getFluid(aFluidName); + if (aLookupFluid != null) { + sFluidCache.put(aFluidName, aLookupFluid); + return createFluidStack(aLookupFluid, aAmount); + } + } + return null; + } + + public static FluidStack getFluidStack(final FluidStack aFluidStack, final int aAmount) { + if (aFluidStack == null) { + return null; + } + return new FluidStack(aFluidStack, aAmount); + } + + public static FluidStack getFluidStack(final Fluid aFluid, final int aAmount) { + if (aFluid == null) { + return null; + } + return new FluidStack(aFluid, aAmount); + } + + public static FluidStack[] getFluidStackArray(final String fluidName, final int amount) { + Logger.WARNING("Trying to get a fluid stack of " + fluidName); + try { + final FluidStack[] singleFluid = {getFluidStack(fluidName, amount)}; + return singleFluid; + } catch (final Throwable e) { + return null; + } + } + + public static FluidStack[] getFluidStackArray(final FluidStack fluidName, final int amount) { + Logger.WARNING("Trying to get a fluid stack of " + fluidName); + try { + final FluidStack[] singleFluid = {getFluidStack(fluidName, amount)}; + return singleFluid; + } catch (final Throwable e) { + return null; + } + } + + public static Fluid addGtFluid( + final String aName, + final String aLocalized, + final GT_Materials aMaterial, + final int aState, + final long aTemperatureK, + final ItemStack aFullContainer, + final ItemStack aEmptyContainer, + final int aFluidAmount) { + return addGtFluid( + aName, + aLocalized, + aMaterial, + aState, + aTemperatureK, + aFullContainer, + aEmptyContainer, + aFluidAmount, + true); + } + + public static Fluid addGtFluid( + final String aName, + final String aLocalized, + final GT_Materials aMaterial, + final int aState, + final long aTemperatureK, + final ItemStack aFullContainer, + final ItemStack aEmptyContainer, + final int aFluidAmount, + final boolean aGenerateCell) { + Fluid g = addGTFluid( + aName, + "fluid.autogenerated", + aLocalized, + aMaterial != null ? aMaterial.mRGBa : new short[] {255, 255, 255, 0}, + aState, + aTemperatureK, + aFullContainer, + aEmptyContainer, + aFluidAmount, + aGenerateCell); + if (g != null) { + if (aMaterial != null) { + switch (aState) { + case 1: { + aMaterial.mFluid = (g); + break; + } + case 2: { + aMaterial.mGas = (g); + break; + } + case 3: { + aMaterial.mPlasma = (g); + break; + } + } + } + return g; + } + return null; + } + + 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); + } + + 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) { + return addGTFluid( + "fluid." + aName, + "fluid.autogenerated", + aLocalized, + aRGBa, + aState, + aTemperatureK, + aFullContainer, + aEmptyContainer, + aFluidAmount, + aGenerateCell); + } + + public static Fluid addGTFluidNoPrefix( + 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( + aName, + "fluid.autogenerated", + aLocalized, + aRGBa, + aState, + aTemperatureK, + aFullContainer, + aEmptyContainer, + aFluidAmount, + aGenerateCell); + } + // Gass + public static Fluid addGtGas( + 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( + aName, + "fluid.autogenerated", + aLocalized, + aRGBa, + aState, + aTemperatureK, + aFullContainer, + aEmptyContainer, + aFluidAmount, + aGenerateCell); + } + + public static Fluid addGTPlasma(final Material aMaterial) { + if (aMaterial.getLocalizedName().toLowerCase().contains("clay") + || (aMaterial.getComposites().size() > 1) + || aMaterial.getLocalizedName().toLowerCase().contains("wrought")) { + return null; + } + Logger.INFO("Generating a " + aMaterial.getLocalizedName() + " Plasma Cell"); + if (aMaterial.vComponentCount != 1) { + Logger.INFO("Compound made from: "); + for (final MaterialStack x : aMaterial.getComposites()) { + Logger.INFO(x.getStackMaterial().getLocalizedName()); + } + Logger.INFO("Material is a composite, not generating plasma."); + return null; + } + + ItemStack temp = null; + // Generate a Cell if we need to + if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cellPlasma" + aMaterial.getUnlocalizedName(), 1) + == null) { + new BaseItemPlasmaCell(aMaterial); + temp = aMaterial.getPlasmaCell(1); + } else { + temp = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cellPlasma" + aMaterial.getUnlocalizedName(), 1); + } + if (temp != null) { + return addGTFluid( + "plasma." + + Utils.sanitizeString(aMaterial.getLocalizedName().toLowerCase()), + "plasma.autogenerated", + aMaterial.getLocalizedName() + " Plasma", + aMaterial.getRGBA(), + 3, + 10000, + temp, + ItemUtils.getEmptyCell(), + 1000, + false); + } + return null; + } + + 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()); + + String aLocalName = (aLocalized == null) ? aName : aLocalized; + + Fluid rFluid; + Fluid gFluid = FluidRegistry.getFluid(aName); + FluidStack aCheck = FluidUtils.getWildcardFluidStack(aName.toLowerCase(), 1000); + boolean register = false; + if (aCheck != null) { + rFluid = aCheck.getFluid(); + } else if (gFluid != null) { + rFluid = gFluid; + } else { + rFluid = new FluidGT6(aName, aTexture, (aRGBa != null) ? aRGBa : Dyes._NULL.getRGBA()); + register = true; + } + + if (register) { + GT_LanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalName); + if (FluidRegistry.registerFluid(rFluid)) { + switch (aState) { + case 0: { + rFluid.setGaseous(false); + rFluid.setViscosity(10000); + break; + } + case 1: + case 4: { + rFluid.setGaseous(false); + rFluid.setViscosity(1000); + break; + } + case 2: { + rFluid.setGaseous(true); + rFluid.setDensity(-100); + rFluid.setViscosity(200); + break; + } + case 3: { + rFluid.setGaseous(true); + rFluid.setDensity(-10000); + rFluid.setViscosity(10); + rFluid.setLuminosity(15); + break; + } + } + } + } + + String aNameNonMolten = aLocalName.contains("Molten") ? aLocalName.replace("Molten", "") : aLocalName; + + if (aFullContainer == null) { + 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; + // Generate a Cell if we need to + if (aGenerateFilledCell && aFullContainer == null) { + String aMatName = aNameOriginal; + if (aMatName.contains("molten.")) { + aMatName = aMatName.replace("molten.", ""); + aMatName = aMatName.substring(0, 1).toUpperCase() + aMatName.substring(1); + } + if (aMatName.contains("fluid.")) { + aMatName = aMatName.replace("fluid.", ""); + aMatName = aMatName.substring(0, 1).toUpperCase() + aMatName.substring(1); + } + Logger.INFO("Generating cell for " + aMatName + ", " + aLocalName); + tempCell = new BaseItemComponent(aMatName, aLocalName, aRGBa); + aFullContainer = ItemUtils.getSimpleStack(tempCell); + } + + if ((rFluid.getTemperature() == new Fluid("test").getTemperature()) || (rFluid.getTemperature() <= 0)) { + rFluid.setTemperature((int) (aTemperatureK)); + } + if ((aFullContainer != null) + && (aEmptyContainer != null) + && !FluidContainerRegistry.registerFluidContainer( + new FluidStack(rFluid, aFluidAmount), aFullContainer, aEmptyContainer)) { + CORE.RA.addFluidCannerRecipe(CI.emptyCells(1), aFullContainer, new FluidStack(rFluid, aFluidAmount)); + } else { + // Utils.LOG_INFO("Failed creating recipes to fill/empty cells of "+aName+"."); + } + return rFluid; + } + + public static boolean valid(final Object aStack) { + return (aStack != null) + && (aStack instanceof ItemStack) + && (((ItemStack) aStack).getItem() != null) + && (((ItemStack) aStack).stackSize >= 0); + } + + public static boolean invalid(final Object aStack) { + return (aStack == null) + || !(aStack instanceof ItemStack) + || (((ItemStack) aStack).getItem() == null) + || (((ItemStack) aStack).stackSize < 0); + } + + public static boolean equal(final ItemStack aStack1, final ItemStack aStack2) { + return equal(aStack1, aStack2, false); + } + + public static boolean equal(final ItemStack aStack1, final ItemStack aStack2, final boolean aIgnoreNBT) { + return (aStack1 != null) && (aStack2 != null) && equal_(aStack1, aStack2, aIgnoreNBT); + } + + public static boolean equal_(final ItemStack aStack1, final ItemStack aStack2, final boolean aIgnoreNBT) { + return (aStack1.getItem() == aStack2.getItem()) + && (aIgnoreNBT + || ((aStack1.getTagCompound() == null == (aStack2.getTagCompound() == null)) + && ((aStack1.getTagCompound() == null) + || aStack1.getTagCompound().equals(aStack2.getTagCompound())))) + && ((meta(aStack1) == meta(aStack2)) || (meta(aStack1) == 32767) || (meta(aStack2) == 32767)); + } + + public static ItemStack copy(final Object... aStacks) { + for (final Object tStack : aStacks) { + if (valid(tStack)) { + return ((ItemStack) tStack).copy(); + } + } + return null; + } + + public static ItemStack copyMeta(final long aMetaData, final Object... aStacks) { + final ItemStack rStack = copy(aStacks); + if (invalid(rStack)) { + return null; + } + return meta(rStack, aMetaData); + } + + public static short meta(final ItemStack aStack) { + return (short) Items.feather.getDamage(aStack); + } + + public static ItemStack meta(final ItemStack aStack, final long aMeta) { + Items.feather.setDamage(aStack, (short) aMeta); + return aStack; + } + + public static ItemStack amount(final long aAmount, final Object... aStacks) { + final ItemStack rStack = copy(aStacks); + if (invalid(rStack)) { + return null; + } + rStack.stackSize = (int) aAmount; + return rStack; + } + + public static ItemStack container(final ItemStack aStack, final boolean aCheckIFluidContainerItems) { + if (invalid(aStack)) { + return null; + } + if (aStack.getItem().hasContainerItem(aStack)) { + return aStack.getItem().getContainerItem(aStack); + } + if (equal(aStack, ItemUtils.getEmptyCell(), true)) { + return null; + } + if (aCheckIFluidContainerItems + && (aStack.getItem() instanceof IFluidContainerItem) + && (((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0)) { + final ItemStack tStack = amount(1L, aStack); + ((IFluidContainerItem) aStack.getItem()).drain(tStack, Integer.MAX_VALUE, true); + if (!equal(aStack, tStack)) { + return tStack; + } + return null; + } + if (equal(aStack, ItemList.IC2_ForgeHammer.get(1)) || equal(aStack, ItemList.IC2_WireCutter.get(1))) { + return copyMeta(meta(aStack) + 1, aStack); + } + return null; + } + + public static ItemStack container( + final ItemStack aStack, final boolean aCheckIFluidContainerItems, final int aStacksize) { + return amount(aStacksize, container(aStack, aCheckIFluidContainerItems)); + } + + public static final Fluid generateFluid( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + boolean aGenerateCell) { + FluidStack aFStack = (FluidUtils.getFluidStack("molten" + "." + unlocalizedName.toLowerCase(), 1)); + if (aFStack == null) { + Logger.WARNING("Generating our own fluid."); + /* ItemStack cell = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1); + if (cell == null){ + final Item temp = new BaseItemComponent(unlocalizedName, localizedName, RGBA); + cell = ItemUtils.getSimpleStack(temp); + }*/ + final Fluid gtFluid = FluidUtils.addGTFluid( + unlocalizedName, + "Molten " + localizedName, + RGBA, + 4, + MeltingPoint, + null, + ItemUtils.getEmptyCell(), + 1000, + aGenerateCell); + + return gtFluid; + } else { + Logger.INFO("FLUID GENERATION FAILED FOR " + localizedName + ", ALREADY EXISTS"); + return aFStack.getFluid(); + } + } + + public static final Fluid generateFluidNonMolten( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + final boolean aGenerateCell) { + return generateFluidNonMolten(unlocalizedName, localizedName, MeltingPoint, RGBA, null, null, 0, aGenerateCell); + } + + public static final Fluid generateFluidNonMolten( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + final ItemStack dustStack, + final ItemStack dustStack2) { + return generateFluidNonMolten( + unlocalizedName, localizedName, MeltingPoint, RGBA, dustStack, dustStack2, 144, true); + } + + public static final Fluid generateFluidNonMolten( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + final ItemStack dustStack, + final ItemStack dustStack2, + final boolean aGenerateCell) { + return generateFluidNonMolten( + unlocalizedName, localizedName, MeltingPoint, RGBA, dustStack, dustStack2, 144, aGenerateCell); + } + + public static final Fluid generateFluidNonMolten( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + ItemStack dustStack, + final ItemStack dustStack2, + final int amountPerItem, + final boolean aGenerateCell) { + if (dustStack == null) { + dustStack = + ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dust" + Utils.sanitizeString(localizedName), 1); + } + FluidStack aFStack = (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1)); + if (aFStack == null) { + Logger.WARNING("Generating our own fluid."); + + final Fluid gtFluid = FluidUtils.addGTFluidNonMolten( + unlocalizedName, + localizedName, + RGBA, + 4, + MeltingPoint, + null, + ItemUtils.getEmptyCell(), + 1000, + aGenerateCell); + + if (dustStack != null) { + CORE.RA.addFluidExtractionRecipe( + dustStack, // Input 2 + FluidUtils.getFluidStack(gtFluid, amountPerItem), // Fluid Output + 1 * 20, // Duration + 16 // Eu Tick + ); + } + if (dustStack2 != null) { + CORE.RA.addFluidExtractionRecipe( + dustStack2, // Input 2 + FluidUtils.getFluidStack(gtFluid, amountPerItem), // Fluid Output + 1 * 20, // Duration + 16 // Eu Tick + ); + } + + return gtFluid; + } else { + Logger.INFO("FLUID GENERATION FAILED FOR " + localizedName + ", ALREADY EXISTS"); + return aFStack.getFluid(); + } + } + + public static final Fluid generateFluidNoPrefix( + final String unlocalizedName, final String localizedName, final int MeltingPoint, final short[] RGBA) { + return generateFluidNoPrefix(unlocalizedName, localizedName, MeltingPoint, RGBA, true); + } + + public static final Fluid generateFluidNoPrefix( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + final boolean aGenerateCell) { + Fluid gtFluid; + if (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1) == null) { + Logger.WARNING("Generating our own fluid."); + gtFluid = FluidUtils.addGTFluidNoPrefix( + unlocalizedName, + localizedName, + RGBA, + 4, + MeltingPoint, + null, + ItemUtils.getEmptyCell(), + 1000, + aGenerateCell); + } else { + gtFluid = FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1).getFluid(); + } + // Generate a Cell if we need to + // if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1) == null){ + // new BaseItemCell(unlocalizedName, localizedName, RGBA, gtFluid); + // } + return gtFluid; + } + + public static final Fluid generateGas( + final String unlocalizedName, + final String localizedName, + final int MeltingPoint, + final short[] RGBA, + final boolean aGenerateCell) { + Fluid gtFluid; + if (FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1) == null) { + Logger.WARNING("Generating our own gas."); + gtFluid = FluidUtils.addGtGas( + unlocalizedName, + localizedName, + RGBA, + 3, + MeltingPoint, + null, + ItemUtils.getEmptyCell(), + 1000, + aGenerateCell); + } else { + gtFluid = FluidUtils.getFluidStack(unlocalizedName.toLowerCase(), 1).getFluid(); + } + // Generate a Cell if we need to + /* if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+unlocalizedName, 1) == null){ + new BaseItemCell(unlocalizedName, localizedName, RGBA, gtFluid); + }*/ + return gtFluid; + } + + public static FluidStack getMobEssence(final int amount) { + return EnchantingUtils.getMobEssence(amount); + } + + public static FluidStack getLiquidXP(final int amount) { + return EnchantingUtils.getLiquidXP(amount); + } + + public static boolean doesFluidExist(String aFluidName) { + FluidStack aFStack1 = (FluidUtils.getFluidStack("molten" + "." + aFluidName.toLowerCase(), 1)); + FluidStack aFStack2 = (FluidUtils.getFluidStack("fluid" + "." + aFluidName.toLowerCase(), 1)); + FluidStack aFStack3 = (FluidUtils.getFluidStack(aFluidName.toLowerCase(), 1)); + FluidStack aFStack4 = (FluidUtils.getFluidStack(aFluidName, 1)); + FluidStack aFStack5 = (FluidUtils.getFluidStack("liquid_" + aFluidName.toLowerCase(), 1)); + FluidStack aFStack6 = (FluidUtils.getFluidStack("liquid" + "." + aFluidName.toLowerCase(), 1)); + 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(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) { + return aFStack1; + } + if (aFStack2 != null) { + return aFStack2; + } + if (aFStack3 != null) { + return aFStack3; + } + if (aFStack4 != null) { + return aFStack4; + } + if (aFStack5 != null) { + return aFStack5; + } + if (aFStack6 != null) { + return aFStack6; + } + return null; + } + + public static FluidStack getWildcardFluidStack(Materials aMaterial, int amount) { + FluidStack aFStack1 = aMaterial.getFluid(amount); + FluidStack aFStack2 = aMaterial.getGas(amount); + FluidStack aFStack3 = aMaterial.getMolten(amount); + FluidStack aFStack4 = aMaterial.getSolid(amount); + if (aFStack1 != null) { + return aFStack1; + } else if (aFStack2 != null) { + return aFStack2; + } else if (aFStack3 != null) { + return aFStack3; + } else if (aFStack4 != null) { + return aFStack4; + } else { + return null; + } + } + + public static FluidStack getAir(int aAmount) { + return FluidUtils.getFluidStack("air", aAmount); + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/FoodUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/FoodUtils.java index 9f5d4f36ca..129548d1db 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/FoodUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/FoodUtils.java @@ -10,51 +10,51 @@ import net.minecraft.item.ItemStack; public class FoodUtils { - public static final Class IEdibleClass; - - static { - IEdibleClass = ReflectionUtils.getClass("squeek.applecore.api.food.IEdible"); - } - - public static boolean isFood(ItemStack food) { - - if (food == null) { - return false; - } - - Item item = food.getItem(); - - if(item == null) { - return false; - } - - EnumAction action = item.getItemUseAction(food); - - if(item instanceof ItemBlock || action == EnumAction.eat || action == EnumAction.drink) { - if(getUnmodifiedFoodValues(food) > 0) { - return true; - } - } - - return false; - } - - private static int getUnmodifiedFoodValues(ItemStack stack) { - - if (stack == null) { - return 0; - } - - Item item = stack.getItem(); - - if(item == null) { - return 0; - } - - if(IEdibleClass.isInstance(item) || item instanceof ItemFood || item == Items.cake) { - return 1; - } - - return 0; - } + public static final Class IEdibleClass; + + static { + IEdibleClass = ReflectionUtils.getClass("squeek.applecore.api.food.IEdible"); + } + + public static boolean isFood(ItemStack food) { + + if (food == null) { + return false; + } + + Item item = food.getItem(); + + if (item == null) { + return false; + } + + EnumAction action = item.getItemUseAction(food); + + if (item instanceof ItemBlock || action == EnumAction.eat || action == EnumAction.drink) { + if (getUnmodifiedFoodValues(food) > 0) { + return true; + } + } + + return false; + } + + private static int getUnmodifiedFoodValues(ItemStack stack) { + + if (stack == null) { + return 0; + } + + Item item = stack.getItem(); + + if (item == null) { + return 0; + } + + if (IEdibleClass.isInstance(item) || item instanceof ItemFood || item == Items.cake) { + return 1; + } + + return 0; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/HazmatUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/HazmatUtils.java index 0e2fff3f35..6c1442cb0d 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/HazmatUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/HazmatUtils.java @@ -2,10 +2,6 @@ package gtPlusPlus.core.util.minecraft; import static gregtech.api.GregTech_API.*; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashMap; - import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gregtech.api.objects.GT_HashSet; import gregtech.api.objects.GT_ItemStack; @@ -21,6 +17,8 @@ import ic2.core.Ic2Items; import ic2.core.item.armor.ItemArmorHazmat; import ic2.core.item.armor.ItemArmorNanoSuit; import ic2.core.item.armor.ItemArmorQuantumSuit; +import java.lang.reflect.Field; +import java.util.HashMap; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -29,576 +27,567 @@ import net.minecraftforge.event.entity.player.ItemTooltipEvent; public class HazmatUtils { - public static final GT_HashSet sHazmatList = new GT_HashSet(); - - private static final HashMap> mToolTips = new HashMap>(); - - private static boolean mInit = false; - private static HazmatUtils mInstance; - - @SuppressWarnings("rawtypes") - public static void init() { - if (mInit) { - return; - } - //doInit(); Disabled, hazmat moved to gt5u - } - public static void doInit() { - - mInstance = new HazmatUtils(); - - sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatHelmet, 1)); - sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatChestplate, 1)); - sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatLeggings, 1)); - sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatBoots, 1)); - - // Make Nano a hazmat suit - // Make Quantum a hazmat suit - - - if (LoadedMods.IndustrialCraft2 || LoadedMods.IndustrialCraft2Classic) { - AutoMap aVanillaIC2Armour = new AutoMap(); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoHelmet, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoBodyarmor, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoLeggings, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoBoots, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumHelmet, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumBodyarmor, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumLeggings, 1)); - aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumBoots, 1)); - for (ItemStack aItem : aVanillaIC2Armour) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered IC2 Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("EMT")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsEMT = ReflectionUtils.getClass("emt.init.EMTItems"); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoThaumicHelmet")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoWing")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoBootsTraveller")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumThaumicHelmet")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumWing")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumArmor")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumBootsTraveller")); - AutoMap aEMT = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = null; - if (aItemField != null) { - try { - aItemObject = (Item) aItemField.get(null); - } - catch (Exception t) { - t.printStackTrace(); - } - } - if (aItemObject != null) { - aEMT.add(ItemUtils.getSimpleStack(aItemObject)); - } - else { - Logger.INFO("[Hazmat] Could not get "+aItemField.getName()+" from "+aItemsEMT.getName()); - } - } - Logger.INFO("[Hazmat] Registering "+aEMT.size()+" EMT Items as hazmat gear."); - for (ItemStack aItem : aEMT) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered EMT Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("DraconicEvolution")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsDE = ReflectionUtils.getClass("com.brandon3055.draconicevolution.ModItems"); - - aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicHelm")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicChest")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicLeggs")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicBoots")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernHelm")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernChest")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernLeggs")); - aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernBoots")); - AutoMap aItemMap = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = null; - if (aItemField != null) { - try { - aItemObject = (Item) aItemField.get(null); - } - catch (Exception t) { - t.printStackTrace(); - } - } - if (aItemObject != null) { - aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); - } - else { - Logger.INFO("[Hazmat] Could not get "+aItemField.getName()+" from "+aItemsDE.getName()); - } - } - Logger.INFO("[Hazmat] Registering "+aItemMap.size()+" Draconic Evolution Items as hazmat gear."); - for (ItemStack aItem : aItemMap) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Draconic Evolution Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("TaintedMagic")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsTaintedMagic = ReflectionUtils.getClass("taintedmagic.common.registry.ItemRegistry"); - - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressHelmet")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressChestplate")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressLeggings")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemVoidwalkerBoots")); - AutoMap aItemMap = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = null; - if (aItemField != null) { - try { - aItemObject = (Item) aItemField.get(null); - } - catch (Exception t) { - t.printStackTrace(); - } - } - if (aItemObject != null) { - aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); - } - else { - Logger.INFO("[Hazmat] Could not get "+aItemField.getName()+" from "+aItemsTaintedMagic.getName()); - } - } - Logger.INFO("[Hazmat] Registering "+aItemMap.size()+" Tainted Magic Items as hazmat gear."); - for (ItemStack aItem : aItemMap) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Tainted Magic Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("WitchingGadgets")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsTaintedMagic = ReflectionUtils.getClass("witchinggadgets.common.WGContent"); - - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialHelm")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialChest")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialLegs")); - aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialBoots")); - AutoMap aItemMap = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = null; - if (aItemField != null) { - try { - aItemObject = (Item) aItemField.get(null); - } - catch (Exception t) { - t.printStackTrace(); - } - } - if (aItemObject != null) { - aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); - } - else { - Logger.INFO("[Hazmat] Could not get "+aItemField.getName()+" from "+aItemsTaintedMagic.getName()); - } - } - Logger.INFO("[Hazmat] Registering "+aItemMap.size()+" Witching Gadgets Items as hazmat gear."); - for (ItemStack aItem : aItemMap) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Witching Gadgets Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("ThaumicTinkerer")) { - /* - AutoMap aItems = new AutoMap(); - Class aMainTT = ReflectionUtils.getClass("thaumic.tinkerer.common.ThaumicTinkerer"); - Class aItemRegistryTT = ReflectionUtils.getClass("thaumic.tinkerer.common.registry.TTRegistry"); - Field aRegistryInstance = ReflectionUtils.getField(aMainTT, "registry"); - Object aRegistry = ReflectionUtils.getFieldValue(aRegistryInstance); - Method aFuckingStupidMethodHandlingMethod = ReflectionUtils.getMethod(aItemRegistryTT, "getFirstItemFromClass", new Class[] {Class.class}); - Item aIchorHelm = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemHelm")}); - Item aIchorChest = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemChest")}); - Item aIchorLegs = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemLegs")}); - Item aIchorBoots = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemBoots")}); - aItems.add(aIchorHelm); - aItems.add(aIchorChest); - aItems.add(aIchorLegs); - aItems.add(aIchorBoots); - AutoMap aItemMap = new AutoMap(); - int aIndex = 0; - for (Item aItem : aItems) { - Item aItemObject = null; - if (aItem != null) { - aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); - } - else { - Logger.INFO("[Hazmat] Could not get item "+aIndex+" from "+aItemRegistryTT.getName()); - } - aIndex++; - } - Logger.INFO("[Hazmat] Registering "+aItemMap.size()+" Thaumic Tinkerer Items as hazmat gear."); - for (ItemStack aItem : aItemMap) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Thaumic Tinkerer Items as hazmat gear."); - */ - Logger.INFO("[Hazmat] Did not register Thaumic Tinkerer Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("GraviSuite")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsGravisuite = ReflectionUtils.getClass("gravisuite.GraviSuite"); - aItemFields.add(ReflectionUtils.getField(aItemsGravisuite, "advNanoChestPlate")); - aItemFields.add(ReflectionUtils.getField(aItemsGravisuite, "graviChestPlate")); - AutoMap aGravisuite = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = ReflectionUtils.getFieldValue(aItemField); - if (aItemObject != null) { - aGravisuite.add(ItemUtils.getSimpleStack(aItemObject)); - } - } - Logger.INFO("[Hazmat] Registering "+aGravisuite.size()+" Gravisuit Items as hazmat gear."); - for (ItemStack aItem : aGravisuite) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Gravisuit Items as hazmat gear."); - } - - if (LoadedMods.isModLoaded("AdvancedSolarPanel")) { - AutoMap aItemFields = new AutoMap(); - Class aItemsEMT = ReflectionUtils.getClass("advsolar.common.AdvancedSolarPanel"); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "advancedSolarHelmet")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "hybridSolarHelmet")); - aItemFields.add(ReflectionUtils.getField(aItemsEMT, "ultimateSolarHelmet")); - AutoMap aASP = new AutoMap(); - for (Field aItemField : aItemFields) { - Item aItemObject = ReflectionUtils.getFieldValue(aItemField); - if (aItemObject != null) { - aASP.add(ItemUtils.getSimpleStack(aItemObject)); - } - } - Logger.INFO("[Hazmat] Registering "+aASP.size()+" Adv. Solar Items as hazmat gear."); - for (ItemStack aItem : aASP) { - addProtection(aItem); - } - Logger.INFO("[Hazmat] Registered Adv. Solar Items as hazmat gear."); - } - - Utils.registerEvent(mInstance); - Logger.INFO("[Hazmat] Registered Tooltip handler for hazmat gear."); - mInit = true; - - } - - private final static String mToolTipText = "Provides protection from:"; - - @SubscribeEvent - public void onItemTooltip(ItemTooltipEvent event) { - //Logger.INFO("Ticking Hazmat handler"); - if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { - - if (event.itemStack == null || isVanillaHazmatPiece(event.itemStack)) { - //Logger.INFO("[Hazmat] Invalid Itemstack or vanilla hazmat"); - return; - } else { - ItemStack aStackTemp = event.itemStack; - GT_ItemStack aStack = new GT_ItemStack(aStackTemp); - if (isNanoArmourPiece(aStackTemp) || isQuantumArmourPiece(aStackTemp)) { - event.toolTip.add(EnumChatFormatting.DARK_PURPLE+"Provides full hazmat protection."); - } - else { - //Logger.INFO("[Hazmat] Finding Tooltip Data"); - String[] aTooltips = getTooltips(aStack); - if (aTooltips == null || aTooltips.length == 0) { - //Logger.INFO("[Hazmat] No Info!"); - return; - } else { - //Logger.INFO("[Hazmat] Found Tooltips!"); - if (providesProtection(aStackTemp)) { - event.toolTip.add(EnumChatFormatting.LIGHT_PURPLE+"Provides full hazmat protection."); - } else { - event.toolTip.add(mToolTipText); - for (String r : aTooltips) { - event.toolTip.add(" - " + r); - } - } - } - } - } - } - } - - /** - * Static function to replace - * {@link #ic2.core.item.armor.ItemArmorHazmat.hasCompleteHazmat(EntityLivingBase)}. - * Because IC2 doesn't let us register things ourself, anything registered via - * GT/GT++ will return true. - * - * @param living - Entity Wearing Armour - * @return - Does {@link EntityLivingBase} have a full hazmat suit on? - */ - public static boolean hasCompleteHazmat(EntityLivingBase living) { - // Entity is Null, cannot have Hazmat. - if (living == null || living.isDead) { - return false; - } else { - - // Map All Player Armour slots - AutoMap aEquipment = new AutoMap(); - for (int i = 1; i < 5; ++i) { - ItemStack stack = living.getEquipmentInSlot(i); - - // Item is Null, cannot have full suit - if (stack == null) { - return false; - } else { - aEquipment.put(stack); - } - } - - // Compare Equipment to all items mapped for full hazmat. - for (ItemStack aSlotStack : aEquipment) { - if (!isHazmatPiece(aSlotStack)) { - //Logger.INFO("Found item which is not hazmat. "+ItemUtils.getItemName(aSlotStack)); - return false; - } - } - - // We are in some kind of full hazmat, huzzah! - //Logger.INFO("Has full hazmat."); - return true; - } - } - - /** - * Is this item vanilla IC2 hazmat? - * - * @param aArmour - The Armour to provide protection. - * @return - */ - public static boolean isVanillaHazmatPiece(ItemStack aArmour) { - return aArmour != null ? aArmour.getItem() instanceof ItemArmorHazmat : false; - } - - /** - * Is this item vanilla IC2 Nanosuit? - * - * @param aArmour - The Armour to provide protection. - * @return - */ - public static boolean isNanoArmourPiece(ItemStack aArmour) { - return aArmour != null ? aArmour.getItem() instanceof ItemArmorNanoSuit : false; - } - - /** - * Is this item vanilla IC2 Quantum? - * - * @param aArmour - The Armour to provide protection. - * @return - */ - public static boolean isQuantumArmourPiece(ItemStack aArmour) { - return aArmour != null ? aArmour.getItem() instanceof ItemArmorQuantumSuit : false; - } - - /** - * Is this item a registered piece of full hazmat? (Provides all 6 protections) - * - * @param aStack - The Armour to provide protection. - * @return - */ - public static boolean isHazmatPiece(ItemStack aStack) { - return isVanillaHazmatPiece(aStack) || providesProtection(aStack); - } - - /** - * Registers the {@link ItemStack} to all types of protection. Provides full - * hazmat protection. Frost, Fire, Bio, Gas, Radioaton & Electricity. - * - * @param aStack - The Armour to provide protection. - * @return - Did we register this ItemStack properly? - */ - public static boolean addProtection(ItemStack aVanStack) { - if (!ItemUtils.checkForInvalidItems(aVanStack)) { - Logger.INFO("=================Bad Hazmat Addition======================"); - Logger.INFO("Called from: "+ReflectionUtils.getMethodName(0)); - Logger.INFO(ReflectionUtils.getMethodName(1)); - Logger.INFO(ReflectionUtils.getMethodName(2)); - Logger.INFO(ReflectionUtils.getMethodName(3)); - Logger.INFO(ReflectionUtils.getMethodName(4)); - Logger.INFO(ReflectionUtils.getMethodName(5)); - Logger.INFO(ReflectionUtils.getMethodName(6)); - Logger.INFO("=========================================================="); - return false; - } - Logger.INFO("[Hazmat] Registering " + ItemUtils.getItemName(aVanStack) + " for full Hazmat protection."); - GT_ItemStack aStack = getGtStackFromVanilla(aVanStack); - AutoMap aAdded = new AutoMap(); - aAdded.put(addProtection_Frost(aStack)); - aAdded.put(addProtection_Fire(aStack)); - aAdded.put(addProtection_Biohazard(aStack)); - aAdded.put(addProtection_Gas(aStack)); - aAdded.put(addProtection_Radiation(aStack)); - aAdded.put(addProtection_Electricty(aStack)); - for (boolean b : aAdded) { - if (!b) { - return false; - } - } - Logger.INFO("[Hazmat] Protection added for all 6 damage types, registering to master Hazmat list."); - sHazmatList.add(aStack); - return true; - } - - public static boolean addProtection_Frost(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.AQUA + "Frost"); - return addProtection_Generic(sFrostHazmatList, aStack); - } - - public static boolean addProtection_Fire(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.DARK_RED + "Heat"); - return addProtection_Generic(sHeatHazmatList, aStack); - } - - public static boolean addProtection_Biohazard(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.GREEN + "Biohazards"); - return addProtection_Generic(sBioHazmatList, aStack); - } - - public static boolean addProtection_Gas(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.WHITE + "Gas"); - return addProtection_Generic(sGasHazmatList, aStack); - } - - public static boolean addProtection_Radiation(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.DARK_GREEN + "Radiation"); - return addProtection_Generic(sRadioHazmatList, aStack); - } - - public static boolean addProtection_Electricty(GT_ItemStack aStack) { - registerTooltip(aStack, EnumChatFormatting.YELLOW + "Electricity"); - return addProtection_Generic(sElectroHazmatList, aStack); - } - - private static boolean addProtection_Generic(GT_HashSet aSet, GT_ItemStack aStack) { - int aMapSize = aSet.size(); - aSet.add(aStack); - return aMapSize < aSet.size(); - } - - /** - * Does this item provide hazmat protection? (Protection against Frost, Heat, - * Bio, Gas, Rads, Elec) An item may return false even if it protects against - * all six damage types. This is because it's not actually registered as hazmat - * correct. - * - * @param aStack - The item to check for protection - * @return - */ - public static boolean providesProtection(ItemStack aStack) { - return providesProtetion_Generic(sHazmatList, aStack); - } - - public static boolean providesProtetion_Frost(ItemStack aStack) { - return providesProtetion_Generic(sFrostHazmatList, aStack); - } - - public static boolean providesProtetion_Fire(ItemStack aStack) { - return providesProtetion_Generic(sHeatHazmatList, aStack); - } - - public static boolean providesProtetion_Biohazard(ItemStack aStack) { - return providesProtetion_Generic(sBioHazmatList, aStack); - } - - public static boolean providesProtetion_Gas(ItemStack aStack) { - return providesProtetion_Generic(sGasHazmatList, aStack); - } - - public static boolean providesProtetion_Radiation(ItemStack aStack) { - return providesProtetion_Generic(sRadioHazmatList, aStack); - } - - public static boolean providesProtetion_Electricity(ItemStack aStack) { - return providesProtetion_Generic(sElectroHazmatList, aStack); - } - - private static boolean providesProtetion_Generic(GT_HashSet aSet, ItemStack aStack) { - if (isVanillaHazmatPiece(aStack)) { - return true; - } - for (GT_ItemStack o : aSet) { - if (o != null && o.mItem != null && aStack != null && aStack.getItem() != null) { - if (GT_Utility.areStacksEqual(o.toStack(), aStack, true)) { - return true; - } - if (o.isStackEqual(aStack)){ - return true; - } - if (o.mItem == aStack.getItem() && EnergyUtils.EU.isElectricItem(aStack)) { - return true; - } - } - } - return false; - } - - private static String[] getTooltips(GT_ItemStack aStack) { - String aKey = convertGtItemstackToStringDataIgnoreDamage(aStack); - AutoMap aTempTooltipData = mToolTips.get(aKey); - if (aTempTooltipData == null || aTempTooltipData.isEmpty()) { - //Logger.INFO("[Hazmat] Item was not mapped for TTs - "+aKey); - return new String[] {}; - } else { - //Logger.INFO("[Hazmat] Item was mapped for TTs"); - //Collections.sort(aTempTooltipData); - //Logger.INFO("[Hazmat] Sorted TTs"); - - String[] mBuiltOutput = new String[aTempTooltipData.size()]; - int aIndex = 0; - for (String i : aTempTooltipData) { - mBuiltOutput[aIndex++] = i; - } - - return mBuiltOutput; - } - } - - private static void registerTooltip(GT_ItemStack aStack, String aTooltip) { - String aKey = convertGtItemstackToStringDataIgnoreDamage(aStack); - Logger.INFO("[Hazmat] Mapping " + aTooltip + " for " + aKey); - AutoMap aTempTooltipData = mToolTips.get(aKey); - if (aTempTooltipData == null) { - Logger.INFO("No data mapped yet, creating."); - aTempTooltipData = new AutoMap(); - mToolTips.put(aKey, aTempTooltipData); - } - aTempTooltipData.add(aTooltip); - } - - public static ItemStack getStackFromGtStack(GT_ItemStack aGtStack) { - return ItemUtils.simpleMetaStack(aGtStack.mItem, aGtStack.mMetaData, aGtStack.mStackSize); - } - - public static GT_ItemStack getGtStackFromVanilla(ItemStack aStack) { - return new GT_ItemStack(aStack); - } - - private static String convertGtItemstackToStringData(GT_ItemStack aStack) { - if (aStack == null) { - return "NULL"; - } else { - return aStack.mItem.getUnlocalizedName() + "." + aStack.mMetaData + "." + aStack.mStackSize; - } - } - - private static String convertGtItemstackToStringDataIgnoreDamage(GT_ItemStack aStack) { - if (aStack == null) { - return "NULL"; - } else { - return aStack.mItem.getUnlocalizedName() + "." + aStack.mStackSize; - } - } - + public static final GT_HashSet sHazmatList = new GT_HashSet(); + + private static final HashMap> mToolTips = new HashMap>(); + + private static boolean mInit = false; + private static HazmatUtils mInstance; + + @SuppressWarnings("rawtypes") + public static void init() { + if (mInit) { + return; + } + // doInit(); Disabled, hazmat moved to gt5u + } + + public static void doInit() { + + mInstance = new HazmatUtils(); + + sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatHelmet, 1)); + sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatChestplate, 1)); + sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatLeggings, 1)); + sHazmatList.add(ItemUtils.getSimpleStack(Ic2Items.hazmatBoots, 1)); + + // Make Nano a hazmat suit + // Make Quantum a hazmat suit + + if (LoadedMods.IndustrialCraft2 || LoadedMods.IndustrialCraft2Classic) { + AutoMap aVanillaIC2Armour = new AutoMap(); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoHelmet, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoBodyarmor, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoLeggings, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.nanoBoots, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumHelmet, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumBodyarmor, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumLeggings, 1)); + aVanillaIC2Armour.add(ItemUtils.getSimpleStack(Ic2Items.quantumBoots, 1)); + for (ItemStack aItem : aVanillaIC2Armour) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered IC2 Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("EMT")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsEMT = ReflectionUtils.getClass("emt.init.EMTItems"); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoThaumicHelmet")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoWing")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "nanoBootsTraveller")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumThaumicHelmet")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumWing")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumArmor")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "quantumBootsTraveller")); + AutoMap aEMT = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = null; + if (aItemField != null) { + try { + aItemObject = (Item) aItemField.get(null); + } catch (Exception t) { + t.printStackTrace(); + } + } + if (aItemObject != null) { + aEMT.add(ItemUtils.getSimpleStack(aItemObject)); + } else { + Logger.INFO("[Hazmat] Could not get " + aItemField.getName() + " from " + aItemsEMT.getName()); + } + } + Logger.INFO("[Hazmat] Registering " + aEMT.size() + " EMT Items as hazmat gear."); + for (ItemStack aItem : aEMT) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered EMT Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("DraconicEvolution")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsDE = ReflectionUtils.getClass("com.brandon3055.draconicevolution.ModItems"); + + aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicHelm")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicChest")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicLeggs")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "draconicBoots")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernHelm")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernChest")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernLeggs")); + aItemFields.add(ReflectionUtils.getField(aItemsDE, "wyvernBoots")); + AutoMap aItemMap = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = null; + if (aItemField != null) { + try { + aItemObject = (Item) aItemField.get(null); + } catch (Exception t) { + t.printStackTrace(); + } + } + if (aItemObject != null) { + aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); + } else { + Logger.INFO("[Hazmat] Could not get " + aItemField.getName() + " from " + aItemsDE.getName()); + } + } + Logger.INFO("[Hazmat] Registering " + aItemMap.size() + " Draconic Evolution Items as hazmat gear."); + for (ItemStack aItem : aItemMap) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Draconic Evolution Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("TaintedMagic")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsTaintedMagic = ReflectionUtils.getClass("taintedmagic.common.registry.ItemRegistry"); + + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressHelmet")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressChestplate")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemShadowFortressLeggings")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemVoidwalkerBoots")); + AutoMap aItemMap = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = null; + if (aItemField != null) { + try { + aItemObject = (Item) aItemField.get(null); + } catch (Exception t) { + t.printStackTrace(); + } + } + if (aItemObject != null) { + aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); + } else { + Logger.INFO( + "[Hazmat] Could not get " + aItemField.getName() + " from " + aItemsTaintedMagic.getName()); + } + } + Logger.INFO("[Hazmat] Registering " + aItemMap.size() + " Tainted Magic Items as hazmat gear."); + for (ItemStack aItem : aItemMap) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Tainted Magic Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("WitchingGadgets")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsTaintedMagic = ReflectionUtils.getClass("witchinggadgets.common.WGContent"); + + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialHelm")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialChest")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialLegs")); + aItemFields.add(ReflectionUtils.getField(aItemsTaintedMagic, "ItemPrimordialBoots")); + AutoMap aItemMap = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = null; + if (aItemField != null) { + try { + aItemObject = (Item) aItemField.get(null); + } catch (Exception t) { + t.printStackTrace(); + } + } + if (aItemObject != null) { + aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); + } else { + Logger.INFO( + "[Hazmat] Could not get " + aItemField.getName() + " from " + aItemsTaintedMagic.getName()); + } + } + Logger.INFO("[Hazmat] Registering " + aItemMap.size() + " Witching Gadgets Items as hazmat gear."); + for (ItemStack aItem : aItemMap) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Witching Gadgets Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("ThaumicTinkerer")) { + /* + AutoMap aItems = new AutoMap(); + Class aMainTT = ReflectionUtils.getClass("thaumic.tinkerer.common.ThaumicTinkerer"); + Class aItemRegistryTT = ReflectionUtils.getClass("thaumic.tinkerer.common.registry.TTRegistry"); + Field aRegistryInstance = ReflectionUtils.getField(aMainTT, "registry"); + Object aRegistry = ReflectionUtils.getFieldValue(aRegistryInstance); + Method aFuckingStupidMethodHandlingMethod = ReflectionUtils.getMethod(aItemRegistryTT, "getFirstItemFromClass", new Class[] {Class.class}); + Item aIchorHelm = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemHelm")}); + Item aIchorChest = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemChest")}); + Item aIchorLegs = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemLegs")}); + Item aIchorBoots = (Item) ReflectionUtils.invokeNonBool(aRegistry, aFuckingStupidMethodHandlingMethod, new Object[] {ReflectionUtils.getClass("thaumic.tinkerer.common.item.kami.armor.ItemGemBoots")}); + aItems.add(aIchorHelm); + aItems.add(aIchorChest); + aItems.add(aIchorLegs); + aItems.add(aIchorBoots); + AutoMap aItemMap = new AutoMap(); + int aIndex = 0; + for (Item aItem : aItems) { + Item aItemObject = null; + if (aItem != null) { + aItemMap.add(ItemUtils.getSimpleStack(aItemObject)); + } + else { + Logger.INFO("[Hazmat] Could not get item "+aIndex+" from "+aItemRegistryTT.getName()); + } + aIndex++; + } + Logger.INFO("[Hazmat] Registering "+aItemMap.size()+" Thaumic Tinkerer Items as hazmat gear."); + for (ItemStack aItem : aItemMap) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Thaumic Tinkerer Items as hazmat gear."); + */ + Logger.INFO("[Hazmat] Did not register Thaumic Tinkerer Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("GraviSuite")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsGravisuite = ReflectionUtils.getClass("gravisuite.GraviSuite"); + aItemFields.add(ReflectionUtils.getField(aItemsGravisuite, "advNanoChestPlate")); + aItemFields.add(ReflectionUtils.getField(aItemsGravisuite, "graviChestPlate")); + AutoMap aGravisuite = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = ReflectionUtils.getFieldValue(aItemField); + if (aItemObject != null) { + aGravisuite.add(ItemUtils.getSimpleStack(aItemObject)); + } + } + Logger.INFO("[Hazmat] Registering " + aGravisuite.size() + " Gravisuit Items as hazmat gear."); + for (ItemStack aItem : aGravisuite) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Gravisuit Items as hazmat gear."); + } + + if (LoadedMods.isModLoaded("AdvancedSolarPanel")) { + AutoMap aItemFields = new AutoMap(); + Class aItemsEMT = ReflectionUtils.getClass("advsolar.common.AdvancedSolarPanel"); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "advancedSolarHelmet")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "hybridSolarHelmet")); + aItemFields.add(ReflectionUtils.getField(aItemsEMT, "ultimateSolarHelmet")); + AutoMap aASP = new AutoMap(); + for (Field aItemField : aItemFields) { + Item aItemObject = ReflectionUtils.getFieldValue(aItemField); + if (aItemObject != null) { + aASP.add(ItemUtils.getSimpleStack(aItemObject)); + } + } + Logger.INFO("[Hazmat] Registering " + aASP.size() + " Adv. Solar Items as hazmat gear."); + for (ItemStack aItem : aASP) { + addProtection(aItem); + } + Logger.INFO("[Hazmat] Registered Adv. Solar Items as hazmat gear."); + } + + Utils.registerEvent(mInstance); + Logger.INFO("[Hazmat] Registered Tooltip handler for hazmat gear."); + mInit = true; + } + + private static final String mToolTipText = "Provides protection from:"; + + @SubscribeEvent + public void onItemTooltip(ItemTooltipEvent event) { + // Logger.INFO("Ticking Hazmat handler"); + if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { + + if (event.itemStack == null || isVanillaHazmatPiece(event.itemStack)) { + // Logger.INFO("[Hazmat] Invalid Itemstack or vanilla hazmat"); + return; + } else { + ItemStack aStackTemp = event.itemStack; + GT_ItemStack aStack = new GT_ItemStack(aStackTemp); + if (isNanoArmourPiece(aStackTemp) || isQuantumArmourPiece(aStackTemp)) { + event.toolTip.add(EnumChatFormatting.DARK_PURPLE + "Provides full hazmat protection."); + } else { + // Logger.INFO("[Hazmat] Finding Tooltip Data"); + String[] aTooltips = getTooltips(aStack); + if (aTooltips == null || aTooltips.length == 0) { + // Logger.INFO("[Hazmat] No Info!"); + return; + } else { + // Logger.INFO("[Hazmat] Found Tooltips!"); + if (providesProtection(aStackTemp)) { + event.toolTip.add(EnumChatFormatting.LIGHT_PURPLE + "Provides full hazmat protection."); + } else { + event.toolTip.add(mToolTipText); + for (String r : aTooltips) { + event.toolTip.add(" - " + r); + } + } + } + } + } + } + } + + /** + * Static function to replace + * {@link #ic2.core.item.armor.ItemArmorHazmat.hasCompleteHazmat(EntityLivingBase)}. + * Because IC2 doesn't let us register things ourself, anything registered via + * GT/GT++ will return true. + * + * @param living - Entity Wearing Armour + * @return - Does {@link EntityLivingBase} have a full hazmat suit on? + */ + public static boolean hasCompleteHazmat(EntityLivingBase living) { + // Entity is Null, cannot have Hazmat. + if (living == null || living.isDead) { + return false; + } else { + + // Map All Player Armour slots + AutoMap aEquipment = new AutoMap(); + for (int i = 1; i < 5; ++i) { + ItemStack stack = living.getEquipmentInSlot(i); + + // Item is Null, cannot have full suit + if (stack == null) { + return false; + } else { + aEquipment.put(stack); + } + } + + // Compare Equipment to all items mapped for full hazmat. + for (ItemStack aSlotStack : aEquipment) { + if (!isHazmatPiece(aSlotStack)) { + // Logger.INFO("Found item which is not hazmat. "+ItemUtils.getItemName(aSlotStack)); + return false; + } + } + + // We are in some kind of full hazmat, huzzah! + // Logger.INFO("Has full hazmat."); + return true; + } + } + + /** + * Is this item vanilla IC2 hazmat? + * + * @param aArmour - The Armour to provide protection. + * @return + */ + public static boolean isVanillaHazmatPiece(ItemStack aArmour) { + return aArmour != null ? aArmour.getItem() instanceof ItemArmorHazmat : false; + } + + /** + * Is this item vanilla IC2 Nanosuit? + * + * @param aArmour - The Armour to provide protection. + * @return + */ + public static boolean isNanoArmourPiece(ItemStack aArmour) { + return aArmour != null ? aArmour.getItem() instanceof ItemArmorNanoSuit : false; + } + + /** + * Is this item vanilla IC2 Quantum? + * + * @param aArmour - The Armour to provide protection. + * @return + */ + public static boolean isQuantumArmourPiece(ItemStack aArmour) { + return aArmour != null ? aArmour.getItem() instanceof ItemArmorQuantumSuit : false; + } + + /** + * Is this item a registered piece of full hazmat? (Provides all 6 protections) + * + * @param aStack - The Armour to provide protection. + * @return + */ + public static boolean isHazmatPiece(ItemStack aStack) { + return isVanillaHazmatPiece(aStack) || providesProtection(aStack); + } + + /** + * Registers the {@link ItemStack} to all types of protection. Provides full + * hazmat protection. Frost, Fire, Bio, Gas, Radioaton & Electricity. + * + * @param aStack - The Armour to provide protection. + * @return - Did we register this ItemStack properly? + */ + public static boolean addProtection(ItemStack aVanStack) { + if (!ItemUtils.checkForInvalidItems(aVanStack)) { + Logger.INFO("=================Bad Hazmat Addition======================"); + Logger.INFO("Called from: " + ReflectionUtils.getMethodName(0)); + Logger.INFO(ReflectionUtils.getMethodName(1)); + Logger.INFO(ReflectionUtils.getMethodName(2)); + Logger.INFO(ReflectionUtils.getMethodName(3)); + Logger.INFO(ReflectionUtils.getMethodName(4)); + Logger.INFO(ReflectionUtils.getMethodName(5)); + Logger.INFO(ReflectionUtils.getMethodName(6)); + Logger.INFO("=========================================================="); + return false; + } + Logger.INFO("[Hazmat] Registering " + ItemUtils.getItemName(aVanStack) + " for full Hazmat protection."); + GT_ItemStack aStack = getGtStackFromVanilla(aVanStack); + AutoMap aAdded = new AutoMap(); + aAdded.put(addProtection_Frost(aStack)); + aAdded.put(addProtection_Fire(aStack)); + aAdded.put(addProtection_Biohazard(aStack)); + aAdded.put(addProtection_Gas(aStack)); + aAdded.put(addProtection_Radiation(aStack)); + aAdded.put(addProtection_Electricty(aStack)); + for (boolean b : aAdded) { + if (!b) { + return false; + } + } + Logger.INFO("[Hazmat] Protection added for all 6 damage types, registering to master Hazmat list."); + sHazmatList.add(aStack); + return true; + } + + public static boolean addProtection_Frost(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.AQUA + "Frost"); + return addProtection_Generic(sFrostHazmatList, aStack); + } + + public static boolean addProtection_Fire(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.DARK_RED + "Heat"); + return addProtection_Generic(sHeatHazmatList, aStack); + } + + public static boolean addProtection_Biohazard(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.GREEN + "Biohazards"); + return addProtection_Generic(sBioHazmatList, aStack); + } + + public static boolean addProtection_Gas(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.WHITE + "Gas"); + return addProtection_Generic(sGasHazmatList, aStack); + } + + public static boolean addProtection_Radiation(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.DARK_GREEN + "Radiation"); + return addProtection_Generic(sRadioHazmatList, aStack); + } + + public static boolean addProtection_Electricty(GT_ItemStack aStack) { + registerTooltip(aStack, EnumChatFormatting.YELLOW + "Electricity"); + return addProtection_Generic(sElectroHazmatList, aStack); + } + + private static boolean addProtection_Generic(GT_HashSet aSet, GT_ItemStack aStack) { + int aMapSize = aSet.size(); + aSet.add(aStack); + return aMapSize < aSet.size(); + } + + /** + * Does this item provide hazmat protection? (Protection against Frost, Heat, + * Bio, Gas, Rads, Elec) An item may return false even if it protects against + * all six damage types. This is because it's not actually registered as hazmat + * correct. + * + * @param aStack - The item to check for protection + * @return + */ + public static boolean providesProtection(ItemStack aStack) { + return providesProtetion_Generic(sHazmatList, aStack); + } + + public static boolean providesProtetion_Frost(ItemStack aStack) { + return providesProtetion_Generic(sFrostHazmatList, aStack); + } + + public static boolean providesProtetion_Fire(ItemStack aStack) { + return providesProtetion_Generic(sHeatHazmatList, aStack); + } + + public static boolean providesProtetion_Biohazard(ItemStack aStack) { + return providesProtetion_Generic(sBioHazmatList, aStack); + } + + public static boolean providesProtetion_Gas(ItemStack aStack) { + return providesProtetion_Generic(sGasHazmatList, aStack); + } + + public static boolean providesProtetion_Radiation(ItemStack aStack) { + return providesProtetion_Generic(sRadioHazmatList, aStack); + } + + public static boolean providesProtetion_Electricity(ItemStack aStack) { + return providesProtetion_Generic(sElectroHazmatList, aStack); + } + + private static boolean providesProtetion_Generic(GT_HashSet aSet, ItemStack aStack) { + if (isVanillaHazmatPiece(aStack)) { + return true; + } + for (GT_ItemStack o : aSet) { + if (o != null && o.mItem != null && aStack != null && aStack.getItem() != null) { + if (GT_Utility.areStacksEqual(o.toStack(), aStack, true)) { + return true; + } + if (o.isStackEqual(aStack)) { + return true; + } + if (o.mItem == aStack.getItem() && EnergyUtils.EU.isElectricItem(aStack)) { + return true; + } + } + } + return false; + } + + private static String[] getTooltips(GT_ItemStack aStack) { + String aKey = convertGtItemstackToStringDataIgnoreDamage(aStack); + AutoMap aTempTooltipData = mToolTips.get(aKey); + if (aTempTooltipData == null || aTempTooltipData.isEmpty()) { + // Logger.INFO("[Hazmat] Item was not mapped for TTs - "+aKey); + return new String[] {}; + } else { + // Logger.INFO("[Hazmat] Item was mapped for TTs"); + // Collections.sort(aTempTooltipData); + // Logger.INFO("[Hazmat] Sorted TTs"); + + String[] mBuiltOutput = new String[aTempTooltipData.size()]; + int aIndex = 0; + for (String i : aTempTooltipData) { + mBuiltOutput[aIndex++] = i; + } + + return mBuiltOutput; + } + } + + private static void registerTooltip(GT_ItemStack aStack, String aTooltip) { + String aKey = convertGtItemstackToStringDataIgnoreDamage(aStack); + Logger.INFO("[Hazmat] Mapping " + aTooltip + " for " + aKey); + AutoMap aTempTooltipData = mToolTips.get(aKey); + if (aTempTooltipData == null) { + Logger.INFO("No data mapped yet, creating."); + aTempTooltipData = new AutoMap(); + mToolTips.put(aKey, aTempTooltipData); + } + aTempTooltipData.add(aTooltip); + } + + public static ItemStack getStackFromGtStack(GT_ItemStack aGtStack) { + return ItemUtils.simpleMetaStack(aGtStack.mItem, aGtStack.mMetaData, aGtStack.mStackSize); + } + + public static GT_ItemStack getGtStackFromVanilla(ItemStack aStack) { + return new GT_ItemStack(aStack); + } + + private static String convertGtItemstackToStringData(GT_ItemStack aStack) { + if (aStack == null) { + return "NULL"; + } else { + return aStack.mItem.getUnlocalizedName() + "." + aStack.mMetaData + "." + aStack.mStackSize; + } + } + + private static String convertGtItemstackToStringDataIgnoreDamage(GT_ItemStack aStack) { + if (aStack == null) { + return "NULL"; + } else { + return aStack.mItem.getUnlocalizedName() + "." + aStack.mStackSize; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/InventoryUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/InventoryUtils.java index fe67c88d69..8fc5b90b62 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/InventoryUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/InventoryUtils.java @@ -1,12 +1,10 @@ package gtPlusPlus.core.util.minecraft; -import java.util.Random; - import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.util.GT_Utility; import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG; +import java.util.Random; import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; @@ -16,73 +14,82 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class InventoryUtils { - - private final static Random mRandom = new Random(); - - public static void dropInventoryItems(World world, int x, int y, int z, Block block) { - TileEntity tileentity = world.getTileEntity(x, y, z); - if (tileentity != null && tileentity instanceof IInventory && ((IInventory) tileentity).getSizeInventory() > 0) { - - IInventory aTileInv = (IInventory) tileentity; - int aMinSlot = 0; - int aMaxSlot = aTileInv.getSizeInventory()-1; - - for (int i1 = aMinSlot; i1 < aMaxSlot; ++i1) { - ItemStack itemstack = aTileInv.getStackInSlot(i1); + private static final Random mRandom = new Random(); + + public static void dropInventoryItems(World world, int x, int y, int z, Block block) { + TileEntity tileentity = world.getTileEntity(x, y, z); + + if (tileentity != null + && tileentity instanceof IInventory + && ((IInventory) tileentity).getSizeInventory() > 0) { + + IInventory aTileInv = (IInventory) tileentity; + int aMinSlot = 0; + int aMaxSlot = aTileInv.getSizeInventory() - 1; - if (itemstack != null) { - float f = mRandom.nextFloat() * 0.8F + 0.1F; - float f1 = mRandom.nextFloat() * 0.8F + 0.1F; - EntityItem entityitem; + for (int i1 = aMinSlot; i1 < aMaxSlot; ++i1) { + ItemStack itemstack = aTileInv.getStackInSlot(i1); - for (float f2 = mRandom.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem)) { - int j1 = mRandom.nextInt(21) + 10; + if (itemstack != null) { + float f = mRandom.nextFloat() * 0.8F + 0.1F; + float f1 = mRandom.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem; - if (j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } + for (float f2 = mRandom.nextFloat() * 0.8F + 0.1F; + itemstack.stackSize > 0; + world.spawnEntityInWorld(entityitem)) { + int j1 = mRandom.nextInt(21) + 10; - itemstack.stackSize -= j1; - entityitem = new EntityItem(world, x + f, y + f1, z + f2, - new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - float f3 = 0.05F; - entityitem.motionX = (float) mRandom.nextGaussian() * f3; - entityitem.motionY = (float) mRandom.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) mRandom.nextGaussian() * f3; + if (j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } - if (itemstack.hasTagCompound()) { - entityitem.getEntityItem() - .setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - } - } - } + itemstack.stackSize -= j1; + entityitem = new EntityItem( + world, + x + f, + y + f1, + z + f2, + new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + float f3 = 0.05F; + entityitem.motionX = (float) mRandom.nextGaussian() * f3; + entityitem.motionY = (float) mRandom.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) mRandom.nextGaussian() * f3; - world.func_147453_f(x, y, z, block); - } + if (itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) + itemstack.getTagCompound().copy()); + } + } + } + } - } + world.func_147453_f(x, y, z, block); + } + } - public static void sortInventoryItems(MetaTileEntity aTile) { - sortInventoryItems(aTile.getBaseMetaTileEntity()); - } + public static void sortInventoryItems(MetaTileEntity aTile) { + sortInventoryItems(aTile.getBaseMetaTileEntity()); + } - public static void sortInventoryItems(IGregTechTileEntity aBaseMetaTileEntity) { - IInventory mInv = aBaseMetaTileEntity.getIInventory(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()); - AutoMap aInvContents = new AutoMap(); - int aSize = mInv.getSizeInventory(); - for (int slot=0; slot aInvContents = new AutoMap(); + int aSize = mInv.getSizeInventory(); + for (int slot = 0; slot < aSize; slot++) { + aInvContents.put(mInv.getStackInSlot(slot)); + } + ItemStack[] mInventory = aInvContents.toArray(); + for (int i = 0; i < mInventory.length; i++) { + for (int j = i + 1; j < mInventory.length; j++) { + if (mInventory[j] != null + && (mInventory[i] == null || GT_Utility.areStacksEqual(mInventory[i], mInventory[j]))) { + GT_Utility.moveStackFromSlotAToSlotB( + aBaseMetaTileEntity, aBaseMetaTileEntity, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1); + } + } + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java index 32d838b036..ad7bcdd063 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java @@ -1,10 +1,5 @@ package gtPlusPlus.core.util.minecraft; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; import gregtech.api.enums.GT_Values; @@ -27,7 +22,6 @@ import gtPlusPlus.core.item.base.dusts.decimal.BaseItemDecidust; import gtPlusPlus.core.item.base.plates.BaseItemPlate_OLD; import gtPlusPlus.core.item.chemistry.AgriculturalChem; import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.item.chemistry.RocketFuels; import gtPlusPlus.core.item.tool.staballoy.MultiPickaxeBase; import gtPlusPlus.core.item.tool.staballoy.MultiSpadeBase; import gtPlusPlus.core.lib.CORE; @@ -41,6 +35,10 @@ import gtPlusPlus.preloader.CORE_Preloader; import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaTool; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_DustGeneration; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentData; @@ -58,1368 +56,1407 @@ import net.minecraftforge.oredict.OreDictionary; public class ItemUtils { - public static ItemStack getSimpleStack(final Item x) { - return getSimpleStack(x, 1); - } - - public static ItemStack getSimpleStack(final Block x) { - return simpleMetaStack(Item.getItemFromBlock(x), 0, 1); - } - - - public static ItemStack getSimpleStack(final Block x, int i) { - if (i == 0) { - return getSimpleStack(x, i, 1); - } - - return getSimpleStack(x, 0, i); - } - - public static ItemStack getSimpleStack(final Block x, int meta, int i) { - return simpleMetaStack(Item.getItemFromBlock(x), meta, i); - } - - public static ItemStack getSimpleStack(final Item x, final int i) { - try { - final ItemStack r = new ItemStack(x, i); - return r.copy(); - } catch (final Throwable e) { - return null; - } - } - - public static ItemStack getSimpleStack(final ItemStack x, final int i) { - try { - final ItemStack r = x.copy(); - r.stackSize = i; - return r; - } catch (final Throwable e) { - return null; - } - } - - public static final int WILDCARD_VALUE = Short.MAX_VALUE; - - public static ItemStack getWildcardStack(final Item x) { - final ItemStack y = new ItemStack(x, 1, WILDCARD_VALUE); - return y; - } - - public static ItemStack getWildcardStack(final ItemStack x) { - final ItemStack y = ItemUtils.simpleMetaStack(x, WILDCARD_VALUE, 1); - return y; - } - - public static ItemStack getIC2Cell(final String S) { - final ItemStack moreTemp = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell" + S, 1); - - if (moreTemp == null) { - final int cellID = 0; - final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", 1L, cellID); - return temp != null ? temp : null; - } - - return moreTemp; - } - - public static ItemStack getIC2Cell(final int meta) { - final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", 1L, meta); - return temp != null ? temp : null; - } - - public static ItemStack getEmptyCell() { - return getEmptyCell(1); - } - - public static ItemStack getEmptyCell(int i) { - if (ItemList.Cell_Empty.hasBeenSet()) { - return ItemList.Cell_Empty.get(i); - } - final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", i, 0); - return temp != null ? temp : null; - } - - public static void getItemForOreDict(final String FQRN, final String oreDictName, final String itemName, - final int meta) { - try { - Item em = null; - final Item em1 = getItemFromFQRN(FQRN); - // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); - if (em1 != null) { - em = em1; - } - if (em != null) { - - final ItemStack metaStack = new ItemStack(em, 1, meta); - GT_OreDictUnificator.registerOre(oreDictName, metaStack); - - /* - * ItemStack itemStackWithMeta = new ItemStack(em,1,meta); - * GT_OreDictUnificator.registerOre(oreDictName, new - * ItemStack(itemStackWithMeta.getItem())); - */ - } - } catch (final NullPointerException e) { - Logger.ERROR(itemName + " not found. [NULL]"); - } - } - - public static void addItemToOreDictionary(ItemStack stack, final String oreDictName, boolean useWildcardMeta) { - if (useWildcardMeta) { - stack = ItemUtils.getWildcardStack(stack); - } - try { - OreDictionary.registerOre(oreDictName, stack); - } catch (final NullPointerException e) { - Logger.ERROR(ItemUtils.getItemName(stack) + " not registered. [NULL]"); - } - } - - public static void addItemToOreDictionary(final ItemStack stack, final String oreDictName) { - addItemToOreDictionary(stack, oreDictName, false); - } - - public static ItemStack getItemStackWithMeta(final boolean MOD, final String FQRN, final String itemName, - final int meta, final int itemstackSize) { - if (MOD) { - try { - Item em = null; - final Item em1 = getItemFromFQRN(FQRN); - // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); - if (em1 != null) { - if (null == em) { - em = em1; - } - if (em != null) { - final ItemStack metaStack = new ItemStack(em, itemstackSize, meta); - return metaStack; - } - } - return null; - } catch (final NullPointerException e) { - Logger.ERROR(itemName + " not found. [NULL]"); - return null; - } - } - return null; - } - - public static ItemStack simpleMetaStack(final String FQRN, final int meta, final int itemstackSize) { - try { - Item em = null; - final Item em1 = getItemFromFQRN(FQRN); - // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); - if (em1 != null) { - if (null == em) { - em = em1; - } - if (em != null) { - final ItemStack metaStack = new ItemStack(em, itemstackSize, meta); - return metaStack; - } - } - return null; - } catch (final NullPointerException e) { - Logger.ERROR(FQRN + " not found. [NULL]"); - return null; - } - } - - public static ItemStack simpleMetaStack(ItemStack simpleStack, int meta, int size) { - return simpleMetaStack(simpleStack.getItem(), meta, size); - } - - public static ItemStack simpleMetaStack(final Item item, int meta, int size) { - if (item == null) { - return null; - } - if (meta < 0 || meta > Short.MAX_VALUE) { - meta = 0; - } - if (size < 0 || size > 64) { - size = 1; - } - //Logger.INFO("Found Metastack: " + item.getUnlocalizedName() + ":" + meta); - //Logger.INFO(""+ReflectionUtils.getMethodName(0)); - //Logger.INFO(""+ReflectionUtils.getMethodName(1)); - //Logger.INFO(""+ReflectionUtils.getMethodName(2)); - //Logger.INFO(""+ReflectionUtils.getMethodName(3)); - //Logger.INFO(""+ReflectionUtils.getMethodName(4)); - final ItemStack metaStack = new ItemStack(item, size, meta); - return metaStack; - } - - public static ItemStack simpleMetaStack(final Block block, final int meta, final int size) { - return simpleMetaStack(Item.getItemFromBlock(block), meta, size); - } - - public static ItemStack getCorrectStacktype(final String fqrn, final int stackSize) { - final String oreDict = "ore:"; - ItemStack temp; - if (fqrn.toLowerCase().contains(oreDict.toLowerCase())) { - final String sanitizedName = fqrn.replace(oreDict, ""); - temp = ItemUtils.getItemStackFromFQRN(sanitizedName, stackSize); - return temp; - } - final String[] fqrnSplit = fqrn.split(":"); - String temp1; - String temp2; - temp1 = fqrnSplit[1]; - if (fqrnSplit.length < 3) { - temp2 = "0"; - } else { - temp2 = fqrnSplit[2]; - } - temp = ItemUtils.getItemStackWithMeta(LoadedMods.MiscUtils, fqrn, temp1, Integer.parseInt(temp2), stackSize); - return temp; - } - - public static ItemStack getCorrectStacktype(final Object item_Input, final int stackSize) { - if (item_Input instanceof String) { - return getItemStackOfAmountFromOreDictNoBroken((String) item_Input, stackSize); - } else if (item_Input instanceof ItemStack) { - return (ItemStack) item_Input; - } - return null; - } - - public static Item getItemFromFQRN(final String fqrn) // fqrn = fully qualified resource name - { - final String[] fqrnSplit = fqrn.split(":"); - return GameRegistry.findItem(fqrnSplit[0], fqrnSplit[1]); - } - - public static ItemStack getItemStackFromFQRN(final String fqrn, final int Size) // fqrn = fully qualified resource name - { - Logger.INFO("Trying to split string '"+fqrn+"'."); - final String[] fqrnSplit = fqrn.split(":"); - if (fqrnSplit.length < 2) { - return null; - } - else { - if (fqrnSplit.length == 2) { - Logger.INFO("Mod: "+fqrnSplit[0]+", Item: "+fqrnSplit[1]); - return GameRegistry.findItemStack(fqrnSplit[0], fqrnSplit[1], Size); - } - else if (fqrnSplit.length == 3 && fqrnSplit[2] != null && fqrnSplit[2].length() > 0) { - Logger.INFO("Mod: "+fqrnSplit[0]+", Item: "+fqrnSplit[1]+", Meta: "+fqrnSplit[2]); - ItemStack aStack = GameRegistry.findItemStack(fqrnSplit[0], fqrnSplit[1], Size); - int aMeta = Integer.parseInt(fqrnSplit[2]); - if (aStack != null && (aMeta >= 0 && aMeta <= Short.MAX_VALUE)){ - return ItemUtils.simpleMetaStack(aStack, aMeta, Size); - } - else { - Logger.INFO("Could not find instance of Item: "+fqrnSplit[1]); - - } - } - - } - return null; - } - - public static void generateSpawnEgg(final String entityModID, final String parSpawnName, final int colourEgg, - final int colourOverlay) { - final Item itemSpawnEgg = new BasicSpawnEgg(entityModID, parSpawnName, colourEgg, colourOverlay) - .setUnlocalizedName("spawn_egg_" + parSpawnName.toLowerCase()) - .setTextureName(CORE.MODID + ":spawn_egg"); - GameRegistry.registerItem(itemSpawnEgg, "spawnEgg" + parSpawnName); - } - - public static ItemStack[] validItemsForOreDict(final String oredictName) { - final List validNames = MaterialUtils.oreDictValuesForEntry(oredictName); - final ItemStack[] inputs = new ItemStack[validNames.size()]; - for (int i = 0; i < validNames.size(); i++) { - inputs[i] = (ItemStack) validNames.get(i); - } - return inputs; - } - - public static ItemStack getItemStackOfAmountFromOreDict(String oredictName, final int amount) { - String mTemp = oredictName; - - if (oredictName.contains("-") || oredictName.contains("_")) { - mTemp = Utils.sanitizeString(mTemp, new char[] {'-', '_'}); - } - else { - mTemp = Utils.sanitizeString(mTemp); - } - - - - if (oredictName.contains("rod")) { - String s = "stick"+oredictName.substring(3); - oredictName = s; - } - - // Banned Materials and replacements for GT5.8 compat. - - if (oredictName.toLowerCase().contains("ingotclay")) { - return getSimpleStack(Items.clay_ball, amount); - } - - if (!CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { - if (oredictName.toLowerCase().contains("rutile")) { - mTemp = oredictName.replace("Rutile", "Titanium"); - } - if (oredictName.toLowerCase().contains("vanadiumsteel")) { - mTemp = oredictName.replace("VanadiumSteel", "StainlessSteel"); - } - } - final ArrayList oreDictList = OreDictionary.getOres(mTemp); - if (!oreDictList.isEmpty()) { - final ItemStack returnValue = oreDictList.get(0).copy(); - returnValue.stackSize = amount; - return returnValue; - } - Logger.INFO("Failed to find `" + oredictName + "` in OD."); - return getErrorStack(amount, oredictName+" x"+amount); - //return getItemStackOfAmountFromOreDictNoBroken(mTemp, amount); - } - - public static ItemStack getItemStackOfAmountFromOreDictNoBroken(String oredictName, final int amount) { - if (CORE_Preloader.DEBUG_MODE) { - Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(1)); - Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(2)); - Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(3)); - Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(4)); - Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(5)); - } - - try { - - if (oredictName.contains("-") || oredictName.contains("_")) { - oredictName = Utils.sanitizeString(oredictName, new char[] {'-', '_'}); - } - else { - oredictName = Utils.sanitizeString(oredictName); - } - - // Adds a check to grab dusts using GT methodology if possible. - ItemStack returnValue = null; - if (oredictName.toLowerCase().contains("dust")) { - final String MaterialName = oredictName.toLowerCase().replace("dust", ""); - final Materials m = Materials.get(MaterialName); - if (m != null && m != Materials._NULL) { - returnValue = getGregtechDust(m, amount); - if (checkForInvalidItems(returnValue)) { - return returnValue; - } - } - } - if (returnValue == null) { - returnValue = getItemStackOfAmountFromOreDict(oredictName, amount); - if (ItemUtils.checkForInvalidItems(returnValue)) { - return returnValue.copy(); - } - } - - Logger.RECIPE(oredictName + " was not valid."); - return null; - } catch (final Throwable t) { - return null; - } - } - - public static ItemStack getGregtechDust(final Materials material, final int amount) { - final ItemStack returnValue = GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L); - if (returnValue != null) { - if (ItemUtils.checkForInvalidItems(returnValue)) { - return returnValue.copy(); - } - } - Logger.WARNING(material + " was not valid."); - return null; - } - - // NullFormula - public static Item[] generateSpecialUseDusts(final String unlocalizedName, final String materialName, - final int Colour) { - return generateSpecialUseDusts(unlocalizedName, materialName, "NullFormula", Colour); - } - - public static Item[] generateSpecialUseDusts(final String unlocalizedName, final String materialName, - String mChemForm, final int Colour) { - final Item[] output = { - new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, mChemForm, Colour, "Dust"), - new BaseItemDustUnique("itemDustSmall" + unlocalizedName, materialName, mChemForm, Colour, "Small"), - new BaseItemDustUnique("itemDustTiny" + unlocalizedName, materialName, mChemForm, Colour, "Tiny") }; - - //Generate Shaped/Shapeless Recipes - - final ItemStack normalDust = ItemUtils.getSimpleStack(output[0]); - final ItemStack smallDust = ItemUtils.getSimpleStack(output[1]); - final ItemStack tinyDust = ItemUtils.getSimpleStack(output[2]); - - CORE.RA.addpackagerRecipe(ItemList.Schematic_Dust.get(0), smallDust, tinyDust, normalDust); - - if (ItemUtils.checkForInvalidItems(tinyDust) && ItemUtils.checkForInvalidItems(normalDust)) { - if (RecipeUtils.addShapedRecipe( - tinyDust, tinyDust, tinyDust, - tinyDust, tinyDust, tinyDust, - tinyDust, tinyDust, tinyDust, - normalDust)){ - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: "+materialName+" - Success"); - } - else { - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: "+materialName+" - Failed"); - } - - if (RecipeUtils.addShapedRecipe( - normalDust, null, null, - null, null, null, - null, null, null, - ItemUtils.getSimpleStack(tinyDust, 9))){ - Logger.WARNING("9 Tiny dust from 1 Recipe: "+materialName+" - Success"); - } - else { - Logger.WARNING("9 Tiny dust from 1 Recipe: "+materialName+" - Failed"); - } - } - - if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(normalDust)) { - if (RecipeUtils.addShapedRecipe( - smallDust, smallDust, null, - smallDust, smallDust, null, - null, null, null, - normalDust)){ - Logger.WARNING("4 Small dust to 1 Dust Recipe: "+materialName+" - Success"); - } - else { - Logger.WARNING("4 Small dust to 1 Dust Recipe: "+materialName+" - Failed"); - } - if (RecipeUtils.addShapedRecipe( - null, normalDust, null, - null, null, null, - null, null, null, - ItemUtils.getSimpleStack(smallDust, 4))){ - Logger.WARNING("4 Small dust from 1 Dust Recipe: "+materialName+" - Success"); - } - else { - Logger.WARNING("4 Small dust from 1 Dust Recipe: "+materialName+" - Failed"); - } - } - - return output; - } - - public static Item generateSpecialUsePlate(final String internalName, final String displayName, final short[] rgb, - final int radioactivity) { - return generateSpecialUsePlate(internalName, displayName, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), - radioactivity); - } - - public static Item generateSpecialUsePlate(final String internalName, final String displayName, - final String mFormula, final short[] rgb, final int radioactivity) { - return generateSpecialUsePlate(internalName, displayName, mFormula, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), - radioactivity); - } - - public static Item generateSpecialUsePlate(final String internalName, final String displayName, final int rgb, - final int radioactivity) { - return new BaseItemPlate_OLD(internalName, displayName, rgb, radioactivity); - } - - public static Item generateSpecialUsePlate(final String internalName, final String displayName, - final String mFormula, final int rgb, final int radioactivity) { - return new BaseItemPlate_OLD(internalName, displayName, mFormula, rgb, radioactivity); - } - - - public static Item[] generateSpecialUseDusts(final Material material, final boolean onlyLargeDust) { - return generateSpecialUseDusts(material, onlyLargeDust, false); - } - - public static Item[] generateSpecialUseDusts(final Material material, final boolean onlyLargeDust, final boolean disableExtraRecipes) { - final String materialName = material.getLocalizedName(); - final String unlocalizedName = Utils.sanitizeString(materialName); - final int Colour = material.getRgbAsHex(); - final String aChemForm = material.vChemicalFormula; - final boolean isChemFormvalid = (aChemForm != null && aChemForm.length() > 0); - Item[] output = null; - if (onlyLargeDust == false) { - output = new Item[] { new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, isChemFormvalid ? aChemForm : "", Colour, "Dust"), - new BaseItemDustUnique("itemDustSmall" + unlocalizedName, materialName, isChemFormvalid ? aChemForm : "", Colour, "Small"), - new BaseItemDustUnique("itemDustTiny" + unlocalizedName, materialName, isChemFormvalid ? aChemForm : "", Colour, "Tiny") }; - } else { - output = new Item[] { new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, Colour, "Dust") }; - } - - new RecipeGen_DustGeneration(material, disableExtraRecipes); - - return output; - } - - public static MultiPickaxeBase generateMultiPick(final boolean GT_Durability, final Materials material) { - final ToolMaterial customMaterial = Utils.generateToolMaterialFromGT(material); - final int enchantLevel = material.mEnchantmentToolsLevel; - final Object enchant = new Pair(material.mEnchantmentTools, enchantLevel); - return generateMultiPick(GT_Durability, customMaterial, material.mDefaultLocalName, material.mDurability, - material.mRGBa, enchant); - } - - public static MultiPickaxeBase generateMultiPick(final Material material) { - final ToolMaterial customMaterial = Utils.generateToolMaterial(material); - return generateMultiPick(true, customMaterial, material.getLocalizedName(), (int) material.vDurability, - material.getRGBA(), null); - } - - public static MultiPickaxeBase generateMultiPick(final boolean GT_Durability, final ToolMaterial customMaterial, - final String name, final int durability, final short[] rgba, final Object enchantment) { - Logger.WARNING("Generating a Multi-Pick out of " + name); - final short[] rgb = rgba; - int dur = customMaterial.getMaxUses(); - Logger.WARNING("Determined durability for " + name + " is " + dur); - if (GT_Durability) { - dur = durability * 100; - Logger.WARNING("Using gregtech durability value, " + name + " is now " + dur + "."); - } else if (dur <= 0) { - dur = durability; - Logger.WARNING("Determined durability too low, " + name + " is now " + dur - + " based on the GT material durability."); - } - if (dur <= 0) { - Logger.WARNING("Still too low, " + name + " will now go unused."); - return null; - } - - Object enchant; - if (enchantment != null) { - if (enchantment instanceof Pair) { - enchant = enchantment; - } - } else { - enchant = null; - } - - final MultiPickaxeBase MP_Redstone = new MultiPickaxeBase(name + " Multipick", (customMaterial), dur, - Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), enchantment); - - if (MP_Redstone.isValid) { - return MP_Redstone; - } - Logger.WARNING("Pickaxe was not valid."); - return null; - } - - public static MultiSpadeBase generateMultiShovel(final boolean GT_Durability, final Materials material) { - final ToolMaterial customMaterial = Utils.generateToolMaterialFromGT(material); - return generateMultiShovel(GT_Durability, customMaterial, material.mDefaultLocalName, material.mDurability, - material.mRGBa); - } - - public static MultiSpadeBase generateMultiShovel(final Material material) { - final ToolMaterial customMaterial = Utils.generateToolMaterial(material); - return generateMultiShovel(true, customMaterial, material.getLocalizedName(), (int) material.vDurability, - material.getRGBA()); - } - - public static MultiSpadeBase generateMultiShovel(final boolean GT_Durability, final ToolMaterial customMaterial, - final String name, final int durability, final short[] rgba) { - Logger.WARNING("Generating a Multi-Spade out of " + name); - final short[] rgb = rgba; - int dur = customMaterial.getMaxUses(); - Logger.WARNING("Determined durability for " + name + " is " + dur); - if (GT_Durability) { - dur = durability * 100; - Logger.WARNING("Using gregtech durability value, " + name + " is now " + dur + "."); - } else if (dur <= 0) { - dur = durability; - Logger.WARNING("Determined durability too low, " + name + " is now " + dur - + " based on the GT material durability."); - } - if (dur <= 0) { - Logger.WARNING("Still too low, " + name + " will now go unused."); - return null; - } - final MultiSpadeBase MP_Redstone = new MultiSpadeBase(name + " Multispade", (customMaterial), dur, - Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2])); - - if (MP_Redstone.isValid) { - return MP_Redstone; - } - return null; - } - - public static BaseItemDecidust generateDecidust(final Materials material) { - if (GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L) != null) { - final Material placeholder = MaterialUtils.generateMaterialFromGtENUM(material); - if (placeholder != null) { - generateDecidust(placeholder); - } - } - return null; - } - - public static BaseItemDecidust generateDecidust(final Material material) { - if ((material.getDust(1) != null) && MaterialUtils.hasValidRGBA(material.getRGBA())) { - final BaseItemDecidust Decidust = new BaseItemDecidust(material); - return Decidust; - } - return null; - } - - public static BaseItemCentidust generateCentidust(final Materials material) { - if (GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L) != null) { - final Material placeholder = MaterialUtils.generateMaterialFromGtENUM(material); - if (placeholder != null) { - generateCentidust(placeholder); - } - } - return null; - } - - public static BaseItemCentidust generateCentidust(final Material material) { - if ((material.getDust(1) != null) && MaterialUtils.hasValidRGBA(material.getRGBA())) { - final BaseItemCentidust Centidust = new BaseItemCentidust(material); - return Centidust; - } - return null; - } - - public static boolean isRadioactive(final String materialName) { - int sRadiation = 0; - if (materialName.toLowerCase().contains("uranium")) { - sRadiation = 2; - } else if (materialName.toLowerCase().contains("plutonium")) { - sRadiation = 4; - } else if (materialName.toLowerCase().contains("thorium")) { - sRadiation = 1; - } - if (sRadiation >= 1) { - return true; - } - return false; - } - - public static int getRadioactivityLevel(final String materialName) { - int sRadiation = 0; - if (materialName.toLowerCase().contains("uranium")) { - sRadiation = 2; - } else if (materialName.toLowerCase().contains("plutonium")) { - sRadiation = 4; - } else if (materialName.toLowerCase().contains("thorium")) { - sRadiation = 1; - } - 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 aStack) { - Object aType = aStack.get(0); - if (aType instanceof FluidStack) { - FluidStack[] aItems = new FluidStack[aStack.size()]; - for (int i=0;i 0 ? ", " : "") + alph.getDisplayName() + " x" + alph.stackSize; - aPos++; - } - } - return itemNames; - } - - public static String[] getArrayStackNamesAsArray(final ItemStack[] aStack) { - final String[] itemNames = aStack == null ? new String[] {} : new String[aStack.length]; - if (aStack != null){ - Logger.INFO(""+aStack.length); - } - - if (aStack == null || aStack.length < 1) { - return itemNames; - } - - int arpos = 0; - for (final ItemStack alph : aStack) { - if (alph == null) { - continue; - } - try { - itemNames[arpos] = alph.getDisplayName(); - arpos++; - } - catch (Throwable t) { - t.printStackTrace(); - } - } - return itemNames; - - } - - public static String getFluidArrayStackNames(final FluidStack[] aStack) { - String itemNames = "Fluid Array: "; - for (final FluidStack alph : aStack) { - final String temp = itemNames; - itemNames = temp + ", " + alph.getFluid().getName() + " x" + alph.amount; - } - return itemNames; - - } - - public static ItemStack getGregtechCircuit(final int Meta) { - return ItemUtils.getItemStackWithMeta(LoadedMods.Gregtech, "gregtech:gt.integrated_circuit", "Gregtech Circuit", - Meta, 0); - } - - public static ItemStack[] getBlockDrops(final ArrayList blockDrops) { - if (blockDrops == null) { - return null; - } - if (blockDrops.isEmpty()) { - return null; - } - final ItemStack[] outputs = new ItemStack[blockDrops.size()]; - short forCounter = 0; - for (final ItemStack I : blockDrops) { - outputs[forCounter++] = I; - } - return outputs; - } - - private static Map mModidCache = new HashMap(); - - private static String getModId(final Item item) { - if (mModidCache.containsKey(item)) { - return mModidCache.get(item); - } - String value = ""; - try { - final GameRegistry.UniqueIdentifier id = GameRegistry.findUniqueIdentifierFor(item); - if (id != null) { - final String modname = (id.modId == null ? id.name : id.modId); - value = ((id == null) || id.modId.equals("")) ? "minecraft" : modname; - } - } catch (final Throwable t) { - try { - final UniqueIdentifier t2 = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)); - if (t2 != null) { - final String modname = (t2.modId == null ? t2.name : t2.modId); - value = ((t2 == null) || t2.modId.equals("")) ? "minecraft" : modname; - } - } catch (final Throwable t3) { - t3.printStackTrace(); - value = "bad modid"; - } - } - if (!mModidCache.containsKey(item)) { - return mModidCache.put(item, value); - } - return value; - } - - public static String getModId(final ItemStack key) { - return getModId(key.getItem()); - } - - // Take 2 - GT/GT++ Dusts - public static ItemStack getGregtechDust(final String oredictName, final int amount) { - final ArrayList oreDictList = OreDictionary.getOres(oredictName); - if (!oreDictList.isEmpty()) { - ItemStack returnvalue; - for (int xrc = 0; xrc < oreDictList.size(); xrc++) { - final String modid = getModId(oreDictList.get(xrc).getItem()); - if (modid != null && (modid.equals("gregtech") || modid.equals(CORE.MODID))) { - returnvalue = oreDictList.get(xrc).copy(); - returnvalue.stackSize = amount; - return returnvalue; - } - } - } - return getNonTinkersDust(oredictName, amount); - } - - // Anything But Tinkers Dust - public static ItemStack getNonTinkersDust(final String oredictName, final int amount) { - final ArrayList oreDictList = OreDictionary.getOres(oredictName); - if (!oreDictList.isEmpty()) { - ItemStack returnvalue; - for (int xrc = 0; xrc < oreDictList.size(); xrc++) { - final String modid = getModId(oreDictList.get(xrc).getItem()); - if (modid != null && !modid.equals("tconstruct")) { - returnvalue = oreDictList.get(xrc).copy(); - returnvalue.stackSize = amount; - return returnvalue; - } - } - } - // If only Tinkers dust exists, bow down and just use it. - return getItemStackOfAmountFromOreDictNoBroken(oredictName, amount); - } - - @Deprecated - public static ItemStack getGregtechOreStack(OrePrefixes mPrefix, Materials mMat, int mAmount) { - - ItemStack aTemp = getOrePrefixStack(mPrefix, mMat, mAmount); - if (aTemp != null) { - return aTemp; - } - - String mName = MaterialUtils.getMaterialName(mMat); - - String mItemName = mPrefix.name() + mName; - // Utils.LOG_INFO("[Component Maker] Trying to get "+mItemName+"."); - ItemStack gregstack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken(mItemName, mAmount); - if (gregstack == null) { - // Utils.LOG_INFO("[Component Maker] Failed to get "+mItemName+"."); - return null; - } - // Utils.LOG_INFO("[Component Maker] Found "+mItemName+"."); - return (gregstack); - } - - public static ItemStack getOrePrefixStack(OrePrefixes mPrefix, Material mMat, int mAmount) { - - String mName = Utils.sanitizeString(mMat.getLocalizedName()); - - String mItemName = mPrefix.name() + mName; - ItemStack gregstack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken(mItemName, mAmount); - if (gregstack == null) { - return null; - } - return (gregstack); - } - - public static ItemStack getOrePrefixStack(OrePrefixes mPrefix, Materials mMat, int mAmount) { - if (mPrefix == OrePrefixes.rod) { - mPrefix = OrePrefixes.stick; - } - ItemStack aGtStack = GT_OreDictUnificator.get(mPrefix, mMat, mAmount); - if (aGtStack == null) { - Logger.INFO( - "Failed to find `" + mPrefix + MaterialUtils.getMaterialName(mMat) + "` in OD. [Prefix Search]"); - return getErrorStack(mAmount, (mPrefix.toString()+MaterialUtils.getMaterialName(mMat)+" x"+mAmount)); - } else { - return aGtStack; - } - } - - public static ItemStack getErrorStack(int mAmount) { - return getErrorStack(mAmount, null); - } - - public static ItemStack getErrorStack(int mAmount, String aName) { - ItemStack g = getSimpleStack(ModItems.AAA_Broken, 1); - if (aName != null) { - //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; - } - - public static ItemStack[] getStackOfAllOreDictGroup(String oredictname) { - final ArrayList oreDictList = OreDictionary.getOres(oredictname); - if (!oreDictList.isEmpty()) { - final ItemStack[] returnValues = new ItemStack[oreDictList.size()]; - for (int i = 0; i < oreDictList.size(); i++) { - if (oreDictList.get(i) != null) { - returnValues[i] = oreDictList.get(i); - } - } - return returnValues.length > 0 ? returnValues : null; - } else { - return null; - } - } - - public static boolean registerFuel(ItemStack aBurnable, int burn) { - return CORE.burnables.add(new Pair(burn, aBurnable)); - } - - public static String getLocalizedNameOfBlock(BlockPos pos) { - Block block = pos.world.getBlock(pos.xPos, pos.yPos, pos.zPos); - int metaData = pos.world.getBlockMetadata(pos.xPos, pos.yPos, pos.zPos); - return LangUtils.getLocalizedNameOfBlock(block, metaData); - } - - public static boolean checkForInvalidItems(ItemStack mInput) { - return checkForInvalidItems(new ItemStack[] { mInput }); - } - - public static boolean checkForInvalidItems(ItemStack[] mInput) { - return checkForInvalidItems(mInput, new ItemStack[] {}); - } - - /** - * - * @param mInputs - * @return {@link Boolean} - True if {@link ItemStack}[] only contains valid - * items. - */ - public static boolean checkForInvalidItems(ItemStack[] mInputs, ItemStack[] mOutputs) { - if (mInputs == null || mOutputs == null) { - return false; - } - - if (mInputs.length > 0) { - for (ItemStack stack : mInputs) { - if (stack != null) { - if (stack.getItem() != null) { - if (stack.getItem() == ModItems.AAA_Broken - || stack.getItem().getClass() == ModItems.AAA_Broken.getClass()) { - return false; - } else if (stack.getItem() == ModItems.ZZZ_Empty - || stack.getItem().getClass() == ModItems.ZZZ_Empty.getClass()) { - return false; - } else { - continue; - } - } else { - continue; - } - } else { - return false; - } - } - } - if (mOutputs.length > 0) { - for (ItemStack stack : mOutputs) { - if (stack != null) { - if (stack.getItem() != null) { - if (stack.getItem() == ModItems.AAA_Broken - || stack.getItem().getClass() == ModItems.AAA_Broken.getClass()) { - return false; - } else if (stack.getItem() == ModItems.ZZZ_Empty - || stack.getItem().getClass() == ModItems.ZZZ_Empty.getClass()) { - return false; - } else { - continue; - } - } else { - continue; - } - } else { - return false; - } - } - } - - return true; - } - - - public static IInventory organiseInventory(IInventory aInputInventory) { - ItemStack[] p = new ItemStack[aInputInventory.getSizeInventory()]; - for (int o = 0; o < aInputInventory.getSizeInventory(); o++) { - p[o] = aInputInventory.getStackInSlot(o); - } - //ItemStack[] g = organiseInventory(p); - - IInventory aTemp = aInputInventory; - for (int i = 0; i < p.length; ++i) { - for (int j = i + 1; j < p.length; ++j) { - if (p[j] != null && (p[i] == null - || GT_Utility.areStacksEqual(p[i], p[j]))) { - GT_Utility.moveStackFromSlotAToSlotB(aTemp, aTemp, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1); - } - } - } - - /* - for (int o = 0; o < aInputInventory.getSizeInventory(); o++) { - aTemp.setInventorySlotContents(o, g[o]); - }*/ - return aTemp; - } - - - public static ItemStack[] organiseInventory(ItemStack[] aInputs) { - - //Update Slots - int aInvSize = aInputs.length; - ItemStack[] newArray = new ItemStack[aInvSize]; - - - //Try merge stacks - for (int i = 0; i < aInvSize; i++) { - for (int i2 = 0; i2 < aInvSize; i2++) { - if (i != i2) { - ItemStack[] t1 = new ItemStack[] {aInputs[i], aInputs[i2]}; - if (t1[0] == null || t1[1] == null) { - continue; - } - else if (!GT_Utility.areStacksEqual(t1[0], t1[1])) { - continue; - } - //Try Merge - else { - - if (GT_Utility.areStacksEqual(t1[0], t1[1])) { - while ((t1[0].stackSize < 64 && t1[1].stackSize > 0)) { - t1[0].stackSize++; - t1[1].stackSize--; - if (t1[1].stackSize <= 0) { - t1[1] = null; - break; - } - if (t1[0].stackSize == 64) { - break; - } - } - newArray[i] = t1[1]; - newArray[i2] = t1[0]; - } - } - } - } - } - - ItemStack[] newArray2 = new ItemStack[aInvSize]; - - //Move nulls to end - int count2 = 0; - for (int i = 0; i < aInvSize; i++) - if (newArray[i] != null) - newArray2[count2++] = newArray[i]; - while (count2 < aInvSize) - newArray2[count2++] = null; - - return newArray2; - - - } - - public static String getFluidName(FluidStack aFluid) { - return aFluid != null ? aFluid.getFluid().getLocalizedName(aFluid) : "NULL"; - } - - public static String getFluidName(Fluid aFluid) { - return aFluid != null ? aFluid.getLocalizedName() : "NULL"; - } - - public static String getItemName(ItemStack aStack) { - if (aStack == null) { - return "ERROR - Empty Stack"; - } - String aDisplay = null; - try { - aDisplay = ("" + StatCollector - .translateToLocal(aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) - .trim(); - if (aStack.hasTagCompound()) { - if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { - NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); - - if (nbttagcompound.hasKey("Name", 8)) { - aDisplay = nbttagcompound.getString("Name"); - } - } - } - } catch (Throwable t) { - - } - if (aDisplay == null || aDisplay.length() <= 0) { - aDisplay = aStack.getUnlocalizedName() + ":" + aStack.getItemDamage(); - } else { - aDisplay += " | Meta: " + aStack.getItemDamage(); - } - return aDisplay; - } - - public static String getUnlocalizedItemName(ItemStack aStack) { - if (aStack == null) { - return "ERROR.Empty.Stack"; - } - String aDisplay = null; - try { - aDisplay = (aStack.getUnlocalizedName()).trim(); - } - catch (Throwable t) { - aDisplay = aStack.getItem().getUnlocalizedName(); - } - if (aDisplay == null || aDisplay.length() <= 0) { - aDisplay = aStack.getItem().getUnlocalizedNameInefficiently(aStack); - } - return aDisplay; - } - - public static boolean isItemGregtechTool(ItemStack aStack) { - if (aStack == null) { - return false; - } - final Item mItem = aStack.getItem(); - final Item aSkookum = ItemUtils.getItemFromFQRN("miscutils:gt.plusplus.metatool.01"); - final Class aSkookClass = aSkookum.getClass(); - if (aSkookClass.isInstance(mItem) || mItem instanceof GT_MetaGenerated_Tool_01 || mItem instanceof MetaGeneratedGregtechTools || mItem instanceof Gregtech_MetaTool || mItem == aSkookum) { - return true; - } - return false; - } - - public static boolean isToolWrench(ItemStack aWrench) { - if (isItemGregtechTool(aWrench) && (aWrench.getItemDamage() == 16 || aWrench.getItemDamage() == 120 || aWrench.getItemDamage() == 122 || aWrench.getItemDamage() == 124 || aWrench.getItemDamage() == 7734)) { - return true; - } - return false; - } - - public static boolean isToolMallet(ItemStack aMallet) { - if (isItemGregtechTool(aMallet) && (aMallet.getItemDamage() == 14)) { - return true; - } - return false; - } - - public static boolean isToolScrewdriver(ItemStack aScrewdriver) { - if (isItemGregtechTool(aScrewdriver) && (aScrewdriver.getItemDamage() == 22 || aScrewdriver.getItemDamage() == 150)) { - return true; - } - return false; - } - - public static boolean isToolCrowbar(ItemStack aCrowbar) { - if (isItemGregtechTool(aCrowbar) && (aCrowbar.getItemDamage() == 20)) { - return true; - } - return false; - } - - public static boolean isToolWirecutters(ItemStack aWirecutters) { - if (isItemGregtechTool(aWirecutters) && (aWirecutters.getItemDamage() == 26)) { - return true; - } - return false; - } - - public static boolean isToolHammer(ItemStack aHammer) { - if (isItemGregtechTool(aHammer) && (aHammer.getItemDamage() == 12 || aHammer.getItemDamage() == 7734)) { - return true; - } - return false; - } - - public static boolean isToolSolderingIron(ItemStack aSoldering) { - if (isItemGregtechTool(aSoldering) && (aSoldering.getItemDamage() == 160)) { - return true; - } - return false; - } - - public static ItemStack[] cleanItemStackArray(ItemStack[] input) { - int aArraySize = input.length; - ItemStack[] aOutput = new ItemStack[aArraySize]; - AutoMap aCleanedItems = new AutoMap(); - for (ItemStack checkStack : input) { - if (ItemUtils.checkForInvalidItems(checkStack)) { - aCleanedItems.put(checkStack); - } - } - for (int i=0;i= 1 && cap >= aAmount) { - ItemStack aDepStack = aStack.copy(); - aDepStack.stackSize = (MathUtils.balance((aDepStack.stackSize - 1), 0, 64)); - if (aDepStack.stackSize > 0) { - return aDepStack; - } - } - return getNullStack(); - } - - public static boolean isControlCircuit(ItemStack aStack) { - if (aStack != null) { - Item aItem = aStack.getItem(); - if (aItem == CI.getNumberedBioCircuit(0).getItem() || aItem == CI.getNumberedCircuit(0).getItem() || aItem == CI.getNumberedAdvancedCircuit(0).getItem()) { - return true; - } - } - return false; - } - - public static boolean isCatalyst(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, GenericChem.mBlueCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mBrownCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mOrangeCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPurpleCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRedCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mYellowCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPinkCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mFormaldehydeCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mSolidAcidCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mInfiniteMutationCatalyst, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, AgriculturalChem.mGreenCatalyst, true)) { - return true; - } - return false; - } - - public static boolean isMillingBall(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { - return true; - } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { - return true; - } - return false; - } - - public static String getLocalizedNameOfBlock(Block aBlock, int aMeta) { - return LangUtils.getLocalizedNameOfBlock(aBlock, aMeta); - } - - - - public static boolean doesItemListEntryExist(String string) { - ItemList[] aListValues = ItemList.class.getEnumConstants(); - for (ItemList aItem : aListValues) { - if (aItem != null) { - if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { - return true; - } - } - } - return false; - } - - public static ItemList getValueOfItemList(String string, ItemList aOther) { - ItemList[] aListValues = ItemList.class.getEnumConstants(); - for (ItemList aItem : aListValues) { - if (aItem != null) { - if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { - return aItem; - } - } - } - Logger.INFO("Tried to obtain '"+string+"' from the GT ItemList, however it does not exist."); - if (aOther != null) { - Logger.INFO("Using fallback option instead - "+aOther.name()); - } - return aOther; - } - - public static ItemStack getValueOfItemList(String string, int aAmount, ItemList aOther) { - return getValueOfItemList(string, aOther).get(aAmount); - } - - public static ItemStack getValueOfItemList(String string, int aAmount, ItemStack aOther) { - ItemList[] aListValues = ItemList.class.getEnumConstants(); - for (ItemList aItem : aListValues) { - if (aItem != null) { - if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { - return aItem.get(aAmount); - } - } - } - Logger.INFO("Tried to obtain '"+string+"' from the GT ItemList, however it does not exist."); - if (aOther != null) { - Logger.INFO("Using fallback option instead - "+ItemUtils.getItemName(aOther)); - } - return aOther; - } - - public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2) { - return areItemsEqual(aStack1, aStack2, true); - } - - public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { - return GT_Utility.areStacksEqual(aStack1, aStack2, aIgnoreNBT); - } - + public static ItemStack getSimpleStack(final Item x) { + return getSimpleStack(x, 1); + } + + public static ItemStack getSimpleStack(final Block x) { + return simpleMetaStack(Item.getItemFromBlock(x), 0, 1); + } + + public static ItemStack getSimpleStack(final Block x, int i) { + if (i == 0) { + return getSimpleStack(x, i, 1); + } + + return getSimpleStack(x, 0, i); + } + + public static ItemStack getSimpleStack(final Block x, int meta, int i) { + return simpleMetaStack(Item.getItemFromBlock(x), meta, i); + } + + public static ItemStack getSimpleStack(final Item x, final int i) { + try { + final ItemStack r = new ItemStack(x, i); + return r.copy(); + } catch (final Throwable e) { + return null; + } + } + + public static ItemStack getSimpleStack(final ItemStack x, final int i) { + try { + final ItemStack r = x.copy(); + r.stackSize = i; + return r; + } catch (final Throwable e) { + return null; + } + } + + public static final int WILDCARD_VALUE = Short.MAX_VALUE; + + public static ItemStack getWildcardStack(final Item x) { + final ItemStack y = new ItemStack(x, 1, WILDCARD_VALUE); + return y; + } + + public static ItemStack getWildcardStack(final ItemStack x) { + final ItemStack y = ItemUtils.simpleMetaStack(x, WILDCARD_VALUE, 1); + return y; + } + + public static ItemStack getIC2Cell(final String S) { + final ItemStack moreTemp = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell" + S, 1); + + if (moreTemp == null) { + final int cellID = 0; + final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", 1L, cellID); + return temp != null ? temp : null; + } + + return moreTemp; + } + + public static ItemStack getIC2Cell(final int meta) { + final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", 1L, meta); + return temp != null ? temp : null; + } + + public static ItemStack getEmptyCell() { + return getEmptyCell(1); + } + + public static ItemStack getEmptyCell(int i) { + if (ItemList.Cell_Empty.hasBeenSet()) { + return ItemList.Cell_Empty.get(i); + } + final ItemStack temp = GT_ModHandler.getModItem("IC2", "itemCellEmpty", i, 0); + return temp != null ? temp : null; + } + + public static void getItemForOreDict( + final String FQRN, final String oreDictName, final String itemName, final int meta) { + try { + Item em = null; + final Item em1 = getItemFromFQRN(FQRN); + // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); + if (em1 != null) { + em = em1; + } + if (em != null) { + + final ItemStack metaStack = new ItemStack(em, 1, meta); + GT_OreDictUnificator.registerOre(oreDictName, metaStack); + + /* + * ItemStack itemStackWithMeta = new ItemStack(em,1,meta); + * GT_OreDictUnificator.registerOre(oreDictName, new + * ItemStack(itemStackWithMeta.getItem())); + */ + } + } catch (final NullPointerException e) { + Logger.ERROR(itemName + " not found. [NULL]"); + } + } + + public static void addItemToOreDictionary(ItemStack stack, final String oreDictName, boolean useWildcardMeta) { + if (useWildcardMeta) { + stack = ItemUtils.getWildcardStack(stack); + } + try { + OreDictionary.registerOre(oreDictName, stack); + } catch (final NullPointerException e) { + Logger.ERROR(ItemUtils.getItemName(stack) + " not registered. [NULL]"); + } + } + + public static void addItemToOreDictionary(final ItemStack stack, final String oreDictName) { + addItemToOreDictionary(stack, oreDictName, false); + } + + public static ItemStack getItemStackWithMeta( + final boolean MOD, final String FQRN, final String itemName, final int meta, final int itemstackSize) { + if (MOD) { + try { + Item em = null; + final Item em1 = getItemFromFQRN(FQRN); + // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); + if (em1 != null) { + if (null == em) { + em = em1; + } + if (em != null) { + final ItemStack metaStack = new ItemStack(em, itemstackSize, meta); + return metaStack; + } + } + return null; + } catch (final NullPointerException e) { + Logger.ERROR(itemName + " not found. [NULL]"); + return null; + } + } + return null; + } + + public static ItemStack simpleMetaStack(final String FQRN, final int meta, final int itemstackSize) { + try { + Item em = null; + final Item em1 = getItemFromFQRN(FQRN); + // Utils.LOG_WARNING("Found: "+em1.getUnlocalizedName()+":"+meta); + if (em1 != null) { + if (null == em) { + em = em1; + } + if (em != null) { + final ItemStack metaStack = new ItemStack(em, itemstackSize, meta); + return metaStack; + } + } + return null; + } catch (final NullPointerException e) { + Logger.ERROR(FQRN + " not found. [NULL]"); + return null; + } + } + + public static ItemStack simpleMetaStack(ItemStack simpleStack, int meta, int size) { + return simpleMetaStack(simpleStack.getItem(), meta, size); + } + + public static ItemStack simpleMetaStack(final Item item, int meta, int size) { + if (item == null) { + return null; + } + if (meta < 0 || meta > Short.MAX_VALUE) { + meta = 0; + } + if (size < 0 || size > 64) { + size = 1; + } + // Logger.INFO("Found Metastack: " + item.getUnlocalizedName() + ":" + meta); + // Logger.INFO(""+ReflectionUtils.getMethodName(0)); + // Logger.INFO(""+ReflectionUtils.getMethodName(1)); + // Logger.INFO(""+ReflectionUtils.getMethodName(2)); + // Logger.INFO(""+ReflectionUtils.getMethodName(3)); + // Logger.INFO(""+ReflectionUtils.getMethodName(4)); + final ItemStack metaStack = new ItemStack(item, size, meta); + return metaStack; + } + + public static ItemStack simpleMetaStack(final Block block, final int meta, final int size) { + return simpleMetaStack(Item.getItemFromBlock(block), meta, size); + } + + public static ItemStack getCorrectStacktype(final String fqrn, final int stackSize) { + final String oreDict = "ore:"; + ItemStack temp; + if (fqrn.toLowerCase().contains(oreDict.toLowerCase())) { + final String sanitizedName = fqrn.replace(oreDict, ""); + temp = ItemUtils.getItemStackFromFQRN(sanitizedName, stackSize); + return temp; + } + final String[] fqrnSplit = fqrn.split(":"); + String temp1; + String temp2; + temp1 = fqrnSplit[1]; + if (fqrnSplit.length < 3) { + temp2 = "0"; + } else { + temp2 = fqrnSplit[2]; + } + temp = ItemUtils.getItemStackWithMeta(LoadedMods.MiscUtils, fqrn, temp1, Integer.parseInt(temp2), stackSize); + return temp; + } + + public static ItemStack getCorrectStacktype(final Object item_Input, final int stackSize) { + if (item_Input instanceof String) { + return getItemStackOfAmountFromOreDictNoBroken((String) item_Input, stackSize); + } else if (item_Input instanceof ItemStack) { + return (ItemStack) item_Input; + } + return null; + } + + public static Item getItemFromFQRN(final String fqrn) // fqrn = fully qualified resource name + { + final String[] fqrnSplit = fqrn.split(":"); + return GameRegistry.findItem(fqrnSplit[0], fqrnSplit[1]); + } + + public static ItemStack getItemStackFromFQRN( + final String fqrn, final int Size) // fqrn = fully qualified resource name + { + Logger.INFO("Trying to split string '" + fqrn + "'."); + final String[] fqrnSplit = fqrn.split(":"); + if (fqrnSplit.length < 2) { + return null; + } else { + if (fqrnSplit.length == 2) { + Logger.INFO("Mod: " + fqrnSplit[0] + ", Item: " + fqrnSplit[1]); + return GameRegistry.findItemStack(fqrnSplit[0], fqrnSplit[1], Size); + } else if (fqrnSplit.length == 3 && fqrnSplit[2] != null && fqrnSplit[2].length() > 0) { + Logger.INFO("Mod: " + fqrnSplit[0] + ", Item: " + fqrnSplit[1] + ", Meta: " + fqrnSplit[2]); + ItemStack aStack = GameRegistry.findItemStack(fqrnSplit[0], fqrnSplit[1], Size); + int aMeta = Integer.parseInt(fqrnSplit[2]); + if (aStack != null && (aMeta >= 0 && aMeta <= Short.MAX_VALUE)) { + return ItemUtils.simpleMetaStack(aStack, aMeta, Size); + } else { + Logger.INFO("Could not find instance of Item: " + fqrnSplit[1]); + } + } + } + return null; + } + + public static void generateSpawnEgg( + final String entityModID, final String parSpawnName, final int colourEgg, final int colourOverlay) { + final Item itemSpawnEgg = new BasicSpawnEgg(entityModID, parSpawnName, colourEgg, colourOverlay) + .setUnlocalizedName("spawn_egg_" + parSpawnName.toLowerCase()) + .setTextureName(CORE.MODID + ":spawn_egg"); + GameRegistry.registerItem(itemSpawnEgg, "spawnEgg" + parSpawnName); + } + + public static ItemStack[] validItemsForOreDict(final String oredictName) { + final List validNames = MaterialUtils.oreDictValuesForEntry(oredictName); + final ItemStack[] inputs = new ItemStack[validNames.size()]; + for (int i = 0; i < validNames.size(); i++) { + inputs[i] = (ItemStack) validNames.get(i); + } + return inputs; + } + + public static ItemStack getItemStackOfAmountFromOreDict(String oredictName, final int amount) { + String mTemp = oredictName; + + if (oredictName.contains("-") || oredictName.contains("_")) { + mTemp = Utils.sanitizeString(mTemp, new char[] {'-', '_'}); + } else { + mTemp = Utils.sanitizeString(mTemp); + } + + if (oredictName.contains("rod")) { + String s = "stick" + oredictName.substring(3); + oredictName = s; + } + + // Banned Materials and replacements for GT5.8 compat. + + if (oredictName.toLowerCase().contains("ingotclay")) { + return getSimpleStack(Items.clay_ball, amount); + } + + if (!CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { + if (oredictName.toLowerCase().contains("rutile")) { + mTemp = oredictName.replace("Rutile", "Titanium"); + } + if (oredictName.toLowerCase().contains("vanadiumsteel")) { + mTemp = oredictName.replace("VanadiumSteel", "StainlessSteel"); + } + } + final ArrayList oreDictList = OreDictionary.getOres(mTemp); + if (!oreDictList.isEmpty()) { + final ItemStack returnValue = oreDictList.get(0).copy(); + returnValue.stackSize = amount; + return returnValue; + } + Logger.INFO("Failed to find `" + oredictName + "` in OD."); + return getErrorStack(amount, oredictName + " x" + amount); + // return getItemStackOfAmountFromOreDictNoBroken(mTemp, amount); + } + + public static ItemStack getItemStackOfAmountFromOreDictNoBroken(String oredictName, final int amount) { + if (CORE_Preloader.DEBUG_MODE) { + Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(1)); + Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(2)); + Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(3)); + Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(4)); + Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(5)); + } + + try { + + if (oredictName.contains("-") || oredictName.contains("_")) { + oredictName = Utils.sanitizeString(oredictName, new char[] {'-', '_'}); + } else { + oredictName = Utils.sanitizeString(oredictName); + } + + // Adds a check to grab dusts using GT methodology if possible. + ItemStack returnValue = null; + if (oredictName.toLowerCase().contains("dust")) { + final String MaterialName = oredictName.toLowerCase().replace("dust", ""); + final Materials m = Materials.get(MaterialName); + if (m != null && m != Materials._NULL) { + returnValue = getGregtechDust(m, amount); + if (checkForInvalidItems(returnValue)) { + return returnValue; + } + } + } + if (returnValue == null) { + returnValue = getItemStackOfAmountFromOreDict(oredictName, amount); + if (ItemUtils.checkForInvalidItems(returnValue)) { + return returnValue.copy(); + } + } + + Logger.RECIPE(oredictName + " was not valid."); + return null; + } catch (final Throwable t) { + return null; + } + } + + public static ItemStack getGregtechDust(final Materials material, final int amount) { + final ItemStack returnValue = GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L); + if (returnValue != null) { + if (ItemUtils.checkForInvalidItems(returnValue)) { + return returnValue.copy(); + } + } + Logger.WARNING(material + " was not valid."); + return null; + } + + // NullFormula + public static Item[] generateSpecialUseDusts( + final String unlocalizedName, final String materialName, final int Colour) { + return generateSpecialUseDusts(unlocalizedName, materialName, "NullFormula", Colour); + } + + public static Item[] generateSpecialUseDusts( + final String unlocalizedName, final String materialName, String mChemForm, final int Colour) { + final Item[] output = { + new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, mChemForm, Colour, "Dust"), + new BaseItemDustUnique("itemDustSmall" + unlocalizedName, materialName, mChemForm, Colour, "Small"), + new BaseItemDustUnique("itemDustTiny" + unlocalizedName, materialName, mChemForm, Colour, "Tiny") + }; + + // Generate Shaped/Shapeless Recipes + + final ItemStack normalDust = ItemUtils.getSimpleStack(output[0]); + final ItemStack smallDust = ItemUtils.getSimpleStack(output[1]); + final ItemStack tinyDust = ItemUtils.getSimpleStack(output[2]); + + CORE.RA.addpackagerRecipe(ItemList.Schematic_Dust.get(0), smallDust, tinyDust, normalDust); + + if (ItemUtils.checkForInvalidItems(tinyDust) && ItemUtils.checkForInvalidItems(normalDust)) { + if (RecipeUtils.addShapedRecipe( + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + normalDust)) { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + materialName + " - Success"); + } else { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + materialName + " - Failed"); + } + + if (RecipeUtils.addShapedRecipe( + normalDust, + null, + null, + null, + null, + null, + null, + null, + null, + ItemUtils.getSimpleStack(tinyDust, 9))) { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + materialName + " - Success"); + } else { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + materialName + " - Failed"); + } + } + + if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(normalDust)) { + if (RecipeUtils.addShapedRecipe( + smallDust, smallDust, null, smallDust, smallDust, null, null, null, null, normalDust)) { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + materialName + " - Success"); + } else { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + materialName + " - Failed"); + } + if (RecipeUtils.addShapedRecipe( + null, + normalDust, + null, + null, + null, + null, + null, + null, + null, + ItemUtils.getSimpleStack(smallDust, 4))) { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + materialName + " - Success"); + } else { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + materialName + " - Failed"); + } + } + + return output; + } + + public static Item generateSpecialUsePlate( + final String internalName, final String displayName, final short[] rgb, final int radioactivity) { + return generateSpecialUsePlate( + internalName, displayName, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), radioactivity); + } + + public static Item generateSpecialUsePlate( + final String internalName, + final String displayName, + final String mFormula, + final short[] rgb, + final int radioactivity) { + return generateSpecialUsePlate( + internalName, displayName, mFormula, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), radioactivity); + } + + public static Item generateSpecialUsePlate( + final String internalName, final String displayName, final int rgb, final int radioactivity) { + return new BaseItemPlate_OLD(internalName, displayName, rgb, radioactivity); + } + + public static Item generateSpecialUsePlate( + final String internalName, + final String displayName, + final String mFormula, + final int rgb, + final int radioactivity) { + return new BaseItemPlate_OLD(internalName, displayName, mFormula, rgb, radioactivity); + } + + public static Item[] generateSpecialUseDusts(final Material material, final boolean onlyLargeDust) { + return generateSpecialUseDusts(material, onlyLargeDust, false); + } + + public static Item[] generateSpecialUseDusts( + final Material material, final boolean onlyLargeDust, final boolean disableExtraRecipes) { + final String materialName = material.getLocalizedName(); + final String unlocalizedName = Utils.sanitizeString(materialName); + final int Colour = material.getRgbAsHex(); + final String aChemForm = material.vChemicalFormula; + final boolean isChemFormvalid = (aChemForm != null && aChemForm.length() > 0); + Item[] output = null; + if (onlyLargeDust == false) { + output = new Item[] { + new BaseItemDustUnique( + "itemDust" + unlocalizedName, materialName, isChemFormvalid ? aChemForm : "", Colour, "Dust"), + new BaseItemDustUnique( + "itemDustSmall" + unlocalizedName, + materialName, + isChemFormvalid ? aChemForm : "", + Colour, + "Small"), + new BaseItemDustUnique( + "itemDustTiny" + unlocalizedName, + materialName, + isChemFormvalid ? aChemForm : "", + Colour, + "Tiny") + }; + } else { + output = new Item[] {new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, Colour, "Dust")}; + } + + new RecipeGen_DustGeneration(material, disableExtraRecipes); + + return output; + } + + public static MultiPickaxeBase generateMultiPick(final boolean GT_Durability, final Materials material) { + final ToolMaterial customMaterial = Utils.generateToolMaterialFromGT(material); + final int enchantLevel = material.mEnchantmentToolsLevel; + final Object enchant = new Pair(material.mEnchantmentTools, enchantLevel); + return generateMultiPick( + GT_Durability, + customMaterial, + material.mDefaultLocalName, + material.mDurability, + material.mRGBa, + enchant); + } + + public static MultiPickaxeBase generateMultiPick(final Material material) { + final ToolMaterial customMaterial = Utils.generateToolMaterial(material); + return generateMultiPick( + true, + customMaterial, + material.getLocalizedName(), + (int) material.vDurability, + material.getRGBA(), + null); + } + + public static MultiPickaxeBase generateMultiPick( + final boolean GT_Durability, + final ToolMaterial customMaterial, + final String name, + final int durability, + final short[] rgba, + final Object enchantment) { + Logger.WARNING("Generating a Multi-Pick out of " + name); + final short[] rgb = rgba; + int dur = customMaterial.getMaxUses(); + Logger.WARNING("Determined durability for " + name + " is " + dur); + if (GT_Durability) { + dur = durability * 100; + Logger.WARNING("Using gregtech durability value, " + name + " is now " + dur + "."); + } else if (dur <= 0) { + dur = durability; + Logger.WARNING("Determined durability too low, " + name + " is now " + dur + + " based on the GT material durability."); + } + if (dur <= 0) { + Logger.WARNING("Still too low, " + name + " will now go unused."); + return null; + } + + Object enchant; + if (enchantment != null) { + if (enchantment instanceof Pair) { + enchant = enchantment; + } + } else { + enchant = null; + } + + final MultiPickaxeBase MP_Redstone = new MultiPickaxeBase( + name + " Multipick", (customMaterial), dur, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), enchantment); + + if (MP_Redstone.isValid) { + return MP_Redstone; + } + Logger.WARNING("Pickaxe was not valid."); + return null; + } + + public static MultiSpadeBase generateMultiShovel(final boolean GT_Durability, final Materials material) { + final ToolMaterial customMaterial = Utils.generateToolMaterialFromGT(material); + return generateMultiShovel( + GT_Durability, customMaterial, material.mDefaultLocalName, material.mDurability, material.mRGBa); + } + + public static MultiSpadeBase generateMultiShovel(final Material material) { + final ToolMaterial customMaterial = Utils.generateToolMaterial(material); + return generateMultiShovel( + true, customMaterial, material.getLocalizedName(), (int) material.vDurability, material.getRGBA()); + } + + public static MultiSpadeBase generateMultiShovel( + final boolean GT_Durability, + final ToolMaterial customMaterial, + final String name, + final int durability, + final short[] rgba) { + Logger.WARNING("Generating a Multi-Spade out of " + name); + final short[] rgb = rgba; + int dur = customMaterial.getMaxUses(); + Logger.WARNING("Determined durability for " + name + " is " + dur); + if (GT_Durability) { + dur = durability * 100; + Logger.WARNING("Using gregtech durability value, " + name + " is now " + dur + "."); + } else if (dur <= 0) { + dur = durability; + Logger.WARNING("Determined durability too low, " + name + " is now " + dur + + " based on the GT material durability."); + } + if (dur <= 0) { + Logger.WARNING("Still too low, " + name + " will now go unused."); + return null; + } + final MultiSpadeBase MP_Redstone = new MultiSpadeBase( + name + " Multispade", (customMaterial), dur, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2])); + + if (MP_Redstone.isValid) { + return MP_Redstone; + } + return null; + } + + public static BaseItemDecidust generateDecidust(final Materials material) { + if (GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L) != null) { + final Material placeholder = MaterialUtils.generateMaterialFromGtENUM(material); + if (placeholder != null) { + generateDecidust(placeholder); + } + } + return null; + } + + public static BaseItemDecidust generateDecidust(final Material material) { + if ((material.getDust(1) != null) && MaterialUtils.hasValidRGBA(material.getRGBA())) { + final BaseItemDecidust Decidust = new BaseItemDecidust(material); + return Decidust; + } + return null; + } + + public static BaseItemCentidust generateCentidust(final Materials material) { + if (GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L) != null) { + final Material placeholder = MaterialUtils.generateMaterialFromGtENUM(material); + if (placeholder != null) { + generateCentidust(placeholder); + } + } + return null; + } + + public static BaseItemCentidust generateCentidust(final Material material) { + if ((material.getDust(1) != null) && MaterialUtils.hasValidRGBA(material.getRGBA())) { + final BaseItemCentidust Centidust = new BaseItemCentidust(material); + return Centidust; + } + return null; + } + + public static boolean isRadioactive(final String materialName) { + int sRadiation = 0; + if (materialName.toLowerCase().contains("uranium")) { + sRadiation = 2; + } else if (materialName.toLowerCase().contains("plutonium")) { + sRadiation = 4; + } else if (materialName.toLowerCase().contains("thorium")) { + sRadiation = 1; + } + if (sRadiation >= 1) { + return true; + } + return false; + } + + public static int getRadioactivityLevel(final String materialName) { + int sRadiation = 0; + if (materialName.toLowerCase().contains("uranium")) { + sRadiation = 2; + } else if (materialName.toLowerCase().contains("plutonium")) { + sRadiation = 4; + } else if (materialName.toLowerCase().contains("thorium")) { + sRadiation = 1; + } + 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: "; + for (final FluidStack alph : aStack) { + if (alph != null) { + final String temp = itemNames; + itemNames = temp + ", " + alph.getLocalizedName() + " x" + alph.amount; + } else { + final String temp = itemNames; + itemNames = temp + ", " + "null" + " x" + "0"; + } + } + return itemNames; + } + + public static String getArrayStackNames(final ItemStack[] aStack) { + String itemNames = ""; + int aPos = 0; + for (final ItemStack alph : aStack) { + if (alph == null) { + continue; + } + if (alph != null) { + final String temp = itemNames; + itemNames = temp + (aPos > 0 ? ", " : "") + alph.getDisplayName() + " x" + alph.stackSize; + aPos++; + } + } + return itemNames; + } + + public static String[] getArrayStackNamesAsArray(final ItemStack[] aStack) { + final String[] itemNames = aStack == null ? new String[] {} : new String[aStack.length]; + if (aStack != null) { + Logger.INFO("" + aStack.length); + } + + if (aStack == null || aStack.length < 1) { + return itemNames; + } + + int arpos = 0; + for (final ItemStack alph : aStack) { + if (alph == null) { + continue; + } + try { + itemNames[arpos] = alph.getDisplayName(); + arpos++; + } catch (Throwable t) { + t.printStackTrace(); + } + } + return itemNames; + } + + public static String getFluidArrayStackNames(final FluidStack[] aStack) { + String itemNames = "Fluid Array: "; + for (final FluidStack alph : aStack) { + final String temp = itemNames; + itemNames = temp + ", " + alph.getFluid().getName() + " x" + alph.amount; + } + return itemNames; + } + + public static ItemStack getGregtechCircuit(final int Meta) { + return ItemUtils.getItemStackWithMeta( + LoadedMods.Gregtech, "gregtech:gt.integrated_circuit", "Gregtech Circuit", Meta, 0); + } + + public static ItemStack[] getBlockDrops(final ArrayList blockDrops) { + if (blockDrops == null) { + return null; + } + if (blockDrops.isEmpty()) { + return null; + } + final ItemStack[] outputs = new ItemStack[blockDrops.size()]; + short forCounter = 0; + for (final ItemStack I : blockDrops) { + outputs[forCounter++] = I; + } + return outputs; + } + + private static Map mModidCache = new HashMap(); + + private static String getModId(final Item item) { + if (mModidCache.containsKey(item)) { + return mModidCache.get(item); + } + String value = ""; + try { + final GameRegistry.UniqueIdentifier id = GameRegistry.findUniqueIdentifierFor(item); + if (id != null) { + final String modname = (id.modId == null ? id.name : id.modId); + value = ((id == null) || id.modId.equals("")) ? "minecraft" : modname; + } + } catch (final Throwable t) { + try { + final UniqueIdentifier t2 = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)); + if (t2 != null) { + final String modname = (t2.modId == null ? t2.name : t2.modId); + value = ((t2 == null) || t2.modId.equals("")) ? "minecraft" : modname; + } + } catch (final Throwable t3) { + t3.printStackTrace(); + value = "bad modid"; + } + } + if (!mModidCache.containsKey(item)) { + return mModidCache.put(item, value); + } + return value; + } + + public static String getModId(final ItemStack key) { + return getModId(key.getItem()); + } + + // Take 2 - GT/GT++ Dusts + public static ItemStack getGregtechDust(final String oredictName, final int amount) { + final ArrayList oreDictList = OreDictionary.getOres(oredictName); + if (!oreDictList.isEmpty()) { + ItemStack returnvalue; + for (int xrc = 0; xrc < oreDictList.size(); xrc++) { + final String modid = getModId(oreDictList.get(xrc).getItem()); + if (modid != null && (modid.equals("gregtech") || modid.equals(CORE.MODID))) { + returnvalue = oreDictList.get(xrc).copy(); + returnvalue.stackSize = amount; + return returnvalue; + } + } + } + return getNonTinkersDust(oredictName, amount); + } + + // Anything But Tinkers Dust + public static ItemStack getNonTinkersDust(final String oredictName, final int amount) { + final ArrayList oreDictList = OreDictionary.getOres(oredictName); + if (!oreDictList.isEmpty()) { + ItemStack returnvalue; + for (int xrc = 0; xrc < oreDictList.size(); xrc++) { + final String modid = getModId(oreDictList.get(xrc).getItem()); + if (modid != null && !modid.equals("tconstruct")) { + returnvalue = oreDictList.get(xrc).copy(); + returnvalue.stackSize = amount; + return returnvalue; + } + } + } + // If only Tinkers dust exists, bow down and just use it. + return getItemStackOfAmountFromOreDictNoBroken(oredictName, amount); + } + + @Deprecated + public static ItemStack getGregtechOreStack(OrePrefixes mPrefix, Materials mMat, int mAmount) { + + ItemStack aTemp = getOrePrefixStack(mPrefix, mMat, mAmount); + if (aTemp != null) { + return aTemp; + } + + String mName = MaterialUtils.getMaterialName(mMat); + + String mItemName = mPrefix.name() + mName; + // Utils.LOG_INFO("[Component Maker] Trying to get "+mItemName+"."); + ItemStack gregstack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken(mItemName, mAmount); + if (gregstack == null) { + // Utils.LOG_INFO("[Component Maker] Failed to get "+mItemName+"."); + return null; + } + // Utils.LOG_INFO("[Component Maker] Found "+mItemName+"."); + return (gregstack); + } + + public static ItemStack getOrePrefixStack(OrePrefixes mPrefix, Material mMat, int mAmount) { + + String mName = Utils.sanitizeString(mMat.getLocalizedName()); + + String mItemName = mPrefix.name() + mName; + ItemStack gregstack = ItemUtils.getItemStackOfAmountFromOreDictNoBroken(mItemName, mAmount); + if (gregstack == null) { + return null; + } + return (gregstack); + } + + public static ItemStack getOrePrefixStack(OrePrefixes mPrefix, Materials mMat, int mAmount) { + if (mPrefix == OrePrefixes.rod) { + mPrefix = OrePrefixes.stick; + } + ItemStack aGtStack = GT_OreDictUnificator.get(mPrefix, mMat, mAmount); + if (aGtStack == null) { + Logger.INFO( + "Failed to find `" + mPrefix + MaterialUtils.getMaterialName(mMat) + "` in OD. [Prefix Search]"); + return getErrorStack(mAmount, (mPrefix.toString() + MaterialUtils.getMaterialName(mMat) + " x" + mAmount)); + } else { + return aGtStack; + } + } + + public static ItemStack getErrorStack(int mAmount) { + return getErrorStack(mAmount, null); + } + + public static ItemStack getErrorStack(int mAmount, String aName) { + ItemStack g = getSimpleStack(ModItems.AAA_Broken, 1); + if (aName != null) { + // 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; + } + + public static ItemStack[] getStackOfAllOreDictGroup(String oredictname) { + final ArrayList oreDictList = OreDictionary.getOres(oredictname); + if (!oreDictList.isEmpty()) { + final ItemStack[] returnValues = new ItemStack[oreDictList.size()]; + for (int i = 0; i < oreDictList.size(); i++) { + if (oreDictList.get(i) != null) { + returnValues[i] = oreDictList.get(i); + } + } + return returnValues.length > 0 ? returnValues : null; + } else { + return null; + } + } + + public static boolean registerFuel(ItemStack aBurnable, int burn) { + return CORE.burnables.add(new Pair(burn, aBurnable)); + } + + public static String getLocalizedNameOfBlock(BlockPos pos) { + Block block = pos.world.getBlock(pos.xPos, pos.yPos, pos.zPos); + int metaData = pos.world.getBlockMetadata(pos.xPos, pos.yPos, pos.zPos); + return LangUtils.getLocalizedNameOfBlock(block, metaData); + } + + public static boolean checkForInvalidItems(ItemStack mInput) { + return checkForInvalidItems(new ItemStack[] {mInput}); + } + + public static boolean checkForInvalidItems(ItemStack[] mInput) { + return checkForInvalidItems(mInput, new ItemStack[] {}); + } + + /** + * + * @param mInputs + * @return {@link Boolean} - True if {@link ItemStack}[] only contains valid + * items. + */ + public static boolean checkForInvalidItems(ItemStack[] mInputs, ItemStack[] mOutputs) { + if (mInputs == null || mOutputs == null) { + return false; + } + + if (mInputs.length > 0) { + for (ItemStack stack : mInputs) { + if (stack != null) { + if (stack.getItem() != null) { + if (stack.getItem() == ModItems.AAA_Broken + || stack.getItem().getClass() == ModItems.AAA_Broken.getClass()) { + return false; + } else if (stack.getItem() == ModItems.ZZZ_Empty + || stack.getItem().getClass() == ModItems.ZZZ_Empty.getClass()) { + return false; + } else { + continue; + } + } else { + continue; + } + } else { + return false; + } + } + } + if (mOutputs.length > 0) { + for (ItemStack stack : mOutputs) { + if (stack != null) { + if (stack.getItem() != null) { + if (stack.getItem() == ModItems.AAA_Broken + || stack.getItem().getClass() == ModItems.AAA_Broken.getClass()) { + return false; + } else if (stack.getItem() == ModItems.ZZZ_Empty + || stack.getItem().getClass() == ModItems.ZZZ_Empty.getClass()) { + return false; + } else { + continue; + } + } else { + continue; + } + } else { + return false; + } + } + } + + return true; + } + + public static IInventory organiseInventory(IInventory aInputInventory) { + ItemStack[] p = new ItemStack[aInputInventory.getSizeInventory()]; + for (int o = 0; o < aInputInventory.getSizeInventory(); o++) { + p[o] = aInputInventory.getStackInSlot(o); + } + // ItemStack[] g = organiseInventory(p); + + IInventory aTemp = aInputInventory; + for (int i = 0; i < p.length; ++i) { + for (int j = i + 1; j < p.length; ++j) { + if (p[j] != null && (p[i] == null || GT_Utility.areStacksEqual(p[i], p[j]))) { + GT_Utility.moveStackFromSlotAToSlotB(aTemp, aTemp, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1); + } + } + } + + /* + for (int o = 0; o < aInputInventory.getSizeInventory(); o++) { + aTemp.setInventorySlotContents(o, g[o]); + }*/ + return aTemp; + } + + public static ItemStack[] organiseInventory(ItemStack[] aInputs) { + + // Update Slots + int aInvSize = aInputs.length; + ItemStack[] newArray = new ItemStack[aInvSize]; + + // Try merge stacks + for (int i = 0; i < aInvSize; i++) { + for (int i2 = 0; i2 < aInvSize; i2++) { + if (i != i2) { + ItemStack[] t1 = new ItemStack[] {aInputs[i], aInputs[i2]}; + if (t1[0] == null || t1[1] == null) { + continue; + } else if (!GT_Utility.areStacksEqual(t1[0], t1[1])) { + continue; + } + // Try Merge + else { + + if (GT_Utility.areStacksEqual(t1[0], t1[1])) { + while ((t1[0].stackSize < 64 && t1[1].stackSize > 0)) { + t1[0].stackSize++; + t1[1].stackSize--; + if (t1[1].stackSize <= 0) { + t1[1] = null; + break; + } + if (t1[0].stackSize == 64) { + break; + } + } + newArray[i] = t1[1]; + newArray[i2] = t1[0]; + } + } + } + } + } + + ItemStack[] newArray2 = new ItemStack[aInvSize]; + + // Move nulls to end + int count2 = 0; + for (int i = 0; i < aInvSize; i++) if (newArray[i] != null) newArray2[count2++] = newArray[i]; + while (count2 < aInvSize) newArray2[count2++] = null; + + return newArray2; + } + + public static String getFluidName(FluidStack aFluid) { + return aFluid != null ? aFluid.getFluid().getLocalizedName(aFluid) : "NULL"; + } + + public static String getFluidName(Fluid aFluid) { + return aFluid != null ? aFluid.getLocalizedName() : "NULL"; + } + + public static String getItemName(ItemStack aStack) { + if (aStack == null) { + return "ERROR - Empty Stack"; + } + String aDisplay = null; + try { + aDisplay = ("" + + StatCollector.translateToLocal( + aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) + .trim(); + if (aStack.hasTagCompound()) { + if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { + NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); + + if (nbttagcompound.hasKey("Name", 8)) { + aDisplay = nbttagcompound.getString("Name"); + } + } + } + } catch (Throwable t) { + + } + if (aDisplay == null || aDisplay.length() <= 0) { + aDisplay = aStack.getUnlocalizedName() + ":" + aStack.getItemDamage(); + } else { + aDisplay += " | Meta: " + aStack.getItemDamage(); + } + return aDisplay; + } + + public static String getUnlocalizedItemName(ItemStack aStack) { + if (aStack == null) { + return "ERROR.Empty.Stack"; + } + String aDisplay = null; + try { + aDisplay = (aStack.getUnlocalizedName()).trim(); + } catch (Throwable t) { + aDisplay = aStack.getItem().getUnlocalizedName(); + } + if (aDisplay == null || aDisplay.length() <= 0) { + aDisplay = aStack.getItem().getUnlocalizedNameInefficiently(aStack); + } + return aDisplay; + } + + public static boolean isItemGregtechTool(ItemStack aStack) { + if (aStack == null) { + return false; + } + final Item mItem = aStack.getItem(); + final Item aSkookum = ItemUtils.getItemFromFQRN("miscutils:gt.plusplus.metatool.01"); + final Class aSkookClass = aSkookum.getClass(); + if (aSkookClass.isInstance(mItem) + || mItem instanceof GT_MetaGenerated_Tool_01 + || mItem instanceof MetaGeneratedGregtechTools + || mItem instanceof Gregtech_MetaTool + || mItem == aSkookum) { + return true; + } + return false; + } + + public static boolean isToolWrench(ItemStack aWrench) { + if (isItemGregtechTool(aWrench) + && (aWrench.getItemDamage() == 16 + || aWrench.getItemDamage() == 120 + || aWrench.getItemDamage() == 122 + || aWrench.getItemDamage() == 124 + || aWrench.getItemDamage() == 7734)) { + return true; + } + return false; + } + + public static boolean isToolMallet(ItemStack aMallet) { + if (isItemGregtechTool(aMallet) && (aMallet.getItemDamage() == 14)) { + return true; + } + return false; + } + + public static boolean isToolScrewdriver(ItemStack aScrewdriver) { + if (isItemGregtechTool(aScrewdriver) + && (aScrewdriver.getItemDamage() == 22 || aScrewdriver.getItemDamage() == 150)) { + return true; + } + return false; + } + + public static boolean isToolCrowbar(ItemStack aCrowbar) { + if (isItemGregtechTool(aCrowbar) && (aCrowbar.getItemDamage() == 20)) { + return true; + } + return false; + } + + public static boolean isToolWirecutters(ItemStack aWirecutters) { + if (isItemGregtechTool(aWirecutters) && (aWirecutters.getItemDamage() == 26)) { + return true; + } + return false; + } + + public static boolean isToolHammer(ItemStack aHammer) { + if (isItemGregtechTool(aHammer) && (aHammer.getItemDamage() == 12 || aHammer.getItemDamage() == 7734)) { + return true; + } + return false; + } + + public static boolean isToolSolderingIron(ItemStack aSoldering) { + if (isItemGregtechTool(aSoldering) && (aSoldering.getItemDamage() == 160)) { + return true; + } + return false; + } + + public static ItemStack[] cleanItemStackArray(ItemStack[] input) { + int aArraySize = input.length; + ItemStack[] aOutput = new ItemStack[aArraySize]; + AutoMap aCleanedItems = new AutoMap(); + for (ItemStack checkStack : input) { + if (ItemUtils.checkForInvalidItems(checkStack)) { + aCleanedItems.put(checkStack); + } + } + for (int i = 0; i < aArraySize; i++) { + ItemStack aMappedStack = aCleanedItems.get(i); + if (aMappedStack != null) { + aOutput[i] = aMappedStack; + } + } + return aOutput; + } + + public static ItemStack getEnchantedBook(Enchantment aEnch, int aLevel) { + return enchantItem(new ItemStack(Items.enchanted_book), aEnch, aLevel); + } + + public static ItemStack enchantItem(ItemStack aStack, Enchantment aEnch, int aLevel) { + Items.enchanted_book.addEnchantment(aStack, new EnchantmentData(aEnch, aLevel)); + return aStack; + } + + public static boolean doesOreDictHaveEntryFor(String string) { + return OreDictUtils.containsValidEntries(string); + } + + public static void hideItemFromNEI(ItemStack aItemToHide) { + codechicken.nei.api.API.hideItem(aItemToHide); + } + + public static ItemStack getNullStack() { + return GT_Values.NI; + } + + public static ItemStack depleteStack(ItemStack aStack) { + return depleteStack(aStack, 1); + } + + public static ItemStack depleteStack(ItemStack aStack, int aAmount) { + final int cap = aStack.stackSize; + if (cap >= 1 && cap >= aAmount) { + ItemStack aDepStack = aStack.copy(); + aDepStack.stackSize = (MathUtils.balance((aDepStack.stackSize - 1), 0, 64)); + if (aDepStack.stackSize > 0) { + return aDepStack; + } + } + return getNullStack(); + } + + public static boolean isControlCircuit(ItemStack aStack) { + if (aStack != null) { + Item aItem = aStack.getItem(); + if (aItem == CI.getNumberedBioCircuit(0).getItem() + || aItem == CI.getNumberedCircuit(0).getItem() + || aItem == CI.getNumberedAdvancedCircuit(0).getItem()) { + return true; + } + } + return false; + } + + public static boolean isCatalyst(ItemStack aStack) { + if (GT_Utility.areStacksEqual(aStack, GenericChem.mBlueCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mBrownCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mOrangeCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mPurpleCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mRedCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mYellowCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mPinkCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mFormaldehydeCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mSolidAcidCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mInfiniteMutationCatalyst, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, AgriculturalChem.mGreenCatalyst, true)) { + return true; + } + return false; + } + + public static boolean isMillingBall(ItemStack aStack) { + if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { + return true; + } + if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { + return true; + } + return false; + } + + public static String getLocalizedNameOfBlock(Block aBlock, int aMeta) { + return LangUtils.getLocalizedNameOfBlock(aBlock, aMeta); + } + + public static boolean doesItemListEntryExist(String string) { + ItemList[] aListValues = ItemList.class.getEnumConstants(); + for (ItemList aItem : aListValues) { + if (aItem != null) { + if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { + return true; + } + } + } + return false; + } + + public static ItemList getValueOfItemList(String string, ItemList aOther) { + ItemList[] aListValues = ItemList.class.getEnumConstants(); + for (ItemList aItem : aListValues) { + if (aItem != null) { + if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { + return aItem; + } + } + } + Logger.INFO("Tried to obtain '" + string + "' from the GT ItemList, however it does not exist."); + if (aOther != null) { + Logger.INFO("Using fallback option instead - " + aOther.name()); + } + return aOther; + } + + public static ItemStack getValueOfItemList(String string, int aAmount, ItemList aOther) { + return getValueOfItemList(string, aOther).get(aAmount); + } + + public static ItemStack getValueOfItemList(String string, int aAmount, ItemStack aOther) { + ItemList[] aListValues = ItemList.class.getEnumConstants(); + for (ItemList aItem : aListValues) { + if (aItem != null) { + if (aItem.name().equals(string) || aItem.name().toLowerCase().equals(string.toLowerCase())) { + return aItem.get(aAmount); + } + } + } + Logger.INFO("Tried to obtain '" + string + "' from the GT ItemList, however it does not exist."); + if (aOther != null) { + Logger.INFO("Using fallback option instead - " + ItemUtils.getItemName(aOther)); + } + return aOther; + } + + public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2) { + return areItemsEqual(aStack1, aStack2, true); + } + + public static boolean areItemsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { + return GT_Utility.areStacksEqual(aStack1, aStack2, aIgnoreNBT); + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/LangUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/LangUtils.java index 0b24e962af..8517d129b2 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/LangUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/LangUtils.java @@ -1,14 +1,13 @@ package gtPlusPlus.core.util.minecraft; -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - import cpw.mods.fml.common.registry.LanguageRegistry; import gregtech.api.util.GT_LanguageManager; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.reflect.ReflectionUtils; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -17,134 +16,129 @@ import net.minecraft.util.StatCollector; public class LangUtils { - - public static boolean rewriteEntryForLanguageRegistry(String aKey, String aNewValue){ - return rewriteEntryForLanguageRegistry("en_US", aKey, aNewValue); - } - - @SuppressWarnings("unchecked") - public static boolean rewriteEntryForLanguageRegistry(String aLang, String aKey, String aNewValue){ - LanguageRegistry aInstance = LanguageRegistry.instance(); - Field aModLanguageData = ReflectionUtils.getField(LanguageRegistry.class, "modLanguageData"); - if (aModLanguageData != null){ - Map aProps = new HashMap(); - Object aInstanceProps; - try { - aInstanceProps = aModLanguageData.get(aInstance); - if (aInstanceProps != null){ - aProps = (Map) aInstanceProps; - Properties aLangProps = aProps.get(aLang); - if (aLangProps != null){ - if (aLangProps.containsKey(aKey)) { - aLangProps.remove(aKey); - aLangProps.put(aKey, aNewValue); - } - else { - aLangProps.put(aKey, aNewValue); - } - aProps.remove(aLang); - aProps.put(aLang, aLangProps); - ReflectionUtils.setField(aInstance, aModLanguageData, aProps); - } - } - } - catch (IllegalArgumentException | IllegalAccessException e) { - - } - } - return false; - } - - public static String trans(String aNr, String aEnglish) { - return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_GTPP_" + aNr, aEnglish, false); - } - - - - /** - * Quick Block Name Lookup that is friendly to servers and locale. - */ - private static final Map mLocaleCache = new HashMap(); - - public static String getLocalizedNameOfBlock(Block aBlock, int aMeta) { - if (aBlock != null) { - return getLocalizedNameOfItemStack(ItemUtils.simpleMetaStack(aBlock, aMeta, 1)); - } - return "Bad Block Name"; - } - - public static String getLocalizedNameOfItem(Item aItem, int aMeta) { - if (aItem != null) { - return getLocalizedNameOfItemStack(ItemUtils.simpleMetaStack(aItem, aMeta, 1)); - } - return "Bad Item Name"; - } - - public static String getLocalizedNameOfItemStack(ItemStack aStack) { - String aUnlocalized; - if (aStack != null) { - aUnlocalized = ItemUtils.getUnlocalizedItemName(aStack)+"."+aStack.getItemDamage()+".name"; - if (aUnlocalized == null || aUnlocalized.length() <= 0) { - return "Bad Locale Data"; - } - String mCacheKey = aUnlocalized; - if (mLocaleCache.containsKey(mCacheKey)) { - // Recache the key if it's invalid. - if (mLocaleCache.get(mCacheKey).toLowerCase().contains(".name") || mLocaleCache.get(mCacheKey).toLowerCase().contains("|")) { - mLocaleCache.remove(mCacheKey); - String mNew; - try { - mNew = ("" + StatCollector - .translateToLocal(aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) - .trim(); - if (aStack.hasTagCompound()) { - if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { - NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); - - if (nbttagcompound.hasKey("Name", 8)) { - mNew = nbttagcompound.getString("Name"); - } - } - } - } catch (Throwable t) { - mNew = "ERROR - Empty Stack"; - } - Logger.INFO("Re-caching "+mNew+" into locale cache. Key: "+mCacheKey); - mLocaleCache.put(mCacheKey, mNew); - } - Logger.INFO("Returning Cached Value. Key: "+mCacheKey); - return mLocaleCache.get(mCacheKey); - } - else { - String unlocalizedName = aStack.getItem().getUnlocalizedName(aStack); - Logger.INFO("Cached New Value. UnlocalName: "+unlocalizedName); - String blockName = StatCollector.translateToLocal(unlocalizedName + ".name"); - Logger.INFO("Cached New Value. TranslatedName: "+unlocalizedName); - if (blockName.toLowerCase().contains(".name") || blockName.toLowerCase().contains("|")) { - try { - blockName = ("" + StatCollector - .translateToLocal(aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) - .trim(); - if (aStack.hasTagCompound()) { - if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { - NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); - if (nbttagcompound.hasKey("Name", 8)) { - blockName = nbttagcompound.getString("Name"); - } - } - } - } catch (Throwable t) { - blockName = "ERROR - Empty Stack"; - } - } - mLocaleCache.put(mCacheKey, blockName); - Logger.INFO("Cached New Value. Key: "+mCacheKey); - return blockName; - } - - } - return "Bad ItemStack Name"; - } - - + public static boolean rewriteEntryForLanguageRegistry(String aKey, String aNewValue) { + return rewriteEntryForLanguageRegistry("en_US", aKey, aNewValue); + } + + @SuppressWarnings("unchecked") + public static boolean rewriteEntryForLanguageRegistry(String aLang, String aKey, String aNewValue) { + LanguageRegistry aInstance = LanguageRegistry.instance(); + Field aModLanguageData = ReflectionUtils.getField(LanguageRegistry.class, "modLanguageData"); + if (aModLanguageData != null) { + Map aProps = new HashMap(); + Object aInstanceProps; + try { + aInstanceProps = aModLanguageData.get(aInstance); + if (aInstanceProps != null) { + aProps = (Map) aInstanceProps; + Properties aLangProps = aProps.get(aLang); + if (aLangProps != null) { + if (aLangProps.containsKey(aKey)) { + aLangProps.remove(aKey); + aLangProps.put(aKey, aNewValue); + } else { + aLangProps.put(aKey, aNewValue); + } + aProps.remove(aLang); + aProps.put(aLang, aLangProps); + ReflectionUtils.setField(aInstance, aModLanguageData, aProps); + } + } + } catch (IllegalArgumentException | IllegalAccessException e) { + + } + } + return false; + } + + public static String trans(String aNr, String aEnglish) { + return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_GTPP_" + aNr, aEnglish, false); + } + + /** + * Quick Block Name Lookup that is friendly to servers and locale. + */ + private static final Map mLocaleCache = new HashMap(); + + public static String getLocalizedNameOfBlock(Block aBlock, int aMeta) { + if (aBlock != null) { + return getLocalizedNameOfItemStack(ItemUtils.simpleMetaStack(aBlock, aMeta, 1)); + } + return "Bad Block Name"; + } + + public static String getLocalizedNameOfItem(Item aItem, int aMeta) { + if (aItem != null) { + return getLocalizedNameOfItemStack(ItemUtils.simpleMetaStack(aItem, aMeta, 1)); + } + return "Bad Item Name"; + } + + public static String getLocalizedNameOfItemStack(ItemStack aStack) { + String aUnlocalized; + if (aStack != null) { + aUnlocalized = ItemUtils.getUnlocalizedItemName(aStack) + "." + aStack.getItemDamage() + ".name"; + if (aUnlocalized == null || aUnlocalized.length() <= 0) { + return "Bad Locale Data"; + } + String mCacheKey = aUnlocalized; + if (mLocaleCache.containsKey(mCacheKey)) { + // Recache the key if it's invalid. + if (mLocaleCache.get(mCacheKey).toLowerCase().contains(".name") + || mLocaleCache.get(mCacheKey).toLowerCase().contains("|")) { + mLocaleCache.remove(mCacheKey); + String mNew; + try { + mNew = ("" + + StatCollector.translateToLocal( + aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) + .trim(); + if (aStack.hasTagCompound()) { + if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { + NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); + + if (nbttagcompound.hasKey("Name", 8)) { + mNew = nbttagcompound.getString("Name"); + } + } + } + } catch (Throwable t) { + mNew = "ERROR - Empty Stack"; + } + Logger.INFO("Re-caching " + mNew + " into locale cache. Key: " + mCacheKey); + mLocaleCache.put(mCacheKey, mNew); + } + Logger.INFO("Returning Cached Value. Key: " + mCacheKey); + return mLocaleCache.get(mCacheKey); + } else { + String unlocalizedName = aStack.getItem().getUnlocalizedName(aStack); + Logger.INFO("Cached New Value. UnlocalName: " + unlocalizedName); + String blockName = StatCollector.translateToLocal(unlocalizedName + ".name"); + Logger.INFO("Cached New Value. TranslatedName: " + unlocalizedName); + if (blockName.toLowerCase().contains(".name") + || blockName.toLowerCase().contains("|")) { + try { + blockName = ("" + + StatCollector.translateToLocal( + aStack.getItem().getUnlocalizedNameInefficiently(aStack) + ".name")) + .trim(); + if (aStack.hasTagCompound()) { + if (aStack.stackTagCompound != null && aStack.stackTagCompound.hasKey("display", 10)) { + NBTTagCompound nbttagcompound = aStack.stackTagCompound.getCompoundTag("display"); + if (nbttagcompound.hasKey("Name", 8)) { + blockName = nbttagcompound.getString("Name"); + } + } + } + } catch (Throwable t) { + blockName = "ERROR - Empty Stack"; + } + } + mLocaleCache.put(mCacheKey, blockName); + Logger.INFO("Cached New Value. Key: " + mCacheKey); + return blockName; + } + } + return "Bad ItemStack Name"; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java index 73ccfdf8a5..3d42bcda84 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java @@ -1,7 +1,5 @@ package gtPlusPlus.core.util.minecraft; -import java.util.*; - import gregtech.api.enums.*; import gregtech.api.util.GT_Utility; import gtPlusPlus.api.objects.Logger; @@ -19,502 +17,524 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.data.*; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; +import java.util.*; import net.minecraft.item.*; import net.minecraftforge.oredict.OreDictionary; public class MaterialUtils { - public static short firstID = 791; - - @SuppressWarnings({ "rawtypes", "unused" }) - private static Class[][] commonTypes = -{{Materials.class, int.class, TextureSet.class, float.class, int.class, - int.class, int.class, int.class, int.class, int.class, int.class, - String.class, int.class, int.class, int.class, int.class, boolean.class, - boolean.class, int.class, int.class, int.class, Dyes.class, int.class, - List.class , List.class}}; - - public static List oreDictValuesForEntry(final String oredictName){ - List oredictItemNames; - if(OreDictionary.doesOreNameExist(oredictName)){ - final List oredictItems = OreDictionary.getOres(oredictName); - oredictItemNames = oredictItems; - return oredictItemNames; - } - return null; - } - - private static Map mGeneratedMaterialMap = new HashMap(); - - public static Material generateMaterialFromGtENUM(final Materials material){ - return generateMaterialFromGtENUM(material, null, null); - } - - public static Material generateMaterialFromGtENUM(final Materials material, TextureSet aCustomTextures){ - return generateMaterialFromGtENUM(material, null, aCustomTextures); - } - - public static Material generateMaterialFromGtENUM(final Materials material, short[] customRGB){ - return generateMaterialFromGtENUM(material, customRGB, null); - } - - public static Material generateMaterialFromGtENUM(final Materials material, short[] customRGB, TextureSet aCustomTextures){ - String aMaterialKey = getMaterialName(material).toLowerCase(); - if (mGeneratedMaterialMap.containsKey(aMaterialKey)) { - return mGeneratedMaterialMap.get(aMaterialKey); - } - - try { - @SuppressWarnings("deprecation") - String name = material.name(); - final short[] rgba = (customRGB == null ? material.mRGBa : customRGB); - final int melting = material.mMeltingPoint; - final int boiling = material.mBlastFurnaceTemp; - final long protons = material.getProtons(); - final long neutrons = material.getNeutrons(); - final boolean blastFurnace = material.mBlastFurnaceRequired; - Integer radioactivity = 0; - if (material.isRadioactive()){ - ItemStack aDustStack = ItemUtils.getOrePrefixStack(OrePrefixes.dust, material, 1); - radioactivity = aDustStack != null ? GT_Utility.getRadioactivityLevel(aDustStack) : 0; - if (radioactivity == 0) { - long aProtons = material.getProtons(); - radioactivity = (int) Math.min(Math.max((aProtons / 30), 1), 9); - } - } - Logger.MATERIALS("[Debug] Calculated Radiation level to be "+radioactivity.intValue()+"."); - TextureSet iconSet = null; - if (aCustomTextures == null) { - if (material.isRadioactive()) { - iconSet = TextureSets.NUCLEAR.get(); - } - else { - iconSet = material.mIconSet; - } - } - else { - iconSet = aCustomTextures; - } - if (iconSet == null || iconSet.mSetName.toLowerCase().contains("fluid")) { - iconSet = TextureSet.SET_METALLIC; - } - Logger.MATERIALS("[Debug] Calculated Texture Set to be "+iconSet.mSetName+"."); - - - final int durability = material.mDurability; - boolean mGenerateCell = false; - boolean mGenerateFluid = true; - MaterialState materialState; - String chemicalFormula = StringUtils.subscript(Utils.sanitizeString(material.mChemicalFormula)); - final Element element = material.mElement; - - - //Weird Blacklist of Bad Chemical Strings - if (material.mElement == Element.Pb || material.mElement == Element.Na || material.mElement == Element.Ar){ - chemicalFormula = StringUtils.subscript(Utils.sanitizeString(material.mElement.name())); - } - - //Determine default state - Logger.MATERIALS("[Debug] Setting State of GT generated material. "+material.mDefaultLocalName); - if (material.getMolten(1) != null || material.getSolid(1) != null){ - materialState = MaterialState.SOLID; - Logger.MATERIALS("[Debug] Molten or Solid was not null."); - if (material.getMolten(1) == null && material.getSolid(1) != null){ - Logger.MATERIALS("[Debug] Molten is Null, Solid is not. Enabling cell generation."); - mGenerateCell = true; - } - else if (material.getMolten(1) != null && material.getSolid(1) == null){ - Logger.MATERIALS("[Debug] Molten is not Null, Solid is null. Not enabling cell generation."); - //mGenerateCell = true; - } - Logger.MATERIALS("[Debug] State set as solid."); - } - else if (material.getFluid(1) != null){ - Logger.MATERIALS("[Debug] State set as liquid."); - materialState = MaterialState.LIQUID; - } - else if (material.getGas(1) != null){ - Logger.MATERIALS("[Debug] State set as gas."); - materialState = MaterialState.GAS; - }/* - else if (material.getPlasma(1) != null){ - Logger.MATERIALS("[Debug] State set as plasma."); - materialState = MaterialState.PLASMA; - }*/ - else { - Logger.MATERIALS("[Debug] State set as solid. This material has no alternative states, so for safety we wont generate anything."); - materialState = MaterialState.SOLID; - mGenerateFluid = false; - } - - - if (name.toLowerCase().contains("infused")){ - final String tempname = name.substring(7, name.length()); - name = "Infused " + tempname; - } - if (hasValidRGBA(rgba) || (element == Element.H) || ((material == Materials.InfusedAir) || (material == Materials.InfusedFire) || (material == Materials.InfusedEarth) || (material == Materials.InfusedWater))){ - //ModItems.itemBaseDecidust = UtilsItems.generateDecidust(material); - //ModItems.itemBaseCentidust = UtilsItems.generateCentidust(material); - Material M = new Material(name, materialState,iconSet, durability, rgba, melting, boiling, protons, neutrons, blastFurnace, chemicalFormula, radioactivity, mGenerateCell, mGenerateFluid); - mGeneratedMaterialMap.put(aMaterialKey, M); - return M; - } - else { - Logger.DEBUG_MATERIALS("Failed to generate GT++ material instance for "+material.name() +" | Valid RGB? "+(hasValidRGBA(rgba))); - } - } - catch (Throwable t) { - Logger.DEBUG_MATERIALS("Failed to generate GT++ material instance for "+material.name()); - t.printStackTrace(); - } - return null; - - } - - public static Material generateQuickMaterial(final String materialName, final MaterialState defaultState, final short[] colour, final int sRadioactivity) { - String aMaterialKey = materialName.toLowerCase(); - if (mGeneratedMaterialMap.containsKey(aMaterialKey)) { - return mGeneratedMaterialMap.get(aMaterialKey); - } - - final Material temp = new Material( - materialName, - defaultState, - colour, - 1000, //melting - 3000, //boiling - 50, //Protons - 50, //Neutrons - false, - "", - sRadioactivity); - mGeneratedMaterialMap.put(aMaterialKey, temp); - return temp; - } - - public static boolean hasValidRGBA(final short[] rgba){ - if (rgba == null || rgba.length < 3 || rgba.length > 4){ - return false; - } - return true; - } - - public static int getTierOfMaterial(final double aMeltingPoint){ - - return aMeltingPoint < 1000 ? 0 : (MathUtils.roundToClosestInt(aMeltingPoint/1000f)); - - - /*if ((aMeltingPoint >= 0) && (aMeltingPoint <= 1000)){ - return 1; - } - else if((aMeltingPoint >= 1001) && (aMeltingPoint <= 2000)){ - return 2; - } - else if((aMeltingPoint >= 2001) && (aMeltingPoint <= 3000)){ - return 3; - } - else if((aMeltingPoint >= 3001) && (aMeltingPoint <= 4000)){ - return 4; - } - else if((aMeltingPoint >= 4001) && (aMeltingPoint <= 5000)){ - return 5; - } - else if((aMeltingPoint >= 5001) && (aMeltingPoint <= 6000)){ - return 6; - } - else if((aMeltingPoint >= 6001) && (aMeltingPoint <= 7000)){ - return 7; - } - else if((aMeltingPoint >= 7001) && (aMeltingPoint <= 8000)){ - return 8; - } - else if((aMeltingPoint >= 8001) && (aMeltingPoint <= 9000)){ - return 9; - } - else if((aMeltingPoint >= 9001) && (aMeltingPoint <= 9999)){ - return 10; - } - else { - return 0; - }*/ - } - - public static int getVoltageForTier(int aTier) { - //aTier += 1; - Probably some logic to this, idk. - - switch(aTier){ - case 0: - return 16; - case 1: - return 30; - case 2: - return 120; - case 3: - return 480; - case 4: - return 1920; - case 5: - return 7680; - case 6: - return 30720; - case 7: - return 122880; - case 8: - return 491520; - case 9: - return 1966080; - case 10: - return 7864320; - case 11: - return 31457280; - case 12: - return 125829120; - case 13: - return 503316480; - case 14: - return 2013265920; - default: - return Integer.MAX_VALUE; - } - - /*else { - int newTier = aTier - 1; - return (int) ((4*(Math.pow(4, newTier)))*7.5); - }*/ - } - - private static Materials getMaterialByName(String materialName) { - - if (!CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { - return (Materials) EnumUtils.getValue(gregtech.api.enums.Materials.class, materialName, false); - } - else { - for (Materials m : Materials.values()) { - if (MaterialUtils.getMaterialName(m).toLowerCase().equals(materialName.toLowerCase())) { - return m; - } - } - return null; - } - } - - @SuppressWarnings("deprecation") - public static String getMaterialName(Materials mat){ - - String mName = null; - - try { - mName = (String) ReflectionUtils.getField(Materials.class, "mDefaultLocalName").get(mat); - if (mName == null) { - mName = (String) ReflectionUtils.getField(Materials.class, "mName").get(mat); - } - } - catch (IllegalArgumentException | IllegalAccessException e) { - } - - - if (mName == null || mName.equals("")){ - mName = mat.name(); - } - return mName; - } - - public static TextureSet getMostCommonTextureSet(List list) { - TypeCounter aCounter = new TypeCounter(TextureSet.class); - for (Material m : list) { - TextureSet t = m.getTextureSet(); - if (t == null) { - t = Materials.Gold.mIconSet; - } - if (t != null) { - aCounter.add(t, t.mSetName); - } - } - return aCounter.getResults(); - /*Optional r = list.stream().map(Material::getTextureSet).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey); - TextureSet o = (r != null && r.isPresent() && r.get() != null) ? r.get() : null; - return o;*/ - } - - - - public static Materials getMaterial(String aMaterialName, String aFallbackMaterialName) { - Materials g = getMaterial(aMaterialName); - if (g == null) { - g = getMaterial(aFallbackMaterialName); - } - if (g == null) { - Logger.INFO("Failed finding material '"+aMaterialName+"' & fallback '"+aFallbackMaterialName+"', returning _NULL."); - CORE.crash(); - //g = Materials._NULL; - } - return g; - } - - public static Materials getMaterial(String aMaterialName) { - Materials m = gtPlusPlus.xmod.gregtech.common.StaticFields59.getMaterial(aMaterialName); - if (m == null) { - m = getMaterialByName(aMaterialName); - } - if (m == null) { - Logger.INFO("Failed finding material '"+aMaterialName+"', returning _NULL."); - m = Materials._NULL; - } - return m; - } - - public static AutoMap getCompoundMaterialsRecursively(Material aMat){ - return getCompoundMaterialsRecursively_Speiger(aMat); - /* - AutoMap aDataSet = new AutoMap(); - final int HARD_LIMIT = 1000; - int mLoopCounter = 0; - if (aMat.getComposites().size() > 0) { - try { - List xList = Lists.newLinkedList(); - for (MaterialStack kj : aMat.getComposites()) { - xList.add(kj.getStackMaterial()); - } - if (xList.isEmpty()) { - aDataSet.put(aMat); - return aDataSet; - } - ListIterator listIterator = xList.listIterator(); - while(listIterator.hasNext()){ - Material e = listIterator.next(); - listIterator.remove(); - if (mLoopCounter > HARD_LIMIT) { - break; - } - - if (e.getComposites().isEmpty()) { - aDataSet.put(e); - } - else { - for (MaterialStack x : e.getComposites()) { - listIterator.add(x.getStackMaterial()); - } - } - mLoopCounter++; - - - }} - catch (Throwable t) { - aDataSet.put(aMat); - t.printStackTrace(); - } - } - if (aDataSet.isEmpty()) { - aDataSet.put(aMat); - return aDataSet; - } - return aDataSet; - */} - - public static AutoMap getCompoundMaterialsRecursively_Speiger(Material toSearch) { - AutoMap resultList = new AutoMap(); - if (toSearch.getComposites().isEmpty()) { - resultList.put(toSearch); - return resultList; - } - final int HARD_LIMIT = 1000; - - // Could be a Deque but i dont use the interface - // enough to use it as default. - LinkedList toCheck = new LinkedList(); - - toCheck.add(toSearch); - int processed = 0; - while (toCheck.size() > 0 && processed < HARD_LIMIT) { - Material current = toCheck.remove(); - if (current.getComposites().isEmpty()) { - resultList.put(current); - } else { - for (MaterialStack entry : current.getComposites()) { - toCheck.add(entry.getStackMaterial()); - } - } - processed++; - } - return resultList; - } - - public static void generateComponentAndAssignToAMaterial(ComponentTypes aType, Material aMaterial) { - generateComponentAndAssignToAMaterial(aType, aMaterial, true); - } - - public static void generateComponentAndAssignToAMaterial(ComponentTypes aType, Material aMaterial, boolean generateRecipes) { - Item aGC; - if (aType == ComponentTypes.PLATEHEAVY) { - aGC = new BaseItemPlateHeavy(aMaterial); - } - else if (aType == ComponentTypes.FINEWIRE) { - aGC = new BaseItemFineWire(aMaterial); - } - else if (aType == ComponentTypes.FOIL) { - aGC = new BaseItemFoil(aMaterial); - } - else { - aGC = new BaseItemComponent(aMaterial, aType); - } - if (aGC != null) { - String aFormattedLangName = aType.getName(); - - if (!aFormattedLangName.startsWith(" ")) { - if (aFormattedLangName.contains("@")) { - String[] aSplit = aFormattedLangName.split("@"); - aFormattedLangName = aSplit[0] + " " + aMaterial.getLocalizedName() + " " + aSplit[1]; - } - } - - if (aFormattedLangName.equals(aType.getName())) { - aFormattedLangName = aMaterial.getLocalizedName() + aFormattedLangName; - - } - - - - Logger.MATERIALS("[Lang] "+aGC.getUnlocalizedName()+".name="+aFormattedLangName); - aMaterial.registerComponentForMaterial(aType, ItemUtils.getSimpleStack(aGC)); - } - } - - - - - - - - - public static void generateSpecialDustAndAssignToAMaterial(Material aMaterial) { - generateSpecialDustAndAssignToAMaterial(aMaterial, true); - } - - public static void generateSpecialDustAndAssignToAMaterial(Material aMaterial, boolean generateMixerRecipes) { - Item[] aDusts = ItemUtils.generateSpecialUseDusts(aMaterial, false, Utils.invertBoolean(generateMixerRecipes)); - if (aDusts != null && aDusts.length > 0) { - aMaterial.registerComponentForMaterial(OrePrefixes.dust, ItemUtils.getSimpleStack(aDusts[0])); - aMaterial.registerComponentForMaterial(OrePrefixes.dustSmall, ItemUtils.getSimpleStack(aDusts[1])); - aMaterial.registerComponentForMaterial(OrePrefixes.dustTiny, ItemUtils.getSimpleStack(aDusts[2])); - } - - } - - public static boolean doesMaterialExist(String aMatName) { - for (Materials m : Materials.values()) { - if (m.name().toLowerCase().equals(aMatName.toLowerCase())) { - return true; - } - } - 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 + public static short firstID = 791; + + @SuppressWarnings({"rawtypes", "unused"}) + private static Class[][] commonTypes = { + { + Materials.class, + int.class, + TextureSet.class, + float.class, + int.class, + int.class, + int.class, + int.class, + int.class, + int.class, + int.class, + String.class, + int.class, + int.class, + int.class, + int.class, + boolean.class, + boolean.class, + int.class, + int.class, + int.class, + Dyes.class, + int.class, + List.class, + List.class + } + }; + + public static List oreDictValuesForEntry(final String oredictName) { + List oredictItemNames; + if (OreDictionary.doesOreNameExist(oredictName)) { + final List oredictItems = OreDictionary.getOres(oredictName); + oredictItemNames = oredictItems; + return oredictItemNames; + } + return null; + } + + private static Map mGeneratedMaterialMap = new HashMap(); + + public static Material generateMaterialFromGtENUM(final Materials material) { + return generateMaterialFromGtENUM(material, null, null); + } + + public static Material generateMaterialFromGtENUM(final Materials material, TextureSet aCustomTextures) { + return generateMaterialFromGtENUM(material, null, aCustomTextures); + } + + public static Material generateMaterialFromGtENUM(final Materials material, short[] customRGB) { + return generateMaterialFromGtENUM(material, customRGB, null); + } + + public static Material generateMaterialFromGtENUM( + final Materials material, short[] customRGB, TextureSet aCustomTextures) { + String aMaterialKey = getMaterialName(material).toLowerCase(); + if (mGeneratedMaterialMap.containsKey(aMaterialKey)) { + return mGeneratedMaterialMap.get(aMaterialKey); + } + + try { + @SuppressWarnings("deprecation") + String name = material.name(); + final short[] rgba = (customRGB == null ? material.mRGBa : customRGB); + final int melting = material.mMeltingPoint; + final int boiling = material.mBlastFurnaceTemp; + final long protons = material.getProtons(); + final long neutrons = material.getNeutrons(); + final boolean blastFurnace = material.mBlastFurnaceRequired; + Integer radioactivity = 0; + if (material.isRadioactive()) { + ItemStack aDustStack = ItemUtils.getOrePrefixStack(OrePrefixes.dust, material, 1); + radioactivity = aDustStack != null ? GT_Utility.getRadioactivityLevel(aDustStack) : 0; + if (radioactivity == 0) { + long aProtons = material.getProtons(); + radioactivity = (int) Math.min(Math.max((aProtons / 30), 1), 9); + } + } + Logger.MATERIALS("[Debug] Calculated Radiation level to be " + radioactivity.intValue() + "."); + TextureSet iconSet = null; + if (aCustomTextures == null) { + if (material.isRadioactive()) { + iconSet = TextureSets.NUCLEAR.get(); + } else { + iconSet = material.mIconSet; + } + } else { + iconSet = aCustomTextures; + } + if (iconSet == null || iconSet.mSetName.toLowerCase().contains("fluid")) { + iconSet = TextureSet.SET_METALLIC; + } + Logger.MATERIALS("[Debug] Calculated Texture Set to be " + iconSet.mSetName + "."); + + final int durability = material.mDurability; + boolean mGenerateCell = false; + boolean mGenerateFluid = true; + MaterialState materialState; + String chemicalFormula = StringUtils.subscript(Utils.sanitizeString(material.mChemicalFormula)); + final Element element = material.mElement; + + // Weird Blacklist of Bad Chemical Strings + if (material.mElement == Element.Pb || material.mElement == Element.Na || material.mElement == Element.Ar) { + chemicalFormula = StringUtils.subscript(Utils.sanitizeString(material.mElement.name())); + } + + // Determine default state + Logger.MATERIALS("[Debug] Setting State of GT generated material. " + material.mDefaultLocalName); + if (material.getMolten(1) != null || material.getSolid(1) != null) { + materialState = MaterialState.SOLID; + Logger.MATERIALS("[Debug] Molten or Solid was not null."); + if (material.getMolten(1) == null && material.getSolid(1) != null) { + Logger.MATERIALS("[Debug] Molten is Null, Solid is not. Enabling cell generation."); + mGenerateCell = true; + } else if (material.getMolten(1) != null && material.getSolid(1) == null) { + Logger.MATERIALS("[Debug] Molten is not Null, Solid is null. Not enabling cell generation."); + // mGenerateCell = true; + } + Logger.MATERIALS("[Debug] State set as solid."); + } else if (material.getFluid(1) != null) { + Logger.MATERIALS("[Debug] State set as liquid."); + materialState = MaterialState.LIQUID; + } else if (material.getGas(1) != null) { + Logger.MATERIALS("[Debug] State set as gas."); + materialState = MaterialState.GAS; + } /* + else if (material.getPlasma(1) != null){ + Logger.MATERIALS("[Debug] State set as plasma."); + materialState = MaterialState.PLASMA; + }*/ else { + Logger.MATERIALS( + "[Debug] State set as solid. This material has no alternative states, so for safety we wont generate anything."); + materialState = MaterialState.SOLID; + mGenerateFluid = false; + } + + if (name.toLowerCase().contains("infused")) { + final String tempname = name.substring(7, name.length()); + name = "Infused " + tempname; + } + if (hasValidRGBA(rgba) + || (element == Element.H) + || ((material == Materials.InfusedAir) + || (material == Materials.InfusedFire) + || (material == Materials.InfusedEarth) + || (material == Materials.InfusedWater))) { + // ModItems.itemBaseDecidust = UtilsItems.generateDecidust(material); + // ModItems.itemBaseCentidust = UtilsItems.generateCentidust(material); + Material M = new Material( + name, + materialState, + iconSet, + durability, + rgba, + melting, + boiling, + protons, + neutrons, + blastFurnace, + chemicalFormula, + radioactivity, + mGenerateCell, + mGenerateFluid); + mGeneratedMaterialMap.put(aMaterialKey, M); + return M; + } else { + Logger.DEBUG_MATERIALS("Failed to generate GT++ material instance for " + material.name() + + " | Valid RGB? " + (hasValidRGBA(rgba))); + } + } catch (Throwable t) { + Logger.DEBUG_MATERIALS("Failed to generate GT++ material instance for " + material.name()); + t.printStackTrace(); + } + return null; + } + + public static Material generateQuickMaterial( + final String materialName, + final MaterialState defaultState, + final short[] colour, + final int sRadioactivity) { + String aMaterialKey = materialName.toLowerCase(); + if (mGeneratedMaterialMap.containsKey(aMaterialKey)) { + return mGeneratedMaterialMap.get(aMaterialKey); + } + + final Material temp = new Material( + materialName, + defaultState, + colour, + 1000, // melting + 3000, // boiling + 50, // Protons + 50, // Neutrons + false, + "", + sRadioactivity); + mGeneratedMaterialMap.put(aMaterialKey, temp); + return temp; + } + + public static boolean hasValidRGBA(final short[] rgba) { + if (rgba == null || rgba.length < 3 || rgba.length > 4) { + return false; + } + return true; + } + + public static int getTierOfMaterial(final double aMeltingPoint) { + + return aMeltingPoint < 1000 ? 0 : (MathUtils.roundToClosestInt(aMeltingPoint / 1000f)); + + /*if ((aMeltingPoint >= 0) && (aMeltingPoint <= 1000)){ + return 1; + } + else if((aMeltingPoint >= 1001) && (aMeltingPoint <= 2000)){ + return 2; + } + else if((aMeltingPoint >= 2001) && (aMeltingPoint <= 3000)){ + return 3; + } + else if((aMeltingPoint >= 3001) && (aMeltingPoint <= 4000)){ + return 4; + } + else if((aMeltingPoint >= 4001) && (aMeltingPoint <= 5000)){ + return 5; + } + else if((aMeltingPoint >= 5001) && (aMeltingPoint <= 6000)){ + return 6; + } + else if((aMeltingPoint >= 6001) && (aMeltingPoint <= 7000)){ + return 7; + } + else if((aMeltingPoint >= 7001) && (aMeltingPoint <= 8000)){ + return 8; + } + else if((aMeltingPoint >= 8001) && (aMeltingPoint <= 9000)){ + return 9; + } + else if((aMeltingPoint >= 9001) && (aMeltingPoint <= 9999)){ + return 10; + } + else { + return 0; + }*/ + } + + public static int getVoltageForTier(int aTier) { + // aTier += 1; - Probably some logic to this, idk. + + switch (aTier) { + case 0: + return 16; + case 1: + return 30; + case 2: + return 120; + case 3: + return 480; + case 4: + return 1920; + case 5: + return 7680; + case 6: + return 30720; + case 7: + return 122880; + case 8: + return 491520; + case 9: + return 1966080; + case 10: + return 7864320; + case 11: + return 31457280; + case 12: + return 125829120; + case 13: + return 503316480; + case 14: + return 2013265920; + default: + return Integer.MAX_VALUE; + } + + /*else { + int newTier = aTier - 1; + return (int) ((4*(Math.pow(4, newTier)))*7.5); + }*/ + } + + private static Materials getMaterialByName(String materialName) { + + if (!CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { + return (Materials) EnumUtils.getValue(gregtech.api.enums.Materials.class, materialName, false); + } else { + for (Materials m : Materials.values()) { + if (MaterialUtils.getMaterialName(m).toLowerCase().equals(materialName.toLowerCase())) { + return m; + } + } + return null; + } + } + + @SuppressWarnings("deprecation") + public static String getMaterialName(Materials mat) { + + String mName = null; + + try { + mName = (String) ReflectionUtils.getField(Materials.class, "mDefaultLocalName") + .get(mat); + if (mName == null) { + mName = (String) + ReflectionUtils.getField(Materials.class, "mName").get(mat); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + } + + if (mName == null || mName.equals("")) { + mName = mat.name(); + } + return mName; + } + + public static TextureSet getMostCommonTextureSet(List list) { + TypeCounter aCounter = new TypeCounter(TextureSet.class); + for (Material m : list) { + TextureSet t = m.getTextureSet(); + if (t == null) { + t = Materials.Gold.mIconSet; + } + if (t != null) { + aCounter.add(t, t.mSetName); + } + } + return aCounter.getResults(); + /*Optional r = list.stream().map(Material::getTextureSet).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey); + TextureSet o = (r != null && r.isPresent() && r.get() != null) ? r.get() : null; + return o;*/ + } + + public static Materials getMaterial(String aMaterialName, String aFallbackMaterialName) { + Materials g = getMaterial(aMaterialName); + if (g == null) { + g = getMaterial(aFallbackMaterialName); + } + if (g == null) { + Logger.INFO("Failed finding material '" + aMaterialName + "' & fallback '" + aFallbackMaterialName + + "', returning _NULL."); + CORE.crash(); + // g = Materials._NULL; + } + return g; + } + + public static Materials getMaterial(String aMaterialName) { + Materials m = gtPlusPlus.xmod.gregtech.common.StaticFields59.getMaterial(aMaterialName); + if (m == null) { + m = getMaterialByName(aMaterialName); + } + if (m == null) { + Logger.INFO("Failed finding material '" + aMaterialName + "', returning _NULL."); + m = Materials._NULL; + } + return m; + } + + public static AutoMap getCompoundMaterialsRecursively(Material aMat) { + return getCompoundMaterialsRecursively_Speiger(aMat); + /* + AutoMap aDataSet = new AutoMap(); + final int HARD_LIMIT = 1000; + int mLoopCounter = 0; + if (aMat.getComposites().size() > 0) { + try { + List xList = Lists.newLinkedList(); + for (MaterialStack kj : aMat.getComposites()) { + xList.add(kj.getStackMaterial()); + } + if (xList.isEmpty()) { + aDataSet.put(aMat); + return aDataSet; + } + ListIterator listIterator = xList.listIterator(); + while(listIterator.hasNext()){ + Material e = listIterator.next(); + listIterator.remove(); + if (mLoopCounter > HARD_LIMIT) { + break; + } + + if (e.getComposites().isEmpty()) { + aDataSet.put(e); + } + else { + for (MaterialStack x : e.getComposites()) { + listIterator.add(x.getStackMaterial()); + } + } + mLoopCounter++; + + + }} + catch (Throwable t) { + aDataSet.put(aMat); + t.printStackTrace(); + } + } + if (aDataSet.isEmpty()) { + aDataSet.put(aMat); + return aDataSet; + } + return aDataSet; + */ } + + public static AutoMap getCompoundMaterialsRecursively_Speiger(Material toSearch) { + AutoMap resultList = new AutoMap(); + if (toSearch.getComposites().isEmpty()) { + resultList.put(toSearch); + return resultList; + } + final int HARD_LIMIT = 1000; + + // Could be a Deque but i dont use the interface + // enough to use it as default. + LinkedList toCheck = new LinkedList(); + + toCheck.add(toSearch); + int processed = 0; + while (toCheck.size() > 0 && processed < HARD_LIMIT) { + Material current = toCheck.remove(); + if (current.getComposites().isEmpty()) { + resultList.put(current); + } else { + for (MaterialStack entry : current.getComposites()) { + toCheck.add(entry.getStackMaterial()); + } + } + processed++; + } + return resultList; + } + + public static void generateComponentAndAssignToAMaterial(ComponentTypes aType, Material aMaterial) { + generateComponentAndAssignToAMaterial(aType, aMaterial, true); + } + + public static void generateComponentAndAssignToAMaterial( + ComponentTypes aType, Material aMaterial, boolean generateRecipes) { + Item aGC; + if (aType == ComponentTypes.PLATEHEAVY) { + aGC = new BaseItemPlateHeavy(aMaterial); + } else if (aType == ComponentTypes.FINEWIRE) { + aGC = new BaseItemFineWire(aMaterial); + } else if (aType == ComponentTypes.FOIL) { + aGC = new BaseItemFoil(aMaterial); + } else { + aGC = new BaseItemComponent(aMaterial, aType); + } + if (aGC != null) { + String aFormattedLangName = aType.getName(); + + if (!aFormattedLangName.startsWith(" ")) { + if (aFormattedLangName.contains("@")) { + String[] aSplit = aFormattedLangName.split("@"); + aFormattedLangName = aSplit[0] + " " + aMaterial.getLocalizedName() + " " + aSplit[1]; + } + } + + if (aFormattedLangName.equals(aType.getName())) { + aFormattedLangName = aMaterial.getLocalizedName() + aFormattedLangName; + } + + Logger.MATERIALS("[Lang] " + aGC.getUnlocalizedName() + ".name=" + aFormattedLangName); + aMaterial.registerComponentForMaterial(aType, ItemUtils.getSimpleStack(aGC)); + } + } + + public static void generateSpecialDustAndAssignToAMaterial(Material aMaterial) { + generateSpecialDustAndAssignToAMaterial(aMaterial, true); + } + + public static void generateSpecialDustAndAssignToAMaterial(Material aMaterial, boolean generateMixerRecipes) { + Item[] aDusts = ItemUtils.generateSpecialUseDusts(aMaterial, false, Utils.invertBoolean(generateMixerRecipes)); + if (aDusts != null && aDusts.length > 0) { + aMaterial.registerComponentForMaterial(OrePrefixes.dust, ItemUtils.getSimpleStack(aDusts[0])); + aMaterial.registerComponentForMaterial(OrePrefixes.dustSmall, ItemUtils.getSimpleStack(aDusts[1])); + aMaterial.registerComponentForMaterial(OrePrefixes.dustTiny, ItemUtils.getSimpleStack(aDusts[2])); + } + } + + public static boolean doesMaterialExist(String aMatName) { + for (Materials m : Materials.values()) { + if (m.name().toLowerCase().equals(aMatName.toLowerCase())) { + return true; + } + } + 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; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java index 080b5665a3..cdfe1e5076 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java @@ -1,265 +1,266 @@ package gtPlusPlus.core.util.minecraft; +import gregtech.common.GT_Worldgen_GT_Ore_Layer; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.util.reflect.ReflectionUtils; import java.util.HashMap; - import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.world.World; -import gregtech.common.GT_Worldgen_GT_Ore_Layer; +public class MiningUtils { -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.util.reflect.ReflectionUtils; + public static Boolean canPickaxeBlock(final Block currentBlock, final World currentWorld) { + String correctTool = ""; + if (!currentWorld.isRemote) { + try { + correctTool = currentBlock.getHarvestTool(0); + // Utils.LOG_WARNING(correctTool); + if (correctTool.equals("pickaxe")) { + return true; + } + } catch (final NullPointerException e) { + return false; + } + } + return false; + } -public class MiningUtils { + private static void removeBlockAndDropAsItem(final World world, final int X, final int Y, final int Z) { + try { + final Block block = world.getBlock(X, Y, Z); + if (canPickaxeBlock(block, world)) { + if ((block != Blocks.bedrock) + && (block.getBlockHardness(world, X, Y, Z) != -1) + && (block.getBlockHardness(world, X, Y, Z) <= 100) + && (block != Blocks.water) + && (block != Blocks.lava)) { + block.dropBlockAsItem(world, X, Y, Z, world.getBlockMetadata(X, Y, Z), 0); + world.setBlockToAir(X, Y, Z); + + } else { + Logger.WARNING("Incorrect Tool for mining this block."); + } + } + } catch (final NullPointerException e) { + + } + } + + public static boolean getBlockType(final Block block, final World world, final int[] xyz, final int miningLevel) { + final String LIQUID = "liquid"; + final String BLOCK = "block"; + final String ORE = "ore"; + final String AIR = "air"; + String blockClass = ""; + + if (world.isRemote) { + return false; + } + + if (block == Blocks.end_stone) { + return true; + } + if (block == Blocks.stone) { + return true; + } + if (block == Blocks.sandstone) { + return true; + } + if (block == Blocks.netherrack) { + return true; + } + if (block == Blocks.nether_brick) { + return true; + } + if (block == Blocks.nether_brick_stairs) { + return true; + } + if (block == Blocks.nether_brick_fence) { + return true; + } + if (block == Blocks.glowstone) { + return true; + } + + try { + blockClass = block.getClass().toString().toLowerCase(); + Logger.WARNING(blockClass); + if (blockClass.toLowerCase().contains(LIQUID)) { + Logger.WARNING(block.toString() + " is a Liquid."); + return false; + } else if (blockClass.toLowerCase().contains(ORE)) { + Logger.WARNING(block.toString() + " is an Ore."); + return true; + } else if (block.getHarvestLevel(world.getBlockMetadata(xyz[0], xyz[1], xyz[2])) >= miningLevel) { + Logger.WARNING(block.toString() + " is minable."); + return true; + } else if (blockClass.toLowerCase().contains(AIR)) { + Logger.WARNING(block.toString() + " is Air."); + return false; + } else if (blockClass.toLowerCase().contains(BLOCK)) { + Logger.WARNING(block.toString() + " is a block of some kind."); + return false; + } else { + Logger.WARNING(block.toString() + " is mystery."); + return false; + } + } catch (final NullPointerException e) { + return false; + } + } + + public static int mMoonID = -99; + public static int mMarsID = -99; + public static int mCometsID = -99; - public static Boolean canPickaxeBlock(final Block currentBlock, final World currentWorld){ - String correctTool = ""; - if (!currentWorld.isRemote){ - try { - correctTool = currentBlock.getHarvestTool(0); - //Utils.LOG_WARNING(correctTool); - if (correctTool.equals("pickaxe")){ - return true;} - } catch (final NullPointerException e){ - return false;} - } - return false; - } + public static AutoMap getOresForDim(int dim) { + if (dim == -1) { + return Ores_Nether; + } else if (dim == 1) { + return Ores_End; + } else if (dim == mMoonID) { + return Ores_Moon; + } else if (dim == mMarsID) { + return Ores_Mars; + } else if (dim == mCometsID) { + return Ores_Comets; + } else { + return Ores_Overworld; + } + } - private static void removeBlockAndDropAsItem(final World world, final int X, final int Y, final int Z){ - try { - final Block block = world.getBlock(X, Y, Z); - if (canPickaxeBlock(block, world)){ - if((block != Blocks.bedrock) && (block.getBlockHardness(world, X, Y, Z) != -1) && (block.getBlockHardness(world, X, Y, Z) <= 100) && (block != Blocks.water) && (block != Blocks.lava)){ - block.dropBlockAsItem(world, X, Y, Z, world.getBlockMetadata(X, Y, Z), 0); - world.setBlockToAir(X, Y, Z); + public static void iterateAllOreTypes() { + HashMap M = new HashMap(); + String aTextWorldGen = null; + if (MiningUtils.findAndMapOreTypesFromGT()) { + int mapKey = 0; + for (AutoMap g : MiningUtils.mOreMaps) { + for (GT_Worldgen_GT_Ore_Layer h : g) { - } - else { - Logger.WARNING("Incorrect Tool for mining this block."); - } - } - } catch (final NullPointerException e){ + try { + aTextWorldGen = + (String) ReflectionUtils.getField(GT_Worldgen_GT_Ore_Layer.class, "aTextWorldgen") + .get(h); + } catch (IllegalArgumentException | IllegalAccessException e) { + aTextWorldGen = h.mWorldGenName; + } - } - } + // if (M.containsKey(h.aTextWorldgen + h.mWorldGenName)) { + M.put(aTextWorldGen + h.mWorldGenName, mapKey); + Logger.INFO("Found Vein type: " + aTextWorldGen + h.mWorldGenName + " in map with key: " + mapKey); + // } + } + mapKey++; + } + } + } - public static boolean getBlockType(final Block block, final World world, final int[] xyz, final int miningLevel){ - final String LIQUID = "liquid"; - final String BLOCK = "block"; - final String ORE = "ore"; - final String AIR = "air"; - String blockClass = ""; + public static AutoMap[] mOreMaps = new AutoMap[7]; + private static AutoMap Ores_Overworld = new AutoMap(); + private static AutoMap Ores_Nether = new AutoMap(); + private static AutoMap Ores_End = new AutoMap(); + private static AutoMap Ores_Moon = new AutoMap(); + private static AutoMap Ores_Mars = new AutoMap(); + private static AutoMap Ores_Comets = new AutoMap(); + private static AutoMap Ores_Misc = new AutoMap(); - if (world.isRemote){ - return false; - } + public static boolean findAndMapOreTypesFromGT() { + // Gets Moon ID - if (block == Blocks.end_stone) { - return true; - } - if (block == Blocks.stone) { - return true; - } - if (block == Blocks.sandstone) { - return true; - } - if (block == Blocks.netherrack) { - return true; - } - if (block == Blocks.nether_brick) { - return true; - } - if (block == Blocks.nether_brick_stairs) { - return true; - } - if (block == Blocks.nether_brick_fence) { - return true; - } - if (block == Blocks.glowstone) { - return true; - } + boolean aEndAsteroids; + try { + if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore") != null + && mMoonID == -99) { + mMoonID = ReflectionUtils.getField( + ReflectionUtils.getClass("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore"), + "idDimensionMoon") + .getInt(null); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + } + // Gets Mars ID + try { + if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars") != null + && mMarsID == -99) { + mMarsID = ReflectionUtils.getField( + ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars"), + "dimensionIDMars") + .getInt(null); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + } + // Get Comets ID + try { + if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids") + != null + && mCometsID == -99) { + mCometsID = ReflectionUtils.getField( + ReflectionUtils.getClass( + "micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids"), + "dimensionIDAsteroids") + .getInt(null); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + } - try { - blockClass = block.getClass().toString().toLowerCase(); - Logger.WARNING(blockClass); - if (blockClass.toLowerCase().contains(LIQUID)){ - Logger.WARNING(block.toString()+" is a Liquid."); - return false; - } - else if (blockClass.toLowerCase().contains(ORE)){ - Logger.WARNING(block.toString()+" is an Ore."); - return true; - } - else if (block.getHarvestLevel(world.getBlockMetadata(xyz[0], xyz[1], xyz[2])) >= miningLevel){ - Logger.WARNING(block.toString()+" is minable."); - return true; - } - else if (blockClass.toLowerCase().contains(AIR)){ - Logger.WARNING(block.toString()+" is Air."); - return false; - } - else if (blockClass.toLowerCase().contains(BLOCK)){ - Logger.WARNING(block.toString()+" is a block of some kind."); - return false; - } - else { - Logger.WARNING(block.toString()+" is mystery."); - return false; - } - } - catch(final NullPointerException e){ - return false; - } - } + // Clear Cache + Ores_Overworld.clear(); + Ores_Nether.clear(); + Ores_End.clear(); + Ores_Misc.clear(); - public static int mMoonID =-99; - public static int mMarsID = -99; - public static int mCometsID = -99; - public static AutoMap getOresForDim(int dim) { - if (dim == -1) { - return Ores_Nether; - } - else if (dim == 1) { - return Ores_End; - } - else if (dim == mMoonID) { - return Ores_Moon; - } - else if (dim == mMarsID) { - return Ores_Mars; - } - else if (dim == mCometsID) { - return Ores_Comets; - } - else { - return Ores_Overworld; - } - - } - - public static void iterateAllOreTypes() { - HashMap M = new HashMap(); - String aTextWorldGen = null; - if (MiningUtils.findAndMapOreTypesFromGT()) { - int mapKey = 0; - for (AutoMap g : MiningUtils.mOreMaps) { - for (GT_Worldgen_GT_Ore_Layer h : g) { - - try { - aTextWorldGen = (String) ReflectionUtils.getField(GT_Worldgen_GT_Ore_Layer.class, "aTextWorldgen").get(h); - } catch (IllegalArgumentException | IllegalAccessException e) { - aTextWorldGen = h.mWorldGenName; - } - - //if (M.containsKey(h.aTextWorldgen + h.mWorldGenName)) { - M.put(aTextWorldGen + h.mWorldGenName, mapKey); - Logger.INFO("Found Vein type: " + aTextWorldGen + h.mWorldGenName + " in map with key: "+mapKey); - //} - } - mapKey++; - } - } - } - - public static AutoMap[] mOreMaps = new AutoMap[7]; - private static AutoMap Ores_Overworld = new AutoMap(); - private static AutoMap Ores_Nether = new AutoMap(); - private static AutoMap Ores_End = new AutoMap(); - private static AutoMap Ores_Moon = new AutoMap(); - private static AutoMap Ores_Mars = new AutoMap(); - private static AutoMap Ores_Comets = new AutoMap(); - private static AutoMap Ores_Misc = new AutoMap(); - - public static boolean findAndMapOreTypesFromGT() { - //Gets Moon ID - - boolean aEndAsteroids; - try { - if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore") != null && mMoonID == -99) { - mMoonID = ReflectionUtils.getField(ReflectionUtils.getClass("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore"), "idDimensionMoon").getInt(null); - } - } - catch (IllegalArgumentException | IllegalAccessException e) {} - - //Gets Mars ID - try { - if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars") != null && mMarsID == -99) { - mMarsID = ReflectionUtils.getField(ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars"), "dimensionIDMars").getInt(null); - } - } - catch (IllegalArgumentException | IllegalAccessException e) {} - - //Get Comets ID - try { - if (ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids") != null && mCometsID == -99) { - mCometsID = ReflectionUtils.getField(ReflectionUtils.getClass("micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids"), "dimensionIDAsteroids").getInt(null); - } - } - catch (IllegalArgumentException | IllegalAccessException e) {} + for (GT_Worldgen_GT_Ore_Layer x : GT_Worldgen_GT_Ore_Layer.sList) { + if (x.mEnabled) { - //Clear Cache - Ores_Overworld.clear(); - Ores_Nether.clear(); - Ores_End.clear(); - Ores_Misc.clear(); - - for (GT_Worldgen_GT_Ore_Layer x : GT_Worldgen_GT_Ore_Layer.sList) { - if (x.mEnabled) { - + try { + aEndAsteroids = ReflectionUtils.getField(GT_Worldgen_GT_Ore_Layer.class, "mEndAsteroid") + .getBoolean(x); + } catch (IllegalArgumentException | IllegalAccessException e) { + aEndAsteroids = false; + } - try { - aEndAsteroids = ReflectionUtils.getField(GT_Worldgen_GT_Ore_Layer.class, "mEndAsteroid").getBoolean(x); - } - catch (IllegalArgumentException | IllegalAccessException e) { - aEndAsteroids = false; - } - - if (x.mOverworld) { - Ores_Overworld.put(x); - } - if (x.mNether) { - Ores_Nether.put(x); - } - if (x.mEnd || aEndAsteroids) { - Ores_End.put(x); - } - if (x.mOverworld || x.mNether || (x.mEnd || aEndAsteroids)) { - continue; - } - /*if (x.mMoon) { - Ores_Moon.put(x); - continue; - } - if (x.mMars) { - Ores_Mars.put(x); - continue; - } - if (x.mAsteroid) { - Ores_Comets.put(x); - continue; - }*/ - Ores_Misc.put(x); - continue; - } - else { - Ores_Comets.put(x); - } - } - - - mOreMaps[0] = Ores_Overworld; - mOreMaps[1] = Ores_Nether; - mOreMaps[2] = Ores_End; - mOreMaps[3] = Ores_Moon; - mOreMaps[4] = Ores_Mars; - mOreMaps[5] = Ores_Comets; - mOreMaps[6] = Ores_Misc; - return true; - } + if (x.mOverworld) { + Ores_Overworld.put(x); + } + if (x.mNether) { + Ores_Nether.put(x); + } + if (x.mEnd || aEndAsteroids) { + Ores_End.put(x); + } + if (x.mOverworld || x.mNether || (x.mEnd || aEndAsteroids)) { + continue; + } + /*if (x.mMoon) { + Ores_Moon.put(x); + continue; + } + if (x.mMars) { + Ores_Mars.put(x); + continue; + } + if (x.mAsteroid) { + Ores_Comets.put(x); + continue; + }*/ + Ores_Misc.put(x); + continue; + } else { + Ores_Comets.put(x); + } + } + mOreMaps[0] = Ores_Overworld; + mOreMaps[1] = Ores_Nether; + mOreMaps[2] = Ores_End; + mOreMaps[3] = Ores_Moon; + mOreMaps[4] = Ores_Mars; + mOreMaps[5] = Ores_Comets; + mOreMaps[6] = Ores_Misc; + return true; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/ModularArmourUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/ModularArmourUtils.java index e3ffb5c410..c4eb8cff64 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/ModularArmourUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/ModularArmourUtils.java @@ -1,161 +1,162 @@ package gtPlusPlus.core.util.minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import gregtech.api.util.GT_Utility; - import baubles.api.BaubleType; +import gregtech.api.util.GT_Utility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.Pair; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; public class ModularArmourUtils { - public static ItemStack addComponent(ItemStack tArmour, ItemStack[] tComponents) { - if (tArmour != null) { - ItemStack rArmour = NBTUtils.writeItemsToGtCraftingComponents(tArmour, tComponents, true); - if (rArmour != null) { - - } - } - return null; - } - - public static enum Modifiers { - BOOST_HP("skill.hpboost"), BOOST_DEF("skill.defenceboost"), BOOST_SPEED("skill.speedboost"), BOOST_MINING( - "skill.miningboost"), BOOST_DAMAGE("skill.damageboost"), BOOST_HOLY("skill.holyboost"); - private String MODIFIER_NAME; - - private Modifiers(final String mModifier) { - this.MODIFIER_NAME = mModifier; - } - - public String getModifier() { - return this.MODIFIER_NAME; - } - - public boolean isValidLevel(int i) { - if (i >= 0 && i <= 100) { - return true; - } - return false; - } - } - - public static enum BT { - TYPE_AMULET(BaubleType.AMULET, 0), TYPE_RING(BaubleType.RING, 1), TYPE_BELT(BaubleType.BELT, 2); - private final BaubleType mType; - private final int mID; - private final String mBaubleType; - - private BT(final BaubleType tType, int tID) { - this.mType = tType; - this.mID = tID; - this.mBaubleType = tType.name().toLowerCase(); - } - - public BaubleType getType() { - return this.mType; - } - - public BT getThis() { - return this; - } - - public BaubleType getBaubleByID(int tID) { - if (tID == 0) { - return BaubleType.AMULET; - } else if (tID == 1) { - return BaubleType.RING; - } else if (tID == 2) { - return BaubleType.BELT; - } else { - return BaubleType.RING; - } - } - - public int getID() { - return this.mID; - } - - public String getTypeAsString() { - return this.mBaubleType; - } - } - - public static void setModifierLevel(ItemStack aStack, Pair mPair) { - setModifierLevel(aStack, mPair.getKey(), mPair.getValue().intValue()); - } - - public static void setModifierLevel(ItemStack aStack, Modifiers aMod, Integer aInt) { - setModifierLevel(aStack, aMod, aInt.intValue()); - } - - public static void setModifierLevel(ItemStack aStack, Modifiers aMod, int aInt) { - - int mCurrentLevel = getModifierLevel(aStack, aMod); - int mNewTotalLevel = mCurrentLevel + aInt; - - NBTTagCompound tNBT = NBTUtils.getNBT(aStack); - if (aMod.isValidLevel(mNewTotalLevel)) { - tNBT.setInteger(aMod.getModifier(), mNewTotalLevel); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); - } else { - if (getModifierLevel(aStack, aMod) > 100) { - setModifierLevel(aStack, aMod, 100); - } - } - } - - public static int getModifierLevel(ItemStack aStack, Pair newPair) { - return getModifierLevel(aStack, newPair.getKey()); - } - - public static int getModifierLevel(ItemStack aStack, Modifiers aMod) { - NBTTagCompound tNBT = NBTUtils.getNBT(aStack); - return tNBT.getInteger(aMod.getModifier()); - } - - public static void setBaubleType(ItemStack aStack, BT aMod) { - Logger.INFO("Changing bauble type."); - NBTTagCompound tNBT = NBTUtils.getNBT(aStack); - if (aMod != null) { - tNBT.setInteger("mBaubleType", aMod.getID()); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); - } - } - - public static int getBaubleTypeID(ItemStack aStack) { - NBTTagCompound tNBT = NBTUtils.getNBT(aStack); - return tNBT.getInteger("mBaubleType"); - } - - public static BaubleType getBaubleType(ItemStack aStack) { - NBTTagCompound tNBT = NBTUtils.getNBT(aStack); - return getBaubleByID(tNBT.getInteger("mBaubleType")); - } - - public static BaubleType getBaubleByID(int tID) { - if (tID == 0) { - return BaubleType.AMULET; - } else if (tID == 1) { - return BaubleType.RING; - } else if (tID == 2) { - return BaubleType.BELT; - } else { - return BaubleType.RING; - } - } - - public static ItemStack setDefaultStats(ItemStack aStack) { - ItemStack tempStack = aStack; - setModifierLevel(tempStack, Modifiers.BOOST_DAMAGE, 0); - setModifierLevel(tempStack, Modifiers.BOOST_DEF, 0); - setModifierLevel(tempStack, Modifiers.BOOST_HOLY, 0); - setModifierLevel(tempStack, Modifiers.BOOST_HP, 0); - setModifierLevel(tempStack, Modifiers.BOOST_MINING, 0); - setModifierLevel(tempStack, Modifiers.BOOST_SPEED, 0); - return tempStack; - } - + public static ItemStack addComponent(ItemStack tArmour, ItemStack[] tComponents) { + if (tArmour != null) { + ItemStack rArmour = NBTUtils.writeItemsToGtCraftingComponents(tArmour, tComponents, true); + if (rArmour != null) {} + } + return null; + } + + public static enum Modifiers { + BOOST_HP("skill.hpboost"), + BOOST_DEF("skill.defenceboost"), + BOOST_SPEED("skill.speedboost"), + BOOST_MINING("skill.miningboost"), + BOOST_DAMAGE("skill.damageboost"), + BOOST_HOLY("skill.holyboost"); + private String MODIFIER_NAME; + + private Modifiers(final String mModifier) { + this.MODIFIER_NAME = mModifier; + } + + public String getModifier() { + return this.MODIFIER_NAME; + } + + public boolean isValidLevel(int i) { + if (i >= 0 && i <= 100) { + return true; + } + return false; + } + } + + public static enum BT { + TYPE_AMULET(BaubleType.AMULET, 0), + TYPE_RING(BaubleType.RING, 1), + TYPE_BELT(BaubleType.BELT, 2); + private final BaubleType mType; + private final int mID; + private final String mBaubleType; + + private BT(final BaubleType tType, int tID) { + this.mType = tType; + this.mID = tID; + this.mBaubleType = tType.name().toLowerCase(); + } + + public BaubleType getType() { + return this.mType; + } + + public BT getThis() { + return this; + } + + public BaubleType getBaubleByID(int tID) { + if (tID == 0) { + return BaubleType.AMULET; + } else if (tID == 1) { + return BaubleType.RING; + } else if (tID == 2) { + return BaubleType.BELT; + } else { + return BaubleType.RING; + } + } + + public int getID() { + return this.mID; + } + + public String getTypeAsString() { + return this.mBaubleType; + } + } + + public static void setModifierLevel(ItemStack aStack, Pair mPair) { + setModifierLevel(aStack, mPair.getKey(), mPair.getValue().intValue()); + } + + public static void setModifierLevel(ItemStack aStack, Modifiers aMod, Integer aInt) { + setModifierLevel(aStack, aMod, aInt.intValue()); + } + + public static void setModifierLevel(ItemStack aStack, Modifiers aMod, int aInt) { + + int mCurrentLevel = getModifierLevel(aStack, aMod); + int mNewTotalLevel = mCurrentLevel + aInt; + + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + if (aMod.isValidLevel(mNewTotalLevel)) { + tNBT.setInteger(aMod.getModifier(), mNewTotalLevel); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } else { + if (getModifierLevel(aStack, aMod) > 100) { + setModifierLevel(aStack, aMod, 100); + } + } + } + + public static int getModifierLevel(ItemStack aStack, Pair newPair) { + return getModifierLevel(aStack, newPair.getKey()); + } + + public static int getModifierLevel(ItemStack aStack, Modifiers aMod) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return tNBT.getInteger(aMod.getModifier()); + } + + public static void setBaubleType(ItemStack aStack, BT aMod) { + Logger.INFO("Changing bauble type."); + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + if (aMod != null) { + tNBT.setInteger("mBaubleType", aMod.getID()); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + } + + public static int getBaubleTypeID(ItemStack aStack) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return tNBT.getInteger("mBaubleType"); + } + + public static BaubleType getBaubleType(ItemStack aStack) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return getBaubleByID(tNBT.getInteger("mBaubleType")); + } + + public static BaubleType getBaubleByID(int tID) { + if (tID == 0) { + return BaubleType.AMULET; + } else if (tID == 1) { + return BaubleType.RING; + } else if (tID == 2) { + return BaubleType.BELT; + } else { + return BaubleType.RING; + } + } + + public static ItemStack setDefaultStats(ItemStack aStack) { + ItemStack tempStack = aStack; + setModifierLevel(tempStack, Modifiers.BOOST_DAMAGE, 0); + setModifierLevel(tempStack, Modifiers.BOOST_DEF, 0); + setModifierLevel(tempStack, Modifiers.BOOST_HOLY, 0); + setModifierLevel(tempStack, Modifiers.BOOST_HP, 0); + setModifierLevel(tempStack, Modifiers.BOOST_MINING, 0); + setModifierLevel(tempStack, Modifiers.BOOST_SPEED, 0); + return tempStack; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java index 7ed4d887cc..c235cd0e0b 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java @@ -2,579 +2,575 @@ package gtPlusPlus.core.util.minecraft; import static gtPlusPlus.core.item.ModItems.ZZZ_Empty; +import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.reflect.ReflectionUtils; import java.util.HashMap; import java.util.Map; - import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - public class NBTUtils { - public static NBTTagCompound getNBT(ItemStack aStack) { - NBTTagCompound rNBT = aStack.getTagCompound(); - return ((rNBT == null) ? new NBTTagCompound() : rNBT); - } - - public static void setBookTitle(ItemStack aStack, String aTitle) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setString("title", aTitle); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); - } - - public static String getBookTitle(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getString("title"); - } - - public static ItemStack[] readItemsFromNBT(ItemStack itemstack) { - NBTTagCompound tNBT = getNBT(itemstack); - final NBTTagList list = tNBT.getTagList("Items", 10); - ItemStack inventory[] = new ItemStack[list.tagCount()]; - for (int i = 0; i < list.tagCount(); i++) { - final NBTTagCompound data = list.getCompoundTagAt(i); - final int slot = data.getInteger("Slot"); - if ((slot >= 0) && (slot < list.tagCount())) { - if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { - inventory[slot] = null; - } else { - inventory[slot] = ItemStack.loadItemStackFromNBT(data); - } - - } - } - return inventory; - } - - public static ItemStack[] readItemsFromNBT(ItemStack itemstack, String customkey) { - NBTTagCompound tNBT = getNBT(itemstack); - final NBTTagList list = tNBT.getTagList(customkey, 10); - ItemStack inventory[] = new ItemStack[list.tagCount()]; - for (int i = 0; i < list.tagCount(); i++) { - final NBTTagCompound data = list.getCompoundTagAt(i); - final int slot = data.getInteger("Slot"); - if ((slot >= 0) && (slot < list.tagCount())) { - if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { - inventory[slot] = null; - } else { - inventory[slot] = ItemStack.loadItemStackFromNBT(data); - } - - } - } - return inventory; - } - - public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored) { - NBTTagCompound tNBT = getNBT(itemstack); - final NBTTagList list = new NBTTagList(); - for (int i = 0; i < stored.length; i++) { - final ItemStack stack = stored[i]; - if (stack != null) { - final NBTTagCompound data = new NBTTagCompound(); - stack.writeToNBT(data); - data.setInteger("Slot", i); - list.appendTag(data); - } else { - final NBTTagCompound data = new NBTTagCompound(); - ItemStack nullstack = ItemUtils.getSimpleStack(ZZZ_Empty); - nullstack.writeToNBT(data); - data.setInteger("Slot", i); - list.appendTag(data); - } - } - tNBT.setTag("Items", list); - itemstack.setTagCompound(tNBT); - return itemstack; - } - - public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored, String customkey) { - NBTTagCompound tNBT = getNBT(itemstack); - final NBTTagList list = new NBTTagList(); - for (int i = 0; i < stored.length; i++) { - final ItemStack stack = stored[i]; - if (stack != null) { - final NBTTagCompound data = new NBTTagCompound(); - stack.writeToNBT(data); - data.setInteger("Slot", i); - list.appendTag(data); - } - } - tNBT.setTag(customkey, list); - itemstack.setTagCompound(tNBT); - return itemstack; - } - - public static ItemStack writeItemsToGtCraftingComponents(ItemStack rStack, ItemStack[] input, boolean copyTags) { - try { - ItemStack stored[] = new ItemStack[9]; - if (input.length != 9) { - for (int e=0;e mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); - if (mInternalMap != null) { - for (Map.Entry e : mInternalMap.entrySet()) { - Logger.INFO("Key: " + e.getKey().toString() + " | Value: " + e.getValue()); - } - return true; - } else { - Logger.INFO("Data map reflected from NBTTagCompound was not valid."); - return false; - } - } - } - } catch (Throwable t) {} - return false; - } - - // Botania soulbind handling - public static boolean setBotanicaSoulboundOwner(ItemStack aStack, String aName) { - final String TAG_SOULBIND = "soulbind"; - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setString(TAG_SOULBIND, aName); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); - if (NBTUtils.doesStringExist(aStack, TAG_SOULBIND)) { - return true; - } else { - return false; - } - } - - public static String getBotanicaSoulboundOwner(ItemStack aStack) { - final String TAG_SOULBIND = "soulbind"; - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getString(TAG_SOULBIND); - } - - public static boolean hasKey(ItemStack stack, String key) { - final NBTTagCompound itemData = getNBT(stack); - if (itemData.hasKey(key)) { - return true; - } - return false; - } - - public static boolean createIntegerTagCompound(ItemStack rStack, String tagName, String keyName, int keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setInteger(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createLongTagCompound(ItemStack rStack, String tagName, String keyName, long keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setLong(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createStringTagCompound(ItemStack rStack, String tagName, String keyName, String keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setString(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createFloatTagCompound(ItemStack rStack, String tagName, String keyName, float keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setFloat(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createDoubleTagCompound(ItemStack rStack, String tagName, String keyName, double keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setDouble(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createBooleanTagCompound(ItemStack rStack, String tagName, String keyName, boolean keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - final NBTTagCompound tagNBT = new NBTTagCompound(); - tagNBT.setBoolean(keyName, keyValue); - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static boolean createTagCompound(ItemStack rStack, String tagName, NBTTagCompound keyValue) { - final NBTTagCompound tagMain = getNBT(rStack); - NBTTagCompound tagNBT = keyValue; - tagMain.setTag(tagName, tagNBT); - rStack.setTagCompound(tagMain); - return true; - } - - public static int getIntegerTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getInteger(keyName); - } - } - return 0; - } - - public static long getLongTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getLong(keyName); - } - } - return 0L; - } - - public static String getStringTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getString(keyName); - } - } - return null; - } - - public static float getFloatTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getFloat(keyName); - } - } - return 0; - } - - public static double getDoubleTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getDouble(keyName); - } - } - return 0; - } - - public static boolean getBooleanTagCompound(ItemStack aStack, String tagName, String keyName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT.getBoolean(keyName); - } - } - return false; - } - - public static NBTTagCompound getTagCompound(ItemStack aStack, String tagName) { - NBTTagCompound aNBT = getNBT(aStack); - if (aNBT != null && hasKey(aStack, tagName)) { - aNBT = aNBT.getCompoundTag(tagName); - if (aNBT != null) { - return aNBT; - } - } - return null; - } - - public static boolean hasKeyInTagCompound(ItemStack stack, String tag, String key) { - NBTTagCompound aNBT = stack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag(tag); - if (aNBT.hasKey(key)) { - return true; - } - } - return false; - } - - public static Map getTagMap(NBTTagCompound aNBT) { - Map tagMap = new HashMap(); - if (!aNBT.hasNoTags()) { - Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); - if (mInternalMap != null && !mInternalMap.isEmpty()) { - tagMap.putAll(mInternalMap); - } - } - return tagMap; - } - - public static boolean isTagString(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (aValue instanceof String) { - return true; - } - } - } - } - return false; - } - - public static boolean isTagInteger(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (int.class.isInstance(aValue) || aValue instanceof Integer) { - return true; - } - } - } - } - return false; - } - - public static boolean isTagLong(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (long.class.isInstance(aValue) || aValue instanceof Long) { - return true; - } - } - } - } - return false; - } - - public static boolean isTagFloat(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (float.class.isInstance(aValue) || aValue instanceof Float) { - return true; - } - } - } - } - return false; - } - - public static boolean isTagDouble(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (double.class.isInstance(aValue) || aValue instanceof Double) { - return true; - } - } - } - } - return false; - } - - public static boolean isTagBoolean(NBTTagCompound aNBT, String aTagName) { - Map aTagMap = getTagMap(aNBT); - if (aTagMap != null && !aTagMap.isEmpty()) { - for (Map.Entry e : aTagMap.entrySet()) { - if (e.getKey().equals(aTagName)) { - Object aValue = e.getValue(); - if (boolean.class.isInstance(aValue) || aValue instanceof Boolean) { - return true; - } - } - } - } - return false; - } - - public static boolean tryCloneTagCompoundDataIntoSubTag(ItemStack aStack, NBTTagCompound aTagCompound) { - try { - NBTTagCompound aNBT = aTagCompound; - if (aNBT != null) { - if (!aNBT.hasNoTags()) { - Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); - if (mInternalMap != null) { - for (Map.Entry e : mInternalMap.entrySet()) { - Logger.INFO("Key: " + e.getKey().toString() + " | Value: " + e.getValue().toString()); - if (e.getValue().getClass() == String.class){ - createStringTagCompound(aStack, "mEntityTag", (String) e.getKey(), (String) e.getValue()); - } - else if (e.getValue().getClass() == Boolean.class || e.getValue().getClass() == boolean.class){ - createBooleanTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Boolean) e.getValue()); - } - else if (e.getValue().getClass() == Integer.class || e.getValue().getClass() == int.class){ - createIntegerTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Integer) e.getValue()); - } - else if (e.getValue().getClass() == Double.class || e.getValue().getClass() == double.class){ - createDoubleTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Double) e.getValue()); - } - else if (e.getValue().getClass() == Long.class || e.getValue().getClass() == long.class){ - createLongTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Long) e.getValue()); - } - else if (e.getValue().getClass() == Float.class || e.getValue().getClass() == float.class){ - createFloatTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Float) e.getValue()); - } - else { - - - } - - } - return true; - } - } - } - return false; - } catch (Throwable t) { - return false; - } - } - - public static NBTTagCompound getEntityCustomData(Entity aEntity){ - return ReflectionUtils.getField(aEntity, "customEntityData"); - } - - public static boolean setEntityCustomData(Entity aEntity, NBTTagCompound aTag){ - return ReflectionUtils.setField(aEntity, "customEntityData", aTag); - } - - public static boolean hasTagCompound(ItemStack aStack) { - return aStack.hasTagCompound(); - } - - public static void createEmptyTagCompound(ItemStack aStack) { - if (!hasTagCompound(aStack)) { - NBTTagCompound aTag = new NBTTagCompound(); - aStack.setTagCompound(aTag); - } - } - + public static NBTTagCompound getNBT(ItemStack aStack) { + NBTTagCompound rNBT = aStack.getTagCompound(); + return ((rNBT == null) ? new NBTTagCompound() : rNBT); + } + + public static void setBookTitle(ItemStack aStack, String aTitle) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString("title", aTitle); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static String getBookTitle(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString("title"); + } + + public static ItemStack[] readItemsFromNBT(ItemStack itemstack) { + NBTTagCompound tNBT = getNBT(itemstack); + final NBTTagList list = tNBT.getTagList("Items", 10); + ItemStack inventory[] = new ItemStack[list.tagCount()]; + for (int i = 0; i < list.tagCount(); i++) { + final NBTTagCompound data = list.getCompoundTagAt(i); + final int slot = data.getInteger("Slot"); + if ((slot >= 0) && (slot < list.tagCount())) { + if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { + inventory[slot] = null; + } else { + inventory[slot] = ItemStack.loadItemStackFromNBT(data); + } + } + } + return inventory; + } + + public static ItemStack[] readItemsFromNBT(ItemStack itemstack, String customkey) { + NBTTagCompound tNBT = getNBT(itemstack); + final NBTTagList list = tNBT.getTagList(customkey, 10); + ItemStack inventory[] = new ItemStack[list.tagCount()]; + for (int i = 0; i < list.tagCount(); i++) { + final NBTTagCompound data = list.getCompoundTagAt(i); + final int slot = data.getInteger("Slot"); + if ((slot >= 0) && (slot < list.tagCount())) { + if (ItemStack.loadItemStackFromNBT(data) == ItemUtils.getSimpleStack(ZZZ_Empty)) { + inventory[slot] = null; + } else { + inventory[slot] = ItemStack.loadItemStackFromNBT(data); + } + } + } + return inventory; + } + + public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored) { + NBTTagCompound tNBT = getNBT(itemstack); + final NBTTagList list = new NBTTagList(); + for (int i = 0; i < stored.length; i++) { + final ItemStack stack = stored[i]; + if (stack != null) { + final NBTTagCompound data = new NBTTagCompound(); + stack.writeToNBT(data); + data.setInteger("Slot", i); + list.appendTag(data); + } else { + final NBTTagCompound data = new NBTTagCompound(); + ItemStack nullstack = ItemUtils.getSimpleStack(ZZZ_Empty); + nullstack.writeToNBT(data); + data.setInteger("Slot", i); + list.appendTag(data); + } + } + tNBT.setTag("Items", list); + itemstack.setTagCompound(tNBT); + return itemstack; + } + + public static ItemStack writeItemsToNBT(ItemStack itemstack, ItemStack[] stored, String customkey) { + NBTTagCompound tNBT = getNBT(itemstack); + final NBTTagList list = new NBTTagList(); + for (int i = 0; i < stored.length; i++) { + final ItemStack stack = stored[i]; + if (stack != null) { + final NBTTagCompound data = new NBTTagCompound(); + stack.writeToNBT(data); + data.setInteger("Slot", i); + list.appendTag(data); + } + } + tNBT.setTag(customkey, list); + itemstack.setTagCompound(tNBT); + return itemstack; + } + + public static ItemStack writeItemsToGtCraftingComponents(ItemStack rStack, ItemStack[] input, boolean copyTags) { + try { + ItemStack stored[] = new ItemStack[9]; + if (input.length != 9) { + for (int e = 0; e < input.length; e++) { + if (input[e] != null) stored[e] = input[e]; + } + } + + if (copyTags) { + for (int i = 0; i < stored.length; i++) { + if (stored[i] != null && stored[i].hasTagCompound()) { + rStack.setTagCompound( + (NBTTagCompound) stored[i].getTagCompound().copy()); + break; + } + } + } + + NBTTagCompound rNBT = rStack.getTagCompound(), tNBT = new NBTTagCompound(); + if (rNBT == null) rNBT = new NBTTagCompound(); + for (int i = 0; i < 9; i++) { + ItemStack tStack = stored[i]; + if (tStack != null + && GT_Utility.getContainerItem(tStack, true) == null + && !(tStack.getItem() instanceof GT_MetaGenerated_Tool)) { + tStack = GT_Utility.copyAmount(1, tStack); + if (GT_Utility.isStackValid(tStack)) { + GT_ModHandler.dischargeElectricItem( + tStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true); + tNBT.setTag("Ingredient." + i, tStack.writeToNBT(new NBTTagCompound())); + } + } + } + rNBT.setTag("GT.CraftingComponents", tNBT); + rStack.setTagCompound(rNBT); + } catch (Throwable t) { + t.printStackTrace(); + } + return rStack; + } + + public static void setBoolean(ItemStack aStack, String aTag, boolean aBoolean) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setBoolean(aTag, aBoolean); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static boolean getBoolean(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getBoolean(aTag); + } + + public static void setInteger(ItemStack aStack, String aTag, int aInt) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setInteger(aTag, aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static int getInteger(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getInteger(aTag); + } + + public static void setLong(ItemStack aStack, String aTag, long aInt) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setLong(aTag, aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static long getLong(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getLong(aTag); + } + + public static void setFloat(ItemStack aStack, String aTag, float aInt) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setFloat(aTag, aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static float getFloat(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getFloat(aTag); + } + + public static void setString(ItemStack aStack, String aTag, String aString) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString(aTag, aString); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static String getString(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString(aTag); + } + + public static boolean doesStringExist(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.hasKey(aTag); + } + + public static boolean tryIterateNBTData(ItemStack aStack) { + try { + NBTTagCompound aNBT = NBTUtils.getNBT(aStack); + if (aNBT != null) { + if (!aNBT.hasNoTags()) { + Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); + if (mInternalMap != null) { + for (Map.Entry e : mInternalMap.entrySet()) { + Logger.INFO("Key: " + e.getKey().toString() + " | Value: " + e.getValue()); + } + return true; + } else { + Logger.INFO("Data map reflected from NBTTagCompound was not valid."); + return false; + } + } + } + } catch (Throwable t) { + } + return false; + } + + // Botania soulbind handling + public static boolean setBotanicaSoulboundOwner(ItemStack aStack, String aName) { + final String TAG_SOULBIND = "soulbind"; + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString(TAG_SOULBIND, aName); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + if (NBTUtils.doesStringExist(aStack, TAG_SOULBIND)) { + return true; + } else { + return false; + } + } + + public static String getBotanicaSoulboundOwner(ItemStack aStack) { + final String TAG_SOULBIND = "soulbind"; + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString(TAG_SOULBIND); + } + + public static boolean hasKey(ItemStack stack, String key) { + final NBTTagCompound itemData = getNBT(stack); + if (itemData.hasKey(key)) { + return true; + } + return false; + } + + public static boolean createIntegerTagCompound(ItemStack rStack, String tagName, String keyName, int keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setInteger(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createLongTagCompound(ItemStack rStack, String tagName, String keyName, long keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setLong(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createStringTagCompound(ItemStack rStack, String tagName, String keyName, String keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setString(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createFloatTagCompound(ItemStack rStack, String tagName, String keyName, float keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setFloat(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createDoubleTagCompound(ItemStack rStack, String tagName, String keyName, double keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setDouble(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createBooleanTagCompound(ItemStack rStack, String tagName, String keyName, boolean keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + final NBTTagCompound tagNBT = new NBTTagCompound(); + tagNBT.setBoolean(keyName, keyValue); + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static boolean createTagCompound(ItemStack rStack, String tagName, NBTTagCompound keyValue) { + final NBTTagCompound tagMain = getNBT(rStack); + NBTTagCompound tagNBT = keyValue; + tagMain.setTag(tagName, tagNBT); + rStack.setTagCompound(tagMain); + return true; + } + + public static int getIntegerTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getInteger(keyName); + } + } + return 0; + } + + public static long getLongTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getLong(keyName); + } + } + return 0L; + } + + public static String getStringTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getString(keyName); + } + } + return null; + } + + public static float getFloatTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getFloat(keyName); + } + } + return 0; + } + + public static double getDoubleTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getDouble(keyName); + } + } + return 0; + } + + public static boolean getBooleanTagCompound(ItemStack aStack, String tagName, String keyName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT.getBoolean(keyName); + } + } + return false; + } + + public static NBTTagCompound getTagCompound(ItemStack aStack, String tagName) { + NBTTagCompound aNBT = getNBT(aStack); + if (aNBT != null && hasKey(aStack, tagName)) { + aNBT = aNBT.getCompoundTag(tagName); + if (aNBT != null) { + return aNBT; + } + } + return null; + } + + public static boolean hasKeyInTagCompound(ItemStack stack, String tag, String key) { + NBTTagCompound aNBT = stack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag(tag); + if (aNBT.hasKey(key)) { + return true; + } + } + return false; + } + + public static Map getTagMap(NBTTagCompound aNBT) { + Map tagMap = new HashMap(); + if (!aNBT.hasNoTags()) { + Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); + if (mInternalMap != null && !mInternalMap.isEmpty()) { + tagMap.putAll(mInternalMap); + } + } + return tagMap; + } + + public static boolean isTagString(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (aValue instanceof String) { + return true; + } + } + } + } + return false; + } + + public static boolean isTagInteger(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (int.class.isInstance(aValue) || aValue instanceof Integer) { + return true; + } + } + } + } + return false; + } + + public static boolean isTagLong(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (long.class.isInstance(aValue) || aValue instanceof Long) { + return true; + } + } + } + } + return false; + } + + public static boolean isTagFloat(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (float.class.isInstance(aValue) || aValue instanceof Float) { + return true; + } + } + } + } + return false; + } + + public static boolean isTagDouble(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (double.class.isInstance(aValue) || aValue instanceof Double) { + return true; + } + } + } + } + return false; + } + + public static boolean isTagBoolean(NBTTagCompound aNBT, String aTagName) { + Map aTagMap = getTagMap(aNBT); + if (aTagMap != null && !aTagMap.isEmpty()) { + for (Map.Entry e : aTagMap.entrySet()) { + if (e.getKey().equals(aTagName)) { + Object aValue = e.getValue(); + if (boolean.class.isInstance(aValue) || aValue instanceof Boolean) { + return true; + } + } + } + } + return false; + } + + public static boolean tryCloneTagCompoundDataIntoSubTag(ItemStack aStack, NBTTagCompound aTagCompound) { + try { + NBTTagCompound aNBT = aTagCompound; + if (aNBT != null) { + if (!aNBT.hasNoTags()) { + Map mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); + if (mInternalMap != null) { + for (Map.Entry e : mInternalMap.entrySet()) { + Logger.INFO("Key: " + e.getKey().toString() + " | Value: " + + e.getValue().toString()); + if (e.getValue().getClass() == String.class) { + createStringTagCompound( + aStack, "mEntityTag", (String) e.getKey(), (String) e.getValue()); + } else if (e.getValue().getClass() == Boolean.class + || e.getValue().getClass() == boolean.class) { + createBooleanTagCompound( + aStack, "mEntityTag", (String) e.getKey(), (Boolean) e.getValue()); + } else if (e.getValue().getClass() == Integer.class + || e.getValue().getClass() == int.class) { + createIntegerTagCompound( + aStack, "mEntityTag", (String) e.getKey(), (Integer) e.getValue()); + } else if (e.getValue().getClass() == Double.class + || e.getValue().getClass() == double.class) { + createDoubleTagCompound( + aStack, "mEntityTag", (String) e.getKey(), (Double) e.getValue()); + } else if (e.getValue().getClass() == Long.class + || e.getValue().getClass() == long.class) { + createLongTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Long) e.getValue()); + } else if (e.getValue().getClass() == Float.class + || e.getValue().getClass() == float.class) { + createFloatTagCompound(aStack, "mEntityTag", (String) e.getKey(), (Float) e.getValue()); + } else { + + } + } + return true; + } + } + } + return false; + } catch (Throwable t) { + return false; + } + } + + public static NBTTagCompound getEntityCustomData(Entity aEntity) { + return ReflectionUtils.getField(aEntity, "customEntityData"); + } + + public static boolean setEntityCustomData(Entity aEntity, NBTTagCompound aTag) { + return ReflectionUtils.setField(aEntity, "customEntityData", aTag); + } + + public static boolean hasTagCompound(ItemStack aStack) { + return aStack.hasTagCompound(); + } + + public static void createEmptyTagCompound(ItemStack aStack) { + if (!hasTagCompound(aStack)) { + NBTTagCompound aTag = new NBTTagCompound(); + aStack.setTagCompound(aTag); + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/OreDictUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/OreDictUtils.java index 324d39b863..359b336889 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/OreDictUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/OreDictUtils.java @@ -1,25 +1,22 @@ package gtPlusPlus.core.util.minecraft; import java.util.List; - import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; public class OreDictUtils { - public static boolean containsValidEntries(String aOreName) { - boolean a = OreDictionary.doesOreNameExist(aOreName); - List b = OreDictionary.getOres(aOreName, false); - - if (!a) { - return false; - } - else { - if (b == null || b.isEmpty()) { - return false; - } - } - return true; - } - + public static boolean containsValidEntries(String aOreName) { + boolean a = OreDictionary.doesOreNameExist(aOreName); + List b = OreDictionary.getOres(aOreName, false); + + if (!a) { + return false; + } else { + if (b == null || b.isEmpty()) { + return false; + } + } + return true; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java index f2be723726..038672c259 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java @@ -1,11 +1,10 @@ package gtPlusPlus.core.util.minecraft; -import java.util.*; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.reflect.ReflectionUtils; +import java.util.*; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -20,246 +19,257 @@ import net.minecraftforge.common.util.FakePlayer; public class PlayerUtils { - public static final Map mCachedFakePlayers = new WeakHashMap(); - private static final Class mThaumcraftFakePlayer; - - static { - if (ReflectionUtils.doesClassExist("thaumcraft.common.lib.FakeThaumcraftPlayer")) { - mThaumcraftFakePlayer = ReflectionUtils.getClass("thaumcraft.common.lib.FakeThaumcraftPlayer"); - } - else { - mThaumcraftFakePlayer = null; - } - } + public static final Map mCachedFakePlayers = new WeakHashMap(); + private static final Class mThaumcraftFakePlayer; + + static { + if (ReflectionUtils.doesClassExist("thaumcraft.common.lib.FakeThaumcraftPlayer")) { + mThaumcraftFakePlayer = ReflectionUtils.getClass("thaumcraft.common.lib.FakeThaumcraftPlayer"); + } else { + mThaumcraftFakePlayer = null; + } + } + + public static void messagePlayer(final EntityPlayer P, final String S) { + gregtech.api.util.GT_Utility.sendChatToPlayer(P, S); + } + + public static void messagePlayer(final EntityPlayer P, final IChatComponent S) { + P.addChatComponentMessage(S); + } + + public static EntityPlayer getPlayer(final String name) { + try { + final List i = new ArrayList<>(); + final Iterator iterator = MinecraftServer.getServer() + .getConfigurationManager() + .playerEntityList + .iterator(); + while (iterator.hasNext()) { + i.add((iterator.next())); + } + for (final EntityPlayer temp : i) { + if (temp.getDisplayName().toLowerCase().equals(name.toLowerCase())) { + return temp; + } + } + } catch (final Throwable e) { + } + return null; + } + + public static EntityPlayer getPlayerOnServerFromUUID(final UUID parUUID) { + if (parUUID == null) { + return null; + } + final List allPlayers = MinecraftServer.getServer().getConfigurationManager().playerEntityList; + for (final EntityPlayerMP player : allPlayers) { + if (player.getUniqueID().equals(parUUID)) { + return player; + } + } + return null; + } + + // Not Clientside + public static EntityPlayer getPlayerInWorld(final World world, final String Name) { + final List i = world.playerEntities; + final Minecraft mc = Minecraft.getMinecraft(); + try { + for (final EntityPlayer temp : i) { + if (temp.getDisplayName().toLowerCase().equals(Name.toLowerCase())) { + return temp; + } + } + } catch (final NullPointerException e) { + } + return null; + } + + public static boolean isPlayerOP(final EntityPlayer player) { + if (player.canCommandSenderUseCommand(2, "")) { + return true; + } + return false; + } - public static void messagePlayer(final EntityPlayer P, final String S){ - gregtech.api.util.GT_Utility.sendChatToPlayer(P, S); - } - - public static void messagePlayer(final EntityPlayer P, final IChatComponent S){ - P.addChatComponentMessage(S); - } + // Not Clientside + public static ItemStack getItemStackInPlayersHand(final World world, final String Name) { + final EntityPlayer thePlayer = getPlayer(Name); + ItemStack heldItem = null; + try { + heldItem = thePlayer.getHeldItem(); + } catch (final NullPointerException e) { + return null; + } + if (heldItem != null) { + return heldItem; + } + return null; + } - public static EntityPlayer getPlayer(final String name){ - try{ - final List i = new ArrayList<>(); - final Iterator iterator = MinecraftServer.getServer().getConfigurationManager().playerEntityList.iterator(); - while (iterator.hasNext()) { - i.add((iterator.next())); - } - for (final EntityPlayer temp : i) { - if (temp.getDisplayName().toLowerCase().equals(name.toLowerCase())){ - return temp; - } - } - } - catch(final Throwable e){} - return null; - } + @SideOnly(Side.CLIENT) + public static ItemStack getItemStackInPlayersHand() { + final Minecraft mc = Minecraft.getMinecraft(); + ItemStack heldItem = null; + try { + heldItem = mc.thePlayer.getHeldItem(); + } catch (final NullPointerException e) { + return null; + } + if (heldItem != null) { + return heldItem; + } + return null; + } - public static EntityPlayer getPlayerOnServerFromUUID(final UUID parUUID){ - if (parUUID == null) - { - return null; - } - final List allPlayers = MinecraftServer.getServer().getConfigurationManager().playerEntityList; - for (final EntityPlayerMP player : allPlayers) - { - if (player.getUniqueID().equals(parUUID)) - { - return player; - } - } - return null; - } + public static ItemStack getItemStackInPlayersHand(final EntityPlayer player) { + ItemStack heldItem = null; + try { + heldItem = player.getHeldItem(); + } catch (final NullPointerException e) { + e.printStackTrace(); + return null; + } + if (heldItem != null) { + return heldItem; + } else { + if (Utils.isClient()) { + heldItem = player.getItemInUse(); + } else { + heldItem = player.getCurrentEquippedItem(); + } + } + return heldItem; + } - //Not Clientside - public static EntityPlayer getPlayerInWorld(final World world, final String Name){ - final List i = world.playerEntities; - final Minecraft mc = Minecraft.getMinecraft(); - try{ - for (final EntityPlayer temp : i) { - if (temp.getDisplayName().toLowerCase().equals(Name.toLowerCase())){ - return temp; - } - } - } - catch(final NullPointerException e){} - return null; - } + @SideOnly(Side.CLIENT) + public static Item getItemInPlayersHandClient() { + final Minecraft mc = Minecraft.getMinecraft(); + Item heldItem = null; - public static boolean isPlayerOP(final EntityPlayer player){ - if (player.canCommandSenderUseCommand(2, "")){ - return true; - } - return false; - } + try { + heldItem = mc.thePlayer.getHeldItem().getItem(); + } catch (final NullPointerException e) { + return null; + } - //Not Clientside - public static ItemStack getItemStackInPlayersHand(final World world, final String Name){ - final EntityPlayer thePlayer = getPlayer(Name); - ItemStack heldItem = null; - try{heldItem = thePlayer.getHeldItem(); - }catch(final NullPointerException e){return null;} - if (heldItem != null){ - return heldItem; - } - return null; - } + if (heldItem != null) { + return heldItem; + } - @SideOnly(Side.CLIENT) - public static ItemStack getItemStackInPlayersHand(){ - final Minecraft mc = Minecraft.getMinecraft(); - ItemStack heldItem = null; - try{heldItem = mc.thePlayer.getHeldItem(); - }catch(final NullPointerException e){return null;} - if (heldItem != null){ - return heldItem; - } - return null; - } + return null; + } - public static ItemStack getItemStackInPlayersHand(final EntityPlayer player){ - ItemStack heldItem = null; - try{ - heldItem = player.getHeldItem(); - } - catch(final NullPointerException e){ - e.printStackTrace(); - return null; - } - if (heldItem != null){ - return heldItem; - } - else { - if (Utils.isClient()) { - heldItem = player.getItemInUse(); - } - else { - heldItem = player.getCurrentEquippedItem(); - } - } - return heldItem; - } + public static Item getItemInPlayersHand(final EntityPlayer player) { + Item heldItem = null; + try { + heldItem = player.getHeldItem().getItem(); + } catch (final NullPointerException e) { + return null; + } - @SideOnly(Side.CLIENT) - public static Item getItemInPlayersHandClient(){ - final Minecraft mc = Minecraft.getMinecraft(); - Item heldItem = null; + if (heldItem != null) { + return heldItem; + } + return null; + } - try{heldItem = mc.thePlayer.getHeldItem().getItem(); - }catch(final NullPointerException e){return null;} + public static final EntityPlayer getPlayerEntityByName(final String aPlayerName) { + final EntityPlayer player = PlayerUtils.getPlayer(aPlayerName); + if (player != null) { + return player; + } + return null; + } - if (heldItem != null){ - return heldItem; - } + public static final UUID getPlayersUUIDByName(final String aPlayerName) { + final EntityPlayer player = PlayerUtils.getPlayer(aPlayerName); + if (player != null) { + return player.getUniqueID(); + } + return null; + } - return null; - } + @SideOnly(Side.CLIENT) + public static final boolean isPlayerAlkalus() { + if (Utils.isServer()) { + return false; + } + return isPlayerAlkalus(Minecraft.getMinecraft().thePlayer); + } - public static Item getItemInPlayersHand(final EntityPlayer player){ - Item heldItem = null; - try{ - heldItem = player.getHeldItem().getItem(); - }catch(final NullPointerException e){return null;} + public static final boolean isPlayerAlkalus(EntityPlayer player) { + if (player != null) { + if (player.getDisplayName().toLowerCase().equals("draknyte1") + || player.getDisplayName().toLowerCase().equals("alkalus")) { + return true; + } + } + return false; + } - if (heldItem != null){ - return heldItem; - } - return null; - } + public static void messageAllPlayers(String string) { + Utils.sendServerMessage(string); + } - public final static EntityPlayer getPlayerEntityByName(final String aPlayerName){ - final EntityPlayer player = PlayerUtils.getPlayer(aPlayerName); - if (player != null){ - return player; - } - return null; - } + public static boolean isCreative(EntityPlayer aPlayer) { + return aPlayer.capabilities.isCreativeMode; + } - public final static UUID getPlayersUUIDByName(final String aPlayerName){ - final EntityPlayer player = PlayerUtils.getPlayer(aPlayerName); - if (player != null){ - return player.getUniqueID(); - } - return null; - } - - @SideOnly(Side.CLIENT) - public static final boolean isPlayerAlkalus(){ - if (Utils.isServer()){ - return false; - } - return isPlayerAlkalus(Minecraft.getMinecraft().thePlayer); - } - - public static final boolean isPlayerAlkalus(EntityPlayer player){ - if (player != null){ - if (player.getDisplayName().toLowerCase().equals("draknyte1") || player.getDisplayName().toLowerCase().equals("alkalus")){ - return true; - } - } - return false; - } + public static boolean canTakeDamage(EntityPlayer aPlayer) { + return !aPlayer.capabilities.disableDamage; + } - public static void messageAllPlayers(String string) { - Utils.sendServerMessage(string); - } + public static void cacheFakePlayer(EntityPlayer aPlayer) { + ChunkCoordinates aChunkLocation = aPlayer.getPlayerCoordinates(); + // Cache Fake Player + if (aPlayer instanceof FakePlayer + || (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(aPlayer)) + || (aPlayer.getCommandSenderName() == null + || aPlayer.getCommandSenderName().length() <= 0) + || (aPlayer.isEntityInvulnerable() + && !aPlayer.canCommandSenderUseCommand(0, "") + && (aChunkLocation == null) + || (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 && aChunkLocation.posZ == 0))) { + mCachedFakePlayers.put(aPlayer.getUniqueID().toString(), aPlayer); + } + } - public static boolean isCreative(EntityPlayer aPlayer) { - return aPlayer.capabilities.isCreativeMode; - } - - public static boolean canTakeDamage(EntityPlayer aPlayer) { - return !aPlayer.capabilities.disableDamage; - } - - public static void cacheFakePlayer(EntityPlayer aPlayer) { - ChunkCoordinates aChunkLocation = aPlayer.getPlayerCoordinates(); - // Cache Fake Player - if (aPlayer instanceof FakePlayer || (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(aPlayer)) - || (aPlayer.getCommandSenderName() == null - || aPlayer.getCommandSenderName().length() <= 0) - || (aPlayer.isEntityInvulnerable() && !aPlayer.canCommandSenderUseCommand(0, "") - && (aChunkLocation == null) || (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 - && aChunkLocation.posZ == 0))) { - mCachedFakePlayers.put(aPlayer.getUniqueID().toString(), aPlayer); - } - } - - public static boolean isCachedFakePlayer(String aUUID) { - return mCachedFakePlayers.containsKey(aUUID); - } - - public static boolean isRealPlayer(EntityLivingBase aEntity) { - if (aEntity instanceof EntityPlayer) { - EntityPlayer p = (EntityPlayer) aEntity; - ChunkCoordinates aChunkLocation = p.getPlayerCoordinates(); - if (p instanceof FakePlayer) { - cacheFakePlayer(p); - return false; - } - if (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(p) ) { - cacheFakePlayer(p); - return false; - } - if (p.getCommandSenderName() == null) { - cacheFakePlayer(p); - return false; - } - if (p.getCommandSenderName().length() <= 0) { - cacheFakePlayer(p); - return false; - } - if (p.isEntityInvulnerable() && !p.canCommandSenderUseCommand(0, "") && (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 && aChunkLocation.posZ == 0)) { - cacheFakePlayer(p); - return false; - } - if (!isCachedFakePlayer(p.getUniqueID().toString())) { - return true; - } - } - return false; - } + public static boolean isCachedFakePlayer(String aUUID) { + return mCachedFakePlayers.containsKey(aUUID); + } + public static boolean isRealPlayer(EntityLivingBase aEntity) { + if (aEntity instanceof EntityPlayer) { + EntityPlayer p = (EntityPlayer) aEntity; + ChunkCoordinates aChunkLocation = p.getPlayerCoordinates(); + if (p instanceof FakePlayer) { + cacheFakePlayer(p); + return false; + } + if (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(p)) { + cacheFakePlayer(p); + return false; + } + if (p.getCommandSenderName() == null) { + cacheFakePlayer(p); + return false; + } + if (p.getCommandSenderName().length() <= 0) { + cacheFakePlayer(p); + return false; + } + if (p.isEntityInvulnerable() + && !p.canCommandSenderUseCommand(0, "") + && (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 && aChunkLocation.posZ == 0)) { + cacheFakePlayer(p); + return false; + } + if (!isCachedFakePlayer(p.getUniqueID().toString())) { + return true; + } + } + return false; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java index 595635d411..ba55ce262a 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java @@ -1,10 +1,5 @@ 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 gregtech.api.enums.Materials; import gregtech.api.objects.ItemData; @@ -24,6 +19,10 @@ import gtPlusPlus.core.handler.Recipes.RegistrationHandler; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.data.ArrayUtils; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -35,580 +34,659 @@ import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; public class RecipeUtils { -public static int mInvalidID = 1; - public static boolean recipeBuilder(final Object slot_1, final Object slot_2, final Object slot_3, final Object slot_4, final Object slot_5, final Object slot_6, final Object slot_7, final Object slot_8, final Object slot_9, ItemStack resultItem){ - - //Old Debug Code, useful for finding recipes loading too early. - /*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); - }*/ - - if (resultItem == null){ - Logger.RECIPE("[Fix] Found a recipe with an invalid output, yet had a valid inputs. Using Dummy output so recipe can be found.."); - resultItem = ItemUtils.getItemStackOfAmountFromOreDict("givemeabrokenitem", 1); - resultItem.setItemDamage(mInvalidID++); - RegistrationHandler.recipesFailed++; - //return false; - } - else if ((slot_1 == null) && (slot_2 == null) && (slot_3 == null) && - (slot_4 == null) && (slot_5 == null) && (slot_6 == null) && - (slot_7 == null) && (slot_8 == null) && (slot_9 == null)){ - Logger.RECIPE("[Fix] Found a recipe with 0 inputs, yet had a valid output."); - Logger.RECIPE("[Fix] Error found while adding a recipe for: "+resultItem != null ? resultItem.getDisplayName() : "Bad Output Item"+" | Please report this issue on Github."); - RegistrationHandler.recipesFailed++; - return false; - } - - Object[] o = new Object[] {slot_1, slot_2, slot_3, slot_4, slot_5, slot_6, slot_7, slot_8, slot_9}; - - try { - int size = COMPAT_HANDLER.mRecipesToGenerate.size(); - COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject(o, resultItem, false)); - //Utils.LOG_WARNING("Success! Added a recipe for "+resultItem.getDisplayName()); - if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded){ - RegistrationHandler.recipesSuccess++; - } - else { - LateRegistrationHandler.recipesSuccess++; - } - return true; - } - return false; - } - catch(RuntimeException k){ - //k.getMessage(); - //k.getClass(); - //k.printStackTrace(); - //k.getLocalizedMessage(); - Logger.RECIPE("[Fix] Invalid Recipe detected for: "+resultItem != null ? resultItem.getUnlocalizedName() : "INVALID OUTPUT ITEM"); - if (!COMPAT_HANDLER.areInitItemsLoaded){ - RegistrationHandler.recipesFailed++; - } - else { - LateRegistrationHandler.recipesFailed++; - } - return false; - } - } - - public static void shapelessBuilder(final ItemStack Output, final Object slot_1, final Object slot_2, final Object slot_3, final Object slot_4, final Object slot_5, final Object slot_6, final Object slot_7, final Object slot_8, final Object slot_9){ - //Item output_ITEM = Output.getItem(); - - final ArrayList validSlots = new ArrayList<>(); - - Logger.WARNING("Trying to add a recipe for "+Output.toString()); - String a,b,c,d,e,f,g,h,i; - if (slot_1 == null){ a = " ";} else { a = "1";validSlots.add('1');validSlots.add(slot_1);} - Logger.WARNING(a); - if (slot_2 == null){ b = " ";} else { b = "2";validSlots.add('2');validSlots.add(slot_2);} - Logger.WARNING(b); - if (slot_3 == null){ c = " ";} else { c = "3";validSlots.add('3');validSlots.add(slot_3);} - Logger.WARNING(c); - if (slot_4 == null){ d = " ";} else { d = "4";validSlots.add('4');validSlots.add(slot_4);} - Logger.WARNING(d); - if (slot_5 == null){ e = " ";} else { e = "5";validSlots.add('5');validSlots.add(slot_5);} - Logger.WARNING(e); - if (slot_6 == null){ f = " ";} else { f = "6";validSlots.add('6');validSlots.add(slot_6);} - Logger.WARNING(f); - if (slot_7 == null){ g = " ";} else { g = "7";validSlots.add('7');validSlots.add(slot_7);} - Logger.WARNING(g); - if (slot_8 == null){ h = " ";} else { h = "8";validSlots.add('8');validSlots.add(slot_8);} - Logger.WARNING(h); - if (slot_9 == null){ i = " ";} else { i = "9";validSlots.add('9');validSlots.add(slot_9);} - Logger.WARNING(i); - - - Logger.ERROR("_______"); - Logger.ERROR("|"+a+"|"+b+"|"+c+"|"); - Logger.ERROR("_______"); - Logger.ERROR("|"+d+"|"+e+"|"+f+"|"); - Logger.ERROR("_______"); - Logger.ERROR("|"+g+"|"+h+"|"+i+"|"); - Logger.ERROR("_______"); - - validSlots.add(0, a); - validSlots.add(1, b); - validSlots.add(2, c); - validSlots.add(3, d); - validSlots.add(4, e); - validSlots.add(5, f); - validSlots.add(6, g); - validSlots.add(7, h); - validSlots.add(8, i); - - try { - //GameRegistry.addRecipe(new ShapelessOreRecipe(Output, outputAmount), (Object[]) validSlots.toArray()); - GameRegistry.addRecipe(new ShapelessOreRecipe(Output, validSlots.toArray())); - //GameRegistry.addShapelessRecipe(new ItemStack(output_ITEM, 1), new Object[] {slot_1, slot_2}); - Logger.RECIPE("Success! Added a recipe for "+Output.getDisplayName()); - RegistrationHandler.recipesSuccess++; - } - catch(final RuntimeException k){ - k.getMessage(); - k.getClass(); - k.printStackTrace(); - k.getLocalizedMessage(); - Logger.RECIPE("[Fix] Invalid Recipe detected for: "+Output.getUnlocalizedName()); - RegistrationHandler.recipesFailed++; - } - - - //GameRegistry.addShapelessRecipe(new ItemStack(output_ITEM, 1), new Object[] {slot_1, slot_2}); - } - - public static void recipeBuilder(final Object[] array, final ItemStack outPut) { - Logger.SPECIFIC_WARNING("object Array - recipeBuilder", "Attempting to build a recipe using an object array as an input, splitting it, then running the normal recipeBuilder() method.", 396); - Object a=null; - Object b=null; - Object c=null; - Object d=null; - Object e=null; - Object f=null; - Object g=null; - Object h=null; - Object i=null; - for(int z =0; z <= array.length; z++){ - array[z].toString(); - switch(z) - { - case 0: - a = array[z]; - break; - case 1: - b = array[z]; - break; - case 2: - c = array[z]; - break; - case 3: - d = array[z]; - break; - case 4: - e = array[z]; - break; - case 5: - f = array[z]; - break; - case 6: - g = array[z]; - break; - case 7: - h = array[z]; - break; - case 8: - i = array[z]; - break; - default: - break; - } - recipeBuilder(a, b, c, d, e, f, g, h, i, outPut); - } - } - - public static boolean removeCraftingRecipe(Object x){ - if (null == x){return false;} - if (x instanceof String){ - final Item R = ItemUtils.getItemFromFQRN((String) x); - if (R != null){ - x = R; - } - else { - return false; - } - } - if ((x instanceof Item) || (x instanceof ItemStack)){ - if (x instanceof Item){ - final ItemStack r = new ItemStack((Item) x); - Logger.RECIPE("Removing Recipe for "+r.getUnlocalizedName()); - } - else { - Logger.RECIPE("Removing Recipe for "+((ItemStack) x).getUnlocalizedName()); - } - if (x instanceof ItemStack){ - final Item r = ((ItemStack) x).getItem(); - if (null != r){ - x = r; - } - else { - Logger.RECIPE("Recipe removal failed - Tell Alkalus."); - return false; - } - } - if (RecipeUtils.attemptRecipeRemoval((Item) x)){ - Logger.RECIPE("Recipe removal successful"); - return true; - } - Logger.RECIPE("Recipe removal failed - Tell Alkalus."); - return false; - } - return false; - } - - private static boolean attemptRecipeRemoval(final Item I){ - Logger.RECIPE("Create list of recipes."); - final List recipes = CraftingManager.getInstance().getRecipeList(); - final Iterator items = recipes.iterator(); - Logger.RECIPE("Begin list iteration."); - while (items.hasNext()) { - final ItemStack is = items.next().getRecipeOutput(); - if ((is != null) && (is.getItem() == I)){ - items.remove(); - Logger.RECIPE("Remove a recipe with "+I.getUnlocalizedName()+" as output."); - continue; - } - } - Logger.RECIPE("All recipes should be gone?"); - if (!items.hasNext()){ - Logger.RECIPE("We iterated once, let's try again to double check."); - final Iterator items2 = recipes.iterator(); - while (items2.hasNext()) { - final ItemStack is = items2.next().getRecipeOutput(); - if ((is != null) && (is.getItem() == I)){ - items.remove(); - Logger.RECIPE("REMOVING MISSED RECIPE - RECHECK CONSTRUCTORS"); - return true; - } - } - Logger.RECIPE("Should be all gone now after double checking, so return true."); - return true; - } - Logger.RECIPE("Return false, because something went wrong."); - return false; - } - - - - public static boolean addShapedGregtechRecipeForTypes( - 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){ - - int using = 0, recipeSlotCurrent = 0; - boolean[] hasMultiStack = new boolean[9]; - boolean inUse[] = {false, false, false}; - ItemStack array[][] = new ItemStack[3][9]; - - Object[] inputs = { - InputItem1, InputItem2, InputItem3, - InputItem4, InputItem5, InputItem6, - InputItem7, InputItem8, InputItem9}; - - for (Object o : inputs){ - if (o.getClass().isArray()){ - if (inUse[using] == false){ - inUse[using] = true; - array[using] = (ItemStack[]) o; - hasMultiStack[recipeSlotCurrent] = true; - using++; - } - } - else { - hasMultiStack[recipeSlotCurrent] = false; - } - recipeSlotCurrent++; - } - - int using2 = 0; - for (boolean t : inUse){ - - if (t){ - if (array[using2] != null){ - //addShapedGregtechRecipe - } - } - using2++; - } - - - return false; - } - - - - public static boolean addShapedGregtechRecipe( - 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[] o = { - InputItem1, InputItem2, InputItem3, - InputItem4, InputItem5, InputItem6, - InputItem7, InputItem8, InputItem9 - }; - - - if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) { - CORE.crash("Load Phase "+gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE+" should be "+GTplusplus.INIT_PHASE.POST_INIT+". Unable to register recipe."); - } - - - int size = COMPAT_HANDLER.mGtRecipesToGenerate.size(); - COMPAT_HANDLER.mGtRecipesToGenerate.put(new InternalRecipeObject(o, OutputItem, true)); - - if (COMPAT_HANDLER.mGtRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded){ - RegistrationHandler.recipesSuccess++; - } - else { - LateRegistrationHandler.recipesSuccess++; - } - return true; - } - return false; - - } - - public static boolean addShapedGregtechRecipe(final Object[] inputs, ItemStack output){ - - if (inputs.length != 9){ - Logger.RECIPE("[Fix] Input array for "+output.getDisplayName()+" does not equal 9. "+inputs.length+" is the actual size."); - RegistrationHandler.recipesFailed++; - return false; - } - - for (int x=0;x<9;x++){ - if (inputs[x] == null){ - inputs[x] = " "; - Logger.WARNING("Input slot "+x+" changed from NULL to a blank space."); - } - else if (!(inputs[x] instanceof ItemStack) && !(inputs[x] instanceof String) && !(inputs[x] instanceof Item)){ - if (output != null){ - Logger.RECIPE("[Fix] Invalid Item inserted into inputArray. Item:"+output.getDisplayName()+" has a bad recipe. Please report to Alkalus."); - RegistrationHandler.recipesFailed++; - return false; - } - else { - Logger.RECIPE("[Fix] Output is Null for a recipe. Report to Alkalus."); - output = ItemUtils.getItemStackOfAmountFromOreDict("sadibasdkjnad", 1); - RegistrationHandler.recipesFailed++; - } - } - } - - int size = COMPAT_HANDLER.mGtRecipesToGenerate.size(); - COMPAT_HANDLER.mGtRecipesToGenerate.put(new InternalRecipeObject(inputs, output, true)); - - if (COMPAT_HANDLER.mGtRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded){ - RegistrationHandler.recipesSuccess++; - } - else { - LateRegistrationHandler.recipesSuccess++; - } - return true; - } - 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 - if (inputItems.length > 9 || inputItems.length < 1){ - if (OutputItem != null){ - Logger.RECIPE("[Fix] Invalid input array for shapeless recipe, which should output "+OutputItem.getDisplayName()); - } - return false; - } - //let gregtech handle shapeless recipes. - if (GT_ModHandler.addShapelessCraftingRecipe(OutputItem, inputItems)){ - return true; - } - return false; - } - - public static ItemStack getItemStackFromOreDict(final String oredictName){ - final ArrayList oreDictList = OreDictionary.getOres(oredictName); - return oreDictList.get(0); - } - - public static boolean buildShapelessRecipe(final ItemStack output, final Object[] input){ - return ShapelessUtils.addShapelessRecipe(output, input); - } - - public static boolean generateMortarRecipe(ItemStack aStack, ItemStack aOutput) { - return RecipeUtils.addShapedGregtechRecipe( - aStack, null, null, - CI.craftingToolMortar, null, null, - null, null, null, - aOutput); - } - - public static boolean doesGregtechRecipeHaveEqualCells(GT_Recipe x) { - if (x.mInputs.length == 0 && x.mOutputs.length == 0) { - return true; - } - - final int tInputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mInputs); - final int tOutputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mOutputs); - - if (tInputAmount < tOutputAmount) { - if (!Materials.Tin.contains(x.mInputs)) { - return false; - } - else { - return true; - } - } - else if (tInputAmount > tOutputAmount && !Materials.Tin.contains(x.mOutputs)) { - return false; - } - else { - return true; - } - } - - public static String[] getRecipeInfo(GT_Recipe m) { - if (m == null) { - return new String[] {}; - } - AutoMap result = new AutoMap(); - result.put(m.toString()); - result.put("Input "+ItemUtils.getArrayStackNames(m.mInputs)); - result.put("Output "+ItemUtils.getArrayStackNames(m.mOutputs)); - result.put("Input "+ItemUtils.getArrayStackNames(m.mFluidInputs)); - result.put("Output "+ItemUtils.getArrayStackNames(m.mFluidOutputs)); - result.put("Can be buffered? "+m.mCanBeBuffered); - result.put("Duration: "+m.mDuration); - result.put("EU/t: "+m.mEUt); - result.put("Is Hidden? "+m.mHidden); - result.put("Is Enabled? "+m.mEnabled); - result.put("Special Value: "+m.mSpecialValue); - result.put("====================================="); - String s[] = result.toArray(); - return s; - } - - - public static class InternalRecipeObject implements RunnableWithInfo { - final ItemStack mOutput; - final ShapedOreRecipe mRecipe; - public final boolean isValid; - - public InternalRecipeObject(Object[] aInputs, ItemStack aOutput, boolean gtRecipe) { - Logger.RECIPE("==================================="); - mOutput = aOutput != null ? aOutput.copy() : null; - Object[] aFiltered = new Object[9]; - int aValid = 0; - for (Object o : aInputs) { - if (o instanceof ItemStack) { - aFiltered[aValid++] = o; - } - else if (o instanceof Item) { - aFiltered[aValid++] = ItemUtils.getSimpleStack((Item) o); - } - else if (o instanceof Block) { - aFiltered[aValid++] = ItemUtils.getSimpleStack((Block) o); - } - else if (o instanceof String) { - aFiltered[aValid++] = o; - } - else if (o == null) { - aFiltered[aValid++] = null; - } - else { - Logger.RECIPE("Cleaned a "+o.getClass().getSimpleName()+" from recipe input."); - } - } - - int validCounter = 0, invalidCounter = 0; - for (Object p : aFiltered) { - if (p instanceof ItemStack) { - validCounter++; - } - else if (p instanceof Item) { - validCounter++; - } - else if (p instanceof Block) { - validCounter++; - } - else if (p instanceof String) { - validCounter++; - } - else if (p == null) { - validCounter++; - } - else { - invalidCounter++; - } - } - - Logger.RECIPE("Using "+validCounter+" valid inputs and "+invalidCounter+" invalid inputs."); - ShapedRecipe r = new ShapedRecipe(aFiltered, mOutput); - if (r != null && r.mRecipe != null) { - isValid = true; - } - else { - isValid = false; - } - mRecipe = r != null ? r.mRecipe : null; - } - - @Override - public void run() { - if (this.isValid) { - GameRegistry.addRecipe(mRecipe); - } - else { - Logger.RECIPE("[Fix] Invalid shapped recipe outputting "+mOutput != null ? mOutput.getDisplayName() : "Bad Output Item"); - } - } - - @Override - public String getInfoData() { - if (mOutput != null && mOutput instanceof ItemStack) { - return ((ItemStack) mOutput).getDisplayName(); - } - return ""; - } - - } - - - public static boolean removeGtRecipe(GT_Recipe aRecipeToRemove, GT_Recipe_Map aRecipeMap) { - if (aRecipeMap.mRecipeList.contains(aRecipeToRemove)) { - return aRecipeMap.mRecipeList.remove(aRecipeToRemove); - } - return false; - } - - public static boolean addGtRecipe(GT_Recipe aRecipeToAdd, GT_Recipe_Map aRecipeMap) { + public static int mInvalidID = 1; + + public static boolean recipeBuilder( + final Object slot_1, + final Object slot_2, + final Object slot_3, + final Object slot_4, + final Object slot_5, + final Object slot_6, + final Object slot_7, + final Object slot_8, + final Object slot_9, + ItemStack resultItem) { + + // Old Debug Code, useful for finding recipes loading too early. + /*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); + }*/ + + if (resultItem == null) { + Logger.RECIPE( + "[Fix] Found a recipe with an invalid output, yet had a valid inputs. Using Dummy output so recipe can be found.."); + resultItem = ItemUtils.getItemStackOfAmountFromOreDict("givemeabrokenitem", 1); + resultItem.setItemDamage(mInvalidID++); + RegistrationHandler.recipesFailed++; + // return false; + } else if ((slot_1 == null) + && (slot_2 == null) + && (slot_3 == null) + && (slot_4 == null) + && (slot_5 == null) + && (slot_6 == null) + && (slot_7 == null) + && (slot_8 == null) + && (slot_9 == null)) { + Logger.RECIPE("[Fix] Found a recipe with 0 inputs, yet had a valid output."); + Logger.RECIPE( + "[Fix] Error found while adding a recipe for: " + resultItem != null + ? resultItem.getDisplayName() + : "Bad Output Item" + " | Please report this issue on Github."); + RegistrationHandler.recipesFailed++; + return false; + } + + Object[] o = new Object[] {slot_1, slot_2, slot_3, slot_4, slot_5, slot_6, slot_7, slot_8, slot_9}; + + try { + int size = COMPAT_HANDLER.mRecipesToGenerate.size(); + COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject(o, resultItem, false)); + // Utils.LOG_WARNING("Success! Added a recipe for "+resultItem.getDisplayName()); + if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { + if (!COMPAT_HANDLER.areInitItemsLoaded) { + RegistrationHandler.recipesSuccess++; + } else { + LateRegistrationHandler.recipesSuccess++; + } + return true; + } + return false; + } catch (RuntimeException k) { + // k.getMessage(); + // k.getClass(); + // k.printStackTrace(); + // k.getLocalizedMessage(); + Logger.RECIPE( + "[Fix] Invalid Recipe detected for: " + resultItem != null + ? resultItem.getUnlocalizedName() + : "INVALID OUTPUT ITEM"); + if (!COMPAT_HANDLER.areInitItemsLoaded) { + RegistrationHandler.recipesFailed++; + } else { + LateRegistrationHandler.recipesFailed++; + } + return false; + } + } + + public static void shapelessBuilder( + final ItemStack Output, + final Object slot_1, + final Object slot_2, + final Object slot_3, + final Object slot_4, + final Object slot_5, + final Object slot_6, + final Object slot_7, + final Object slot_8, + final Object slot_9) { + // Item output_ITEM = Output.getItem(); + + final ArrayList validSlots = new ArrayList<>(); + + Logger.WARNING("Trying to add a recipe for " + Output.toString()); + String a, b, c, d, e, f, g, h, i; + if (slot_1 == null) { + a = " "; + } else { + a = "1"; + validSlots.add('1'); + validSlots.add(slot_1); + } + Logger.WARNING(a); + if (slot_2 == null) { + b = " "; + } else { + b = "2"; + validSlots.add('2'); + validSlots.add(slot_2); + } + Logger.WARNING(b); + if (slot_3 == null) { + c = " "; + } else { + c = "3"; + validSlots.add('3'); + validSlots.add(slot_3); + } + Logger.WARNING(c); + if (slot_4 == null) { + d = " "; + } else { + d = "4"; + validSlots.add('4'); + validSlots.add(slot_4); + } + Logger.WARNING(d); + if (slot_5 == null) { + e = " "; + } else { + e = "5"; + validSlots.add('5'); + validSlots.add(slot_5); + } + Logger.WARNING(e); + if (slot_6 == null) { + f = " "; + } else { + f = "6"; + validSlots.add('6'); + validSlots.add(slot_6); + } + Logger.WARNING(f); + if (slot_7 == null) { + g = " "; + } else { + g = "7"; + validSlots.add('7'); + validSlots.add(slot_7); + } + Logger.WARNING(g); + if (slot_8 == null) { + h = " "; + } else { + h = "8"; + validSlots.add('8'); + validSlots.add(slot_8); + } + Logger.WARNING(h); + if (slot_9 == null) { + i = " "; + } else { + i = "9"; + validSlots.add('9'); + validSlots.add(slot_9); + } + Logger.WARNING(i); + + Logger.ERROR("_______"); + Logger.ERROR("|" + a + "|" + b + "|" + c + "|"); + Logger.ERROR("_______"); + Logger.ERROR("|" + d + "|" + e + "|" + f + "|"); + Logger.ERROR("_______"); + Logger.ERROR("|" + g + "|" + h + "|" + i + "|"); + Logger.ERROR("_______"); + + validSlots.add(0, a); + validSlots.add(1, b); + validSlots.add(2, c); + validSlots.add(3, d); + validSlots.add(4, e); + validSlots.add(5, f); + validSlots.add(6, g); + validSlots.add(7, h); + validSlots.add(8, i); + + try { + // GameRegistry.addRecipe(new ShapelessOreRecipe(Output, outputAmount), (Object[]) validSlots.toArray()); + GameRegistry.addRecipe(new ShapelessOreRecipe(Output, validSlots.toArray())); + // GameRegistry.addShapelessRecipe(new ItemStack(output_ITEM, 1), new Object[] {slot_1, slot_2}); + Logger.RECIPE("Success! Added a recipe for " + Output.getDisplayName()); + RegistrationHandler.recipesSuccess++; + } catch (final RuntimeException k) { + k.getMessage(); + k.getClass(); + k.printStackTrace(); + k.getLocalizedMessage(); + Logger.RECIPE("[Fix] Invalid Recipe detected for: " + Output.getUnlocalizedName()); + RegistrationHandler.recipesFailed++; + } + + // GameRegistry.addShapelessRecipe(new ItemStack(output_ITEM, 1), new Object[] {slot_1, slot_2}); + } + + public static void recipeBuilder(final Object[] array, final ItemStack outPut) { + Logger.SPECIFIC_WARNING( + "object Array - recipeBuilder", + "Attempting to build a recipe using an object array as an input, splitting it, then running the normal recipeBuilder() method.", + 396); + Object a = null; + Object b = null; + Object c = null; + Object d = null; + Object e = null; + Object f = null; + Object g = null; + Object h = null; + Object i = null; + for (int z = 0; z <= array.length; z++) { + array[z].toString(); + switch (z) { + case 0: + a = array[z]; + break; + case 1: + b = array[z]; + break; + case 2: + c = array[z]; + break; + case 3: + d = array[z]; + break; + case 4: + e = array[z]; + break; + case 5: + f = array[z]; + break; + case 6: + g = array[z]; + break; + case 7: + h = array[z]; + break; + case 8: + i = array[z]; + break; + default: + break; + } + recipeBuilder(a, b, c, d, e, f, g, h, i, outPut); + } + } + + public static boolean removeCraftingRecipe(Object x) { + if (null == x) { + return false; + } + if (x instanceof String) { + final Item R = ItemUtils.getItemFromFQRN((String) x); + if (R != null) { + x = R; + } else { + return false; + } + } + if ((x instanceof Item) || (x instanceof ItemStack)) { + if (x instanceof Item) { + final ItemStack r = new ItemStack((Item) x); + Logger.RECIPE("Removing Recipe for " + r.getUnlocalizedName()); + } else { + Logger.RECIPE("Removing Recipe for " + ((ItemStack) x).getUnlocalizedName()); + } + if (x instanceof ItemStack) { + final Item r = ((ItemStack) x).getItem(); + if (null != r) { + x = r; + } else { + Logger.RECIPE("Recipe removal failed - Tell Alkalus."); + return false; + } + } + if (RecipeUtils.attemptRecipeRemoval((Item) x)) { + Logger.RECIPE("Recipe removal successful"); + return true; + } + Logger.RECIPE("Recipe removal failed - Tell Alkalus."); + return false; + } + return false; + } + + private static boolean attemptRecipeRemoval(final Item I) { + Logger.RECIPE("Create list of recipes."); + final List recipes = CraftingManager.getInstance().getRecipeList(); + final Iterator items = recipes.iterator(); + Logger.RECIPE("Begin list iteration."); + while (items.hasNext()) { + final ItemStack is = items.next().getRecipeOutput(); + if ((is != null) && (is.getItem() == I)) { + items.remove(); + Logger.RECIPE("Remove a recipe with " + I.getUnlocalizedName() + " as output."); + continue; + } + } + Logger.RECIPE("All recipes should be gone?"); + if (!items.hasNext()) { + Logger.RECIPE("We iterated once, let's try again to double check."); + final Iterator items2 = recipes.iterator(); + while (items2.hasNext()) { + final ItemStack is = items2.next().getRecipeOutput(); + if ((is != null) && (is.getItem() == I)) { + items.remove(); + Logger.RECIPE("REMOVING MISSED RECIPE - RECHECK CONSTRUCTORS"); + return true; + } + } + Logger.RECIPE("Should be all gone now after double checking, so return true."); + return true; + } + Logger.RECIPE("Return false, because something went wrong."); + return false; + } + + public static boolean addShapedGregtechRecipeForTypes( + 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) { + + int using = 0, recipeSlotCurrent = 0; + boolean[] hasMultiStack = new boolean[9]; + boolean inUse[] = {false, false, false}; + ItemStack array[][] = new ItemStack[3][9]; + + Object[] inputs = { + InputItem1, InputItem2, InputItem3, + InputItem4, InputItem5, InputItem6, + InputItem7, InputItem8, InputItem9 + }; + + for (Object o : inputs) { + if (o.getClass().isArray()) { + if (inUse[using] == false) { + inUse[using] = true; + array[using] = (ItemStack[]) o; + hasMultiStack[recipeSlotCurrent] = true; + using++; + } + } else { + hasMultiStack[recipeSlotCurrent] = false; + } + recipeSlotCurrent++; + } + + int using2 = 0; + for (boolean t : inUse) { + + if (t) { + if (array[using2] != null) { + // addShapedGregtechRecipe + } + } + using2++; + } + + return false; + } + + public static boolean addShapedGregtechRecipe( + 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[] o = { + InputItem1, InputItem2, InputItem3, + InputItem4, InputItem5, InputItem6, + InputItem7, InputItem8, InputItem9 + }; + + if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) { + CORE.crash("Load Phase " + gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE + " should be " + + GTplusplus.INIT_PHASE.POST_INIT + ". Unable to register recipe."); + } + + int size = COMPAT_HANDLER.mGtRecipesToGenerate.size(); + COMPAT_HANDLER.mGtRecipesToGenerate.put(new InternalRecipeObject(o, OutputItem, true)); + + if (COMPAT_HANDLER.mGtRecipesToGenerate.size() > size) { + if (!COMPAT_HANDLER.areInitItemsLoaded) { + RegistrationHandler.recipesSuccess++; + } else { + LateRegistrationHandler.recipesSuccess++; + } + return true; + } + return false; + } + + public static boolean addShapedGregtechRecipe(final Object[] inputs, ItemStack output) { + + if (inputs.length != 9) { + Logger.RECIPE("[Fix] Input array for " + output.getDisplayName() + " does not equal 9. " + inputs.length + + " is the actual size."); + RegistrationHandler.recipesFailed++; + return false; + } + + for (int x = 0; x < 9; x++) { + if (inputs[x] == null) { + inputs[x] = " "; + Logger.WARNING("Input slot " + x + " changed from NULL to a blank space."); + } else if (!(inputs[x] instanceof ItemStack) + && !(inputs[x] instanceof String) + && !(inputs[x] instanceof Item)) { + if (output != null) { + Logger.RECIPE("[Fix] Invalid Item inserted into inputArray. Item:" + output.getDisplayName() + + " has a bad recipe. Please report to Alkalus."); + RegistrationHandler.recipesFailed++; + return false; + } else { + Logger.RECIPE("[Fix] Output is Null for a recipe. Report to Alkalus."); + output = ItemUtils.getItemStackOfAmountFromOreDict("sadibasdkjnad", 1); + RegistrationHandler.recipesFailed++; + } + } + } + + int size = COMPAT_HANDLER.mGtRecipesToGenerate.size(); + COMPAT_HANDLER.mGtRecipesToGenerate.put(new InternalRecipeObject(inputs, output, true)); + + if (COMPAT_HANDLER.mGtRecipesToGenerate.size() > size) { + if (!COMPAT_HANDLER.areInitItemsLoaded) { + RegistrationHandler.recipesSuccess++; + } else { + LateRegistrationHandler.recipesSuccess++; + } + return true; + } + 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 + if (inputItems.length > 9 || inputItems.length < 1) { + if (OutputItem != null) { + Logger.RECIPE("[Fix] Invalid input array for shapeless recipe, which should output " + + OutputItem.getDisplayName()); + } + return false; + } + // let gregtech handle shapeless recipes. + if (GT_ModHandler.addShapelessCraftingRecipe(OutputItem, inputItems)) { + return true; + } + return false; + } + + public static ItemStack getItemStackFromOreDict(final String oredictName) { + final ArrayList oreDictList = OreDictionary.getOres(oredictName); + return oreDictList.get(0); + } + + public static boolean buildShapelessRecipe(final ItemStack output, final Object[] input) { + return ShapelessUtils.addShapelessRecipe(output, input); + } + + public static boolean generateMortarRecipe(ItemStack aStack, ItemStack aOutput) { + return RecipeUtils.addShapedGregtechRecipe( + aStack, null, null, CI.craftingToolMortar, null, null, null, null, null, aOutput); + } + + public static boolean doesGregtechRecipeHaveEqualCells(GT_Recipe x) { + if (x.mInputs.length == 0 && x.mOutputs.length == 0) { + return true; + } + + final int tInputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mInputs); + final int tOutputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(x.mOutputs); + + if (tInputAmount < tOutputAmount) { + if (!Materials.Tin.contains(x.mInputs)) { + return false; + } else { + return true; + } + } else if (tInputAmount > tOutputAmount && !Materials.Tin.contains(x.mOutputs)) { + return false; + } else { + return true; + } + } + + public static String[] getRecipeInfo(GT_Recipe m) { + if (m == null) { + return new String[] {}; + } + AutoMap result = new AutoMap(); + result.put(m.toString()); + result.put("Input " + ItemUtils.getArrayStackNames(m.mInputs)); + result.put("Output " + ItemUtils.getArrayStackNames(m.mOutputs)); + result.put("Input " + ItemUtils.getArrayStackNames(m.mFluidInputs)); + result.put("Output " + ItemUtils.getArrayStackNames(m.mFluidOutputs)); + result.put("Can be buffered? " + m.mCanBeBuffered); + result.put("Duration: " + m.mDuration); + result.put("EU/t: " + m.mEUt); + result.put("Is Hidden? " + m.mHidden); + result.put("Is Enabled? " + m.mEnabled); + result.put("Special Value: " + m.mSpecialValue); + result.put("====================================="); + String s[] = result.toArray(); + return s; + } + + public static class InternalRecipeObject implements RunnableWithInfo { + final ItemStack mOutput; + final ShapedOreRecipe mRecipe; + public final boolean isValid; + + public InternalRecipeObject(Object[] aInputs, ItemStack aOutput, boolean gtRecipe) { + Logger.RECIPE("==================================="); + mOutput = aOutput != null ? aOutput.copy() : null; + Object[] aFiltered = new Object[9]; + int aValid = 0; + for (Object o : aInputs) { + if (o instanceof ItemStack) { + aFiltered[aValid++] = o; + } else if (o instanceof Item) { + aFiltered[aValid++] = ItemUtils.getSimpleStack((Item) o); + } else if (o instanceof Block) { + aFiltered[aValid++] = ItemUtils.getSimpleStack((Block) o); + } else if (o instanceof String) { + aFiltered[aValid++] = o; + } else if (o == null) { + aFiltered[aValid++] = null; + } else { + Logger.RECIPE("Cleaned a " + o.getClass().getSimpleName() + " from recipe input."); + } + } + + int validCounter = 0, invalidCounter = 0; + for (Object p : aFiltered) { + if (p instanceof ItemStack) { + validCounter++; + } else if (p instanceof Item) { + validCounter++; + } else if (p instanceof Block) { + validCounter++; + } else if (p instanceof String) { + validCounter++; + } else if (p == null) { + validCounter++; + } else { + invalidCounter++; + } + } + + Logger.RECIPE("Using " + validCounter + " valid inputs and " + invalidCounter + " invalid inputs."); + ShapedRecipe r = new ShapedRecipe(aFiltered, mOutput); + if (r != null && r.mRecipe != null) { + isValid = true; + } else { + isValid = false; + } + mRecipe = r != null ? r.mRecipe : null; + } + + @Override + public void run() { + if (this.isValid) { + GameRegistry.addRecipe(mRecipe); + } else { + Logger.RECIPE( + "[Fix] Invalid shapped recipe outputting " + mOutput != null + ? mOutput.getDisplayName() + : "Bad Output Item"); + } + } + + @Override + public String getInfoData() { + if (mOutput != null && mOutput instanceof ItemStack) { + return ((ItemStack) mOutput).getDisplayName(); + } + return ""; + } + } + + public static boolean removeGtRecipe(GT_Recipe aRecipeToRemove, GT_Recipe_Map aRecipeMap) { + if (aRecipeMap.mRecipeList.contains(aRecipeToRemove)) { + return aRecipeMap.mRecipeList.remove(aRecipeToRemove); + } + return false; + } + + public static boolean addGtRecipe(GT_Recipe aRecipeToAdd, GT_Recipe_Map aRecipeMap) { if (!aRecipeMap.mRecipeList.contains(aRecipeToAdd)) { return aRecipeMap.mRecipeList.add(aRecipeToAdd); } - return false; - } - + return false; + } + public static boolean removeRecipeByOutput(ItemStack aOutput) { return removeRecipeByOutput(aOutput, true, false, false); } - public static boolean removeRecipeByOutput(ItemStack aOutput, boolean aIgnoreNBT, - boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) { + public static boolean removeRecipeByOutput( + ItemStack aOutput, + boolean aIgnoreNBT, + boolean aNotRemoveShapelessRecipes, + boolean aOnlyRemoveNativeHandlers) { if (aOutput == null) { return false; } else { @@ -622,10 +700,12 @@ public static int mInvalidID = 1; if (!aNotRemoveShapelessRecipes || !(tRecipe instanceof ShapelessRecipes) && !(tRecipe instanceof ShapelessOreRecipe)) { if (aOnlyRemoveNativeHandlers) { - if (!gregtech.api.util.GT_ModHandler.sNativeRecipeClasses.contains(tRecipe.getClass().getName())) { + if (!gregtech.api.util.GT_ModHandler.sNativeRecipeClasses.contains( + tRecipe.getClass().getName())) { continue; } - } else if (gregtech.api.util.GT_ModHandler.sSpecialRecipeClasses.contains(tRecipe.getClass().getName())) { + } else if (gregtech.api.util.GT_ModHandler.sSpecialRecipeClasses.contains( + tRecipe.getClass().getName())) { continue; } @@ -642,162 +722,162 @@ public static int mInvalidID = 1; } } + public static void addSmeltingRecipe(ItemStack aStackInput, ItemStack aStackOutput) { + addSmeltingRecipe(aStackInput, aStackOutput, 0f); + } + + public static void addSmeltingRecipe(ItemStack aStackInput, ItemStack aStackOutput, float aXpGained) { + + GameRegistry.addSmelting(aStackInput, aStackOutput, aXpGained); + } + + public static boolean addShapedRecipe( + Object Input_1, + Object Input_2, + Object Input_3, + Object Input_4, + Object Input_5, + Object Input_6, + Object Input_7, + Object Input_8, + Object Input_9, + ItemStack aOutputStack) { + return addShapedRecipe( + new Object[] {Input_1, Input_2, Input_3, Input_4, Input_5, Input_6, Input_7, Input_8, Input_9}, + aOutputStack); + } + + private static boolean addShapedRecipe(Object[] Inputs, ItemStack aOutputStack) { + Object[] Slots = new Object[9]; + + String aFullString = ""; + String aFullStringExpanded = "abcdefghi"; + + for (int i = 0; i < 9; i++) { + Object o = Inputs[i]; + + if (o instanceof ItemStack) { + Slots[i] = ItemUtils.getSimpleStack((ItemStack) o, 1); + aFullString += aFullStringExpanded.charAt(i); + } else if (o instanceof Item) { + Slots[i] = ItemUtils.getSimpleStack((Item) o, 1); + aFullString += aFullStringExpanded.charAt(i); + } else if (o instanceof Block) { + Slots[i] = ItemUtils.getSimpleStack((Block) o, 1); + aFullString += aFullStringExpanded.charAt(i); + } else if (o instanceof String) { + Slots[i] = o; + aFullString += aFullStringExpanded.charAt(i); + } else if (o instanceof ItemData) { + ItemData aData = (ItemData) o; + ItemStack aStackFromGT = ItemUtils.getOrePrefixStack(aData.mPrefix, aData.mMaterial.mMaterial, 1); + Slots[i] = aStackFromGT; + aFullString += aFullStringExpanded.charAt(i); + } else if (o == null) { + Slots[i] = null; + aFullString += " "; + } else { + Slots[i] = null; + Logger.INFO("Cleaned a " + o.getClass().getSimpleName() + " from recipe input."); + Logger.INFO("ERROR"); + CORE.crash("Bad Shaped Recipe."); + } + } + Logger.RECIPE("Using String: " + aFullString); + + String aRow1 = aFullString.substring(0, 3); + String aRow2 = aFullString.substring(3, 6); + String aRow3 = aFullString.substring(6, 9); + Logger.RECIPE("" + aRow1); + Logger.RECIPE("" + aRow2); + Logger.RECIPE("" + aRow3); + + String[] aStringData = new String[] {aRow1, aRow2, aRow3}; + Object[] aDataObject = new Object[19]; + aDataObject[0] = aStringData; + int aIndex = 0; + + for (int u = 1; u < 20; u += 2) { + if (aIndex == 9) { + break; + } + if (aFullString.charAt(aIndex) != (' ')) { + aDataObject[u] = aFullString.charAt(aIndex); + aDataObject[u + 1] = Slots[aIndex]; + Logger.INFO("(" + aIndex + ") " + aFullString.charAt(aIndex) + " | " + + (Slots[aIndex] instanceof ItemStack + ? ItemUtils.getItemName((ItemStack) Slots[aIndex]) + : Slots[aIndex] instanceof String ? (String) Slots[aIndex] : "Unknown")); + } + aIndex++; + } + + Logger.RECIPE("Data Size: " + aDataObject.length); + aDataObject = ArrayUtils.removeNulls(aDataObject); + Logger.RECIPE("Clean Size: " + aDataObject.length); + Logger.RECIPE("ArrayData: " + Arrays.toString(aDataObject)); + + ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, aDataObject); + + /*ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, + aStringData, + 'a', Slots[0], + 'b', Slots[1], + 'c', Slots[2], + 'd', Slots[3], + 'e', Slots[4], + 'f', Slots[5], + 'g', Slots[6], + 'h', Slots[7], + 'i', Slots[8]);*/ + + int size = COMPAT_HANDLER.mRecipesToGenerate.size(); + COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject2(aRecipe)); + if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { + if (!COMPAT_HANDLER.areInitItemsLoaded) { + RegistrationHandler.recipesSuccess++; + } else { + LateRegistrationHandler.recipesSuccess++; + } + return true; + } + return false; + } + + public static class InternalRecipeObject2 implements RunnableWithInfo { + + final ItemStack mOutput; + final ShapedOreRecipe mRecipe; + final boolean isValid; - public static void addSmeltingRecipe(ItemStack aStackInput, ItemStack aStackOutput) { - addSmeltingRecipe(aStackInput, aStackOutput, 0f); - } - - public static void addSmeltingRecipe(ItemStack aStackInput, ItemStack aStackOutput, float aXpGained) { - - GameRegistry.addSmelting(aStackInput, aStackOutput, aXpGained); - - } - - public static boolean addShapedRecipe( - Object Input_1, Object Input_2, Object Input_3, - Object Input_4, Object Input_5, Object Input_6, - Object Input_7, Object Input_8, Object Input_9, - ItemStack aOutputStack) { - return addShapedRecipe(new Object[] {Input_1, Input_2, Input_3, Input_4, Input_5, Input_6, Input_7, Input_8, Input_9}, aOutputStack); - } - - private static boolean addShapedRecipe(Object[] Inputs, ItemStack aOutputStack) { - Object[] Slots = new Object[9]; - - String aFullString = ""; - String aFullStringExpanded = "abcdefghi"; - - for (int i=0; i<9; i++) { - Object o = Inputs[i]; - - if (o instanceof ItemStack) { - Slots[i] = ItemUtils.getSimpleStack((ItemStack) o, 1); - aFullString += aFullStringExpanded.charAt(i); - } - else if (o instanceof Item) { - Slots[i] = ItemUtils.getSimpleStack((Item) o, 1); - aFullString += aFullStringExpanded.charAt(i); - } - else if (o instanceof Block) { - Slots[i] = ItemUtils.getSimpleStack((Block) o, 1); - aFullString += aFullStringExpanded.charAt(i); - } - else if (o instanceof String) { - Slots[i] = o; - aFullString += aFullStringExpanded.charAt(i); - } - else if (o instanceof ItemData) { - ItemData aData = (ItemData) o; - ItemStack aStackFromGT = ItemUtils.getOrePrefixStack(aData.mPrefix, aData.mMaterial.mMaterial, 1); - Slots[i] = aStackFromGT; - aFullString += aFullStringExpanded.charAt(i); - } - else if (o == null) { - Slots[i] = null; - aFullString += " "; - } - else { - Slots[i] = null; - Logger.INFO("Cleaned a "+o.getClass().getSimpleName()+" from recipe input."); - Logger.INFO("ERROR"); - CORE.crash("Bad Shaped Recipe."); - } - } - Logger.RECIPE("Using String: "+aFullString); - - String aRow1 = aFullString.substring(0, 3); - String aRow2 = aFullString.substring(3, 6); - String aRow3 = aFullString.substring(6, 9); - Logger.RECIPE(""+aRow1); - Logger.RECIPE(""+aRow2); - Logger.RECIPE(""+aRow3); - - String[] aStringData = new String[] {aRow1, aRow2, aRow3}; - Object[] aDataObject = new Object[19]; - aDataObject[0] = aStringData; - int aIndex = 0; - - - for (int u=1;u<20;u+=2) { - if (aIndex == 9) { - break; - } - if (aFullString.charAt(aIndex) != (' ')) { - aDataObject[u] = aFullString.charAt(aIndex); - aDataObject[u+1] = Slots[aIndex]; - Logger.INFO("("+aIndex+") "+aFullString.charAt(aIndex)+" | "+ (Slots[aIndex] instanceof ItemStack ? ItemUtils.getItemName((ItemStack) Slots[aIndex]) : Slots[aIndex] instanceof String ? (String) Slots[aIndex] : "Unknown")); - } - aIndex++; - } - - Logger.RECIPE("Data Size: "+aDataObject.length); - aDataObject = ArrayUtils.removeNulls(aDataObject); - Logger.RECIPE("Clean Size: "+aDataObject.length); - Logger.RECIPE("ArrayData: "+Arrays.toString(aDataObject)); - - ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, aDataObject); - - /*ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, - aStringData, - 'a', Slots[0], - 'b', Slots[1], - 'c', Slots[2], - 'd', Slots[3], - 'e', Slots[4], - 'f', Slots[5], - 'g', Slots[6], - 'h', Slots[7], - 'i', Slots[8]);*/ - - int size = COMPAT_HANDLER.mRecipesToGenerate.size(); - COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject2(aRecipe)); - if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded){ - RegistrationHandler.recipesSuccess++; - } - else { - LateRegistrationHandler.recipesSuccess++; - } - return true; - } - return false; - } - public static class InternalRecipeObject2 implements RunnableWithInfo { - - final ItemStack mOutput; - final ShapedOreRecipe mRecipe; - final boolean isValid; - - public InternalRecipeObject2(ShapedOreRecipe aRecipe) { - mRecipe = aRecipe; - mOutput = aRecipe.getRecipeOutput(); - if (mOutput != null) { - this.isValid = true; - } - else { - this.isValid = false; - } - } - - @Override - public void run() { - if (this.isValid) { - GameRegistry.addRecipe(mRecipe); - } - else { - Logger.INFO("[Fix] Invalid shapped recipe outputting "+mOutput != null ? mOutput.getDisplayName() : "Bad Output Item"); - } - } - - @Override - public String getInfoData() { - if (mOutput != null && mOutput instanceof ItemStack) { - return ((ItemStack) mOutput).getDisplayName(); - } - return ""; - } - - } + public InternalRecipeObject2(ShapedOreRecipe aRecipe) { + mRecipe = aRecipe; + mOutput = aRecipe.getRecipeOutput(); + if (mOutput != null) { + this.isValid = true; + } else { + this.isValid = false; + } + } + @Override + public void run() { + if (this.isValid) { + GameRegistry.addRecipe(mRecipe); + } else { + Logger.INFO( + "[Fix] Invalid shapped recipe outputting " + mOutput != null + ? mOutput.getDisplayName() + : "Bad Output Item"); + } + } + @Override + public String getInfoData() { + if (mOutput != null && mOutput instanceof ItemStack) { + return ((ItemStack) mOutput).getDisplayName(); + } + return ""; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/ShapelessUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/ShapelessUtils.java index 3caa9d4e4f..5994bf5f67 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/ShapelessUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/ShapelessUtils.java @@ -1,56 +1,40 @@ package gtPlusPlus.core.util.minecraft; +import gtPlusPlus.api.objects.Logger; import java.util.ArrayList; - import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.ShapelessRecipes; -import gtPlusPlus.api.objects.Logger; - public class ShapelessUtils { - - public static boolean addShapelessRecipe(final ItemStack output, final Object ... params) - { - final ArrayList arraylist = new ArrayList<>(); - final Object[] aobject = params; - final int i = params.length; - - for (int j = 0; j < i; ++j) - { - final Object object1 = aobject[j]; - - if (object1 instanceof ItemStack) - { - arraylist.add(((ItemStack)object1).copy()); - } - else if (object1 instanceof Item) - { - arraylist.add(new ItemStack((Item)object1)); - } - else - { - if ((object1 == null)) - { - Logger.INFO(("Invalid shapeless input, ignoring!")); - } - else if (!(object1 instanceof Block) && (object1 != null)) - { - Logger.INFO(("Invalid shapeless recipe!")); - return false; - } - else { - arraylist.add(new ItemStack((Block)object1)); - } - } - } - CraftingManager.getInstance().getRecipeList().add(new ShapelessRecipes(output, arraylist)); - //CraftingManager.getInstance().addShapelessRecipe(output, arraylist); - return true; - } - - + public static boolean addShapelessRecipe(final ItemStack output, final Object... params) { + final ArrayList arraylist = new ArrayList<>(); + final Object[] aobject = params; + final int i = params.length; + + for (int j = 0; j < i; ++j) { + final Object object1 = aobject[j]; + + if (object1 instanceof ItemStack) { + arraylist.add(((ItemStack) object1).copy()); + } else if (object1 instanceof Item) { + arraylist.add(new ItemStack((Item) object1)); + } else { + if ((object1 == null)) { + Logger.INFO(("Invalid shapeless input, ignoring!")); + } else if (!(object1 instanceof Block) && (object1 != null)) { + Logger.INFO(("Invalid shapeless recipe!")); + return false; + } else { + arraylist.add(new ItemStack((Block) object1)); + } + } + } + CraftingManager.getInstance().getRecipeList().add(new ShapelessRecipes(output, arraylist)); + // CraftingManager.getInstance().addShapelessRecipe(output, arraylist); + return true; + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java index 242a63c712..33ef1b89e3 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java @@ -2,8 +2,6 @@ package gtPlusPlus.core.util.minecraft.gregtech; import static gtPlusPlus.core.lib.CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK; -import org.apache.commons.lang3.ArrayUtils; - import gregtech.GT_Mod; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -20,172 +18,162 @@ import gtPlusPlus.core.util.minecraft.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.ArrayUtils; public class PollutionUtils { - private static boolean mIsPollutionEnabled = true; - - public static AutoMap mPollutionFluidStacks = new AutoMap(); - - static { - if (MAIN_GREGTECH_5U_EXPERIMENTAL_FORK || CORE.GTNH) { - mIsPollutionEnabled = mPollution(); - } else { - mIsPollutionEnabled = false; - } - } - - public static boolean isPollutionEnabled() { - return mIsPollutionEnabled; - } - - private static boolean mPollution() { - return GT_Mod.gregtechproxy.mPollution; - } - - public static boolean addPollution(IGregTechTileEntity te, int pollutionValue) { - if (mIsPollutionEnabled) { - GT_Pollution.addPollution(te, pollutionValue); - return true; - } - return false; - } - - public static boolean addPollution(IHasWorldObjectAndCoords aTileOfSomeSort, int pollutionValue) { - if (mIsPollutionEnabled) { - IHasWorldObjectAndCoords j = (IHasWorldObjectAndCoords) aTileOfSomeSort; - Chunk c = j.getWorld().getChunkFromBlockCoords(j.getXCoord(), j.getZCoord()); - return addPollution(c, pollutionValue); - } - return false; - } - - public static boolean addPollution(Chunk aChunk, int pollutionValue) { - if (mIsPollutionEnabled) { - GT_Pollution.addPollution(aChunk, pollutionValue); - return true; - } - return false; - } - - public static boolean removePollution(IGregTechTileEntity te, int pollutionValue) { - return addPollution(te, -pollutionValue); - } - - public static boolean removePollution(IHasWorldObjectAndCoords aTileOfSomeSort, int pollutionValue) { - return addPollution(aTileOfSomeSort, -pollutionValue); - } - - public static boolean removePollution(Chunk aChunk, int pollutionValue) { - return addPollution(aChunk, -pollutionValue); - } - - public static boolean nullifyPollution(IGregTechTileEntity te) { - if (te == null) { - return false; - } - return nullifyPollution((IHasWorldObjectAndCoords) te); - } - - public static boolean nullifyPollution(IHasWorldObjectAndCoords aTileOfSomeSort) { - if (aTileOfSomeSort == null) { - return false; - } - IHasWorldObjectAndCoords j = (IHasWorldObjectAndCoords) aTileOfSomeSort; - Chunk c = j.getWorld().getChunkFromBlockCoords(j.getXCoord(), j.getZCoord()); - return nullifyPollution(c); - } - - public static boolean nullifyPollution(Chunk aChunk) { - if (mIsPollutionEnabled) { - if (aChunk == null) { - return false; - } - int getCurrentPollution = getPollution(aChunk); - if (getCurrentPollution <= 0) { - return false; - } - else { - return removePollution(aChunk, getCurrentPollution); - } - } - return false; - } - - public static int getPollution(IGregTechTileEntity te) { - return GT_Pollution.getPollution(te); - } - - public static int getPollution(Chunk te) { - return GT_Pollution.getPollution(te); - } - - public static boolean setPollutionFluids() { - if (mPollutionFluidStacks.isEmpty()) { - FluidStack CD, CM, SD; - CD = FluidUtils.getFluidStack("carbondioxide", 1000); - CM = FluidUtils.getFluidStack("carbonmonoxide", 1000); - SD = FluidUtils.getFluidStack("sulfurdioxide", 1000); - if (PollutionUtils.mPollutionFluidStacks.size() == 0) { - if (CD != null) { - Logger.INFO("[PollutionCompat] Found carbon dioxide fluid, registering it."); - PollutionUtils.mPollutionFluidStacks.put(CD); - MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(CD); - ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonDioxide", 1); - if (ItemUtils.checkForInvalidItems(cellCD)) { - Logger.INFO("[PollutionCompat] Found carbon dioxide cell, registering component."); - MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); - } - else { - Logger.INFO("[PollutionCompat] Did not find carbon dioxide cell, registering new component."); - new BaseItemCell(MISC_MATERIALS.CARBON_DIOXIDE); - } - } - else { - MaterialGenerator.generate(MISC_MATERIALS.CARBON_DIOXIDE, false, false); - } - - if (CM != null) { - Logger.INFO("[PollutionCompat] Found carbon monoxide fluid, registering it."); - PollutionUtils.mPollutionFluidStacks.put(CM); - MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(CM); - ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonMonoxide", 1); - if (ItemUtils.checkForInvalidItems(cellCD)) { - Logger.INFO("[PollutionCompat] Found carbon monoxide cell, registering component."); - MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); - } - else { - Logger.INFO("[PollutionCompat] Did not find carbon monoxide cell, registering new component."); - new BaseItemCell(MISC_MATERIALS.CARBON_MONOXIDE); - } - } - else { - MaterialGenerator.generate(MISC_MATERIALS.CARBON_MONOXIDE, false, false); - } - - if (SD != null) { - Logger.INFO("[PollutionCompat] Found sulfur dioxide fluid, registering it."); - PollutionUtils.mPollutionFluidStacks.put(SD); - } - } - if (PollutionUtils.mPollutionFluidStacks.size() > 0) { - return true; - } - return false; - } - else { - if (mPollutionFluidStacks.size() != 3) { - Logger.INFO("Unable to detect all 3 pollution fluids. Found: "); - Logger.INFO(ArrayUtils.toString(mPollutionFluidStacks)); - return false; - } - else { - return true; - } - } - - - - } - + private static boolean mIsPollutionEnabled = true; + + public static AutoMap mPollutionFluidStacks = new AutoMap(); + + static { + if (MAIN_GREGTECH_5U_EXPERIMENTAL_FORK || CORE.GTNH) { + mIsPollutionEnabled = mPollution(); + } else { + mIsPollutionEnabled = false; + } + } + + public static boolean isPollutionEnabled() { + return mIsPollutionEnabled; + } + + private static boolean mPollution() { + return GT_Mod.gregtechproxy.mPollution; + } + + public static boolean addPollution(IGregTechTileEntity te, int pollutionValue) { + if (mIsPollutionEnabled) { + GT_Pollution.addPollution(te, pollutionValue); + return true; + } + return false; + } + + public static boolean addPollution(IHasWorldObjectAndCoords aTileOfSomeSort, int pollutionValue) { + if (mIsPollutionEnabled) { + IHasWorldObjectAndCoords j = (IHasWorldObjectAndCoords) aTileOfSomeSort; + Chunk c = j.getWorld().getChunkFromBlockCoords(j.getXCoord(), j.getZCoord()); + return addPollution(c, pollutionValue); + } + return false; + } + + public static boolean addPollution(Chunk aChunk, int pollutionValue) { + if (mIsPollutionEnabled) { + GT_Pollution.addPollution(aChunk, pollutionValue); + return true; + } + return false; + } + + public static boolean removePollution(IGregTechTileEntity te, int pollutionValue) { + return addPollution(te, -pollutionValue); + } + + public static boolean removePollution(IHasWorldObjectAndCoords aTileOfSomeSort, int pollutionValue) { + return addPollution(aTileOfSomeSort, -pollutionValue); + } + + public static boolean removePollution(Chunk aChunk, int pollutionValue) { + return addPollution(aChunk, -pollutionValue); + } + + public static boolean nullifyPollution(IGregTechTileEntity te) { + if (te == null) { + return false; + } + return nullifyPollution((IHasWorldObjectAndCoords) te); + } + + public static boolean nullifyPollution(IHasWorldObjectAndCoords aTileOfSomeSort) { + if (aTileOfSomeSort == null) { + return false; + } + IHasWorldObjectAndCoords j = (IHasWorldObjectAndCoords) aTileOfSomeSort; + Chunk c = j.getWorld().getChunkFromBlockCoords(j.getXCoord(), j.getZCoord()); + return nullifyPollution(c); + } + + public static boolean nullifyPollution(Chunk aChunk) { + if (mIsPollutionEnabled) { + if (aChunk == null) { + return false; + } + int getCurrentPollution = getPollution(aChunk); + if (getCurrentPollution <= 0) { + return false; + } else { + return removePollution(aChunk, getCurrentPollution); + } + } + return false; + } + + public static int getPollution(IGregTechTileEntity te) { + return GT_Pollution.getPollution(te); + } + + public static int getPollution(Chunk te) { + return GT_Pollution.getPollution(te); + } + + public static boolean setPollutionFluids() { + if (mPollutionFluidStacks.isEmpty()) { + FluidStack CD, CM, SD; + CD = FluidUtils.getFluidStack("carbondioxide", 1000); + CM = FluidUtils.getFluidStack("carbonmonoxide", 1000); + SD = FluidUtils.getFluidStack("sulfurdioxide", 1000); + if (PollutionUtils.mPollutionFluidStacks.size() == 0) { + if (CD != null) { + Logger.INFO("[PollutionCompat] Found carbon dioxide fluid, registering it."); + PollutionUtils.mPollutionFluidStacks.put(CD); + MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(CD); + ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonDioxide", 1); + if (ItemUtils.checkForInvalidItems(cellCD)) { + Logger.INFO("[PollutionCompat] Found carbon dioxide cell, registering component."); + MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); + } else { + Logger.INFO("[PollutionCompat] Did not find carbon dioxide cell, registering new component."); + new BaseItemCell(MISC_MATERIALS.CARBON_DIOXIDE); + } + } else { + MaterialGenerator.generate(MISC_MATERIALS.CARBON_DIOXIDE, false, false); + } + + if (CM != null) { + Logger.INFO("[PollutionCompat] Found carbon monoxide fluid, registering it."); + PollutionUtils.mPollutionFluidStacks.put(CM); + MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(CM); + ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonMonoxide", 1); + if (ItemUtils.checkForInvalidItems(cellCD)) { + Logger.INFO("[PollutionCompat] Found carbon monoxide cell, registering component."); + MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); + } else { + Logger.INFO("[PollutionCompat] Did not find carbon monoxide cell, registering new component."); + new BaseItemCell(MISC_MATERIALS.CARBON_MONOXIDE); + } + } else { + MaterialGenerator.generate(MISC_MATERIALS.CARBON_MONOXIDE, false, false); + } + + if (SD != null) { + Logger.INFO("[PollutionCompat] Found sulfur dioxide fluid, registering it."); + PollutionUtils.mPollutionFluidStacks.put(SD); + } + } + if (PollutionUtils.mPollutionFluidStacks.size() > 0) { + return true; + } + return false; + } else { + if (mPollutionFluidStacks.size() != 3) { + Logger.INFO("Unable to detect all 3 pollution fluids. Found: "); + Logger.INFO(ArrayUtils.toString(mPollutionFluidStacks)); + return false; + } else { + return true; + } + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/material/MaterialBuilder.java b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/material/MaterialBuilder.java index 44c0f66732..1b35ead9f1 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/material/MaterialBuilder.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/material/MaterialBuilder.java @@ -1,244 +1,244 @@ package gtPlusPlus.core.util.minecraft.gregtech.material; public class MaterialBuilder { - /*public static final int DIESEL = 0, GAS = 1, THERMAL = 2, SEMIFLUID = 3, PLASMA = 4, MAGIC = 5; - - private int metaItemSubID; - private TextureSet iconSet; - private float toolSpeed = 1.0f; - private int durability = 0; - private int toolQuality = 0; - private int types = 0; - private int r = 255, g = 255, b = 255, a = 0; - private String name; - private String defaultLocalName; - private int fuelType = 0; - private int fuelPower = 0; - private int meltingPoint = 0; - private int blastFurnaceTemp = 0; - private boolean blastFurnaceRequired = false; - private boolean transparent = false; - private int oreValue = 1; - private int densityMultiplier = 1; - private int densityDivider = 1; - private Dyes color = Dyes._NULL; - private int extraData = 0; - private List materialList = new ArrayList(); - private List aspects = new ArrayList(); - private boolean canBeCracked = false; - private int liquidTemperature = 300; - private int gasTemperature = 300; - - public MaterialBuilder(int metaItemSubID, TextureSet iconSet, String defaultLocalName) { - this.metaItemSubID = metaItemSubID; - this.iconSet = iconSet; - this.name = defaultLocalName.replace(" ", "").replace("-", ""); - this.defaultLocalName = defaultLocalName; - } - - public Materials constructMaterial() { - return new Materials( - metaItemSubID, iconSet, toolSpeed, durability, toolQuality, types, r, g, b, a, name, defaultLocalName, fuelType, fuelPower, meltingPoint, blastFurnaceTemp, - blastFurnaceRequired, transparent, oreValue, densityMultiplier, densityDivider, color, extraData, materialList, aspects); - - } - - public MaterialBuilder setName(String name){ - this.name = name; - return this; - } - - public MaterialBuilder setTypes(int types){ - this.types = types; - return this; - } - - public MaterialBuilder addDustItems(){ - types = types | 1; - return this; - } - - public MaterialBuilder addMetalItems(){ - types = types | 2; - return this; - } - - public MaterialBuilder addGemItems(){ - types = types | 4; - return this; - } - - public MaterialBuilder addOreItems(){ - types = types | 8; - return this; - } - - public MaterialBuilder addCell(){ - types = types | 16; - return this; - } - - public MaterialBuilder addPlasma(){ - types = types | 32; - return this; - } - - public MaterialBuilder addToolHeadItems(){ - types = types | 64; - return this; - } - - public MaterialBuilder addGearItems(){ - types = types | 128; - return this; - } - - public MaterialBuilder addFluid(){ - return this; - } - - public MaterialBuilder addGas(){ - return this; - } - - - public MaterialBuilder setRGBA(int r, int g, int b, int a){ - this.r = r; - this.g = g; - this.b = b; - this.a = a; - return this; - } - - public MaterialBuilder setRGB(int r, int g, int b){ - this.r = r; - this.g = g; - this.b = b; - return this; - } - - public MaterialBuilder setTransparent(boolean transparent){ - this.transparent = transparent; - return this; - } - - public MaterialBuilder setColor(Dyes color){ - this.color = color; - return this; - } - - - public MaterialBuilder setToolSpeed(float toolSpeed) { - this.toolSpeed = toolSpeed; - return this; - } - - public MaterialBuilder setDurability(int durability) { - this.durability = durability; - return this; - } - - public MaterialBuilder setToolQuality(int toolQuality) { - this.toolQuality = toolQuality; - return this; - } - - - public MaterialBuilder setFuelType(int fuelType) { - this.fuelType = fuelType; - return this; - } - - public MaterialBuilder setFuelPower(int fuelPower) { - this.fuelPower = fuelPower; - return this; - } - - public MaterialBuilder setMeltingPoint(int meltingPoint) { - this.meltingPoint = meltingPoint; - return this; - } - - public MaterialBuilder setBlastFurnaceTemp(int blastFurnaceTemp) { - this.blastFurnaceTemp = blastFurnaceTemp; - return this; - } - - public MaterialBuilder setBlastFurnaceRequired(boolean blastFurnaceRequired) { - this.blastFurnaceRequired = blastFurnaceRequired; - return this; - } - - public MaterialBuilder setOreValue(int oreValue) { - this.oreValue = oreValue; - return this; - } - - public MaterialBuilder setDensityMultiplier(int densityMultiplier) { - this.densityMultiplier = densityMultiplier; - return this; - } - - public MaterialBuilder setDensityDivider(int densityDivider) { - this.densityDivider = densityDivider; - return this; - } - - public MaterialBuilder setExtraData(int extraData) { - this.extraData = extraData; - return this; - } - - public MaterialBuilder addElectrolyzerRecipe(){ - extraData = extraData | 1; - return this; - } - - public MaterialBuilder addCentrifugeRecipe(){ - extraData = extraData | 2; - return this; - } - - public MaterialBuilder setMaterialList(List materialList) { - this.materialList = materialList; - return this; - } - - public MaterialBuilder setMaterialList(MaterialStack ... materials) { - this.materialList = Arrays.asList(materials); - return this; - } - - public MaterialBuilder setAspects(List aspects) { - this.aspects = aspects; - return this; - } - - public int getLiquidTemperature() { - return liquidTemperature; - } - - public MaterialBuilder setLiquidTemperature(int liquidTemperature) { - this.liquidTemperature = liquidTemperature; - return this; - } - - public int getGasTemperature() { - return gasTemperature; - } - - public MaterialBuilder setGasTemperature(int gasTemperature) { - this.gasTemperature = gasTemperature; - return this; - } - - public boolean canBeCracked() { - return canBeCracked; - } - - public MaterialBuilder setCanBeCracked(boolean canBeCracked) { - this.canBeCracked = canBeCracked; - return this; - } -*/ -} \ No newline at end of file + /*public static final int DIESEL = 0, GAS = 1, THERMAL = 2, SEMIFLUID = 3, PLASMA = 4, MAGIC = 5; + + private int metaItemSubID; + private TextureSet iconSet; + private float toolSpeed = 1.0f; + private int durability = 0; + private int toolQuality = 0; + private int types = 0; + private int r = 255, g = 255, b = 255, a = 0; + private String name; + private String defaultLocalName; + private int fuelType = 0; + private int fuelPower = 0; + private int meltingPoint = 0; + private int blastFurnaceTemp = 0; + private boolean blastFurnaceRequired = false; + private boolean transparent = false; + private int oreValue = 1; + private int densityMultiplier = 1; + private int densityDivider = 1; + private Dyes color = Dyes._NULL; + private int extraData = 0; + private List materialList = new ArrayList(); + private List aspects = new ArrayList(); + private boolean canBeCracked = false; + private int liquidTemperature = 300; + private int gasTemperature = 300; + + public MaterialBuilder(int metaItemSubID, TextureSet iconSet, String defaultLocalName) { + this.metaItemSubID = metaItemSubID; + this.iconSet = iconSet; + this.name = defaultLocalName.replace(" ", "").replace("-", ""); + this.defaultLocalName = defaultLocalName; + } + + public Materials constructMaterial() { + return new Materials( + metaItemSubID, iconSet, toolSpeed, durability, toolQuality, types, r, g, b, a, name, defaultLocalName, fuelType, fuelPower, meltingPoint, blastFurnaceTemp, + blastFurnaceRequired, transparent, oreValue, densityMultiplier, densityDivider, color, extraData, materialList, aspects); + + } + + public MaterialBuilder setName(String name){ + this.name = name; + return this; + } + + public MaterialBuilder setTypes(int types){ + this.types = types; + return this; + } + + public MaterialBuilder addDustItems(){ + types = types | 1; + return this; + } + + public MaterialBuilder addMetalItems(){ + types = types | 2; + return this; + } + + public MaterialBuilder addGemItems(){ + types = types | 4; + return this; + } + + public MaterialBuilder addOreItems(){ + types = types | 8; + return this; + } + + public MaterialBuilder addCell(){ + types = types | 16; + return this; + } + + public MaterialBuilder addPlasma(){ + types = types | 32; + return this; + } + + public MaterialBuilder addToolHeadItems(){ + types = types | 64; + return this; + } + + public MaterialBuilder addGearItems(){ + types = types | 128; + return this; + } + + public MaterialBuilder addFluid(){ + return this; + } + + public MaterialBuilder addGas(){ + return this; + } + + + public MaterialBuilder setRGBA(int r, int g, int b, int a){ + this.r = r; + this.g = g; + this.b = b; + this.a = a; + return this; + } + + public MaterialBuilder setRGB(int r, int g, int b){ + this.r = r; + this.g = g; + this.b = b; + return this; + } + + public MaterialBuilder setTransparent(boolean transparent){ + this.transparent = transparent; + return this; + } + + public MaterialBuilder setColor(Dyes color){ + this.color = color; + return this; + } + + + public MaterialBuilder setToolSpeed(float toolSpeed) { + this.toolSpeed = toolSpeed; + return this; + } + + public MaterialBuilder setDurability(int durability) { + this.durability = durability; + return this; + } + + public MaterialBuilder setToolQuality(int toolQuality) { + this.toolQuality = toolQuality; + return this; + } + + + public MaterialBuilder setFuelType(int fuelType) { + this.fuelType = fuelType; + return this; + } + + public MaterialBuilder setFuelPower(int fuelPower) { + this.fuelPower = fuelPower; + return this; + } + + public MaterialBuilder setMeltingPoint(int meltingPoint) { + this.meltingPoint = meltingPoint; + return this; + } + + public MaterialBuilder setBlastFurnaceTemp(int blastFurnaceTemp) { + this.blastFurnaceTemp = blastFurnaceTemp; + return this; + } + + public MaterialBuilder setBlastFurnaceRequired(boolean blastFurnaceRequired) { + this.blastFurnaceRequired = blastFurnaceRequired; + return this; + } + + public MaterialBuilder setOreValue(int oreValue) { + this.oreValue = oreValue; + return this; + } + + public MaterialBuilder setDensityMultiplier(int densityMultiplier) { + this.densityMultiplier = densityMultiplier; + return this; + } + + public MaterialBuilder setDensityDivider(int densityDivider) { + this.densityDivider = densityDivider; + return this; + } + + public MaterialBuilder setExtraData(int extraData) { + this.extraData = extraData; + return this; + } + + public MaterialBuilder addElectrolyzerRecipe(){ + extraData = extraData | 1; + return this; + } + + public MaterialBuilder addCentrifugeRecipe(){ + extraData = extraData | 2; + return this; + } + + public MaterialBuilder setMaterialList(List materialList) { + this.materialList = materialList; + return this; + } + + public MaterialBuilder setMaterialList(MaterialStack ... materials) { + this.materialList = Arrays.asList(materials); + return this; + } + + public MaterialBuilder setAspects(List aspects) { + this.aspects = aspects; + return this; + } + + public int getLiquidTemperature() { + return liquidTemperature; + } + + public MaterialBuilder setLiquidTemperature(int liquidTemperature) { + this.liquidTemperature = liquidTemperature; + return this; + } + + public int getGasTemperature() { + return gasTemperature; + } + + public MaterialBuilder setGasTemperature(int gasTemperature) { + this.gasTemperature = gasTemperature; + return this; + } + + public boolean canBeCracked() { + return canBeCracked; + } + + public MaterialBuilder setCanBeCracked(boolean canBeCracked) { + this.canBeCracked = canBeCracked; + return this; + } + */ +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/recipehandlers/GregtechRecipe.java b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/recipehandlers/GregtechRecipe.java index 635239bbfc..cbd92c3f4e 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/recipehandlers/GregtechRecipe.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/recipehandlers/GregtechRecipe.java @@ -1,3 +1,3 @@ package gtPlusPlus.core.util.minecraft.gregtech.recipehandlers; -public final class GregtechRecipe {} \ No newline at end of file +public final class GregtechRecipe {} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/network/CustomPacket.java b/src/main/java/gtPlusPlus/core/util/minecraft/network/CustomPacket.java index def836eac9..6a7a33bd8e 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/network/CustomPacket.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/network/CustomPacket.java @@ -9,31 +9,31 @@ import java.io.IOException; import mods.railcraft.common.util.misc.Game; public abstract class CustomPacket { - public static final String CHANNEL_NAME = "GTPP"; + public static final String CHANNEL_NAME = "GTPP"; - public enum PacketType { + public enum PacketType { TILE_ENTITY, - } - - public FMLProxyPacket getPacket() { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - DataOutputStream data = new DataOutputStream(bytes); - try { - data.writeByte(this.getID()); - this.writeData(data); - } catch (IOException var4) { - Game.logThrowable("Error constructing packet: {0}", var4, new Object[]{this.getClass()}); - } - return new FMLProxyPacket(Unpooled.wrappedBuffer(bytes.toByteArray()), "GTPP"); - } - - public abstract void writeData(DataOutputStream var1) throws IOException; - - public abstract void readData(DataInputStream var1) throws IOException; - - public abstract int getID(); - - public String toString() { - return this.getClass().getSimpleName(); - } -} \ No newline at end of file + } + + public FMLProxyPacket getPacket() { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + DataOutputStream data = new DataOutputStream(bytes); + try { + data.writeByte(this.getID()); + this.writeData(data); + } catch (IOException var4) { + Game.logThrowable("Error constructing packet: {0}", var4, new Object[] {this.getClass()}); + } + return new FMLProxyPacket(Unpooled.wrappedBuffer(bytes.toByteArray()), "GTPP"); + } + + public abstract void writeData(DataOutputStream var1) throws IOException; + + public abstract void readData(DataInputStream var1) throws IOException; + + public abstract int getID(); + + public String toString() { + return this.getClass().getSimpleName(); + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketBuilder.java b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketBuilder.java index edbc6aaf83..30e981b1a0 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketBuilder.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketBuilder.java @@ -4,22 +4,21 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.world.WorldServer; public class PacketBuilder { - - private static PacketBuilder instance; - public static PacketBuilder instance() { - if (instance == null) { - instance = new PacketBuilder(); - } - return instance; - } + private static PacketBuilder instance; - public void sendTileEntityPacket(IGregTechTileEntity tile) { - if (tile.getWorld() instanceof WorldServer) { - WorldServer world = (WorldServer) tile.getWorld(); - PacketTileEntity pkt = new PacketTileEntity(tile); - PacketDispatcher.sendToWatchers(pkt, world, tile.getXCoord(), tile.getZCoord()); - } - } - -} \ No newline at end of file + public static PacketBuilder instance() { + if (instance == null) { + instance = new PacketBuilder(); + } + return instance; + } + + public void sendTileEntityPacket(IGregTechTileEntity tile) { + if (tile.getWorld() instanceof WorldServer) { + WorldServer world = (WorldServer) tile.getWorld(); + PacketTileEntity pkt = new PacketTileEntity(tile); + PacketDispatcher.sendToWatchers(pkt, world, tile.getXCoord(), tile.getZCoord()); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketDispatcher.java b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketDispatcher.java index f61a6f2b6c..4b6fc5aa85 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketDispatcher.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketDispatcher.java @@ -4,7 +4,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.ReflectionHelper; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.preloader.DevHelper; - import java.lang.reflect.Method; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.Packet; @@ -13,76 +12,78 @@ import net.minecraft.world.WorldServer; @SuppressWarnings("unchecked") public class PacketDispatcher { - private static final Class playerInstanceClass; - private static final Method getOrCreateChunkWatcher; - private static final Method sendToAllPlayersWatchingChunk; + private static final Class playerInstanceClass; + private static final Method getOrCreateChunkWatcher; + private static final Method sendToAllPlayersWatchingChunk; - public static void sendToServer(CustomPacket packet) { - PacketHandler.INSTANCE.channel.sendToServer(packet.getPacket()); - } + public static void sendToServer(CustomPacket packet) { + PacketHandler.INSTANCE.channel.sendToServer(packet.getPacket()); + } - public static void sendToPlayer(CustomPacket packet, EntityPlayerMP player) { - PacketHandler.INSTANCE.channel.sendTo(packet.getPacket(), player); - } + public static void sendToPlayer(CustomPacket packet, EntityPlayerMP player) { + PacketHandler.INSTANCE.channel.sendTo(packet.getPacket(), player); + } - public static void sendToAll(CustomPacket packet) { - PacketHandler.INSTANCE.channel.sendToAll(packet.getPacket()); - } + public static void sendToAll(CustomPacket packet) { + PacketHandler.INSTANCE.channel.sendToAll(packet.getPacket()); + } - public static void sendToAllAround(CustomPacket packet, TargetPoint zone) { - PacketHandler.INSTANCE.channel.sendToAllAround(packet.getPacket(), zone); - } + public static void sendToAllAround(CustomPacket packet, TargetPoint zone) { + PacketHandler.INSTANCE.channel.sendToAllAround(packet.getPacket(), zone); + } - public static void sendToDimension(CustomPacket packet, int dimensionId) { - PacketHandler.INSTANCE.channel.sendToDimension(packet.getPacket(), dimensionId); - } + public static void sendToDimension(CustomPacket packet, int dimensionId) { + PacketHandler.INSTANCE.channel.sendToDimension(packet.getPacket(), dimensionId); + } - public static void sendToWatchers(CustomPacket packet, WorldServer world, int worldX, int worldZ) { - try { - Object playerInstance = getOrCreateChunkWatcher.invoke(world.getPlayerManager(), worldX >> 4, worldZ >> 4, - false); - if (playerInstance != null) { - sendToAllPlayersWatchingChunk.invoke(playerInstance, packet.getPacket()); - } + public static void sendToWatchers(CustomPacket packet, WorldServer world, int worldX, int worldZ) { + try { + Object playerInstance = + getOrCreateChunkWatcher.invoke(world.getPlayerManager(), worldX >> 4, worldZ >> 4, false); + if (playerInstance != null) { + sendToAllPlayersWatchingChunk.invoke(playerInstance, packet.getPacket()); + } - } catch (Exception var5) { - Logger.ERROR("Reflection Failure in PacketDispatcher.sendToWatchers() {0} {1}" + 20 + var5 + - new Object[]{getOrCreateChunkWatcher.getName() + sendToAllPlayersWatchingChunk.getName()}); - throw new RuntimeException(var5); - } - } + } catch (Exception var5) { + Logger.ERROR("Reflection Failure in PacketDispatcher.sendToWatchers() {0} {1}" + 20 + var5 + + new Object[] {getOrCreateChunkWatcher.getName() + sendToAllPlayersWatchingChunk.getName()}); + throw new RuntimeException(var5); + } + } - static { - try { - playerInstanceClass = PlayerManager.class.getDeclaredClasses()[0]; + static { + try { + playerInstanceClass = PlayerManager.class.getDeclaredClasses()[0]; - Method a, b; - - try { - a = DevHelper.getForgeMethod(PlayerManager.class, "getOrCreateChunkWatcher", int.class, int.class, boolean.class); - } - catch (Throwable t) { - a = ReflectionHelper.findMethod(playerInstanceClass, (Object) null, - new String[]{"func_72690_a", "getOrCreateChunkWatcher"}, - new Class[]{Integer.TYPE, Integer.TYPE, Boolean.TYPE}); - } - try { - b = DevHelper.getForgeMethod(PlayerManager.class, "sendToAllPlayersWatchingChunk", Packet.class); - } - catch (Throwable t) { - b = ReflectionHelper.findMethod(playerInstanceClass, (Object) null, - new String[]{"func_151251_a", "sendToAllPlayersWatchingChunk"}, - new Class[]{Packet.class}); - } + Method a, b; + try { + a = DevHelper.getForgeMethod( + PlayerManager.class, "getOrCreateChunkWatcher", int.class, int.class, boolean.class); + } catch (Throwable t) { + a = ReflectionHelper.findMethod( + playerInstanceClass, + (Object) null, + new String[] {"func_72690_a", "getOrCreateChunkWatcher"}, + new Class[] {Integer.TYPE, Integer.TYPE, Boolean.TYPE}); + } + try { + b = DevHelper.getForgeMethod(PlayerManager.class, "sendToAllPlayersWatchingChunk", Packet.class); + } catch (Throwable t) { + b = ReflectionHelper.findMethod( + playerInstanceClass, + (Object) null, + new String[] {"func_151251_a", "sendToAllPlayersWatchingChunk"}, + new Class[] {Packet.class}); + } - getOrCreateChunkWatcher = a; - sendToAllPlayersWatchingChunk = b; - getOrCreateChunkWatcher.setAccessible(true); - sendToAllPlayersWatchingChunk.setAccessible(true); - } catch (Exception var1) { - Logger.ERROR("Reflection Failure in PacketDispatcher initalization {0} {1}" + var1); - throw new RuntimeException(var1); - } - } -} \ No newline at end of file + getOrCreateChunkWatcher = a; + sendToAllPlayersWatchingChunk = b; + getOrCreateChunkWatcher.setAccessible(true); + sendToAllPlayersWatchingChunk.setAccessible(true); + } catch (Exception var1) { + Logger.ERROR("Reflection Failure in PacketDispatcher initalization {0} {1}" + var1); + throw new RuntimeException(var1); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketHandler.java b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketHandler.java index 158f9f9483..bd7e1fbcb8 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketHandler.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketHandler.java @@ -2,11 +2,11 @@ package gtPlusPlus.core.util.minecraft.network; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.FMLEventChannel; +import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent; +import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent; import cpw.mods.fml.common.network.NetworkRegistry; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.minecraft.network.CustomPacket.PacketType; -import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; @@ -15,57 +15,55 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.NetHandlerPlayServer; public class PacketHandler { - public static final PacketHandler INSTANCE = new PacketHandler(); - private static final PacketType[] packetTypes = PacketType.values(); - final FMLEventChannel channel; + public static final PacketHandler INSTANCE = new PacketHandler(); + private static final PacketType[] packetTypes = PacketType.values(); + final FMLEventChannel channel; - private PacketHandler() { - this.channel = NetworkRegistry.INSTANCE.newEventDrivenChannel("GTPP"); - this.channel.register(this); - } + private PacketHandler() { + this.channel = NetworkRegistry.INSTANCE.newEventDrivenChannel("GTPP"); + this.channel.register(this); + } - public static void init() { - } + public static void init() {} - @SubscribeEvent - public void onPacket(ServerCustomPacketEvent event) { - byte[] data = new byte[event.packet.payload().readableBytes()]; - event.packet.payload().readBytes(data); - this.onPacketData(data, ((NetHandlerPlayServer) event.handler).playerEntity); - } + @SubscribeEvent + public void onPacket(ServerCustomPacketEvent event) { + byte[] data = new byte[event.packet.payload().readableBytes()]; + event.packet.payload().readBytes(data); + this.onPacketData(data, ((NetHandlerPlayServer) event.handler).playerEntity); + } - @SubscribeEvent - public void onPacket(ClientCustomPacketEvent event) { - byte[] data = new byte[event.packet.payload().readableBytes()]; - event.packet.payload().readBytes(data); - this.onPacketData(data, (EntityPlayerMP) null); - } + @SubscribeEvent + public void onPacket(ClientCustomPacketEvent event) { + byte[] data = new byte[event.packet.payload().readableBytes()]; + event.packet.payload().readBytes(data); + this.onPacketData(data, (EntityPlayerMP) null); + } - public void onPacketData(byte[] bData, EntityPlayerMP player) { - DataInputStream data = new DataInputStream(new ByteArrayInputStream(bData)); + public void onPacketData(byte[] bData, EntityPlayerMP player) { + DataInputStream data = new DataInputStream(new ByteArrayInputStream(bData)); - try { - byte packetID = data.readByte(); - if (packetID < 0) { - return; - } - PacketType type = packetTypes[packetID]; - Object pkt; - - switch(type.ordinal()) { - case 0: - pkt = new PacketTileEntity(); - break; - default: - return; - } + try { + byte packetID = data.readByte(); + if (packetID < 0) { + return; + } + PacketType type = packetTypes[packetID]; + Object pkt; - if (pkt != null) { - ((CustomPacket)pkt).readData(data); - } - } catch (IOException var7) { - Logger.ERROR("Exception in PacketHandler.onPacketData: {0}"+ var7 + new Object[]{Arrays.toString(bData)}); - } + switch (type.ordinal()) { + case 0: + pkt = new PacketTileEntity(); + break; + default: + return; + } - } -} \ No newline at end of file + if (pkt != null) { + ((CustomPacket) pkt).readData(data); + } + } catch (IOException var7) { + Logger.ERROR("Exception in PacketHandler.onPacketData: {0}" + var7 + new Object[] {Arrays.toString(bData)}); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketTileEntity.java b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketTileEntity.java index d59bee3c27..265d78a7f4 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketTileEntity.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/network/PacketTileEntity.java @@ -5,7 +5,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gtPlusPlus.api.interfaces.IGregtechPacketEntity; - import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -15,65 +14,64 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class PacketTileEntity extends CustomPacket { - private IGregTechTileEntity tile; - private IGregtechPacketEntity ptile; + private IGregTechTileEntity tile; + private IGregtechPacketEntity ptile; - public PacketTileEntity() { - } + public PacketTileEntity() {} - public PacketTileEntity(IGregTechTileEntity tile) { - this.tile = tile; - if (tile instanceof IGregtechPacketEntity) { - ptile = (IGregtechPacketEntity) tile; - } - } + public PacketTileEntity(IGregTechTileEntity tile) { + this.tile = tile; + if (tile instanceof IGregtechPacketEntity) { + ptile = (IGregtechPacketEntity) tile; + } + } - public void writeData(DataOutputStream data) throws IOException { - if (ptile != null) { - data.writeInt(this.tile.getXCoord()); - data.writeInt(this.tile.getYCoord()); - data.writeInt(this.tile.getZCoord()); - data.writeShort(this.tile.getMetaTileID()); - this.ptile.writePacketData(data); - } - } + public void writeData(DataOutputStream data) throws IOException { + if (ptile != null) { + data.writeInt(this.tile.getXCoord()); + data.writeInt(this.tile.getYCoord()); + data.writeInt(this.tile.getZCoord()); + data.writeShort(this.tile.getMetaTileID()); + this.ptile.writePacketData(data); + } + } - @SideOnly(Side.CLIENT) - public void readData(DataInputStream data) throws IOException { - Minecraft mc = FMLClientHandler.instance().getClient(); - World world = mc != null ? mc.theWorld : null; - if (world != null) { - int x = data.readInt(); - int y = data.readInt(); - int z = data.readInt(); - short id = data.readShort(); - if (id >= 0 && y >= 0 && world.blockExists(x, y, z)) { - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof IGregTechTileEntity) { - this.tile = (IGregTechTileEntity) te; - if (this.tile.getMetaTileID() != id) { - this.tile = null; - } - } else { - this.tile = null; - } - if (this.tile != null) { - if (tile instanceof IGregtechPacketEntity) { - ptile = (IGregtechPacketEntity) tile; - try { - this.ptile.readPacketData(data); - } catch (IOException var10) { - throw var10; - } catch (RuntimeException var11) { - Game.logThrowable("Exception in PacketTileEntity.readData:", var11, new Object[0]); - } - } - } - } - } - } + @SideOnly(Side.CLIENT) + public void readData(DataInputStream data) throws IOException { + Minecraft mc = FMLClientHandler.instance().getClient(); + World world = mc != null ? mc.theWorld : null; + if (world != null) { + int x = data.readInt(); + int y = data.readInt(); + int z = data.readInt(); + short id = data.readShort(); + if (id >= 0 && y >= 0 && world.blockExists(x, y, z)) { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof IGregTechTileEntity) { + this.tile = (IGregTechTileEntity) te; + if (this.tile.getMetaTileID() != id) { + this.tile = null; + } + } else { + this.tile = null; + } + if (this.tile != null) { + if (tile instanceof IGregtechPacketEntity) { + ptile = (IGregtechPacketEntity) tile; + try { + this.ptile.readPacketData(data); + } catch (IOException var10) { + throw var10; + } catch (RuntimeException var11) { + Game.logThrowable("Exception in PacketTileEntity.readData:", var11, new Object[0]); + } + } + } + } + } + } - public int getID() { - return 0; - } -} \ No newline at end of file + public int getID() { + return 0; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/particles/BlockBreakParticles.java b/src/main/java/gtPlusPlus/core/util/minecraft/particles/BlockBreakParticles.java index 9046a57120..f848ea49be 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/particles/BlockBreakParticles.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/particles/BlockBreakParticles.java @@ -1,18 +1,16 @@ package gtPlusPlus.core.util.minecraft.particles; +import gtPlusPlus.xmod.forestry.HANDLER_FR; import net.minecraft.block.Block; import net.minecraft.world.World; -import gtPlusPlus.xmod.forestry.HANDLER_FR; - public class BlockBreakParticles { - public BlockBreakParticles(final World world, final int x, final int y, final int z, final Block block){ - try { - HANDLER_FR.createBlockBreakParticles(world, x, y, z, block); - } catch (final Throwable T){ - - } - } + public BlockBreakParticles(final World world, final int x, final int y, final int z, final Block block) { + try { + HANDLER_FR.createBlockBreakParticles(world, x, y, z, block); + } catch (final Throwable T) { + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/particles/EntityParticleFXMysterious.java b/src/main/java/gtPlusPlus/core/util/minecraft/particles/EntityParticleFXMysterious.java index d996cf705a..6c21e8addf 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/particles/EntityParticleFXMysterious.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/particles/EntityParticleFXMysterious.java @@ -3,15 +3,18 @@ package gtPlusPlus.core.util.minecraft.particles; import net.minecraft.client.particle.EntityAuraFX; import net.minecraft.world.World; -public class EntityParticleFXMysterious extends EntityAuraFX -{ - public EntityParticleFXMysterious(final World parWorld, - final double parX, final double parY, final double parZ, - final double parMotionX, final double parMotionY, final double parMotionZ) - { - super(parWorld, parX, parY, parZ, parMotionX, parMotionY, parMotionZ); - this.setParticleTextureIndex(82); // same as happy villager - this.particleScale = 2.0F; - this.setRBGColorF(0x88, 0x00, 0x88); - } +public class EntityParticleFXMysterious extends EntityAuraFX { + public EntityParticleFXMysterious( + final World parWorld, + final double parX, + final double parY, + final double parZ, + final double parMotionX, + final double parMotionY, + final double parMotionZ) { + super(parWorld, parX, parY, parZ, parMotionX, parMotionY, parMotionZ); + this.setParticleTextureIndex(82); // same as happy villager + this.particleScale = 2.0F; + this.setRBGColorF(0x88, 0x00, 0x88); + } } diff --git a/src/main/java/gtPlusPlus/core/util/player/PlayerCache.java b/src/main/java/gtPlusPlus/core/util/player/PlayerCache.java index 753124dcd7..7159345d86 100644 --- a/src/main/java/gtPlusPlus/core/util/player/PlayerCache.java +++ b/src/main/java/gtPlusPlus/core/util/player/PlayerCache.java @@ -1,160 +1,149 @@ package gtPlusPlus.core.util.player; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.CORE; import java.io.*; import java.util.*; - import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; - public class PlayerCache { - private static final File cache = new File("PlayerCache.dat"); - - public static final void initCache() { - if (CORE.PlayerCache == null){ - try { - - if (cache != null){ - CORE.PlayerCache = PlayerCache.readPropertiesFileAsMap(); - Logger.INFO("Loaded PlayerCache.dat"); - } - - - } catch (final Exception e) { - Logger.INFO("Failed to initialise PlayerCache.dat"); - PlayerCache.createPropertiesFile("PLAYER_", "DATA"); - //e.printStackTrace(); - } - } - } - - public static void createPropertiesFile(final String playerName, final String playerUUIDasString) { - try { - final Properties props = new Properties(); - props.setProperty(playerName+" ", playerUUIDasString); - final OutputStream out = new FileOutputStream(cache); - props.store(out, "Player Cache."); - Logger.INFO("PlayerCache.dat created for future use."); - out.close(); - } - catch (final Exception e ) { - e.printStackTrace(); - } - } - - public static void appendParamChanges(final String playerName, final String playerUUIDasString) { - final HashMap playerInfo = new HashMap<>(); - playerInfo.put(playerName, UUID.fromString(playerUUIDasString)); - - /*try { - Utils.LOG_INFO("Attempting to load "+cache.getName()); - properties.load(new FileInputStream(cache)); - if (properties == null || properties.equals(null)){ - Utils.LOG_INFO("Please wait."); - } - else { - Utils.LOG_INFO("Loaded PlayerCache.dat"); - properties.setProperty(playerName+"_", playerUUIDasString); - FileOutputStream fr=new FileOutputStream(cache); - properties.store(fr, "Player Cache."); - fr.close(); - } - - } */ - - try - { - final FileOutputStream fos = new FileOutputStream("PlayerCache.dat"); - final ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(playerInfo); - oos.close(); - fos.close(); - Logger.INFO("Serialized Player data saved in PlayerCache.dat"); - } - - catch (final IOException e) { - Logger.INFO("No PlayerCache file found, creating one."); - createPropertiesFile(playerName, playerUUIDasString); - } - } - - /** - * Reads a "properties" file, and returns it as a Map - * (a collection of key/value pairs). - * - * Credit due to Alvin Alexander - http://alvinalexander.com/java/java-properties-file-map-example?nocache=1#comment-8215 - * Changed slightly as the filename and delimiter are constant in my case. - * - * @param filename The properties filename to read. - * @param delimiter The string (or character) that separates the key - * from the value in the properties file. - * @return The Map that contains the key/value pairs. - * @throws Exception - */ - @Deprecated - public static Map readPropertiesFileAsMapOld() throws Exception { - final String delimiter = "="; - @SuppressWarnings({ "rawtypes", "unchecked" }) - final - Map map = new HashMap<>(); - final BufferedReader reader = new BufferedReader(new FileReader(cache)); - String line; - while ((line = reader.readLine()) != null) - { - if (line.trim().length()==0) { - continue; - } - if (line.charAt(0)=='#') { - continue; - } - // assumption here is that proper lines are like "String : http://xxx.yyy.zzz/foo/bar", - // and the ":" is the delimiter - final int delimPosition = line.indexOf(delimiter); - final String key = line.substring(0, delimPosition-1).trim(); - final String value = line.substring(delimPosition+1).trim(); - map.put(key, value); - } - reader.close(); - CORE.PlayerCache = map; - return map; - } - - public static HashMap readPropertiesFileAsMap() { - HashMap map = null; - try - { - final FileInputStream fis = new FileInputStream(cache); - final ObjectInputStream ois = new ObjectInputStream(fis); - map = (HashMap) ois.readObject(); - ois.close(); - fis.close(); - }catch(final IOException ioe) - { - ioe.printStackTrace(); - return null; - }catch(final ClassNotFoundException c) - { - Logger.INFO("Class not found"); - c.printStackTrace(); - return null; - } - Logger.WARNING("Deserialized PlayerCache.."); - return map; - } - - public static String lookupPlayerByUUID(final UUID UUID){ - if (UUID == null) { - return null; - } - final List allPlayers = MinecraftServer.getServer().getConfigurationManager().playerEntityList; - for (final EntityPlayerMP player : allPlayers) { - if (player.getUniqueID().equals(UUID)) { - return player.getDisplayName(); - } - } - return "Offline Player."; - } + private static final File cache = new File("PlayerCache.dat"); + + public static final void initCache() { + if (CORE.PlayerCache == null) { + try { + + if (cache != null) { + CORE.PlayerCache = PlayerCache.readPropertiesFileAsMap(); + Logger.INFO("Loaded PlayerCache.dat"); + } + + } catch (final Exception e) { + Logger.INFO("Failed to initialise PlayerCache.dat"); + PlayerCache.createPropertiesFile("PLAYER_", "DATA"); + // e.printStackTrace(); + } + } + } + + public static void createPropertiesFile(final String playerName, final String playerUUIDasString) { + try { + final Properties props = new Properties(); + props.setProperty(playerName + " ", playerUUIDasString); + final OutputStream out = new FileOutputStream(cache); + props.store(out, "Player Cache."); + Logger.INFO("PlayerCache.dat created for future use."); + out.close(); + } catch (final Exception e) { + e.printStackTrace(); + } + } + + public static void appendParamChanges(final String playerName, final String playerUUIDasString) { + final HashMap playerInfo = new HashMap<>(); + playerInfo.put(playerName, UUID.fromString(playerUUIDasString)); + + /*try { + Utils.LOG_INFO("Attempting to load "+cache.getName()); + properties.load(new FileInputStream(cache)); + if (properties == null || properties.equals(null)){ + Utils.LOG_INFO("Please wait."); + } + else { + Utils.LOG_INFO("Loaded PlayerCache.dat"); + properties.setProperty(playerName+"_", playerUUIDasString); + FileOutputStream fr=new FileOutputStream(cache); + properties.store(fr, "Player Cache."); + fr.close(); + } + + } */ + + try { + final FileOutputStream fos = new FileOutputStream("PlayerCache.dat"); + final ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(playerInfo); + oos.close(); + fos.close(); + Logger.INFO("Serialized Player data saved in PlayerCache.dat"); + } catch (final IOException e) { + Logger.INFO("No PlayerCache file found, creating one."); + createPropertiesFile(playerName, playerUUIDasString); + } + } + + /** + * Reads a "properties" file, and returns it as a Map + * (a collection of key/value pairs). + * + * Credit due to Alvin Alexander - http://alvinalexander.com/java/java-properties-file-map-example?nocache=1#comment-8215 + * Changed slightly as the filename and delimiter are constant in my case. + * + * @param filename The properties filename to read. + * @param delimiter The string (or character) that separates the key + * from the value in the properties file. + * @return The Map that contains the key/value pairs. + * @throws Exception + */ + @Deprecated + public static Map readPropertiesFileAsMapOld() throws Exception { + final String delimiter = "="; + @SuppressWarnings({"rawtypes", "unchecked"}) + final Map map = new HashMap<>(); + final BufferedReader reader = new BufferedReader(new FileReader(cache)); + String line; + while ((line = reader.readLine()) != null) { + if (line.trim().length() == 0) { + continue; + } + if (line.charAt(0) == '#') { + continue; + } + // assumption here is that proper lines are like "String : http://xxx.yyy.zzz/foo/bar", + // and the ":" is the delimiter + final int delimPosition = line.indexOf(delimiter); + final String key = line.substring(0, delimPosition - 1).trim(); + final String value = line.substring(delimPosition + 1).trim(); + map.put(key, value); + } + reader.close(); + CORE.PlayerCache = map; + return map; + } + + public static HashMap readPropertiesFileAsMap() { + HashMap map = null; + try { + final FileInputStream fis = new FileInputStream(cache); + final ObjectInputStream ois = new ObjectInputStream(fis); + map = (HashMap) ois.readObject(); + ois.close(); + fis.close(); + } catch (final IOException ioe) { + ioe.printStackTrace(); + return null; + } catch (final ClassNotFoundException c) { + Logger.INFO("Class not found"); + c.printStackTrace(); + return null; + } + Logger.WARNING("Deserialized PlayerCache.."); + return map; + } + + public static String lookupPlayerByUUID(final UUID UUID) { + if (UUID == null) { + return null; + } + final List allPlayers = MinecraftServer.getServer().getConfigurationManager().playerEntityList; + for (final EntityPlayerMP player : allPlayers) { + if (player.getUniqueID().equals(UUID)) { + return player.getDisplayName(); + } + } + return "Offline Player."; + } } diff --git a/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java b/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java index fc8e84cb61..10b689f044 100644 --- a/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java +++ b/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java @@ -1,8 +1,5 @@ package gtPlusPlus.core.util.reflect; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - import gregtech.api.enums.GT_Values; import gregtech.api.interfaces.internal.IGT_RecipeAdder; import gregtech.api.util.GT_Recipe; @@ -10,282 +7,271 @@ import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; public final class AddGregtechRecipe { - - + public static boolean importPyroRecipe(GT_Recipe aRecipe) { - + int aModifiedTime = (int) (aRecipe.mDuration * 0.8); - - 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 > 9) { + + if (aRecipe.mInputs == null + || aRecipe.mFluidInputs == null + || aRecipe.mFluidOutputs == null + || aRecipe.mOutputs == null) { return false; } - else if (aRecipe.mInputs.length <= 0) { + 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) { return false; } - + int aCircuitNumber = -1; Item aCircuit = CI.getNumberedCircuit(1).getItem(); boolean hasCircuit = false; - + for (ItemStack a : aRecipe.mInputs) { if (a != null && a.getItem() == aCircuit) { - hasCircuit = true; - aCircuitNumber = a.getItemDamage(); - break; + hasCircuit = true; + aCircuitNumber = a.getItemDamage(); + break; } } - + ItemStack aInputItem = null; if (!hasCircuit || aCircuitNumber < 1) { - return false; + return false; } - + for (ItemStack a : aRecipe.mInputs) { if (a != null && a.getItem() != aCircuit) { - aInputItem = a; - break; + aInputItem = a; + break; } } - + return CORE.RA.addCokeOvenRecipe( - aCircuitNumber, - aInputItem, - aRecipe.mFluidInputs, - aRecipe.mFluidOutputs, - aRecipe.mOutputs, - aModifiedTime, - aRecipe.mEUt); - + aCircuitNumber, + aInputItem, + aRecipe.mFluidInputs, + aRecipe.mFluidOutputs, + aRecipe.mOutputs, + aModifiedTime, + aRecipe.mEUt); } - - - public static boolean addCokeAndPyrolyseRecipes( - ItemStack input1, int circuitNumber, - FluidStack inputFluid1, - ItemStack output1, - FluidStack outputFluid1, - int timeInSeconds, - int euTick - ){ - //Seconds Conversion - int TIME = timeInSeconds*20; - int TIMEPYRO = TIME+(TIME/5); - CORE.RA.addCokeOvenRecipe( - input1, - ItemUtils.getGregtechCircuit(circuitNumber), - inputFluid1, - outputFluid1, - output1, - TIME, - euTick); - PyrolyseOven( - input1, - inputFluid1, - circuitNumber, - output1, - outputFluid1, - TIMEPYRO, - euTick); - - - return false; - } - - + public static boolean addCokeAndPyrolyseRecipes( + ItemStack input1, + int circuitNumber, + FluidStack inputFluid1, + ItemStack output1, + FluidStack outputFluid1, + int timeInSeconds, + int euTick) { + // Seconds Conversion + int TIME = timeInSeconds * 20; + int TIMEPYRO = TIME + (TIME / 5); + CORE.RA.addCokeOvenRecipe( + input1, ItemUtils.getGregtechCircuit(circuitNumber), inputFluid1, outputFluid1, output1, TIME, euTick); + PyrolyseOven(input1, inputFluid1, circuitNumber, output1, outputFluid1, TIMEPYRO, euTick); - public static boolean PyrolyseOven(final ItemStack p0, final FluidStack p1, final int p2, final ItemStack p3, - final FluidStack p4, final int p5, final int p6){ - - try { - IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; - if (IGT_RecipeAdder != null){ - Class classRA = IGT_RecipeAdder.getClass(); - Method addRecipe = classRA.getMethod("addPyrolyseRecipe", ItemStack.class, FluidStack.class, int.class, ItemStack.class, FluidStack.class, int.class, int.class); - if (addRecipe != null){ - return (boolean) addRecipe.invoke(IGT_RecipeAdder, p0, p1, p2, p3, p4, p5, p6); - } - } - } - catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - return false; - } - return false; - } - - - - public static boolean addAssemblylineRecipe( - ItemStack aResearchItem, - int aResearchTime, - ItemStack[] aInputs, - FluidStack[] aFluidInputs, - ItemStack aOutput, - int aDuration, int aEUt){ - /* - try { - IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; - if (IGT_RecipeAdder != null){ - Class classRA = IGT_RecipeAdder.getClass(); - - for(Method current : classRA.getDeclaredMethods()){ - //Utils.LOG_INFO("-----------------------------------------------"); - ////Utils.LOG_INFO("Found method: "+current.getName()); - //Utils.LOG_INFO("With Parameters: "); - //Utils.LOG_INFO("==============================================="); - for (Class P : current.getParameterTypes()){ - //Utils.LOG_INFO(""+P.getName()); - //Utils.LOG_INFO(""+P.getClass().getName()); - } - //Utils.LOG_INFO("==============================================="); - } - - try { - Method testRA = GT_Values.RA.getClass().getMethod("addAssemblylineRecipe", GT_Values.RA.getClass(), aResearchItem.getClass(), int.class, aInputs.getClass(), aFluidInputs.getClass(), aOutput.getClass(), int.class, int.class); - testRA.invoke(aResearchItem, aResearchTime, aInputs, aFluidInputs, aOutput, aDuration, aEUt); - } - catch (Throwable masndj){ - masndj.printStackTrace(); - } - + return false; + } - Method addRecipe = classRA.getDeclaredMethod( - "addAssemblylineRecipe", - ItemStack.class, - int.class, - ItemStack.class, - FluidStack.class, - ItemStack.class, - int.class, - int.class); - if (addRecipe != null){ - return (boolean) addRecipe.invoke(aResearchItem, aResearchTime, aInputs, aFluidInputs, aOutput, aDuration, aEUt); - } - } - } - catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Utils.LOG_INFO("[Assembly Line] - Failed to add recipe, due to GT not being .09 branch. Research: "+aResearchItem.getDisplayName()+" | Result: "+aOutput.getDisplayName()); - e.printStackTrace(); - return false; - } - Utils.LOG_INFO("[Assembly Line] - Failed to add recipe. Research: "+aResearchItem.getDisplayName()+" | Result: "+aOutput.getDisplayName()); - */return false; - } + public static boolean PyrolyseOven( + final ItemStack p0, + final FluidStack p1, + final int p2, + final ItemStack p3, + final FluidStack p4, + final int p5, + final int p6) { - public static boolean addCircuitAssemblerRecipe( - ItemStack[] aInputs, - FluidStack aFluidInput, - ItemStack aOutput, - int aDuration, - int aEUt) { - if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK){ - try { - IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; - if (IGT_RecipeAdder != null){ - Class classRA = IGT_RecipeAdder.getClass(); - Method addRecipe = classRA.getMethod( - "addCircuitAssemblerRecipe", - ItemStack.class, - FluidStack.class, - ItemStack.class, - int.class, - int.class); - if (addRecipe != null){ - if (aFluidInput.isFluidEqual(FluidUtils.getFluidStack("molten.tin", 1))){ - boolean[] didAdd = new boolean[3]; - FluidStack moltenMetal = FluidUtils.getFluidStack("molten.tin", 144); - //Tin - didAdd[0] = (boolean) addRecipe.invoke( - IGT_RecipeAdder, - aInputs, - moltenMetal, - aOutput, - aDuration, - aEUt); - moltenMetal = FluidUtils.getFluidStack("molten.lead", 144); - //Lead - didAdd[1] = (boolean) addRecipe.invoke( - IGT_RecipeAdder, - aInputs, - moltenMetal, - aOutput, - aDuration, - aEUt); - moltenMetal = FluidUtils.getFluidStack("molten.solderingalloy", 144/2); - //Soldering Alloy - didAdd[2] = (boolean) addRecipe.invoke( - IGT_RecipeAdder, - aInputs, - moltenMetal, - aOutput, - aDuration, - aEUt); + try { + IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; + if (IGT_RecipeAdder != null) { + Class classRA = IGT_RecipeAdder.getClass(); + Method addRecipe = classRA.getMethod( + "addPyrolyseRecipe", + ItemStack.class, + FluidStack.class, + int.class, + ItemStack.class, + FluidStack.class, + int.class, + int.class); + if (addRecipe != null) { + return (boolean) addRecipe.invoke(IGT_RecipeAdder, p0, p1, p2, p3, p4, p5, p6); + } + } + } catch (SecurityException + | NoSuchMethodException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + return false; + } + return false; + } - if (didAdd[0] && didAdd[1] && didAdd[2]){ - return true; - } - else { - return false; - } - } - else { - return (boolean) addRecipe.invoke( - IGT_RecipeAdder, - aInputs, - aFluidInput, - aOutput, - aDuration, - aEUt); - } - } - } - } - catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - return false; - } - } - return false; - } + public static boolean addAssemblylineRecipe( + ItemStack aResearchItem, + int aResearchTime, + ItemStack[] aInputs, + FluidStack[] aFluidInputs, + ItemStack aOutput, + int aDuration, + int aEUt) { + /* + try { + IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; + if (IGT_RecipeAdder != null){ + Class classRA = IGT_RecipeAdder.getClass(); + for(Method current : classRA.getDeclaredMethods()){ + //Utils.LOG_INFO("-----------------------------------------------"); + ////Utils.LOG_INFO("Found method: "+current.getName()); + //Utils.LOG_INFO("With Parameters: "); + //Utils.LOG_INFO("==============================================="); + for (Class P : current.getParameterTypes()){ + //Utils.LOG_INFO(""+P.getName()); + //Utils.LOG_INFO(""+P.getClass().getName()); + } + //Utils.LOG_INFO("==============================================="); + } - public static boolean addChemicalRecipeForBasicMachineOnly(final ItemStack p0, final ItemStack p1, final FluidStack p2, final FluidStack p3, final ItemStack p4, final ItemStack p5, final int p6, final int p7){ + try { + Method testRA = GT_Values.RA.getClass().getMethod("addAssemblylineRecipe", GT_Values.RA.getClass(), aResearchItem.getClass(), int.class, aInputs.getClass(), aFluidInputs.getClass(), aOutput.getClass(), int.class, int.class); + testRA.invoke(aResearchItem, aResearchTime, aInputs, aFluidInputs, aOutput, aDuration, aEUt); + } + catch (Throwable masndj){ + masndj.printStackTrace(); + } - if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { - try { - IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; - if (IGT_RecipeAdder != null){ - Class classRA = IGT_RecipeAdder.getClass(); - //final ItemStack p0, final ItemStack p1, final FluidStack p2, final FluidStack p3, final ItemStack p4, final ItemStack p5, final int p6, final int p7 - Method addRecipe = classRA.getMethod("addChemicalRecipeForBasicMachineOnly", ItemStack.class, ItemStack.class, FluidStack.class, FluidStack.class, ItemStack.class, ItemStack.class, int.class, int.class); - if (addRecipe != null){ - return (boolean) addRecipe.invoke(IGT_RecipeAdder, p0, p1, p2, p3, p4, p5, p6, p7); - } - } - } - catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - } - } + Method addRecipe = classRA.getDeclaredMethod( + "addAssemblylineRecipe", + ItemStack.class, + int.class, + ItemStack.class, + FluidStack.class, + ItemStack.class, + int.class, + int.class); + if (addRecipe != null){ + return (boolean) addRecipe.invoke(aResearchItem, aResearchTime, aInputs, aFluidInputs, aOutput, aDuration, aEUt); + } + } + } + catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Utils.LOG_INFO("[Assembly Line] - Failed to add recipe, due to GT not being .09 branch. Research: "+aResearchItem.getDisplayName()+" | Result: "+aOutput.getDisplayName()); + e.printStackTrace(); + return false; + } + Utils.LOG_INFO("[Assembly Line] - Failed to add recipe. Research: "+aResearchItem.getDisplayName()+" | Result: "+aOutput.getDisplayName()); + */ return false; + } - return GT_Values.RA.addChemicalRecipe( - p0, - p1, - p2, - p3, - p4, - p6); + public static boolean addCircuitAssemblerRecipe( + ItemStack[] aInputs, FluidStack aFluidInput, ItemStack aOutput, int aDuration, int aEUt) { + if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { + try { + IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; + if (IGT_RecipeAdder != null) { + Class classRA = IGT_RecipeAdder.getClass(); + Method addRecipe = classRA.getMethod( + "addCircuitAssemblerRecipe", + ItemStack.class, + FluidStack.class, + ItemStack.class, + int.class, + int.class); + if (addRecipe != null) { + if (aFluidInput.isFluidEqual(FluidUtils.getFluidStack("molten.tin", 1))) { + boolean[] didAdd = new boolean[3]; + FluidStack moltenMetal = FluidUtils.getFluidStack("molten.tin", 144); + // Tin + didAdd[0] = (boolean) + addRecipe.invoke(IGT_RecipeAdder, aInputs, moltenMetal, aOutput, aDuration, aEUt); + moltenMetal = FluidUtils.getFluidStack("molten.lead", 144); + // Lead + didAdd[1] = (boolean) + addRecipe.invoke(IGT_RecipeAdder, aInputs, moltenMetal, aOutput, aDuration, aEUt); + moltenMetal = FluidUtils.getFluidStack("molten.solderingalloy", 144 / 2); + // Soldering Alloy + didAdd[2] = (boolean) + addRecipe.invoke(IGT_RecipeAdder, aInputs, moltenMetal, aOutput, aDuration, aEUt); - } + if (didAdd[0] && didAdd[1] && didAdd[2]) { + return true; + } else { + return false; + } + } else { + return (boolean) + addRecipe.invoke(IGT_RecipeAdder, aInputs, aFluidInput, aOutput, aDuration, aEUt); + } + } + } + } catch (SecurityException + | NoSuchMethodException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + return false; + } + } + return false; + } + public static boolean addChemicalRecipeForBasicMachineOnly( + final ItemStack p0, + final ItemStack p1, + final FluidStack p2, + final FluidStack p3, + final ItemStack p4, + final ItemStack p5, + final int p6, + final int p7) { + if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) { + try { + IGT_RecipeAdder IGT_RecipeAdder = GT_Values.RA; + if (IGT_RecipeAdder != null) { + Class classRA = IGT_RecipeAdder.getClass(); + // final ItemStack p0, final ItemStack p1, final FluidStack p2, final FluidStack p3, final ItemStack + // p4, final ItemStack p5, final int p6, final int p7 + Method addRecipe = classRA.getMethod( + "addChemicalRecipeForBasicMachineOnly", + ItemStack.class, + ItemStack.class, + FluidStack.class, + FluidStack.class, + ItemStack.class, + ItemStack.class, + int.class, + int.class); + if (addRecipe != null) { + return (boolean) addRecipe.invoke(IGT_RecipeAdder, p0, p1, p2, p3, p4, p5, p6, p7); + } + } + } catch (SecurityException + | NoSuchMethodException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + } + } -} \ No newline at end of file + return GT_Values.RA.addChemicalRecipe(p0, p1, p2, p3, p4, p6); + } +} diff --git a/src/main/java/gtPlusPlus/core/util/reflect/ProxyFinder.java b/src/main/java/gtPlusPlus/core/util/reflect/ProxyFinder.java index aaa9b2fae7..6c3be2e6df 100644 --- a/src/main/java/gtPlusPlus/core/util/reflect/ProxyFinder.java +++ b/src/main/java/gtPlusPlus/core/util/reflect/ProxyFinder.java @@ -1,55 +1,53 @@ package gtPlusPlus.core.util.reflect; -import java.lang.reflect.Field; - import cpw.mods.fml.common.SidedProxy; +import java.lang.reflect.Field; public class ProxyFinder { - public static Object getServerProxy(final Object modInstance) throws ReflectiveOperationException { - for(final Field field : modInstance.getClass().getDeclaredFields()) { - if(field.isAnnotationPresent(SidedProxy.class)) { - final SidedProxy sidedProxy = field.getAnnotation(SidedProxy.class); - final Object fieldValue = field.get(modInstance); - try { - final Class serverSideClass = ReflectionUtils.getClass(sidedProxy.serverSide()); - if(serverSideClass.isAssignableFrom(fieldValue.getClass())) { - final Object serverProxy = serverSideClass.cast(fieldValue); - //do what you want with server proxy instance - return serverProxy; - } + public static Object getServerProxy(final Object modInstance) throws ReflectiveOperationException { + for (final Field field : modInstance.getClass().getDeclaredFields()) { + if (field.isAnnotationPresent(SidedProxy.class)) { + final SidedProxy sidedProxy = field.getAnnotation(SidedProxy.class); + final Object fieldValue = field.get(modInstance); + try { + final Class serverSideClass = ReflectionUtils.getClass(sidedProxy.serverSide()); + if (serverSideClass.isAssignableFrom(fieldValue.getClass())) { + final Object serverProxy = serverSideClass.cast(fieldValue); + // do what you want with server proxy instance + return serverProxy; + } - } catch (final NoClassDefFoundError err) { - //its client side - return null; - } - break; - } - } - return null; - } - - public static Object getClientProxy(final Object modInstance) throws ReflectiveOperationException { - for(final Field field : modInstance.getClass().getDeclaredFields()) { - if(field.isAnnotationPresent(SidedProxy.class)) { - final SidedProxy sidedProxy = field.getAnnotation(SidedProxy.class); - final Object fieldValue = field.get(modInstance); - try { - final Class clientSideClass = ReflectionUtils.getClass(sidedProxy.clientSide()); - if(clientSideClass.isAssignableFrom(fieldValue.getClass())) { - final Object clientProxy = clientSideClass.cast(fieldValue); - //do what you want with client proxy instance - return clientProxy; - } + } catch (final NoClassDefFoundError err) { + // its client side + return null; + } + break; + } + } + return null; + } - } catch (final NoClassDefFoundError err) { - //its server side - return null; - } - break; - } - } - return null; - } + public static Object getClientProxy(final Object modInstance) throws ReflectiveOperationException { + for (final Field field : modInstance.getClass().getDeclaredFields()) { + if (field.isAnnotationPresent(SidedProxy.class)) { + final SidedProxy sidedProxy = field.getAnnotation(SidedProxy.class); + final Object fieldValue = field.get(modInstance); + try { + final Class clientSideClass = ReflectionUtils.getClass(sidedProxy.clientSide()); + if (clientSideClass.isAssignableFrom(fieldValue.getClass())) { + final Object clientProxy = clientSideClass.cast(fieldValue); + // do what you want with client proxy instance + return clientProxy; + } -} \ No newline at end of file + } catch (final NoClassDefFoundError err) { + // its server side + return null; + } + break; + } + } + return null; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java b/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java index 112c4f1f02..c493ce1aa9 100644 --- a/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java +++ b/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java @@ -1,5 +1,8 @@ package gtPlusPlus.core.util.reflect; +import com.google.common.reflect.ClassPath; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.data.StringUtils; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -15,1115 +18,1070 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; - import org.apache.commons.lang3.ArrayUtils; -import com.google.common.reflect.ClassPath; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.util.data.StringUtils; - public class ReflectionUtils { - public static Map> mCachedClasses = new LinkedHashMap>(); - public static Map mCachedMethods = new LinkedHashMap(); - public static Map mCachedFields = new LinkedHashMap(); - public static Map mCachedConstructors = new LinkedHashMap(); - - private static class CachedConstructor { - - private final Constructor METHOD; - - public CachedConstructor(Constructor aCons) { - METHOD = aCons; - } - - public Constructor get() { - return METHOD; - } - - } - - private static class CachedMethod { - - private final boolean STATIC; - private final Method METHOD; - - public CachedMethod(Method aMethod, boolean isStatic) { - METHOD = aMethod; - STATIC = isStatic; - } - - public Method get() { - return METHOD; - } - - public boolean type() { - return STATIC; - } - - } - - private static class CachedField { - - private final boolean STATIC; - private final Field FIELD; - - public CachedField(Field aField, boolean isStatic) { - FIELD = aField; - STATIC = isStatic; - } - - public Field get() { - return FIELD; - } - - public boolean type() { - return STATIC; - } - - } - - private static boolean cacheClass(Class aClass) { - if (aClass == null) { - return false; - } - Class y = mCachedClasses.get(aClass.getCanonicalName()); - if (y == null) { - mCachedClasses.put(aClass.getCanonicalName(), aClass); - return true; - } - return false; - } - - private static boolean cacheMethod(Class aClass, Method aMethod) { - if (aMethod == null) { - return false; - } - boolean isStatic = Modifier.isStatic(aMethod.getModifiers()); - CachedMethod y = mCachedMethods.get(aClass.getName()+"."+aMethod.getName()+"."+ArrayUtils.toString(aMethod.getParameterTypes())); - if (y == null) { - mCachedMethods.put(aClass.getName()+"."+aMethod.getName()+"."+ArrayUtils.toString(aMethod.getParameterTypes()), new CachedMethod(aMethod, isStatic)); - return true; - } - return false; - } - - private static boolean cacheField(Class aClass, Field aField) { - if (aField == null) { - return false; - } - boolean isStatic = Modifier.isStatic(aField.getModifiers()); - CachedField y = mCachedFields.get(aClass.getName()+"."+aField.getName()); - if (y == null) { - mCachedFields.put(aClass.getName()+"."+aField.getName(), new CachedField(aField, isStatic)); - return true; - } - return false; - } - - private static boolean cacheConstructor(Class aClass, Constructor aConstructor) { - if (aConstructor == null) { - return false; - } - CachedConstructor y = mCachedConstructors.get(aClass.getName()+"."+ArrayUtils.toString(aConstructor.getParameterTypes())); - if (y == null) { - mCachedConstructors.put(aClass.getName()+"."+ArrayUtils.toString(aConstructor.getParameterTypes()), new CachedConstructor(aConstructor)); - return true; - } - return false; - } - - - /** - * Returns a cached {@link Constructor} object. - * @param aClass - Class containing the Constructor. - * @param aTypes - Varags Class Types for objects constructor. - * @return - Valid, non-final, {@link Method} object, or {@link null}. - */ - public static Constructor getConstructor(Class aClass, Class... aTypes) { - if (aClass == null || aTypes == null) { - return null; - } - - String aMethodKey = ArrayUtils.toString(aTypes); - //Logger.REFLECTION("Looking up method in cache: "+(aClass.getName()+"."+aMethodName + "." + aMethodKey)); - CachedConstructor y = mCachedConstructors.get(aClass.getName() + "." + aMethodKey); - if (y == null) { - Constructor u = getConstructor_Internal(aClass, aTypes); - if (u != null) { - Logger.REFLECTION("Caching Constructor: "+aClass.getName() + "." + aMethodKey); - cacheConstructor(aClass, u); - return u; - } else { - return null; - } - } else { - return y.get(); - } - } - - - - - /** - * Returns a cached {@link Class} object. - * @param aClassCanonicalName - The canonical name of the underlying class. - * @return - Valid, {@link Class} object, or {@link null}. - */ - public static Class getClass(String aClassCanonicalName) { - if (aClassCanonicalName == null || aClassCanonicalName.length() <= 0) { - return null; - } - Class y = mCachedClasses.get(aClassCanonicalName); - if (y == null) { - y = getClass_Internal(aClassCanonicalName); - if (y != null) { - Logger.REFLECTION("Caching Class: "+aClassCanonicalName); - cacheClass(y); - } - } - return y; - } - - - - /** - * Returns a cached {@link Method} object. Wraps {@link #getMethod(Class, String, Class...)}. - * @param aObject - Object containing the Method. - * @param aMethodName - Method's name in {@link String} form. - * @param aTypes - Class Array of Types for {@link Method}'s constructor. - * @return - Valid, non-final, {@link Method} object, or {@link null}. - */ - public static Method getMethod(Object aObject, String aMethodName, Class[] aTypes) { - return getMethod(aObject.getClass(), aMethodName, aTypes); - } - - - /** - * Returns a cached {@link Method} object. - * @param aClass - Class containing the Method. - * @param aMethodName - Method's name in {@link String} form. - * @param aTypes - Varags Class Types for {@link Method}'s constructor. - * @return - Valid, non-final, {@link Method} object, or {@link null}. - */ - public static Method getMethod(Class aClass, String aMethodName, Class... aTypes) { - if (aClass == null || aMethodName == null || aMethodName.length() <= 0) { - return null; - } - String aMethodKey = ArrayUtils.toString(aTypes); - //Logger.REFLECTION("Looking up method in cache: "+(aClass.getName()+"."+aMethodName + "." + aMethodKey)); - CachedMethod y = mCachedMethods.get(aClass.getName()+"."+aMethodName + "." + aMethodKey); - if (y == null) { - Method u = getMethod_Internal(aClass, aMethodName, aTypes); - if (u != null) { - Logger.REFLECTION("Caching Method: "+aMethodName + "." + aMethodKey); - cacheMethod(aClass, u); - return u; - } else { - return null; - } - } else { - return y.get(); - } - } - - public static boolean isStaticMethod(Class aClass, String aMethodName, Class... aTypes) { - return isStaticMethod(ReflectionUtils.getMethod(aClass, aMethodName, aTypes)); - } - - public static boolean isStaticMethod(Method aMethod) { - if (aMethod != null && Modifier.isStatic(aMethod.getModifiers())) { - return true; - } - return false; - } - - - - /** - * Returns a cached {@link Field} object. - * @param aClass - Class containing the Method. - * @param aFieldName - Field name in {@link String} form. - * @return - Valid, non-final, {@link Field} object, or {@link null}. - */ - public static Field getField(final Class aClass, final String aFieldName) { - if (aClass == null || aFieldName == null || aFieldName.length() <= 0) { - return null; - } - CachedField y = mCachedFields.get(aClass.getName()+"."+aFieldName); - if (y == null) { - Field u; - try { - u = getField_Internal(aClass, aFieldName); - if (u != null) { - Logger.REFLECTION("Caching Field '"+aFieldName+"' from "+aClass.getName()); - cacheField(aClass, u); - return u; - } - } catch (NoSuchFieldException e) { - } - return null; - - } else { - return y.get(); - } - } - - public static Field[] getAllFields(final Class aClass) { - if (aClass == null) { - return null; - } - Field[] aFields = aClass.getDeclaredFields(); - for (Field f : aFields) { - CachedField y = mCachedFields.get(aClass.getName()+"."+f.getName()); - if (y == null) { - makeFieldAccessible(f); - cacheField(aClass, f); - } - } - return aFields; - } - - /** - * Returns a cached {@link Field} object. - * @param aInstance - {@link Object} to get the field instance from. - * @param aFieldName - Field name in {@link String} form. - * @return - Valid, non-final, {@link Field} object, or {@link null}. - */ - public static T getField(final Object aInstance, final String aFieldName) { - try { - return (T) getField(aInstance.getClass(), aFieldName).get(aInstance); - } catch (IllegalArgumentException | IllegalAccessException e) { - return null; - } - } - - - - - /* - * Utility Functions - */ - - public static boolean doesClassExist(final String classname) { - return isClassPresent(classname); - } - - - /** - * Returns the class of the objects type parameter - * @param o - Object to examine paramters on - * @return - a Class or null - */ - public static Class getTypeOfGenericObject(Object o) { - Class aTypeParam = findSuperClassParameterType(o, o.getClass(), 0); - if (aTypeParam == null) { - aTypeParam = findSubClassParameterType(o, o.getClass(), 0); - } - return aTypeParam; - } - - public static void makeFieldAccessible(final Field field) { - if (!Modifier.isPublic(field.getModifiers()) || - !Modifier.isPublic(field.getDeclaringClass().getModifiers())) - { - field.setAccessible(true); - } - } - - public static void makeMethodAccessible(final Method field) { - if (!Modifier.isPublic(field.getModifiers()) || - !Modifier.isPublic(field.getDeclaringClass().getModifiers())) - { - field.setAccessible(true); - } - } - - /** - * Get the method name for a depth in call stack.
- * Utility function - * @param depth depth in the call stack (0 means current method, 1 means call method, ...) - * @return Method name - */ - public static String getMethodName(final int depth) { - final StackTraceElement[] ste = new Throwable().getStackTrace(); - //System. out.println(ste[ste.length-depth].getClassName()+"#"+ste[ste.length-depth].getMethodName()); - if (ste.length < depth) { - return "No valid stack."; - } - return ste[depth+1].getMethodName(); - } - - - /** - * - * @param aPackageName - The full {@link Package} name in {@link String} form. - * @return - {@link Boolean} object. True if loaded > 0 classes. - */ - public static boolean dynamicallyLoadClassesInPackage(String aPackageName) { - ClassLoader classLoader = ReflectionUtils.class.getClassLoader(); - int loaded = 0; - try { - ClassPath path = ClassPath.from(classLoader); - for (ClassPath.ClassInfo info : path.getTopLevelClassesRecursive(aPackageName)) { - Class clazz = Class.forName(info.getName(), true, classLoader); - if (clazz != null) { - loaded++; - Logger.INFO("Found "+clazz.getCanonicalName()+". ["+loaded+"]"); - } - } - } catch (ClassNotFoundException | IOException e) { - - } - - return loaded > 0; - } - - public static void loadClass(String aClassName) { - try { - Class.forName(aClassName, true, ReflectionUtils.class.getClassLoader()); - } - catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - - - - public static boolean setField(final Object object, final String fieldName, final Object fieldValue) { - Class clazz; - if (object instanceof Class) { - clazz = (Class) object; - } - else { - clazz = object.getClass(); - } - while (clazz != null) { - try { - final Field field = getField(clazz, fieldName); - if (field != null) { - setFieldValue_Internal(object, field, fieldValue); - return true; - } - } catch (final NoSuchFieldException e) { - Logger.REFLECTION("setField("+object.toString()+", "+fieldName+") failed."); - clazz = clazz.getSuperclass(); - } catch (final Exception e) { - Logger.REFLECTION("setField("+object.toString()+", "+fieldName+") failed."); - throw new IllegalStateException(e); - } - } - return false; - - - } - - public static boolean setField(final Object object, final Field field, final Object fieldValue) { - if (field == null) return false; - Class clazz; - if (object instanceof Class) { - clazz = (Class) object; - } - else { - clazz = object.getClass(); - } - while (clazz != null) { - try { - final Field field2 = getField(clazz, field.getName()); - if (field2 != null) { - setFieldValue_Internal(object, field, fieldValue); - return true; - } - } catch (final NoSuchFieldException e) { - Logger.REFLECTION("setField("+object.toString()+", "+field.getName()+") failed."); - clazz = clazz.getSuperclass(); - } catch (final Exception e) { - Logger.REFLECTION("setField("+object.toString()+", "+field.getName()+") failed."); - throw new IllegalStateException(e); - } - } - return false; - } - - - /** - * Allows to change the state of an immutable instance. Huh?!? - */ - public static void setFinalFieldValue(Class clazz, String fieldName, Object newValue) { - Field nameField = getField(clazz, fieldName); - try { - setFieldValue_Internal(clazz, nameField, newValue); - } - catch (Throwable t) { - 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 { - field.setAccessible(true); - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - field.set(null, newValue); - } - - - public static void setByte(Object clazz, String fieldName, byte newValue) throws Exception { - Field nameField = getField(clazz.getClass(), fieldName); - nameField.setAccessible(true); - int modifiers = nameField.getModifiers(); - Field modifierField = nameField.getClass().getDeclaredField("modifiers"); - modifiers = modifiers & ~Modifier.FINAL; - modifierField.setAccessible(true); - modifierField.setInt(nameField, modifiers); - //Utils.LOG_INFO("O-"+(byte) nameField.get(clazz) + " | "+newValue); - nameField.setByte(clazz, newValue); - //Utils.LOG_INFO("N-"+(byte) nameField.get(clazz)); - - /*final Field fieldA = getField(clazz.getClass(), fieldName); - fieldA.setAccessible(true); - fieldA.setByte(clazz, newValue);*/ - - } - - public static boolean invoke(Object objectInstance, String methodName, Class[] parameters, Object[] values){ - if (objectInstance == null || methodName == null || parameters == null || values == null){ - return false; - } - Class mLocalClass = (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+mLocalClass.getCanonicalName()+"."); - try { - Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); - if (mInvokingMethod != null){ - return invoke(objectInstance, mInvokingMethod, values); - } - } - catch (NoSuchMethodException | SecurityException | IllegalArgumentException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+mLocalClass.getName()); - } - - Logger.REFLECTION("Invoke failed or did something wrong."); - return false; - } - - public static boolean invoke(Object objectInstance, Method method, Object[] values){ - if (method == null || values == null || (!ReflectionUtils.isStaticMethod(method) && objectInstance == null)){ - //Logger.REFLECTION("Null value when trying to Dynamically invoke "+methodName+" on an object of type: "+objectInstance.getClass().getName()); - return false; - } - String methodName = method.getName(); - String classname = objectInstance != null ? objectInstance.getClass().getCanonicalName() : method.getDeclaringClass().getCanonicalName(); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+classname+"."); - try { - Method mInvokingMethod = method; - if (mInvokingMethod != null){ - Logger.REFLECTION(methodName+" was not null."); - if ((boolean) mInvokingMethod.invoke(objectInstance, values)){ - Logger.REFLECTION("Successfully invoked "+methodName+"."); - return true; - } - else { - Logger.REFLECTION("Invocation failed for "+methodName+"."); - } - } - } - catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+classname); - } - Logger.REFLECTION("Invoke failed or did something wrong."); - return false; - } - - public static boolean invokeVoid(Object objectInstance, Method method, Object[] values){ - if (method == null || values == null || (!ReflectionUtils.isStaticMethod(method) && objectInstance == null)){ - //Logger.REFLECTION("Null value when trying to Dynamically invoke "+methodName+" on an object of type: "+objectInstance.getClass().getName()); - return false; - } - String methodName = method.getName(); - String classname = objectInstance != null ? objectInstance.getClass().getCanonicalName() : method.getDeclaringClass().getCanonicalName(); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+classname+"."); - try { - Method mInvokingMethod = method; - if (mInvokingMethod != null){ - Logger.REFLECTION(methodName+" was not null."); - mInvokingMethod.invoke(objectInstance, values); - Logger.REFLECTION("Successfully invoked "+methodName+"."); - return true; - } - } - catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+classname); - } - Logger.REFLECTION("Invoke failed or did something wrong."); - return false; - } - - public static boolean invokeVoid(Object objectInstance, String methodName, Class[] parameters, Object[] values){ - if (objectInstance == null || methodName == null || parameters == null || values == null){ - return false; - } - Class mLocalClass = (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+mLocalClass.getCanonicalName()+"."); - try { - Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); - if (mInvokingMethod != null){ - Logger.REFLECTION(methodName+" was not null."); - mInvokingMethod.invoke(objectInstance, values); - Logger.REFLECTION("Successfully invoked "+methodName+"."); - return true; - } - else { - Logger.REFLECTION(methodName+" is null."); - } - } - catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+mLocalClass.getName()); - } - - Logger.REFLECTION("Invoke failed or did something wrong."); - return false; - } - - - public static Object invokeNonBool(Object objectInstance, Method method, Object[] values){ - if ((!ReflectionUtils.isStaticMethod(method) && objectInstance == null) || method == null || values == null){ - return false; - } - String methodName = method.getName(); - String classname = objectInstance != null ? objectInstance.getClass().getCanonicalName() : method.getDeclaringClass().getCanonicalName(); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+classname+"."); - try { - return method.invoke(objectInstance, values); - } - catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+classname); - } - - Logger.REFLECTION("Invoke failed or did something wrong."); - return null; - } - - public static Object invokeNonBool(Object objectInstance, String methodName, Class[] parameters, Object[] values){ - if (objectInstance == null || methodName == null || parameters == null || values == null){ - return false; - } - Class mLocalClass = (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); - Logger.REFLECTION("Trying to invoke "+methodName+" on an instance of "+mLocalClass.getCanonicalName()+"."); - try { - Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); - if (mInvokingMethod != null){ - Logger.REFLECTION(methodName+" was not null."); - return mInvokingMethod.invoke(objectInstance, values); - } - else { - Logger.REFLECTION(methodName+" is null."); - } - } - catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Logger.REFLECTION("Failed to Dynamically invoke "+methodName+" on an object of type: "+mLocalClass.getName()); - } - - Logger.REFLECTION("Invoke failed or did something wrong."); - return null; - } - - - - - - - - - - - - - - - - - - - - - - /* - * Internal Magic that probably should not get exposed. - */ - - - - - - - - - - /* - * - * Below Code block is used for determining generic types associated with type - * - */ - - - //https://xebia.com/blog/acessing-generic-types-at-runtime-in-java/ - //https://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html - public static Class findSuperClassParameterType(Object instance, Class classOfInterest, int parameterIndex) { - Class subClass = instance.getClass(); - while (classOfInterest != subClass.getSuperclass()) { - // instance.getClass() is no subclass of classOfInterest or instance is a direct instance of classOfInterest - subClass = subClass.getSuperclass(); - if (subClass == null) { - return null; - } - } - ParameterizedType parameterizedType = (ParameterizedType) subClass.getGenericSuperclass(); - Class aReturn; - aReturn = (Class) parameterizedType.getActualTypeArguments()[parameterIndex]; - return aReturn; - } - - public static Class findSubClassParameterType(Object instance, Class classOfInterest, int parameterIndex) { - Map typeMap = new HashMap(); - Class instanceClass = instance.getClass(); - while (classOfInterest != instanceClass.getSuperclass()) { - extractTypeArguments(typeMap, instanceClass); - instanceClass = instanceClass.getSuperclass(); - if (instanceClass == null) { - return null; - } - } - - ParameterizedType parameterizedType = (ParameterizedType) instanceClass.getGenericSuperclass(); - Type actualType = parameterizedType.getActualTypeArguments()[parameterIndex]; - if (typeMap.containsKey(actualType)) { - actualType = typeMap.get(actualType); - } - if (actualType instanceof Class) { - return (Class) actualType; - } else if (actualType instanceof TypeVariable) { - return browseNestedTypes(instance, (TypeVariable) actualType); - } else { - return null; - } - } - - private static void extractTypeArguments(Map typeMap, Class clazz) { - Type genericSuperclass = clazz.getGenericSuperclass(); - if (!(genericSuperclass instanceof ParameterizedType)) { - return; - } - - ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; - Type[] typeParameter = ((Class) parameterizedType.getRawType()).getTypeParameters(); - Type[] actualTypeArgument = parameterizedType.getActualTypeArguments(); - for (int i = 0; i < typeParameter.length; i++) { - if(typeMap.containsKey(actualTypeArgument[i])) { - actualTypeArgument[i] = typeMap.get(actualTypeArgument[i]); - } - typeMap.put(typeParameter[i], actualTypeArgument[i]); - } - } - - private static Class browseNestedTypes(Object instance, TypeVariable actualType) { - Class instanceClass = instance.getClass(); - List> nestedOuterTypes = new LinkedList>(); - for (Class enclosingClass = instanceClass - .getEnclosingClass(); enclosingClass != null; enclosingClass = enclosingClass.getEnclosingClass()) { - try { - Field this$0 = instanceClass.getDeclaredField("this$0"); - Object outerInstance = this$0.get(instance); - Class outerClass = outerInstance.getClass(); - nestedOuterTypes.add(outerClass); - Map outerTypeMap = new HashMap(); - extractTypeArguments(outerTypeMap, outerClass); - for (Map.Entry entry : outerTypeMap.entrySet()) { - if (!(entry.getKey() instanceof TypeVariable)) { - continue; - } - TypeVariable foundType = (TypeVariable) entry.getKey(); - if (foundType.getName().equals(actualType.getName()) - && isInnerClass(foundType.getGenericDeclaration(), actualType.getGenericDeclaration())) { - if (entry.getValue() instanceof Class) { - return (Class) entry.getValue(); - } - actualType = (TypeVariable) entry.getValue(); - } - } - } catch (NoSuchFieldException | IllegalAccessException e) { - - } - - } - return null; - } - - private static boolean isInnerClass(GenericDeclaration outerDeclaration, GenericDeclaration innerDeclaration) { - if (!(outerDeclaration instanceof Class) || !(innerDeclaration instanceof Class)) { - return false; - } - Class outerClass = (Class) outerDeclaration; - Class innerClass = (Class) innerDeclaration; - while ((innerClass = innerClass.getEnclosingClass()) != null) { - if (innerClass == outerClass) { - return true; - } - } - return false; - } - - - /* - * - * End of Generics Block - * - */ - - - - private static Field getField_Internal(final Class clazz, final String fieldName) throws NoSuchFieldException { - try { - Logger.REFLECTION("Field: Internal Lookup: "+fieldName); - Field k = clazz.getDeclaredField(fieldName); - makeFieldAccessible(k); - //Logger.REFLECTION("Got Field from Class. "+fieldName+" did exist within "+clazz.getCanonicalName()+"."); - return k; - } catch (final NoSuchFieldException e) { - Logger.REFLECTION("Field: Internal Lookup Failed: "+fieldName); - final Class superClass = clazz.getSuperclass(); - if (superClass == null) { - Logger.REFLECTION("Unable to find field '"+fieldName+"'"); - //Logger.REFLECTION("Failed to get Field from Class. "+fieldName+" does not existing within "+clazz.getCanonicalName()+"."); - throw e; - } - Logger.REFLECTION("Method: Recursion Lookup: "+fieldName+" - Checking in "+superClass.getName()); - //Logger.REFLECTION("Failed to get Field from Class. "+fieldName+" does not existing within "+clazz.getCanonicalName()+". Trying super class."); - return getField_Internal(superClass, fieldName); - } - } - - /** - * if (isPresent("com.optionaldependency.DependencyClass")) || - * This block will never execute when the dependency is not present. There is - * therefore no more risk of code throwing NoClassDefFoundException. - */ - private static boolean isClassPresent(final String className) { - try { - Class.forName(className); - return true; - } catch (final Throwable ex) { - // Class or one of its dependencies is not present... - return false; - } - } - - @Deprecated - public static Method getMethodViaReflection(final Class lookupClass, final String methodName, - final boolean invoke) throws Exception { - final Class lookup = lookupClass.getClass(); - final Method m = lookup.getDeclaredMethod(methodName); - m.setAccessible(true);// Abracadabra - if (invoke) { - m.invoke(lookup);// now its OK - } - return m; - } - - private static Method getMethod_Internal(Class aClass, String aMethodName, Class... aTypes) { - Method m = null; - try { - Logger.REFLECTION("Method: Internal Lookup: "+aMethodName); - m = aClass.getDeclaredMethod(aMethodName, aTypes); - if (m != null) { - m.setAccessible(true); - int modifiers = m.getModifiers(); - Field modifierField = m.getClass().getDeclaredField("modifiers"); - modifiers = modifiers & ~Modifier.FINAL; - modifierField.setAccessible(true); - modifierField.setInt(m, modifiers); - } - } - catch (Throwable t) { - Logger.REFLECTION("Method: Internal Lookup Failed: "+aMethodName); - try { - m = getMethodRecursively(aClass, aMethodName); - } catch (NoSuchMethodException e) { - Logger.REFLECTION("Unable to find method '"+aMethodName+"'"); - e.printStackTrace(); - dumpClassInfo(aClass); - } - } - return m; - } - - private static Constructor getConstructor_Internal(Class aClass, Class... aTypes) { - Constructor c = null; - try { - Logger.REFLECTION("Constructor: Internal Lookup: "+aClass.getName()); - c = aClass.getDeclaredConstructor(aTypes); - if (c != null) { - c.setAccessible(true); - int modifiers = c.getModifiers(); - Field modifierField = c.getClass().getDeclaredField("modifiers"); - modifiers = modifiers & ~Modifier.FINAL; - modifierField.setAccessible(true); - modifierField.setInt(c, modifiers); - } - } - catch (Throwable t) { - Logger.REFLECTION("Constructor: Internal Lookup Failed: "+aClass.getName()); - try { - c = getConstructorRecursively(aClass, aTypes); - } catch (Exception e) { - Logger.REFLECTION("Unable to find method '"+aClass.getName()+"'"); - e.printStackTrace(); - dumpClassInfo(aClass); - } - } - return c; - } - - private static Constructor getConstructorRecursively(Class aClass, Class... aTypes) throws Exception { - try { - Logger.REFLECTION("Constructor: Recursion Lookup: "+aClass.getName()); - Constructor c = aClass.getConstructor(aTypes); - if (c != null) { - c.setAccessible(true); - int modifiers = c.getModifiers(); - Field modifierField = c.getClass().getDeclaredField("modifiers"); - modifiers = modifiers & ~Modifier.FINAL; - modifierField.setAccessible(true); - modifierField.setInt(c, modifiers); - } - return c; - } catch (final NoSuchMethodException | IllegalArgumentException | IllegalAccessException e) { - final Class superClass = aClass.getSuperclass(); - if (superClass == null || superClass == Object.class) { - throw e; - } - return getConstructor_Internal(superClass, aTypes); - } - } - - private static Method getMethodRecursively(final Class clazz, final String aMethodName) throws NoSuchMethodException { - try { - Logger.REFLECTION("Method: Recursion Lookup: "+aMethodName); - Method k = clazz.getDeclaredMethod(aMethodName); - makeMethodAccessible(k); - return k; - } catch (final NoSuchMethodException e) { - final Class superClass = clazz.getSuperclass(); - if (superClass == null || superClass == Object.class) { - throw e; - } - return getMethod_Internal(superClass, aMethodName); - } - } - - private static void dumpClassInfo(Class aClass) { - Logger.INFO("We ran into an error processing reflection in "+aClass.getName()+", dumping all data for debugging."); - // Get the methods - Method[] methods = aClass.getDeclaredMethods(); - Field[] fields = aClass.getDeclaredFields(); - Constructor[] consts = aClass.getDeclaredConstructors(); - - Logger.INFO("Dumping all Methods."); - for (Method method : methods) { - System.out.println(method.getName()+" | "+StringUtils.getDataStringFromArray(method.getParameterTypes())); - } - Logger.INFO("Dumping all Fields."); - for (Field f : fields) { - System.out.println(f.getName()); - } - Logger.INFO("Dumping all Constructors."); - for (Constructor c : consts) { - System.out.println(c.getName()+" | "+c.getParameterCount()+" | "+StringUtils.getDataStringFromArray(c.getParameterTypes())); - } - } - - private static Class getNonPublicClass(final String className) { - Class c = null; - try { - c = Class.forName(className); - } catch (final ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - // full package name --------^^^^^^^^^^ - // or simpler without Class.forName: - // Class c = package1.A.class; - - if (null != c) { - // In our case we need to use - Constructor constructor = null; - try { - constructor = c.getDeclaredConstructor(); - } catch (NoSuchMethodException | SecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - // note: getConstructor() can return only public constructors - // so we needed to search for any Declared constructor - - // now we need to make this constructor accessible - if (null != constructor) { - constructor.setAccessible(true);// ABRACADABRA! - - try { - final Object o = constructor.newInstance(); - return (Class) o; - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - return null; - } - - private static Class getClass_Internal(String string) { - Class aClass = null; - if (ReflectionUtils.doesClassExist(string)) { - try { - aClass = Class.forName(string); - } - catch (ClassNotFoundException e) { - aClass = getNonPublicClass(string); - } - } - - if (aClass == null) { - String aClassName = ""; - Logger.REFLECTION("Splitting "+string+" to try look for hidden classes."); - String[] aData = string.split("\\."); - Logger.REFLECTION("Obtained "+aData.length+" pieces."); - for (int i=0;i<(aData.length-1);i++) { - aClassName += (i > 0) ? "."+aData[i] : ""+aData[i]; - Logger.REFLECTION("Building: "+aClassName); - } - if (aClassName != null && aClassName.length() > 0) { - Logger.REFLECTION("Trying to search '"+aClassName+"' for inner classes."); - Class clazz = ReflectionUtils.getClass(aClassName); - if (clazz != null) { - Class[] y = clazz.getDeclaredClasses(); - if (y == null || y.length <= 0) { - Logger.REFLECTION("No hidden inner classes found."); - return null; - } - else { - boolean found = false; - for (Class h : y) { - Logger.REFLECTION("Found hidden inner class: "+h.getCanonicalName()); - if (h.getSimpleName().toLowerCase().equals(aData[aData.length-1].toLowerCase())) { - Logger.REFLECTION("Found correct class. ["+aData[aData.length-1]+"] Caching at correct location: "+string); - Logger.REFLECTION("Found at location: "+h.getCanonicalName()); - ReflectionUtils.mCachedClasses.put(string, h); - aClass = h; - found = true; - break; - } - } - if (!found) { - return null; - } - } - } - else { - return null; - } - } - else { - return null; - } - } - return aClass; - } - - /** - * - * Set the value of a field reflectively. - */ - private static void setFieldValue_Internal(Object owner, Field field, Object value) throws Exception { - makeModifiable(field); - field.set(owner, value); - } - - /** - * Force the field to be modifiable and accessible. - */ - private static void makeModifiable(Field nameField) throws Exception { - nameField.setAccessible(true); - Field modifiers = getField(Field.class, "modifiers"); - modifiers.setAccessible(true); - modifiers.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL); - } - - - public static boolean doesFieldExist(String clazz, String string) { - return doesFieldExist(ReflectionUtils.getClass(clazz), string); - } - - public static boolean doesFieldExist(Class clazz, String string) { - if (clazz != null) { - if (ReflectionUtils.getField(clazz, string) != null) { - return true; - } - } - return false; - } - - public static T getFieldValue(Field field) { - return getFieldValue(field, null); - } - - public static T getFieldValue(Field field, Object instance) { - try { - return (T) field.get(instance); - } catch (IllegalArgumentException | IllegalAccessException e) { - } - return null; - } - - public static T createNewInstanceFromConstructor(Constructor aConstructor, Object[] aArgs) { - T aInstance; - try { - aInstance = (T) aConstructor.newInstance(aArgs); - if (aInstance != null) { - return aInstance; - } - } - catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - e.printStackTrace(); - } - return null; - } - - public static Enum getEnum(Class sgtbees, String name) { - if (sgtbees.isEnum()) { - Object[] aValues = sgtbees.getEnumConstants(); - for (Object o : aValues) { - if (o.toString().toLowerCase().equals(name.toLowerCase())) { - return (Enum) o; - } - } - } - return null; - } - - + public static Map> mCachedClasses = new LinkedHashMap>(); + public static Map mCachedMethods = new LinkedHashMap(); + public static Map mCachedFields = new LinkedHashMap(); + public static Map mCachedConstructors = new LinkedHashMap(); + + private static class CachedConstructor { + + private final Constructor METHOD; + + public CachedConstructor(Constructor aCons) { + METHOD = aCons; + } + + public Constructor get() { + return METHOD; + } + } + + private static class CachedMethod { + + private final boolean STATIC; + private final Method METHOD; + + public CachedMethod(Method aMethod, boolean isStatic) { + METHOD = aMethod; + STATIC = isStatic; + } + + public Method get() { + return METHOD; + } + + public boolean type() { + return STATIC; + } + } + + private static class CachedField { + + private final boolean STATIC; + private final Field FIELD; + + public CachedField(Field aField, boolean isStatic) { + FIELD = aField; + STATIC = isStatic; + } + + public Field get() { + return FIELD; + } + + public boolean type() { + return STATIC; + } + } + + private static boolean cacheClass(Class aClass) { + if (aClass == null) { + return false; + } + Class y = mCachedClasses.get(aClass.getCanonicalName()); + if (y == null) { + mCachedClasses.put(aClass.getCanonicalName(), aClass); + return true; + } + return false; + } + + private static boolean cacheMethod(Class aClass, Method aMethod) { + if (aMethod == null) { + return false; + } + boolean isStatic = Modifier.isStatic(aMethod.getModifiers()); + CachedMethod y = mCachedMethods.get( + aClass.getName() + "." + aMethod.getName() + "." + ArrayUtils.toString(aMethod.getParameterTypes())); + if (y == null) { + mCachedMethods.put( + aClass.getName() + "." + aMethod.getName() + "." + ArrayUtils.toString(aMethod.getParameterTypes()), + new CachedMethod(aMethod, isStatic)); + return true; + } + return false; + } + + private static boolean cacheField(Class aClass, Field aField) { + if (aField == null) { + return false; + } + boolean isStatic = Modifier.isStatic(aField.getModifiers()); + CachedField y = mCachedFields.get(aClass.getName() + "." + aField.getName()); + if (y == null) { + mCachedFields.put(aClass.getName() + "." + aField.getName(), new CachedField(aField, isStatic)); + return true; + } + return false; + } + + private static boolean cacheConstructor(Class aClass, Constructor aConstructor) { + if (aConstructor == null) { + return false; + } + CachedConstructor y = + mCachedConstructors.get(aClass.getName() + "." + ArrayUtils.toString(aConstructor.getParameterTypes())); + if (y == null) { + mCachedConstructors.put( + aClass.getName() + "." + ArrayUtils.toString(aConstructor.getParameterTypes()), + new CachedConstructor(aConstructor)); + return true; + } + return false; + } + + /** + * Returns a cached {@link Constructor} object. + * @param aClass - Class containing the Constructor. + * @param aTypes - Varags Class Types for objects constructor. + * @return - Valid, non-final, {@link Method} object, or {@link null}. + */ + public static Constructor getConstructor(Class aClass, Class... aTypes) { + if (aClass == null || aTypes == null) { + return null; + } + + String aMethodKey = ArrayUtils.toString(aTypes); + // Logger.REFLECTION("Looking up method in cache: "+(aClass.getName()+"."+aMethodName + "." + aMethodKey)); + CachedConstructor y = mCachedConstructors.get(aClass.getName() + "." + aMethodKey); + if (y == null) { + Constructor u = getConstructor_Internal(aClass, aTypes); + if (u != null) { + Logger.REFLECTION("Caching Constructor: " + aClass.getName() + "." + aMethodKey); + cacheConstructor(aClass, u); + return u; + } else { + return null; + } + } else { + return y.get(); + } + } + + /** + * Returns a cached {@link Class} object. + * @param aClassCanonicalName - The canonical name of the underlying class. + * @return - Valid, {@link Class} object, or {@link null}. + */ + public static Class getClass(String aClassCanonicalName) { + if (aClassCanonicalName == null || aClassCanonicalName.length() <= 0) { + return null; + } + Class y = mCachedClasses.get(aClassCanonicalName); + if (y == null) { + y = getClass_Internal(aClassCanonicalName); + if (y != null) { + Logger.REFLECTION("Caching Class: " + aClassCanonicalName); + cacheClass(y); + } + } + return y; + } + + /** + * Returns a cached {@link Method} object. Wraps {@link #getMethod(Class, String, Class...)}. + * @param aObject - Object containing the Method. + * @param aMethodName - Method's name in {@link String} form. + * @param aTypes - Class Array of Types for {@link Method}'s constructor. + * @return - Valid, non-final, {@link Method} object, or {@link null}. + */ + public static Method getMethod(Object aObject, String aMethodName, Class[] aTypes) { + return getMethod(aObject.getClass(), aMethodName, aTypes); + } + + /** + * Returns a cached {@link Method} object. + * @param aClass - Class containing the Method. + * @param aMethodName - Method's name in {@link String} form. + * @param aTypes - Varags Class Types for {@link Method}'s constructor. + * @return - Valid, non-final, {@link Method} object, or {@link null}. + */ + public static Method getMethod(Class aClass, String aMethodName, Class... aTypes) { + if (aClass == null || aMethodName == null || aMethodName.length() <= 0) { + return null; + } + String aMethodKey = ArrayUtils.toString(aTypes); + // Logger.REFLECTION("Looking up method in cache: "+(aClass.getName()+"."+aMethodName + "." + aMethodKey)); + CachedMethod y = mCachedMethods.get(aClass.getName() + "." + aMethodName + "." + aMethodKey); + if (y == null) { + Method u = getMethod_Internal(aClass, aMethodName, aTypes); + if (u != null) { + Logger.REFLECTION("Caching Method: " + aMethodName + "." + aMethodKey); + cacheMethod(aClass, u); + return u; + } else { + return null; + } + } else { + return y.get(); + } + } + + public static boolean isStaticMethod(Class aClass, String aMethodName, Class... aTypes) { + return isStaticMethod(ReflectionUtils.getMethod(aClass, aMethodName, aTypes)); + } + + public static boolean isStaticMethod(Method aMethod) { + if (aMethod != null && Modifier.isStatic(aMethod.getModifiers())) { + return true; + } + return false; + } + + /** + * Returns a cached {@link Field} object. + * @param aClass - Class containing the Method. + * @param aFieldName - Field name in {@link String} form. + * @return - Valid, non-final, {@link Field} object, or {@link null}. + */ + public static Field getField(final Class aClass, final String aFieldName) { + if (aClass == null || aFieldName == null || aFieldName.length() <= 0) { + return null; + } + CachedField y = mCachedFields.get(aClass.getName() + "." + aFieldName); + if (y == null) { + Field u; + try { + u = getField_Internal(aClass, aFieldName); + if (u != null) { + Logger.REFLECTION("Caching Field '" + aFieldName + "' from " + aClass.getName()); + cacheField(aClass, u); + return u; + } + } catch (NoSuchFieldException e) { + } + return null; + + } else { + return y.get(); + } + } + + public static Field[] getAllFields(final Class aClass) { + if (aClass == null) { + return null; + } + Field[] aFields = aClass.getDeclaredFields(); + for (Field f : aFields) { + CachedField y = mCachedFields.get(aClass.getName() + "." + f.getName()); + if (y == null) { + makeFieldAccessible(f); + cacheField(aClass, f); + } + } + return aFields; + } + + /** + * Returns a cached {@link Field} object. + * @param aInstance - {@link Object} to get the field instance from. + * @param aFieldName - Field name in {@link String} form. + * @return - Valid, non-final, {@link Field} object, or {@link null}. + */ + public static T getField(final Object aInstance, final String aFieldName) { + try { + return (T) getField(aInstance.getClass(), aFieldName).get(aInstance); + } catch (IllegalArgumentException | IllegalAccessException e) { + return null; + } + } + + /* + * Utility Functions + */ + + public static boolean doesClassExist(final String classname) { + return isClassPresent(classname); + } + + /** + * Returns the class of the objects type parameter + * @param o - Object to examine paramters on + * @return - a Class or null + */ + public static Class getTypeOfGenericObject(Object o) { + Class aTypeParam = findSuperClassParameterType(o, o.getClass(), 0); + if (aTypeParam == null) { + aTypeParam = findSubClassParameterType(o, o.getClass(), 0); + } + return aTypeParam; + } + + public static void makeFieldAccessible(final Field field) { + if (!Modifier.isPublic(field.getModifiers()) + || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) { + field.setAccessible(true); + } + } + + public static void makeMethodAccessible(final Method field) { + if (!Modifier.isPublic(field.getModifiers()) + || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) { + field.setAccessible(true); + } + } + + /** + * Get the method name for a depth in call stack.
+ * Utility function + * @param depth depth in the call stack (0 means current method, 1 means call method, ...) + * @return Method name + */ + public static String getMethodName(final int depth) { + final StackTraceElement[] ste = new Throwable().getStackTrace(); + // System. out.println(ste[ste.length-depth].getClassName()+"#"+ste[ste.length-depth].getMethodName()); + if (ste.length < depth) { + return "No valid stack."; + } + return ste[depth + 1].getMethodName(); + } + + /** + * + * @param aPackageName - The full {@link Package} name in {@link String} form. + * @return - {@link Boolean} object. True if loaded > 0 classes. + */ + public static boolean dynamicallyLoadClassesInPackage(String aPackageName) { + ClassLoader classLoader = ReflectionUtils.class.getClassLoader(); + int loaded = 0; + try { + ClassPath path = ClassPath.from(classLoader); + for (ClassPath.ClassInfo info : path.getTopLevelClassesRecursive(aPackageName)) { + Class clazz = Class.forName(info.getName(), true, classLoader); + if (clazz != null) { + loaded++; + Logger.INFO("Found " + clazz.getCanonicalName() + ". [" + loaded + "]"); + } + } + } catch (ClassNotFoundException | IOException e) { + + } + + return loaded > 0; + } + + public static void loadClass(String aClassName) { + try { + Class.forName(aClassName, true, ReflectionUtils.class.getClassLoader()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static boolean setField(final Object object, final String fieldName, final Object fieldValue) { + Class clazz; + if (object instanceof Class) { + clazz = (Class) object; + } else { + clazz = object.getClass(); + } + while (clazz != null) { + try { + final Field field = getField(clazz, fieldName); + if (field != null) { + setFieldValue_Internal(object, field, fieldValue); + return true; + } + } catch (final NoSuchFieldException e) { + Logger.REFLECTION("setField(" + object.toString() + ", " + fieldName + ") failed."); + clazz = clazz.getSuperclass(); + } catch (final Exception e) { + Logger.REFLECTION("setField(" + object.toString() + ", " + fieldName + ") failed."); + throw new IllegalStateException(e); + } + } + return false; + } + + public static boolean setField(final Object object, final Field field, final Object fieldValue) { + if (field == null) return false; + Class clazz; + if (object instanceof Class) { + clazz = (Class) object; + } else { + clazz = object.getClass(); + } + while (clazz != null) { + try { + final Field field2 = getField(clazz, field.getName()); + if (field2 != null) { + setFieldValue_Internal(object, field, fieldValue); + return true; + } + } catch (final NoSuchFieldException e) { + Logger.REFLECTION("setField(" + object.toString() + ", " + field.getName() + ") failed."); + clazz = clazz.getSuperclass(); + } catch (final Exception e) { + Logger.REFLECTION("setField(" + object.toString() + ", " + field.getName() + ") failed."); + throw new IllegalStateException(e); + } + } + return false; + } + + /** + * Allows to change the state of an immutable instance. Huh?!? + */ + public static void setFinalFieldValue(Class clazz, String fieldName, Object newValue) { + Field nameField = getField(clazz, fieldName); + try { + setFieldValue_Internal(clazz, nameField, newValue); + } catch (Throwable t) { + 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 { + field.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + field.set(null, newValue); + } + + public static void setByte(Object clazz, String fieldName, byte newValue) throws Exception { + Field nameField = getField(clazz.getClass(), fieldName); + nameField.setAccessible(true); + int modifiers = nameField.getModifiers(); + Field modifierField = nameField.getClass().getDeclaredField("modifiers"); + modifiers = modifiers & ~Modifier.FINAL; + modifierField.setAccessible(true); + modifierField.setInt(nameField, modifiers); + // Utils.LOG_INFO("O-"+(byte) nameField.get(clazz) + " | "+newValue); + nameField.setByte(clazz, newValue); + // Utils.LOG_INFO("N-"+(byte) nameField.get(clazz)); + + /*final Field fieldA = getField(clazz.getClass(), fieldName); + fieldA.setAccessible(true); + fieldA.setByte(clazz, newValue);*/ + + } + + public static boolean invoke(Object objectInstance, String methodName, Class[] parameters, Object[] values) { + if (objectInstance == null || methodName == null || parameters == null || values == null) { + return false; + } + Class mLocalClass = + (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); + Logger.REFLECTION( + "Trying to invoke " + methodName + " on an instance of " + mLocalClass.getCanonicalName() + "."); + try { + Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); + if (mInvokingMethod != null) { + return invoke(objectInstance, mInvokingMethod, values); + } + } catch (NoSuchMethodException | SecurityException | IllegalArgumentException e) { + Logger.REFLECTION( + "Failed to Dynamically invoke " + methodName + " on an object of type: " + mLocalClass.getName()); + } + + Logger.REFLECTION("Invoke failed or did something wrong."); + return false; + } + + public static boolean invoke(Object objectInstance, Method method, Object[] values) { + if (method == null || values == null || (!ReflectionUtils.isStaticMethod(method) && objectInstance == null)) { + // Logger.REFLECTION("Null value when trying to Dynamically invoke "+methodName+" on an object of type: + // "+objectInstance.getClass().getName()); + return false; + } + String methodName = method.getName(); + String classname = objectInstance != null + ? objectInstance.getClass().getCanonicalName() + : method.getDeclaringClass().getCanonicalName(); + Logger.REFLECTION("Trying to invoke " + methodName + " on an instance of " + classname + "."); + try { + Method mInvokingMethod = method; + if (mInvokingMethod != null) { + Logger.REFLECTION(methodName + " was not null."); + if ((boolean) mInvokingMethod.invoke(objectInstance, values)) { + Logger.REFLECTION("Successfully invoked " + methodName + "."); + return true; + } else { + Logger.REFLECTION("Invocation failed for " + methodName + "."); + } + } + } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Logger.REFLECTION("Failed to Dynamically invoke " + methodName + " on an object of type: " + classname); + } + Logger.REFLECTION("Invoke failed or did something wrong."); + return false; + } + + public static boolean invokeVoid(Object objectInstance, Method method, Object[] values) { + if (method == null || values == null || (!ReflectionUtils.isStaticMethod(method) && objectInstance == null)) { + // Logger.REFLECTION("Null value when trying to Dynamically invoke "+methodName+" on an object of type: + // "+objectInstance.getClass().getName()); + return false; + } + String methodName = method.getName(); + String classname = objectInstance != null + ? objectInstance.getClass().getCanonicalName() + : method.getDeclaringClass().getCanonicalName(); + Logger.REFLECTION("Trying to invoke " + methodName + " on an instance of " + classname + "."); + try { + Method mInvokingMethod = method; + if (mInvokingMethod != null) { + Logger.REFLECTION(methodName + " was not null."); + mInvokingMethod.invoke(objectInstance, values); + Logger.REFLECTION("Successfully invoked " + methodName + "."); + return true; + } + } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Logger.REFLECTION("Failed to Dynamically invoke " + methodName + " on an object of type: " + classname); + } + Logger.REFLECTION("Invoke failed or did something wrong."); + return false; + } + + public static boolean invokeVoid(Object objectInstance, String methodName, Class[] parameters, Object[] values) { + if (objectInstance == null || methodName == null || parameters == null || values == null) { + return false; + } + Class mLocalClass = + (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); + Logger.REFLECTION( + "Trying to invoke " + methodName + " on an instance of " + mLocalClass.getCanonicalName() + "."); + try { + Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); + if (mInvokingMethod != null) { + Logger.REFLECTION(methodName + " was not null."); + mInvokingMethod.invoke(objectInstance, values); + Logger.REFLECTION("Successfully invoked " + methodName + "."); + return true; + } else { + Logger.REFLECTION(methodName + " is null."); + } + } catch (NoSuchMethodException + | SecurityException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + Logger.REFLECTION( + "Failed to Dynamically invoke " + methodName + " on an object of type: " + mLocalClass.getName()); + } + + Logger.REFLECTION("Invoke failed or did something wrong."); + return false; + } + + public static Object invokeNonBool(Object objectInstance, Method method, Object[] values) { + if ((!ReflectionUtils.isStaticMethod(method) && objectInstance == null) || method == null || values == null) { + return false; + } + String methodName = method.getName(); + String classname = objectInstance != null + ? objectInstance.getClass().getCanonicalName() + : method.getDeclaringClass().getCanonicalName(); + Logger.REFLECTION("Trying to invoke " + methodName + " on an instance of " + classname + "."); + try { + return method.invoke(objectInstance, values); + } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Logger.REFLECTION("Failed to Dynamically invoke " + methodName + " on an object of type: " + classname); + } + + Logger.REFLECTION("Invoke failed or did something wrong."); + return null; + } + + public static Object invokeNonBool(Object objectInstance, String methodName, Class[] parameters, Object[] values) { + if (objectInstance == null || methodName == null || parameters == null || values == null) { + return false; + } + Class mLocalClass = + (objectInstance instanceof Class ? (Class) objectInstance : objectInstance.getClass()); + Logger.REFLECTION( + "Trying to invoke " + methodName + " on an instance of " + mLocalClass.getCanonicalName() + "."); + try { + Method mInvokingMethod = mLocalClass.getDeclaredMethod(methodName, parameters); + if (mInvokingMethod != null) { + Logger.REFLECTION(methodName + " was not null."); + return mInvokingMethod.invoke(objectInstance, values); + } else { + Logger.REFLECTION(methodName + " is null."); + } + } catch (NoSuchMethodException + | SecurityException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + Logger.REFLECTION( + "Failed to Dynamically invoke " + methodName + " on an object of type: " + mLocalClass.getName()); + } + + Logger.REFLECTION("Invoke failed or did something wrong."); + return null; + } + + /* + * Internal Magic that probably should not get exposed. + */ + + /* + * + * Below Code block is used for determining generic types associated with type + * + */ + + // https://xebia.com/blog/acessing-generic-types-at-runtime-in-java/ + // https://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html + public static Class findSuperClassParameterType(Object instance, Class classOfInterest, int parameterIndex) { + Class subClass = instance.getClass(); + while (classOfInterest != subClass.getSuperclass()) { + // instance.getClass() is no subclass of classOfInterest or instance is a direct instance of classOfInterest + subClass = subClass.getSuperclass(); + if (subClass == null) { + return null; + } + } + ParameterizedType parameterizedType = (ParameterizedType) subClass.getGenericSuperclass(); + Class aReturn; + aReturn = (Class) parameterizedType.getActualTypeArguments()[parameterIndex]; + return aReturn; + } + + public static Class findSubClassParameterType(Object instance, Class classOfInterest, int parameterIndex) { + Map typeMap = new HashMap(); + Class instanceClass = instance.getClass(); + while (classOfInterest != instanceClass.getSuperclass()) { + extractTypeArguments(typeMap, instanceClass); + instanceClass = instanceClass.getSuperclass(); + if (instanceClass == null) { + return null; + } + } + + ParameterizedType parameterizedType = (ParameterizedType) instanceClass.getGenericSuperclass(); + Type actualType = parameterizedType.getActualTypeArguments()[parameterIndex]; + if (typeMap.containsKey(actualType)) { + actualType = typeMap.get(actualType); + } + if (actualType instanceof Class) { + return (Class) actualType; + } else if (actualType instanceof TypeVariable) { + return browseNestedTypes(instance, (TypeVariable) actualType); + } else { + return null; + } + } + + private static void extractTypeArguments(Map typeMap, Class clazz) { + Type genericSuperclass = clazz.getGenericSuperclass(); + if (!(genericSuperclass instanceof ParameterizedType)) { + return; + } + + ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; + Type[] typeParameter = ((Class) parameterizedType.getRawType()).getTypeParameters(); + Type[] actualTypeArgument = parameterizedType.getActualTypeArguments(); + for (int i = 0; i < typeParameter.length; i++) { + if (typeMap.containsKey(actualTypeArgument[i])) { + actualTypeArgument[i] = typeMap.get(actualTypeArgument[i]); + } + typeMap.put(typeParameter[i], actualTypeArgument[i]); + } + } + + private static Class browseNestedTypes(Object instance, TypeVariable actualType) { + Class instanceClass = instance.getClass(); + List> nestedOuterTypes = new LinkedList>(); + for (Class enclosingClass = instanceClass.getEnclosingClass(); + enclosingClass != null; + enclosingClass = enclosingClass.getEnclosingClass()) { + try { + Field this$0 = instanceClass.getDeclaredField("this$0"); + Object outerInstance = this$0.get(instance); + Class outerClass = outerInstance.getClass(); + nestedOuterTypes.add(outerClass); + Map outerTypeMap = new HashMap(); + extractTypeArguments(outerTypeMap, outerClass); + for (Map.Entry entry : outerTypeMap.entrySet()) { + if (!(entry.getKey() instanceof TypeVariable)) { + continue; + } + TypeVariable foundType = (TypeVariable) entry.getKey(); + if (foundType.getName().equals(actualType.getName()) + && isInnerClass(foundType.getGenericDeclaration(), actualType.getGenericDeclaration())) { + if (entry.getValue() instanceof Class) { + return (Class) entry.getValue(); + } + actualType = (TypeVariable) entry.getValue(); + } + } + } catch (NoSuchFieldException | IllegalAccessException e) { + + } + } + return null; + } + + private static boolean isInnerClass(GenericDeclaration outerDeclaration, GenericDeclaration innerDeclaration) { + if (!(outerDeclaration instanceof Class) || !(innerDeclaration instanceof Class)) { + return false; + } + Class outerClass = (Class) outerDeclaration; + Class innerClass = (Class) innerDeclaration; + while ((innerClass = innerClass.getEnclosingClass()) != null) { + if (innerClass == outerClass) { + return true; + } + } + return false; + } + + /* + * + * End of Generics Block + * + */ + + private static Field getField_Internal(final Class clazz, final String fieldName) throws NoSuchFieldException { + try { + Logger.REFLECTION("Field: Internal Lookup: " + fieldName); + Field k = clazz.getDeclaredField(fieldName); + makeFieldAccessible(k); + // Logger.REFLECTION("Got Field from Class. "+fieldName+" did exist within "+clazz.getCanonicalName()+"."); + return k; + } catch (final NoSuchFieldException e) { + Logger.REFLECTION("Field: Internal Lookup Failed: " + fieldName); + final Class superClass = clazz.getSuperclass(); + if (superClass == null) { + Logger.REFLECTION("Unable to find field '" + fieldName + "'"); + // Logger.REFLECTION("Failed to get Field from Class. "+fieldName+" does not existing within + // "+clazz.getCanonicalName()+"."); + throw e; + } + Logger.REFLECTION("Method: Recursion Lookup: " + fieldName + " - Checking in " + superClass.getName()); + // Logger.REFLECTION("Failed to get Field from Class. "+fieldName+" does not existing within + // "+clazz.getCanonicalName()+". Trying super class."); + return getField_Internal(superClass, fieldName); + } + } + + /** + * if (isPresent("com.optionaldependency.DependencyClass")) || + * This block will never execute when the dependency is not present. There is + * therefore no more risk of code throwing NoClassDefFoundException. + */ + private static boolean isClassPresent(final String className) { + try { + Class.forName(className); + return true; + } catch (final Throwable ex) { + // Class or one of its dependencies is not present... + return false; + } + } + + @Deprecated + public static Method getMethodViaReflection( + final Class lookupClass, final String methodName, final boolean invoke) throws Exception { + final Class lookup = lookupClass.getClass(); + final Method m = lookup.getDeclaredMethod(methodName); + m.setAccessible(true); // Abracadabra + if (invoke) { + m.invoke(lookup); // now its OK + } + return m; + } + + private static Method getMethod_Internal(Class aClass, String aMethodName, Class... aTypes) { + Method m = null; + try { + Logger.REFLECTION("Method: Internal Lookup: " + aMethodName); + m = aClass.getDeclaredMethod(aMethodName, aTypes); + if (m != null) { + m.setAccessible(true); + int modifiers = m.getModifiers(); + Field modifierField = m.getClass().getDeclaredField("modifiers"); + modifiers = modifiers & ~Modifier.FINAL; + modifierField.setAccessible(true); + modifierField.setInt(m, modifiers); + } + } catch (Throwable t) { + Logger.REFLECTION("Method: Internal Lookup Failed: " + aMethodName); + try { + m = getMethodRecursively(aClass, aMethodName); + } catch (NoSuchMethodException e) { + Logger.REFLECTION("Unable to find method '" + aMethodName + "'"); + e.printStackTrace(); + dumpClassInfo(aClass); + } + } + return m; + } + + private static Constructor getConstructor_Internal(Class aClass, Class... aTypes) { + Constructor c = null; + try { + Logger.REFLECTION("Constructor: Internal Lookup: " + aClass.getName()); + c = aClass.getDeclaredConstructor(aTypes); + if (c != null) { + c.setAccessible(true); + int modifiers = c.getModifiers(); + Field modifierField = c.getClass().getDeclaredField("modifiers"); + modifiers = modifiers & ~Modifier.FINAL; + modifierField.setAccessible(true); + modifierField.setInt(c, modifiers); + } + } catch (Throwable t) { + Logger.REFLECTION("Constructor: Internal Lookup Failed: " + aClass.getName()); + try { + c = getConstructorRecursively(aClass, aTypes); + } catch (Exception e) { + Logger.REFLECTION("Unable to find method '" + aClass.getName() + "'"); + e.printStackTrace(); + dumpClassInfo(aClass); + } + } + return c; + } + + private static Constructor getConstructorRecursively(Class aClass, Class... aTypes) throws Exception { + try { + Logger.REFLECTION("Constructor: Recursion Lookup: " + aClass.getName()); + Constructor c = aClass.getConstructor(aTypes); + if (c != null) { + c.setAccessible(true); + int modifiers = c.getModifiers(); + Field modifierField = c.getClass().getDeclaredField("modifiers"); + modifiers = modifiers & ~Modifier.FINAL; + modifierField.setAccessible(true); + modifierField.setInt(c, modifiers); + } + return c; + } catch (final NoSuchMethodException | IllegalArgumentException | IllegalAccessException e) { + final Class superClass = aClass.getSuperclass(); + if (superClass == null || superClass == Object.class) { + throw e; + } + return getConstructor_Internal(superClass, aTypes); + } + } + + private static Method getMethodRecursively(final Class clazz, final String aMethodName) + throws NoSuchMethodException { + try { + Logger.REFLECTION("Method: Recursion Lookup: " + aMethodName); + Method k = clazz.getDeclaredMethod(aMethodName); + makeMethodAccessible(k); + return k; + } catch (final NoSuchMethodException e) { + final Class superClass = clazz.getSuperclass(); + if (superClass == null || superClass == Object.class) { + throw e; + } + return getMethod_Internal(superClass, aMethodName); + } + } + + private static void dumpClassInfo(Class aClass) { + Logger.INFO("We ran into an error processing reflection in " + aClass.getName() + + ", dumping all data for debugging."); + // Get the methods + Method[] methods = aClass.getDeclaredMethods(); + Field[] fields = aClass.getDeclaredFields(); + Constructor[] consts = aClass.getDeclaredConstructors(); + + Logger.INFO("Dumping all Methods."); + for (Method method : methods) { + System.out.println( + method.getName() + " | " + StringUtils.getDataStringFromArray(method.getParameterTypes())); + } + Logger.INFO("Dumping all Fields."); + for (Field f : fields) { + System.out.println(f.getName()); + } + Logger.INFO("Dumping all Constructors."); + for (Constructor c : consts) { + System.out.println(c.getName() + " | " + c.getParameterCount() + " | " + + StringUtils.getDataStringFromArray(c.getParameterTypes())); + } + } + + private static Class getNonPublicClass(final String className) { + Class c = null; + try { + c = Class.forName(className); + } catch (final ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // full package name --------^^^^^^^^^^ + // or simpler without Class.forName: + // Class c = package1.A.class; + + if (null != c) { + // In our case we need to use + Constructor constructor = null; + try { + constructor = c.getDeclaredConstructor(); + } catch (NoSuchMethodException | SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // note: getConstructor() can return only public constructors + // so we needed to search for any Declared constructor + + // now we need to make this constructor accessible + if (null != constructor) { + constructor.setAccessible(true); // ABRACADABRA! + + try { + final Object o = constructor.newInstance(); + return (Class) o; + } catch (InstantiationException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + return null; + } + + private static Class getClass_Internal(String string) { + Class aClass = null; + if (ReflectionUtils.doesClassExist(string)) { + try { + aClass = Class.forName(string); + } catch (ClassNotFoundException e) { + aClass = getNonPublicClass(string); + } + } + + if (aClass == null) { + String aClassName = ""; + Logger.REFLECTION("Splitting " + string + " to try look for hidden classes."); + String[] aData = string.split("\\."); + Logger.REFLECTION("Obtained " + aData.length + " pieces."); + for (int i = 0; i < (aData.length - 1); i++) { + aClassName += (i > 0) ? "." + aData[i] : "" + aData[i]; + Logger.REFLECTION("Building: " + aClassName); + } + if (aClassName != null && aClassName.length() > 0) { + Logger.REFLECTION("Trying to search '" + aClassName + "' for inner classes."); + Class clazz = ReflectionUtils.getClass(aClassName); + if (clazz != null) { + Class[] y = clazz.getDeclaredClasses(); + if (y == null || y.length <= 0) { + Logger.REFLECTION("No hidden inner classes found."); + return null; + } else { + boolean found = false; + for (Class h : y) { + Logger.REFLECTION("Found hidden inner class: " + h.getCanonicalName()); + if (h.getSimpleName().toLowerCase().equals(aData[aData.length - 1].toLowerCase())) { + Logger.REFLECTION("Found correct class. [" + aData[aData.length - 1] + + "] Caching at correct location: " + string); + Logger.REFLECTION("Found at location: " + h.getCanonicalName()); + ReflectionUtils.mCachedClasses.put(string, h); + aClass = h; + found = true; + break; + } + } + if (!found) { + return null; + } + } + } else { + return null; + } + } else { + return null; + } + } + return aClass; + } + + /** + * + * Set the value of a field reflectively. + */ + private static void setFieldValue_Internal(Object owner, Field field, Object value) throws Exception { + makeModifiable(field); + field.set(owner, value); + } + + /** + * Force the field to be modifiable and accessible. + */ + private static void makeModifiable(Field nameField) throws Exception { + nameField.setAccessible(true); + Field modifiers = getField(Field.class, "modifiers"); + modifiers.setAccessible(true); + modifiers.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL); + } + + public static boolean doesFieldExist(String clazz, String string) { + return doesFieldExist(ReflectionUtils.getClass(clazz), string); + } + + public static boolean doesFieldExist(Class clazz, String string) { + if (clazz != null) { + if (ReflectionUtils.getField(clazz, string) != null) { + return true; + } + } + return false; + } + + public static T getFieldValue(Field field) { + return getFieldValue(field, null); + } + + public static T getFieldValue(Field field, Object instance) { + try { + return (T) field.get(instance); + } catch (IllegalArgumentException | IllegalAccessException e) { + } + return null; + } + + public static T createNewInstanceFromConstructor(Constructor aConstructor, Object[] aArgs) { + T aInstance; + try { + aInstance = (T) aConstructor.newInstance(aArgs); + if (aInstance != null) { + return aInstance; + } + } catch (InstantiationException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { + e.printStackTrace(); + } + return null; + } + + public static Enum getEnum(Class sgtbees, String name) { + if (sgtbees.isEnum()) { + Object[] aValues = sgtbees.getEnumConstants(); + for (Object o : aValues) { + if (o.toString().toLowerCase().equals(name.toLowerCase())) { + return (Enum) o; + } + } + } + return null; + } } diff --git a/src/main/java/gtPlusPlus/core/util/sys/KeyboardUtils.java b/src/main/java/gtPlusPlus/core/util/sys/KeyboardUtils.java index ea87677ee2..3e26d8ff35 100644 --- a/src/main/java/gtPlusPlus/core/util/sys/KeyboardUtils.java +++ b/src/main/java/gtPlusPlus/core/util/sys/KeyboardUtils.java @@ -1,39 +1,36 @@ package gtPlusPlus.core.util.sys; -import org.lwjgl.input.Keyboard; - import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; public class KeyboardUtils { - public static boolean isCtrlKeyDown(){ - try { - if (!Keyboard.isCreated()) { - return false; - } - // prioritize CONTROL, but allow OPTION as well on Mac (note: GuiScreen's isCtrlKeyDown only checks for the OPTION key on Mac) - boolean isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); - if (!isCtrlKeyDown && Minecraft.isRunningOnMac) - isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA); - - return isCtrlKeyDown; - } - catch (Throwable t) { - return false; - } - } - - public static boolean isShiftKeyDown(){ - try { - if (!Keyboard.isCreated()) { - return false; - } - return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); - } - catch (Throwable t) { - return false; - } - - } - + public static boolean isCtrlKeyDown() { + try { + if (!Keyboard.isCreated()) { + return false; + } + // prioritize CONTROL, but allow OPTION as well on Mac (note: GuiScreen's isCtrlKeyDown only checks for the + // OPTION key on Mac) + boolean isCtrlKeyDown = + Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); + if (!isCtrlKeyDown && Minecraft.isRunningOnMac) + isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA); + + return isCtrlKeyDown; + } catch (Throwable t) { + return false; + } + } + + public static boolean isShiftKeyDown() { + try { + if (!Keyboard.isCreated()) { + return false; + } + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + } catch (Throwable t) { + return false; + } + } } diff --git a/src/main/java/gtPlusPlus/core/util/sys/Log.java b/src/main/java/gtPlusPlus/core/util/sys/Log.java index fcd4f34c1b..026bb533c7 100644 --- a/src/main/java/gtPlusPlus/core/util/sys/Log.java +++ b/src/main/java/gtPlusPlus/core/util/sys/Log.java @@ -4,21 +4,21 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public final class Log { - public static final Logger LOGGER = LogManager.getLogger("MiscUtils"); + public static final Logger LOGGER = LogManager.getLogger("MiscUtils"); - public static void warn(final String msg) { - LOGGER.warn(msg); - } + public static void warn(final String msg) { + LOGGER.warn(msg); + } - public static void error(final String msg) { - LOGGER.error(msg); - } + public static void error(final String msg) { + LOGGER.error(msg); + } - public static void info(final String msg) { - LOGGER.info(msg); - } + public static void info(final String msg) { + LOGGER.info(msg); + } - public static void debug(final String msg) { - LOGGER.debug(msg); - } + public static void debug(final String msg) { + LOGGER.debug(msg); + } } diff --git a/src/main/java/gtPlusPlus/core/util/sys/SystemUtils.java b/src/main/java/gtPlusPlus/core/util/sys/SystemUtils.java index 2788ba688e..662a3261c0 100644 --- a/src/main/java/gtPlusPlus/core/util/sys/SystemUtils.java +++ b/src/main/java/gtPlusPlus/core/util/sys/SystemUtils.java @@ -2,89 +2,84 @@ package gtPlusPlus.core.util.sys; public class SystemUtils { - private static OS SystemType; - - public static OS getOS(){ - if (SystemType != null){ - return SystemType; - } - else { - SystemType = getOperatingSystem(); - return SystemType; - } - } - - /** - * Try invoke the runtime's Garbage Collector. - */ - public static void invokeGC() { - try { - Runtime r = Runtime.getRuntime(); - r.gc(); - } - catch (Throwable t) { - //Do nothing. - } - } - - public static boolean isWindows() { - return (getOSString().indexOf("win") >= 0); - } + private static OS SystemType; - public static boolean isMac() { - return (getOSString().indexOf("mac") >= 0); - } + public static OS getOS() { + if (SystemType != null) { + return SystemType; + } else { + SystemType = getOperatingSystem(); + return SystemType; + } + } - public static boolean isUnix() { - return (getOSString().indexOf("nix") >= 0 || getOSString().indexOf("nux") >= 0 || getOSString().indexOf("aix") > 0 ); - } + /** + * Try invoke the runtime's Garbage Collector. + */ + public static void invokeGC() { + try { + Runtime r = Runtime.getRuntime(); + r.gc(); + } catch (Throwable t) { + // Do nothing. + } + } - public static boolean isSolaris() { - return (getOSString().indexOf("sunos") >= 0); - } + public static boolean isWindows() { + return (getOSString().indexOf("win") >= 0); + } - public static String getOSString(){ - try { - return System.getProperty("os.name").toLowerCase(); - } - catch (Throwable t){ - return "other"; - } - } - - public static OS getOperatingSystem(){ - if (isMac()){ - return OS.MAC; - } - else if (isWindows()){ - return OS.WINDOWS; - } - else if (isUnix()){ - return OS.UNIX; - } - else if (isSolaris()){ - return OS.SOLARIS; - } - else { - return OS.OTHER; - } - } - - public static enum OS { - MAC(1), - WINDOWS(2), - UNIX(3), - SOLARIS(4), - OTHER(0); + public static boolean isMac() { + return (getOSString().indexOf("mac") >= 0); + } - private int mID; - private OS (final int ID){ - this.mID = ID; - } + public static boolean isUnix() { + return (getOSString().indexOf("nix") >= 0 + || getOSString().indexOf("nux") >= 0 + || getOSString().indexOf("aix") > 0); + } - public int getID() { - return this.mID; - } - } - + public static boolean isSolaris() { + return (getOSString().indexOf("sunos") >= 0); + } + + public static String getOSString() { + try { + return System.getProperty("os.name").toLowerCase(); + } catch (Throwable t) { + return "other"; + } + } + + public static OS getOperatingSystem() { + if (isMac()) { + return OS.MAC; + } else if (isWindows()) { + return OS.WINDOWS; + } else if (isUnix()) { + return OS.UNIX; + } else if (isSolaris()) { + return OS.SOLARIS; + } else { + return OS.OTHER; + } + } + + public static enum OS { + MAC(1), + WINDOWS(2), + UNIX(3), + SOLARIS(4), + OTHER(0); + + private int mID; + + private OS(final int ID) { + this.mID = ID; + } + + public int getID() { + return this.mID; + } + } } -- cgit