diff --git a/build.gradle b/build.gradle index 0018e846..07420532 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,15 @@ buildscript { repositories { mavenCentral() - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" - } + jcenter() + //maven { + // name = "forge" + // url = "http://files.minecraftforge.net/maven" + //} + maven { + name = "gt" + url = "https://gregtech.overminddl1.com/" + } maven { name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" @@ -15,8 +20,30 @@ buildscript { } } -apply plugin: 'forge' +// Because Forge is too stupid to fix Deprecation Issues, and we cannot fix it on our end! (until we fork Forge) +allprojects { + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:deprecation" + } +} + +apply plugin: 'eclipse' +eclipse { + classpath { + downloadJavadoc = true + downloadSources = true + } +} + apply plugin: 'idea' +idea{ + module { + downloadJavadoc = true + downloadSources = true + } +} + +apply plugin: 'forge' file "build.properties" withReader { def prop = new Properties() @@ -28,9 +55,12 @@ version = "${config.gt.version}" group= "gregtech" archivesBaseName = "gregtech" - sourceCompatibility = 1.7 targetCompatibility = 1.7 +compileJava.options.bootClasspath = org.gradle.internal.jvm.Jvm.current().getJre().getHomeDir().toString() +"/lib/rt.jar" +compileJava { + options.encoding = "UTF-8" +} minecraft { version = "${config.minecraft.version}-${config.forge.version}" @@ -46,89 +76,47 @@ configurations { } repositories { - maven { - name 'Forge' - url 'http://files.minecraftforge.net/maven' - } - maven { - name = "chickenbones" - url = "http://chickenbones.net/maven/" - } - maven { - name = "ic2, forestry" - url = "http://maven.ic2.player.to/" - } - maven { // EnderIO & EnderCore - name 'tterrag Repo' - url "http://maven.tterrag.com" - } - maven { // TConstruct - name 'DVS1 Maven FS' - url 'http://dvs1.progwml6.com/files/maven' - } - - maven { // AppleCore - url "http://www.ryanliptak.com/maven/" - } - ivy { - name "BuildCraft" - artifactPattern "http://www.mod-buildcraft.com/releases/BuildCraft/[revision]/[module]-[revision]-[classifier].[ext]" - } - ivy { - name 'CoFHLib' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.cofhlib.cf}/[module]-[revision].[ext]" - } - ivy { - name 'CoFHCore' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.cofhcore.cf}/[module]-[revision].[ext]" - } - ivy { - name 'Railcraft' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.railcraft.cf}/[module]_[revision].[ext]" - } - ivy { - name 'IC2NuclearControl' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.nc.cf}/[module]-[revision].[ext]" - } - ivy { - name 'ImmersiveEngineering' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.immeng.cf}/[module]-[revision].[ext]" - } - ivy { - name 'magneticraft' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.magneticraft.cf}/[module]-[revision].[ext]" - } + maven { + name = "gt" + url = "http://gregtech.overminddl1.com/" + } + maven { + name = "ic2" + url = "http://maven.ic2.player.to/" + } } dependencies { // compile fileTree(dir: 'libs', include: '*.jar') - compile "tconstruct:TConstruct:${config.minecraft.version}-${config.tconstruct.version}:deobf" - provided ("appeng:appliedenergistics2:${config.ae2.version}:dev") { - exclude module: '*' - } - provided "codechicken:CodeChickenLib:${config.minecraft.version}-${config.codechickenlib.version}:dev" - provided "codechicken:CodeChickenCore:${config.minecraft.version}-${config.codechickencore.version}:dev" - provided "codechicken:NotEnoughItems:${config.minecraft.version}-${config.nei.version}:dev" - provided "codechicken:Translocator:${config.minecraft.version}-${config.translocators.version}:dev" - provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev" - provided "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:dev" - provided "applecore:AppleCore:${config.applecore.version}:api" - provided "com.enderio.core:EnderCore:${config.enderiocore.version}:dev" - provided ("com.enderio:EnderIO:${config.enderio.version}:dev") { - transitive = false - } - provided name: 'buildcraft', version: config.buildcraft.version, classifier: "dev", ext: 'jar' - provided name: 'CoFHLib', version: config.cofhlib.version, ext: 'jar' - provided name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' - provided name: 'Railcraft', version: config.railcraft.version, ext: 'jar' - provided name: 'IC2NuclearControl', version: config.nc.version, ext: 'jar' - provided name: 'ImmersiveEngineering', version: config.immeng.version, ext: 'jar' - provided name: 'magneticraft', version: config.magneticraft.version, ext: 'jar' -// compile files("libs/Galacticraft-API-1.7-${config.gc.version}.jar") -// compile files("libs/GalacticraftCore-Dev-${config.gc.version}.jar") - provided name: "Galacticraft-API", version: config.gc.version, ext: 'jar' - provided name: "GalacticraftCore-Dev", version: config.gc.version, ext: 'jar' + // Mostly Used for compileOnly, if you prefer normal IC2, uncomment it instead. + //provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev" + compile "ic2:IC2Classic:1.2.1.8:dev" + + compile "mcp.mobius.waila:Waila:1.5.11-RC2-NONEI_1.7.10:dev" + compile "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev" + compile "codechicken:CodeChickenCore:1.7.10-1.0.7.47:dev" + compile "codechicken:NotEnoughItems:1.7.10-1.0.5.120:dev" + + compileOnly "com.enderio.core:EnderCore:1.7.10-0.2.0.39_beta:dev" + // "com.enderio:EnderIO:1.7.10-2.3.0.429_beta:dev" + compileOnly "com.enderio:EnderIO:1.7.10-2.3.0.430_beta:dev" + + compileOnly "cofh:CoFHCore:1.7.10R3.0.4:dev" + compileOnly "cofh:CoFHLib:1.7.10R3.0.3:dev" + compileOnly "com.mod-buildcraft:buildcraft:7.1.23:dev" + compileOnly "net.sengir.forestry:forestry_1.7.10:4.2.16.64:dev" + compileOnly "mods.railcraft:Railcraft_1.7.10:9.12.3.0:dev" + + compileOnly "micdoodle8.mods:GalacticraftCore:1.7-3.0.12.504:Dev" + compileOnly "micdoodle8.mods:MicdoodleCore:1.7-3.0.12.504:Dev" + + compileOnly "thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev" + compileOnly "com.azanor.baubles:Baubles:1.7.10-1.0.1.10:deobf" + compileOnly "appeng:appliedenergistics2:rv3-beta-6:dev" + compileOnly "applecore:AppleCore:1.7.10-3.1.1:deobf" + compileOnly "com.shedar.IC2NuclearControl:IC2NuclearControl:2.4.3a:dev" + } processResources diff --git a/build.properties b/build.properties index 2573a475..599c8cf0 100644 --- a/build.properties +++ b/build.properties @@ -1,30 +1,4 @@ minecraft.version=1.7.10 -forge.version=10.13.4.1566-1.7.10 - -gt.version=5.09.31 -ae2.version=rv2-beta-33 -applecore.version=1.7.10-1.2.1+107.59407 -buildcraft.version=7.1.11 -codechickenlib.version=1.1.3.140 -codechickencore.version=1.0.7.47 -cofhcore.cf=2246/920 -cofhcore.version=[1.7.10]3.0.3-303-dev -cofhlib.cf=2246/918 -cofhlib.version=[1.7.10]1.0.3-175-dev -enderio.cf=2219/296 -enderio.version=1.7.10-2.3.0.417_beta -enderiocore.version=1.7.10-0.1.0.25_beta -forestry.version=4.2.10.58 -gc.version=1.7-3.0.12.504 +forge.version=10.13.4.1614-1.7.10 ic2.version=2.2.790-experimental -nei.version=1.0.3.57 -railcraft.cf=2219/321 -railcraft.version=1.7.10-9.4.0.0 -nc.cf=2275/987 -nc.version=2.3.4a -immeng.cf=2299/20 -immeng.version=0.7.7-deobf -magneticraft.cf=2276/268 -magneticraft.version=0.6.1-final -tconstruct.version=1.8.4.build951 -translocators.version=1.1.2.16 +gt.version=5.09.31 \ No newline at end of file diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java index 24dcc8ef..deb54bfb 100644 --- a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java +++ b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java @@ -1,18 +1,18 @@ package gregtech.api.items; +import java.util.ArrayList; + import gregtech.api.GregTech_API; +import gregtech.api.util.GT_Utility; import ic2.api.reactor.IReactor; import ic2.api.reactor.IReactorComponent; -import ic2.core.IC2Potion; import ic2.core.item.armor.ItemArmorHazmat; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import java.util.ArrayList; - public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent { public final int numberOfCells; @@ -146,7 +146,7 @@ public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implement if (this.sRadiation > 0 && (entity instanceof EntityLivingBase)) { EntityLivingBase entityLiving = (EntityLivingBase) entity; if (!GregTech_API.mIC2Classic&&!ItemArmorHazmat.hasCompleteHazmat(entityLiving)) { - IC2Potion.radiation.applyTo(entityLiving, sRadiation * 20, sRadiation * 10); + GT_Utility.applyRadioactivity(entityLiving, sRadiation, stack.stackSize); } } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index d36e7b82..b8e4d0e2 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -1,8 +1,19 @@ package gregtech.api.metatileentity.implementations; +import static gregtech.api.enums.GT_Values.D1; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.tuple.MutableTriple; + import gregtech.GT_Mod; import gregtech.api.GregTech_API; -import gregtech.api.enums.*; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; @@ -10,13 +21,12 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.MetaPipeEntity; import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_CoverBehavior; import gregtech.api.objects.XSTR; +import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; import gregtech.common.GT_Client; import gregtech.common.covers.GT_Cover_Drain; -import gregtech.common.covers.GT_Cover_FluidRegulator; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -30,12 +40,6 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -import org.apache.commons.lang3.tuple.MutableTriple; - -import java.util.ArrayList; -import java.util.List; - -import static gregtech.api.enums.GT_Values.D1; public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { public final float mThickNess; @@ -392,8 +396,21 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (coverBehavior instanceof GT_Cover_Drain) return true; // Tinker Construct Faucets return a null tank info, so check the class - if (GregTech_API.mTConstruct && tTileEntity instanceof tconstruct.smeltery.logic.FaucetLogic) return true; - + if (GregTech_API.mTConstruct) { + try { + Class aTinkerFaucet = Class.forName("tconstruct.smeltery.logic.FaucetLogic"); + if (aTinkerFaucet != null) { + if (aTinkerFaucet.isInstance(tTileEntity)) { + return true; + } + } + } + catch (Throwable t) { + + } + } + + final IFluidHandler fTileEntity = (tTileEntity instanceof IFluidHandler) ? (IFluidHandler) tTileEntity : null; if (fTileEntity != null) { @@ -402,8 +419,19 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (tInfo.length > 0) return true; // Translocators return a TankInfo, but it's of 0 length - so check the class if we see this pattern - if (GregTech_API.mTranslocator && tTileEntity instanceof codechicken.translocator.TileLiquidTranslocator) return true; - if (gTileEntity != null && gTileEntity.getCoverBehaviorAtSide(tSide) instanceof GT_Cover_FluidRegulator) return true; + if (GregTech_API.mTranslocator) { + try { + Class aCodeChickenTranslocator = Class.forName("codechicken.translocator.TileLiquidTranslocator"); + if (aCodeChickenTranslocator != null) { + if (aCodeChickenTranslocator.isInstance(tTileEntity)) { + return true; + } + } + } + catch (Throwable t) { + + } + } } } diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java index 8f265108..1419ed56 100644 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ b/src/main/java/gregtech/api/util/GT_ModHandler.java @@ -1,10 +1,36 @@ package gregtech.api.util; +import static gregtech.api.enums.GT_Values.B; +import static gregtech.api.enums.GT_Values.D1; +import static gregtech.api.enums.GT_Values.DW; +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GT_Values.RA; +import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GT_Values.W; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.GT_Mod; import gregtech.api.GregTech_API; -import gregtech.api.enums.*; +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.ToolDictNames; import gregtech.api.interfaces.IDamagableItem; import gregtech.api.interfaces.IItemContainer; import gregtech.api.interfaces.internal.IGT_CraftingRecipe; @@ -29,7 +55,11 @@ import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.*; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.world.World; @@ -38,13 +68,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.*; -import java.util.Map.Entry; - -import static gregtech.api.enums.GT_Values.*; - /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! *

@@ -600,13 +623,39 @@ public class GT_ModHandler { return true; } + /** + * A static instance of the Immersive Engineering recipe handler to improve reflective access + */ + private static Method mRecipeIE; + + + public static boolean addImmersiveEngineeringRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance2, ItemStack aOutput3, int aChance3){ if(GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes){ - blusunrize.immersiveengineering.common.IERecipes.addCrusherRecipe(aOutput1, aInput, 6000, aOutput2, 0.15f); + //Get IE Recipe Handler + try { + if (mRecipeIE == null) { + mRecipeIE = Class.forName("blusunrize.immersiveengineering.common.IERecipes").getDeclaredMethod("addCrusherRecipe", ItemStack.class, ItemStack.class, int.class, ItemStack.class, float.class); + } + return (boolean) mRecipeIE.invoke(null, aOutput1, aInput, 6000, aOutput2, 0.15f); + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + GT_Log.err.println("WARNING: Bad Reflection into Immersive Engineering Crusher recipe handler."); + return false; + } } return true; } - + + /** + * A static instance of the Magneticraft recipe handler to improve reflective access + */ + private static Class mRecipeMag; + + private static Method mRecipeMagSifter; + private static Method mRecipeMagCrusher; + private static Method mRecipeMagGrinder; + public static boolean addMagneticraftRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance2, ItemStack aOutput3, int aChance3){ if(GregTech_API.mMagneticraft && GT_Mod.gregtechproxy.mMagneticraftRecipes){ ItemData tData = GT_OreDictUnificator.getAssociation(aInput); @@ -621,60 +670,50 @@ public class GT_ModHandler { return true; } - public static boolean registerMagneticraftSifterRecipe(final ItemStack in, final ItemStack out, final ItemStack extra, - final float prob) { - //Get Magnetiraft Recipe Handler - Class cls; - try { - cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); - //Get registerCrusherRecipe method from class. - Method mCrusher = cls.getDeclaredMethod("registerSifterRecipe", ItemStack.class, ItemStack.class, - ItemStack.class, float.class); - //Invoke Method - return (boolean) mCrusher.invoke(null, in, out, extra, prob); - - } - catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Sifter handler."); - return false; - } - } - - public static boolean registerMagneticraftCrusherRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, - final float prob1, final ItemStack out2, final float prob2) { - //Get Magnetiraft Recipe Handler - Class cls; - try { - cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); - //Get registerCrusherRecipe method from class. - Method mCrusher = cls.getDeclaredMethod("registerCrusherRecipe", ItemStack.class, ItemStack.class, - ItemStack.class, float.class, ItemStack.class, float.class); - //Invoke Method - return (boolean) mCrusher.invoke(null, in, out0, out1,(float)((float)prob1/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent), out2,(float)((float)prob2/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent)); - + public static boolean registerMagneticraftSifterRecipe(final ItemStack in, final ItemStack out, final ItemStack extra, final float prob) { + try { + if (mRecipeMag == null) { + mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); + } + if (mRecipeMagSifter == null) { + mRecipeMagSifter = mRecipeMag.getDeclaredMethod("registerSifterRecipe", ItemStack.class, ItemStack.class, ItemStack.class, float.class); + } + return (boolean) mRecipeMagSifter.invoke(null, in, out, extra, prob); } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Crusher handler."); + GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Sifter recipe handler."); + return false; + } + } + + public static boolean registerMagneticraftCrusherRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, final float prob1, final ItemStack out2, final float prob2) { + try { + if (mRecipeMag == null) { + mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); + } + if (mRecipeMagCrusher == null) { + mRecipeMagCrusher = mRecipeMag.getDeclaredMethod("registerCrusherRecipe", ItemStack.class, ItemStack.class, ItemStack.class, float.class, ItemStack.class, float.class); + } + return (boolean) mRecipeMagCrusher.invoke(null, in, out0, out1,(float)((float)prob1/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent), out2,(float)((float)prob2/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent)); + } + catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Crusher recipe handler."); return false; } } - public static boolean registerMagneticraftGrinderRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, - final float prob1, final ItemStack out2, final float prob2) { - //Get Magnetiraft Recipe Handler - Class cls; - try { - cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); - - //Get registerGrinderRecipe method from class. - Method mGrinder = cls.getDeclaredMethod("registerGrinderRecipe", ItemStack.class, ItemStack.class, - ItemStack.class, float.class, ItemStack.class, float.class); - //Invoke Method - return (boolean) mGrinder.invoke(null, in, out0, out1,(float)((float)prob1/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent), out2,(float)((float)prob2/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent)); - + public static boolean registerMagneticraftGrinderRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, final float prob1, final ItemStack out2, final float prob2) { + try { + if (mRecipeMag == null) { + mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); + } + if (mRecipeMagGrinder == null) { + mRecipeMagGrinder = mRecipeMag.getDeclaredMethod("registerGrinderRecipe", ItemStack.class, ItemStack.class, ItemStack.class, float.class, ItemStack.class, float.class); + } + return (boolean) mRecipeMagGrinder.invoke(null, in, out0, out1,(float)((float)prob1/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent), out2,(float)((float)prob2/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent)); } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Grinder handler."); + GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Grinder recipe handler."); return false; } } diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 67bdd6af..fe9416ab 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -1,5 +1,39 @@ package gregtech.api.util; +import static gregtech.api.enums.GT_Values.D1; +import static gregtech.api.enums.GT_Values.DW; +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.GT; +import static gregtech.api.enums.GT_Values.L; +import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GT_Values.W; +import static gregtech.common.GT_Proxy.GTPOLLUTION; +import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +import com.mojang.authlib.GameProfile; + import cofh.api.transport.IItemDuct; import cpw.mods.fml.common.FMLCommonHandler; import gregtech.api.GregTech_API; @@ -13,7 +47,12 @@ import gregtech.api.events.BlockScanningEvent; import gregtech.api.interfaces.IDebugableBlock; import gregtech.api.interfaces.IProjectileItem; import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.*; +import gregtech.api.interfaces.tileentity.IBasicEnergyContainer; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.interfaces.tileentity.IUpgradableMachine; import gregtech.api.items.GT_EnergyArmor_Item; import gregtech.api.items.GT_Generic_Item; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; @@ -26,10 +65,15 @@ import ic2.api.recipe.IRecipeInput; import ic2.api.recipe.RecipeInputItemStack; import ic2.api.recipe.RecipeInputOreDict; import ic2.api.recipe.RecipeOutput; +import ic2.core.IC2Potion; import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -62,23 +106,12 @@ import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.NumberFormat; -import java.util.*; -import java.util.Map.Entry; - -import com.mojang.authlib.GameProfile; - -import static gregtech.api.enums.GT_Values.*; -import static gregtech.common.GT_Proxy.GTPOLLUTION; -import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! @@ -367,7 +400,20 @@ public class GT_Utility { if (TE_CHECK && aTileEntity instanceof IItemDuct) return true; if (BC_CHECK && aTileEntity instanceof buildcraft.api.transport.IPipeTile) return ((buildcraft.api.transport.IPipeTile) aTileEntity).isPipeConnected(ForgeDirection.getOrientation(aSide)); - if (GregTech_API.mTranslocator && aTileEntity instanceof codechicken.translocator.TileItemTranslocator) return true; + + if (GregTech_API.mTranslocator) { + try { + Class aCodeChickenTranslocator = Class.forName("codechicken.translocator.TileLiquidTranslocator"); + if (aCodeChickenTranslocator != null) { + if (aCodeChickenTranslocator.isInstance(aTileEntity)) { + return true; + } + } + } + catch (Throwable t) { + + } + } return false; } @@ -1309,7 +1355,7 @@ public class GT_Utility { 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(24 /* IC2 Radiation */, 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(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; diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java index 542846fe..7ce91590 100644 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java +++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java @@ -4,13 +4,17 @@ import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; +import gregtech.api.util.GT_Log; import gregtech.api.world.GT_Worldgen; import gregtech.common.blocks.GT_TileEntity_Ores; import gregtech.loaders.misc.GT_Achievements; +import gregtech.loaders.postload.GT_Worldgenloader; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Random; @@ -37,6 +41,8 @@ public class GT_Worldgen_GT_Ore_Layer public final boolean mAsteroid; public final String aTextWorldgen = "worldgen."; + private static Method mAddMaterialIE; + public GT_Worldgen_GT_Ore_Layer(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, int aSize, boolean aOverworld, boolean aNether, boolean aEnd, boolean aMoon, boolean aMars, boolean aAsteroid, Materials aPrimary, Materials aSecondary, Materials aBetween, Materials aSporadic) { super(aName, sList, aDefault); this.mOverworld = GregTech_API.sWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Overworld", aOverworld); @@ -69,7 +75,20 @@ public class GT_Worldgen_GT_Ore_Layer GT_Achievements.registerOre(GregTech_API.sGeneratedMaterials[(mSporadicMeta % 1000)], aMinY, aMaxY, aWeight, aOverworld, aNether, aEnd); sWeight += this.mWeight; if(GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes){ - blusunrize.immersiveengineering.api.tool.ExcavatorHandler.addMineral(aName.substring(8, 9).toUpperCase()+aName.substring(9), aWeight, 0.2f, new String[]{"ore"+aPrimary.mName,"ore"+aSecondary.mName,"ore"+aBetween.mName,"ore"+aSporadic.mName}, new float[]{.4f,.4f,.15f,.05f}); + try { + if (mAddMaterialIE == null) { + mAddMaterialIE = GT_Worldgenloader.mSupportIE.getDeclaredMethod("addMineral", String.class, + int.class, float.class, String[].class, float[].class); + } + mAddMaterialIE + .invoke(null, aName.substring(8, 9).toUpperCase() + aName.substring(9), aWeight, 0.2f, + new String[] { "ore" + aPrimary.mName, "ore" + aSecondary.mName, + "ore" + aBetween.mName, "ore" + aSporadic.mName }, + new float[] { .4f, .4f, .15f, .05f }); + } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + GT_Log.err.println("Could not add Mineral to list for IE Excavator."); + GT_Log.err.print(e); + } } } diff --git a/src/main/java/gregtech/common/items/GT_SensorCard_Item.java b/src/main/java/gregtech/common/items/GT_SensorCard_Item.java index 7c38ff30..cdc4988d 100644 --- a/src/main/java/gregtech/common/items/GT_SensorCard_Item.java +++ b/src/main/java/gregtech/common/items/GT_SensorCard_Item.java @@ -43,12 +43,10 @@ public class GT_SensorCard_Item } } - @Override public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange) { return update(aPanel.getWorldObj(), aCard, aMaxRange); } - @Override public CardState update(World world, ICardWrapper aCard, int aMaxRange) { ChunkCoordinates target = aCard.getTarget(); diff --git a/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java b/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java index 95475f32..90c66a33 100644 --- a/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java +++ b/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java @@ -1,11 +1,17 @@ package gregtech.loaders.postload; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; + import bloodasp.galacticgreg.GT_Worldgenerator_Space; import cpw.mods.fml.common.Loader; import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.ConfigCategories; import gregtech.api.enums.Materials; +import gregtech.api.util.GT_Log; import gregtech.common.GT_Worldgen_GT_Ore_Layer; import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; import gregtech.common.GT_Worldgen_Stone; @@ -13,6 +19,28 @@ import gregtech.common.GT_Worldgenerator; public class GT_Worldgenloader implements Runnable { + + + public static final Class mSupportIE; + + //We should use reflection here, since it won't amount to any performance loss. + static { + Class aTemp; + if (GregTech_API.mImmersiveEngineering) { + try { + aTemp = Class.forName("blusunrize.immersiveengineering.api.tool.ExcavatorHandler"); + } catch (ClassNotFoundException e) { + GT_Log.err.println("Could not access blusunrize.immersiveengineering.api.tool.ExcavatorHandler"); + GT_Log.err.print(e); + aTemp = null; + } + mSupportIE = aTemp; + } + else { + mSupportIE = null; + } + } + public void run() { boolean tPFAA = (GregTech_API.sWorldgenFile.get(ConfigCategories.general, "AutoDetectPFAA", true)) && (Loader.isModLoaded("PFAAGeologica")); @@ -104,9 +132,21 @@ public class GT_Worldgenloader for (int j = GregTech_API.sWorldgenFile.get("worldgen", "AmountOfCustomSmallOreSlots", 16); i < j; i++) { new GT_Worldgen_GT_Ore_SmallPieces("ore.small.custom." + (i < 10 ? "0" : "") + i, false, 0, 0, 0, false, false, false, false, false, false, Materials._NULL); } - if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes) { - blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralList.clear(); - blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralCache.clear(); + if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes && mSupportIE != null) { + try { + Field aMineralList = mSupportIE.getDeclaredField("mineralList"); + Field aMineralCache = mSupportIE.getDeclaredField("mineralCache"); + aMineralList.setAccessible(true); + aMineralCache.setAccessible(true); + Map aEmpty = new HashMap(); + aMineralList.set(null, aEmpty); + aMineralCache.set(null, aEmpty); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + //blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralList.clear(); + //blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralCache.clear(); + GT_Log.err.println("Could not clear Mineral list & cache of IE Excavator."); + GT_Log.err.print(e); + } } new GT_Worldgen_GT_Ore_Layer("ore.mix.naquadah", true, 10, 60, 10, 5, 32, false, false, true, false, true, true, Materials.Naquadah, Materials.Naquadah, Materials.Naquadah, Materials.NaquadahEnriched); @@ -147,8 +187,13 @@ public class GT_Worldgenloader new GT_Worldgen_GT_Ore_Layer("ore.mix.custom." + (i < 10 ? "0" : "") + i, false, 0, 0, 0, 0, 0, false, false, false, false, false, false, Materials._NULL, Materials._NULL, Materials._NULL, Materials._NULL); } - if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes) { - blusunrize.immersiveengineering.api.tool.ExcavatorHandler.recalculateChances(true); + if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes && mSupportIE != null) { + try { + mSupportIE.getDeclaredMethod("recalculateChances", boolean.class).invoke(null, true); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + GT_Log.err.println("Could not recalculate chances for IE Excavator."); + GT_Log.err.print(e); + } } } }