Merge pull request #1550 from draknyte1/Fix-Build-Process

Fixed GT5 Build process.
Made some dependencies optional via use of reflection.
Made GT use the IC2 radiotation ID instead of it being hardcoded.
This commit is contained in:
Alkalus 2020-04-06 21:45:16 +01:00 committed by GitHub
commit 2ee9d15321
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 351 additions and 214 deletions

View file

@ -1,9 +1,14 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
jcenter()
//maven {
// name = "forge"
// url = "http://files.minecraftforge.net/maven"
//}
maven { maven {
name = "forge" name = "gt"
url = "http://files.minecraftforge.net/maven" url = "https://gregtech.overminddl1.com/"
} }
maven { maven {
name = "sonatype" name = "sonatype"
@ -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' apply plugin: 'idea'
idea{
module {
downloadJavadoc = true
downloadSources = true
}
}
apply plugin: 'forge'
file "build.properties" withReader { file "build.properties" withReader {
def prop = new Properties() def prop = new Properties()
@ -28,9 +55,12 @@ version = "${config.gt.version}"
group= "gregtech" group= "gregtech"
archivesBaseName = "gregtech" archivesBaseName = "gregtech"
sourceCompatibility = 1.7 sourceCompatibility = 1.7
targetCompatibility = 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 { minecraft {
version = "${config.minecraft.version}-${config.forge.version}" version = "${config.minecraft.version}-${config.forge.version}"
@ -47,88 +77,46 @@ configurations {
repositories { repositories {
maven { maven {
name 'Forge' name = "gt"
url 'http://files.minecraftforge.net/maven' url = "http://gregtech.overminddl1.com/"
} }
maven { maven {
name = "chickenbones" name = "ic2"
url = "http://chickenbones.net/maven/"
}
maven {
name = "ic2, forestry"
url = "http://maven.ic2.player.to/" 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]"
}
} }
dependencies { dependencies {
// compile fileTree(dir: 'libs', include: '*.jar') // compile fileTree(dir: 'libs', include: '*.jar')
compile "tconstruct:TConstruct:${config.minecraft.version}-${config.tconstruct.version}:deobf" // Mostly Used for compileOnly, if you prefer normal IC2, uncomment it instead.
provided ("appeng:appliedenergistics2:${config.ae2.version}:dev") { //provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev"
exclude module: '*' compile "ic2:IC2Classic:1.2.1.8:dev"
}
provided "codechicken:CodeChickenLib:${config.minecraft.version}-${config.codechickenlib.version}:dev" compile "mcp.mobius.waila:Waila:1.5.11-RC2-NONEI_1.7.10:dev"
provided "codechicken:CodeChickenCore:${config.minecraft.version}-${config.codechickencore.version}:dev" compile "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev"
provided "codechicken:NotEnoughItems:${config.minecraft.version}-${config.nei.version}:dev" compile "codechicken:CodeChickenCore:1.7.10-1.0.7.47:dev"
provided "codechicken:Translocator:${config.minecraft.version}-${config.translocators.version}:dev" compile "codechicken:NotEnoughItems:1.7.10-1.0.5.120:dev"
provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev"
provided "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:dev" compileOnly "com.enderio.core:EnderCore:1.7.10-0.2.0.39_beta:dev"
provided "applecore:AppleCore:${config.applecore.version}:api" // "com.enderio:EnderIO:1.7.10-2.3.0.429_beta:dev"
provided "com.enderio.core:EnderCore:${config.enderiocore.version}:dev" compileOnly "com.enderio:EnderIO:1.7.10-2.3.0.430_beta:dev"
provided ("com.enderio:EnderIO:${config.enderio.version}:dev") {
transitive = false compileOnly "cofh:CoFHCore:1.7.10R3.0.4:dev"
} compileOnly "cofh:CoFHLib:1.7.10R3.0.3:dev"
provided name: 'buildcraft', version: config.buildcraft.version, classifier: "dev", ext: 'jar' compileOnly "com.mod-buildcraft:buildcraft:7.1.23:dev"
provided name: 'CoFHLib', version: config.cofhlib.version, ext: 'jar' compileOnly "net.sengir.forestry:forestry_1.7.10:4.2.16.64:dev"
provided name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' compileOnly "mods.railcraft:Railcraft_1.7.10:9.12.3.0:dev"
provided name: 'Railcraft', version: config.railcraft.version, ext: 'jar'
provided name: 'IC2NuclearControl', version: config.nc.version, ext: 'jar' compileOnly "micdoodle8.mods:GalacticraftCore:1.7-3.0.12.504:Dev"
provided name: 'ImmersiveEngineering', version: config.immeng.version, ext: 'jar' compileOnly "micdoodle8.mods:MicdoodleCore:1.7-3.0.12.504:Dev"
provided name: 'magneticraft', version: config.magneticraft.version, ext: 'jar'
// compile files("libs/Galacticraft-API-1.7-${config.gc.version}.jar") compileOnly "thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev"
// compile files("libs/GalacticraftCore-Dev-${config.gc.version}.jar") compileOnly "com.azanor.baubles:Baubles:1.7.10-1.0.1.10:deobf"
provided name: "Galacticraft-API", version: config.gc.version, ext: 'jar' compileOnly "appeng:appliedenergistics2:rv3-beta-6:dev"
provided name: "GalacticraftCore-Dev", version: config.gc.version, ext: 'jar' compileOnly "applecore:AppleCore:1.7.10-3.1.1:deobf"
compileOnly "com.shedar.IC2NuclearControl:IC2NuclearControl:2.4.3a:dev"
} }
processResources processResources

View file

@ -1,30 +1,4 @@
minecraft.version=1.7.10 minecraft.version=1.7.10
forge.version=10.13.4.1566-1.7.10 forge.version=10.13.4.1614-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
ic2.version=2.2.790-experimental ic2.version=2.2.790-experimental
nei.version=1.0.3.57 gt.version=5.09.31
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

View file

@ -1,18 +1,18 @@
package gregtech.api.items; package gregtech.api.items;
import java.util.ArrayList;
import gregtech.api.GregTech_API; import gregtech.api.GregTech_API;
import gregtech.api.util.GT_Utility;
import ic2.api.reactor.IReactor; import ic2.api.reactor.IReactor;
import ic2.api.reactor.IReactorComponent; import ic2.api.reactor.IReactorComponent;
import ic2.core.IC2Potion;
import ic2.core.item.armor.ItemArmorHazmat; import ic2.core.item.armor.ItemArmorHazmat;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.ArrayList;
public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent { public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent {
public final int numberOfCells; 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)) { if (this.sRadiation > 0 && (entity instanceof EntityLivingBase)) {
EntityLivingBase entityLiving = (EntityLivingBase) entity; EntityLivingBase entityLiving = (EntityLivingBase) entity;
if (!GregTech_API.mIC2Classic&&!ItemArmorHazmat.hasCompleteHazmat(entityLiving)) { if (!GregTech_API.mIC2Classic&&!ItemArmorHazmat.hasCompleteHazmat(entityLiving)) {
IC2Potion.radiation.applyTo(entityLiving, sRadiation * 20, sRadiation * 10); GT_Utility.applyRadioactivity(entityLiving, sRadiation, stack.stackSize);
} }
} }
} }

View file

@ -1,8 +1,19 @@
package gregtech.api.metatileentity.implementations; 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.GT_Mod;
import gregtech.api.GregTech_API; 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.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable; 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.BaseMetaPipeEntity;
import gregtech.api.metatileentity.MetaPipeEntity; import gregtech.api.metatileentity.MetaPipeEntity;
import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.objects.XSTR; import gregtech.api.objects.XSTR;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility; import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client; import gregtech.common.GT_Client;
import gregtech.common.covers.GT_Cover_Drain; import gregtech.common.covers.GT_Cover_Drain;
import gregtech.common.covers.GT_Cover_FluidRegulator;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; 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.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; 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 class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
public final float mThickNess; public final float mThickNess;
@ -392,7 +396,20 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (coverBehavior instanceof GT_Cover_Drain) return true; if (coverBehavior instanceof GT_Cover_Drain) return true;
// Tinker Construct Faucets return a null tank info, so check the class // 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; final IFluidHandler fTileEntity = (tTileEntity instanceof IFluidHandler) ? (IFluidHandler) tTileEntity : null;
@ -402,8 +419,19 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (tInfo.length > 0) return true; 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 // 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 (GregTech_API.mTranslocator) {
if (gTileEntity != null && gTileEntity.getCoverBehaviorAtSide(tSide) instanceof GT_Cover_FluidRegulator) return true; try {
Class aCodeChickenTranslocator = Class.forName("codechicken.translocator.TileLiquidTranslocator");
if (aCodeChickenTranslocator != null) {
if (aCodeChickenTranslocator.isInstance(tTileEntity)) {
return true;
}
}
}
catch (Throwable t) {
}
}
} }
} }

View file

@ -1,10 +1,36 @@
package gregtech.api.util; 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.event.FMLInterModComms;
import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.GT_Mod; import gregtech.GT_Mod;
import gregtech.api.GregTech_API; 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.IDamagableItem;
import gregtech.api.interfaces.IItemContainer; import gregtech.api.interfaces.IItemContainer;
import gregtech.api.interfaces.internal.IGT_CraftingRecipe; 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.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; 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.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -38,13 +68,6 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe; 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!!! * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
* <p/> * <p/>
@ -600,13 +623,39 @@ public class GT_ModHandler {
return true; 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){ public static boolean addImmersiveEngineeringRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance2, ItemStack aOutput3, int aChance3){
if(GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes){ 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; 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){ public static boolean addMagneticraftRecipe(ItemStack aInput, ItemStack aOutput1, ItemStack aOutput2, int aChance2, ItemStack aOutput3, int aChance3){
if(GregTech_API.mMagneticraft && GT_Mod.gregtechproxy.mMagneticraftRecipes){ if(GregTech_API.mMagneticraft && GT_Mod.gregtechproxy.mMagneticraftRecipes){
ItemData tData = GT_OreDictUnificator.getAssociation(aInput); ItemData tData = GT_OreDictUnificator.getAssociation(aInput);
@ -621,60 +670,50 @@ public class GT_ModHandler {
return true; return true;
} }
public static boolean registerMagneticraftSifterRecipe(final ItemStack in, final ItemStack out, final ItemStack extra, public static boolean registerMagneticraftSifterRecipe(final ItemStack in, final ItemStack out, final ItemStack extra, final float prob) {
final float prob) {
//Get Magnetiraft Recipe Handler
Class cls;
try { try {
cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); if (mRecipeMag == null) {
//Get registerCrusherRecipe method from class. mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister");
Method mCrusher = cls.getDeclaredMethod("registerSifterRecipe", ItemStack.class, ItemStack.class, }
ItemStack.class, float.class); if (mRecipeMagSifter == null) {
//Invoke Method mRecipeMagSifter = mRecipeMag.getDeclaredMethod("registerSifterRecipe", ItemStack.class, ItemStack.class, ItemStack.class, float.class);
return (boolean) mCrusher.invoke(null, in, out, extra, prob); }
return (boolean) mRecipeMagSifter.invoke(null, in, out, extra, prob);
} }
catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Sifter handler."); GT_Log.err.println("WARNING: Bad Reflection into Magneticraft Sifter recipe handler.");
return false; return false;
} }
} }
public static boolean registerMagneticraftCrusherRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, public static boolean registerMagneticraftCrusherRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, final float prob1, final ItemStack out2, final float prob2) {
final float prob1, final ItemStack out2, final float prob2) {
//Get Magnetiraft Recipe Handler
Class cls;
try { try {
cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); if (mRecipeMag == null) {
//Get registerCrusherRecipe method from class. mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister");
Method mCrusher = cls.getDeclaredMethod("registerCrusherRecipe", ItemStack.class, ItemStack.class, }
ItemStack.class, float.class, ItemStack.class, float.class); if (mRecipeMagCrusher == null) {
//Invoke Method mRecipeMagCrusher = mRecipeMag.getDeclaredMethod("registerCrusherRecipe", ItemStack.class, ItemStack.class, ItemStack.class, float.class, ItemStack.class, float.class);
return (boolean) mCrusher.invoke(null, in, out0, out1,(float)((float)prob1/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent), out2,(float)((float)prob2/GT_Mod.gregtechproxy.mMagneticraftBonusOutputPercent)); }
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) { 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 Crusher recipe handler.");
return false; return false;
} }
} }
public static boolean registerMagneticraftGrinderRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, public static boolean registerMagneticraftGrinderRecipe(final ItemStack in, final ItemStack out0, final ItemStack out1, final float prob1, final ItemStack out2, final float prob2) {
final float prob1, final ItemStack out2, final float prob2) {
//Get Magnetiraft Recipe Handler
Class cls;
try { try {
cls = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister"); if (mRecipeMag == null) {
mRecipeMag = Class.forName("com.cout970.magneticraft.api.access.MgRecipeRegister");
//Get registerGrinderRecipe method from class. }
Method mGrinder = cls.getDeclaredMethod("registerGrinderRecipe", ItemStack.class, ItemStack.class, if (mRecipeMagGrinder == null) {
ItemStack.class, float.class, ItemStack.class, float.class); mRecipeMagGrinder = mRecipeMag.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)); 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) { 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; return false;
} }
} }

View file

@ -1,5 +1,39 @@
package gregtech.api.util; 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 cofh.api.transport.IItemDuct;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import gregtech.api.GregTech_API; import gregtech.api.GregTech_API;
@ -13,7 +47,12 @@ import gregtech.api.events.BlockScanningEvent;
import gregtech.api.interfaces.IDebugableBlock; import gregtech.api.interfaces.IDebugableBlock;
import gregtech.api.interfaces.IProjectileItem; import gregtech.api.interfaces.IProjectileItem;
import gregtech.api.interfaces.ITexture; 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_EnergyArmor_Item;
import gregtech.api.items.GT_Generic_Item; import gregtech.api.items.GT_Generic_Item;
import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; 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.RecipeInputItemStack;
import ic2.api.recipe.RecipeInputOreDict; import ic2.api.recipe.RecipeInputOreDict;
import ic2.api.recipe.RecipeOutput; import ic2.api.recipe.RecipeOutput;
import ic2.core.IC2Potion;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper; 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.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; 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.common.util.ForgeDirection;
import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
import net.minecraftforge.fluids.FluidStack;
import java.lang.reflect.Constructor; import net.minecraftforge.fluids.FluidTankInfo;
import java.lang.reflect.Field; import net.minecraftforge.fluids.IFluidContainerItem;
import java.lang.reflect.Method; import net.minecraftforge.fluids.IFluidHandler;
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;
/** /**
* NEVER INCLUDE THIS FILE IN YOUR MOD!!! * NEVER INCLUDE THIS FILE IN YOUR MOD!!!
@ -367,7 +400,20 @@ public class GT_Utility {
if (TE_CHECK && aTileEntity instanceof IItemDuct) return true; if (TE_CHECK && aTileEntity instanceof IItemDuct) return true;
if (BC_CHECK && aTileEntity instanceof buildcraft.api.transport.IPipeTile) if (BC_CHECK && aTileEntity instanceof buildcraft.api.transport.IPipeTile)
return ((buildcraft.api.transport.IPipeTile) aTileEntity).isPipeConnected(ForgeDirection.getOrientation(aSide)); 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; 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.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.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(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 true;
} }
return false; return false;

View file

@ -4,13 +4,17 @@ import gregtech.GT_Mod;
import gregtech.api.GregTech_API; import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values; import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials; import gregtech.api.enums.Materials;
import gregtech.api.util.GT_Log;
import gregtech.api.world.GT_Worldgen; import gregtech.api.world.GT_Worldgen;
import gregtech.common.blocks.GT_TileEntity_Ores; import gregtech.common.blocks.GT_TileEntity_Ores;
import gregtech.loaders.misc.GT_Achievements; import gregtech.loaders.misc.GT_Achievements;
import gregtech.loaders.postload.GT_Worldgenloader;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.chunk.IChunkProvider;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
@ -37,6 +41,8 @@ public class GT_Worldgen_GT_Ore_Layer
public final boolean mAsteroid; public final boolean mAsteroid;
public final String aTextWorldgen = "worldgen."; 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) { 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); super(aName, sList, aDefault);
this.mOverworld = GregTech_API.sWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Overworld", aOverworld); 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); GT_Achievements.registerOre(GregTech_API.sGeneratedMaterials[(mSporadicMeta % 1000)], aMinY, aMaxY, aWeight, aOverworld, aNether, aEnd);
sWeight += this.mWeight; sWeight += this.mWeight;
if(GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes){ 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);
}
} }
} }

View file

@ -43,12 +43,10 @@ public class GT_SensorCard_Item
} }
} }
@Override
public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange) { public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange) {
return update(aPanel.getWorldObj(), aCard, aMaxRange); return update(aPanel.getWorldObj(), aCard, aMaxRange);
} }
@Override
public CardState update(World world, ICardWrapper aCard, int aMaxRange) { public CardState update(World world, ICardWrapper aCard, int aMaxRange) {
ChunkCoordinates target = aCard.getTarget(); ChunkCoordinates target = aCard.getTarget();

View file

@ -1,11 +1,17 @@
package gregtech.loaders.postload; 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 bloodasp.galacticgreg.GT_Worldgenerator_Space;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;
import gregtech.GT_Mod; import gregtech.GT_Mod;
import gregtech.api.GregTech_API; import gregtech.api.GregTech_API;
import gregtech.api.enums.ConfigCategories; import gregtech.api.enums.ConfigCategories;
import gregtech.api.enums.Materials; 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_Layer;
import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces;
import gregtech.common.GT_Worldgen_Stone; import gregtech.common.GT_Worldgen_Stone;
@ -13,6 +19,28 @@ import gregtech.common.GT_Worldgenerator;
public class GT_Worldgenloader public class GT_Worldgenloader
implements Runnable { 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() { public void run() {
boolean tPFAA = (GregTech_API.sWorldgenFile.get(ConfigCategories.general, "AutoDetectPFAA", true)) && (Loader.isModLoaded("PFAAGeologica")); 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++) { 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); 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) { if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes && mSupportIE != null) {
blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralList.clear(); try {
blusunrize.immersiveengineering.api.tool.ExcavatorHandler.mineralCache.clear(); 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); 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); 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) { if (GregTech_API.mImmersiveEngineering && GT_Mod.gregtechproxy.mImmersiveEngineeringRecipes && mSupportIE != null) {
blusunrize.immersiveengineering.api.tool.ExcavatorHandler.recalculateChances(true); 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);
}
} }
} }
} }