aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r--src/Java/gtPlusPlus/GTplusplus.java252
-rw-r--r--src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java10
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java4
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java71
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java57
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java39
-rw-r--r--src/Java/gtPlusPlus/australia/entity/type/EntityDingo.java10
-rw-r--r--src/Java/gtPlusPlus/core/block/ModBlocks.java28
-rw-r--r--src/Java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java13
-rw-r--r--src/Java/gtPlusPlus/core/block/base/BlockBaseFluid.java3
-rw-r--r--src/Java/gtPlusPlus/core/block/machine/EggBox.java175
-rw-r--r--src/Java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java169
-rw-r--r--src/Java/gtPlusPlus/core/client/model/ModelEggBox.java65
-rw-r--r--src/Java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java38
-rw-r--r--src/Java/gtPlusPlus/core/client/renderer/particle/EntityDropParticleFX.java96
-rw-r--r--src/Java/gtPlusPlus/core/client/renderer/tabula/RenderTabulaBase.java46
-rw-r--r--src/Java/gtPlusPlus/core/common/CommonProxy.java38
-rw-r--r--src/Java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java2
-rw-r--r--src/Java/gtPlusPlus/core/container/Container_DecayablesChest.java9
-rw-r--r--src/Java/gtPlusPlus/core/container/Container_EggBox.java140
-rw-r--r--src/Java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java185
-rw-r--r--src/Java/gtPlusPlus/core/entity/InternalEntityRegistry.java16
-rw-r--r--src/Java/gtPlusPlus/core/gui/machine/GUI_EggBox.java60
-rw-r--r--src/Java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java183
-rw-r--r--src/Java/gtPlusPlus/core/gui/widget/GuiValueField.java86
-rw-r--r--src/Java/gtPlusPlus/core/handler/BookHandler.java255
-rw-r--r--src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java68
-rw-r--r--src/Java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java4
-rw-r--r--src/Java/gtPlusPlus/core/handler/GuiHandler.java42
-rw-r--r--src/Java/gtPlusPlus/core/handler/PacketHandler.java118
-rw-r--r--src/Java/gtPlusPlus/core/handler/StopAnnoyingFuckingAchievements.java30
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java17
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/EntityDeathHandler.java4
-rw-r--r--src/Java/gtPlusPlus/core/inventories/Inventory_EggBox.java176
-rw-r--r--src/Java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java173
-rw-r--r--src/Java/gtPlusPlus/core/item/ModItems.java77
-rw-r--r--src/Java/gtPlusPlus/core/item/base/BaseItemTickable.java68
-rw-r--r--src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBasicTile.java9
-rw-r--r--src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockRoundRobinator.java5
-rw-r--r--src/Java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java4
-rw-r--r--src/Java/gtPlusPlus/core/item/chemistry/CoalTar.java4
-rw-r--r--src/Java/gtPlusPlus/core/item/chemistry/GenericChem.java10
-rw-r--r--src/Java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java6
-rw-r--r--src/Java/gtPlusPlus/core/item/chemistry/RocketFuels.java18
-rw-r--r--src/Java/gtPlusPlus/core/item/general/ItemBasicScrubberTurbine.java147
-rw-r--r--src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java351
-rw-r--r--src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java8
-rw-r--r--src/Java/gtPlusPlus/core/item/general/spawn/ItemCustomSpawnEgg.java285
-rw-r--r--src/Java/gtPlusPlus/core/item/materials/DustDecayable.java2
-rw-r--r--src/Java/gtPlusPlus/core/lib/LoadedMods.java6
-rw-r--r--src/Java/gtPlusPlus/core/material/ALLOY.java38
-rw-r--r--src/Java/gtPlusPlus/core/network/handler/AbstractClientMessageHandler.java13
-rw-r--r--src/Java/gtPlusPlus/core/network/handler/AbstractMessageHandler.java37
-rw-r--r--src/Java/gtPlusPlus/core/network/handler/AbstractServerMessageHandler.java13
-rw-r--r--src/Java/gtPlusPlus/core/network/packet/AbstractPacket.java9
-rw-r--r--src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java128
-rw-r--r--src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java127
-rw-r--r--src/Java/gtPlusPlus/core/proxy/ClientProxy.java76
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java209
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_General.java82
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java12
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java142
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_Tools.java12
-rw-r--r--src/Java/gtPlusPlus/core/slots/SlotPollutionScrubber.java66
-rw-r--r--src/Java/gtPlusPlus/core/slots/SlotVolumetricFlask.java30
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java15
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java4
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/general/TileEntityEggBox.java359
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java3
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java403
-rw-r--r--src/Java/gtPlusPlus/core/util/Utils.java12
-rw-r--r--src/Java/gtPlusPlus/core/util/data/ArrayUtils.java7
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java145
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java26
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java23
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java102
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/PlayerUtils.java17
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java198
-rw-r--r--src/Java/gtPlusPlus/nei/DecayableRecipeHandler.java2
-rw-r--r--src/Java/gtPlusPlus/nei/GTPP_NEI_CustomMapHandler.java828
-rw-r--r--src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandler.java1317
-rw-r--r--src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandlerEx.java829
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_DefaultHandler.java864
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_FluidReactor.java29
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_MultiBlockHandler.java950
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_RFPP.java515
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_VacFurnace.java3
-rw-r--r--src/Java/gtPlusPlus/nei/GT_NEI_multiCentriElectroFreezer.java554
-rw-r--r--src/Java/gtPlusPlus/nei/NEI_GT_Config.java70
-rw-r--r--src/Java/gtPlusPlus/plugin/agrichem/BioRecipes.java24
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java5
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_CC.java28
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java252
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_CC_GuiContainerManager.java121
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java317
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java17
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java513
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java192
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java19
-rw-r--r--src/Java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java8
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java36
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/CONTAINER_PollutionCleaner.java207
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/GUI_PollutionCleaner.java16
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java5
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java41
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java141
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java282
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java232
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java173
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java68
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java35
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java796
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java6
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java44
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java10
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java81
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java15
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow_Item.java182
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/MachineUpdateHandler.java42
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java168
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java68
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java94
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java192
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java3
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java7
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java7
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java12
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java135
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java989
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java19
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java465
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java23
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java9
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java6
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricButcherKnife.java33
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricLighter.java26
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java29
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingToolHeadChoocher.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java95
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java8
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java182
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java14
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java20
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java325
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/recipes/RecipesToRemove.java4
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java25
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java10
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java140
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java20
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java39
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java22
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java10
-rw-r--r--src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/ic2/CustomInternalName.java13
-rw-r--r--src/Java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java32
-rw-r--r--src/Java/gtPlusPlus/xmod/sol/HANDLER_SpiceOfLife.java61
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java2
157 files changed, 13333 insertions, 5837 deletions
diff --git a/src/Java/gtPlusPlus/GTplusplus.java b/src/Java/gtPlusPlus/GTplusplus.java
index 1bf67c15fc..0df731c548 100644
--- a/src/Java/gtPlusPlus/GTplusplus.java
+++ b/src/Java/gtPlusPlus/GTplusplus.java
@@ -28,10 +28,13 @@ import gtPlusPlus.core.commands.CommandMath;
import gtPlusPlus.core.common.CommonProxy;
import gtPlusPlus.core.config.ConfigHandler;
import gtPlusPlus.core.handler.BookHandler;
+import gtPlusPlus.core.handler.PacketHandler;
import gtPlusPlus.core.handler.Recipes.RegistrationHandler;
import gtPlusPlus.core.handler.events.BlockEventHandler;
import gtPlusPlus.core.handler.events.LoginEventHandler;
import gtPlusPlus.core.handler.events.MissingMappingsEvent;
+import gtPlusPlus.core.item.ModItems;
+import gtPlusPlus.core.item.general.ItemGiantEgg;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.Material;
@@ -52,6 +55,7 @@ import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.chemplant.GregtechMTE_ChemicalPlant;
import gtPlusPlus.xmod.gregtech.loaders.GT_Material_Loader;
import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_BlastSmelterGT_GTNH;
+import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_MultisUsingFluidInsteadOfCells;
import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechMiniRaFusion;
import gtPlusPlus.xmod.thaumcraft.commands.CommandDumpAspects;
import net.minecraft.launchwrapper.Launch;
@@ -62,12 +66,9 @@ import net.minecraft.util.IIcon;
public class GTplusplus implements ActionListener {
public static enum INIT_PHASE {
- SUPER(null),
- PRE_INIT(SUPER),
- INIT(PRE_INIT),
- POST_INIT(INIT),
- SERVER_START(POST_INIT),
- STARTED(SERVER_START);
+ SUPER(null), PRE_INIT(SUPER), INIT(PRE_INIT), POST_INIT(
+ INIT
+ ), SERVER_START(POST_INIT), STARTED(SERVER_START);
protected boolean mIsPhaseActive = false;
private final INIT_PHASE mPrev;
@@ -75,7 +76,7 @@ public class GTplusplus implements ActionListener {
mPrev = aPreviousPhase;
}
- public synchronized final boolean isPhaseActive() {
+ public synchronized final boolean isPhaseActive() {
return mIsPhaseActive;
}
public synchronized final void setPhaseActive(boolean aIsPhaseActive) {
@@ -91,17 +92,17 @@ public class GTplusplus implements ActionListener {
public static INIT_PHASE CURRENT_LOAD_PHASE = INIT_PHASE.SUPER;
- //Mod Instance
+ // Mod Instance
@Mod.Instance(CORE.MODID)
public static GTplusplus instance;
- //Material Loader
+ // Material Loader
public static GT_Material_Loader mGregMatLoader;
- //GT_Proxy instance
+ // GT_Proxy instance
protected static Meta_GT_Proxy mGregProxy;
- //GT++ Proxy Instances
+ // GT++ Proxy Instances
@SidedProxy(clientSide = "gtPlusPlus.core.proxy.ClientProxy", serverSide = "gtPlusPlus.core.proxy.ServerProxy")
public static CommonProxy proxy;
@@ -110,14 +111,32 @@ public class GTplusplus implements ActionListener {
public static void loadTextures() {
Logger.INFO("Loading some textures on the client.");
// Tools
- Logger.WARNING("Processing texture: " + TexturesGtTools.SKOOKUM_CHOOCHER.getTextureFile().getResourcePath());
- Logger.WARNING("Processing texture: " + TexturesGtTools.ANGLE_GRINDER.getTextureFile().getResourcePath());
- Logger.WARNING("Processing texture: " + TexturesGtTools.ELECTRIC_SNIPS.getTextureFile().getResourcePath());
- Logger.WARNING("Processing texture: " + TexturesGtTools.ELECTRIC_LIGHTER.getTextureFile().getResourcePath());
- Logger.WARNING("Processing texture: " + TexturesGtTools.ELECTRIC_BUTCHER_KNIFE.getTextureFile().getResourcePath());
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtTools.SKOOKUM_CHOOCHER.getTextureFile().getResourcePath()
+ );
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtTools.ANGLE_GRINDER.getTextureFile().getResourcePath()
+ );
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtTools.ELECTRIC_SNIPS.getTextureFile().getResourcePath()
+ );
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtTools.ELECTRIC_LIGHTER.getTextureFile().getResourcePath()
+ );
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtTools.ELECTRIC_BUTCHER_KNIFE.getTextureFile().getResourcePath()
+ );
// Blocks
- Logger.WARNING("Processing texture: " + TexturesGtBlock.Casing_Machine_Dimensional.getTextureFile().getResourcePath());
+ Logger.WARNING(
+ "Processing texture: "
+ + TexturesGtBlock.Casing_Machine_Dimensional.getTextureFile().getResourcePath()
+ );
}
public GTplusplus() {
@@ -129,34 +148,45 @@ public class GTplusplus implements ActionListener {
@Mod.EventHandler
public void preInit(final FMLPreInitializationEvent event) {
INIT_PHASE.PRE_INIT.setPhaseActive(true);
- Logger.INFO("Loading " + CORE.name + " "+CORE.VERSION+" on Gregtech "+Utils.getGregtechVersionAsString());
- //Load all class objects within the plugin package.
+ Logger.INFO(
+ "Loading " + CORE.name + " " + CORE.VERSION + " on Gregtech "
+ + Utils.getGregtechVersionAsString()
+ );
+ // Load all class objects within the plugin package.
Core_Manager.veryEarlyInit();
+ PacketHandler.init();
- if(!Utils.isServer()){
+ if (!Utils.isServer()) {
enableCustomCapes = true;
}
- //Give this a go mate.
- //initAnalytics();
+ // Give this a go mate.
+ // initAnalytics();
setupMaterialBlacklist();
- //setupMaterialWhitelist();
+ // setupMaterialWhitelist();
- //HTTP Requests
+ // HTTP Requests
if (CORE.ConfigSwitches.enableUpdateChecker) {
- CORE.MASTER_VERSION = NetworkUtils.getContentFromURL("https://raw.githubusercontent.com/draknyte1/GTplusplus/master/Recommended.txt").toLowerCase();
+ CORE.MASTER_VERSION = NetworkUtils.getContentFromURL(
+ "https://raw.githubusercontent.com/draknyte1/GTplusplus/master/Recommended.txt"
+ ).toLowerCase();
CORE.USER_COUNTRY = GeoUtils.determineUsersCountry();
}
// Handle GT++ Config
- ConfigHandler.handleConfigFile(event);
-
- //Check for Dev
- CORE.DEVENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
- if (enableUpdateChecker){
- Logger.INFO("Latest is " + CORE.MASTER_VERSION + ". Updated? " + Utils.isModUpToDate());
+ ConfigHandler.handleConfigFile(event);
+
+ // Check for Dev
+ CORE.DEVENV = (Boolean) Launch.blackboard.get(
+ "fml.deobfuscatedEnvironment"
+ );
+ if (enableUpdateChecker) {
+ Logger.INFO(
+ "Latest is " + CORE.MASTER_VERSION + ". Updated? "
+ + Utils.isModUpToDate()
+ );
}
- //Utils.LOG_INFO("User's Country: " + CORE.USER_COUNTRY);
+ // Utils.LOG_INFO("User's Country: " + CORE.USER_COUNTRY);
Utils.registerEvent(new LoginEventHandler());
Utils.registerEvent(new MissingMappingsEvent());
@@ -178,7 +208,7 @@ public class GTplusplus implements ActionListener {
Meta_GT_Proxy.init();
Core_Manager.init();
- //Used by foreign players to generate .lang files for translation.
+ // Used by foreign players to generate .lang files for translation.
if (CORE.ConfigSwitches.dumpItemAndBlockData) {
LocaleUtils.generateFakeLocaleFile();
}
@@ -194,20 +224,32 @@ public class GTplusplus implements ActionListener {
BookHandler.runLater();
Meta_GT_Proxy.postInit();
Core_Manager.postInit();
- //SprinklerHandler.registerModFerts();
+ // SprinklerHandler.registerModFerts();
+ ItemGiantEgg.postInit(ModItems.itemBigEgg);
BlockEventHandler.init();
- GTPP_Recipe.reInit();
-
- Logger.INFO("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- Logger.INFO("| Recipes succesfully Loaded: " + RegistrationHandler.recipesSuccess + " | Failed: "
- + RegistrationHandler.recipesFailed + " |");
- Logger.INFO("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- Logger.INFO("Finally, we are finished. Have some cripsy bacon as a reward.");
+ GTPP_Recipe.reInit();
+
+ Logger.INFO(
+ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ );
+ Logger.INFO(
+ "| Recipes succesfully Loaded: "
+ + RegistrationHandler.recipesSuccess + " | Failed: "
+ + RegistrationHandler.recipesFailed + " |"
+ );
+ Logger.INFO(
+ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ );
+ Logger.INFO(
+ "Finally, we are finished. Have some cripsy bacon as a reward."
+ );
}
@EventHandler
- public synchronized void serverStarting(final FMLServerStartingEvent event) {
+ public synchronized void serverStarting(
+ final FMLServerStartingEvent event
+ ) {
INIT_PHASE.SERVER_START.setPhaseActive(true);
event.registerServerCommand(new CommandMath());
event.registerServerCommand(new CommandEnableDebugWhileRunning());
@@ -223,7 +265,9 @@ public class GTplusplus implements ActionListener {
}
@Mod.EventHandler
- public synchronized void serverStopping(final FMLServerStoppingEvent event) {
+ public synchronized void serverStopping(
+ final FMLServerStoppingEvent event
+ ) {
Core_Manager.serverStop();
if (GregtechBufferThread.mBufferThreadAllocation.size() > 0) {
for (GregtechBufferThread i : GregtechBufferThread.mBufferThreadAllocation.values()) {
@@ -239,11 +283,16 @@ public class GTplusplus implements ActionListener {
}
-
/**
- * This {@link EventHandler} is called after the {@link FMLPostInitializationEvent} stages of all loaded mods executes successfully.
- * {@link #onLoadComplete(FMLLoadCompleteEvent)} exists to inject recipe generation after Gregtech and all other mods are entirely loaded and initialized.
- * @param event - The {@link EventHandler} object passed through from FML to {@link #GTplusplus()}'s {@link #instance}.
+ * This {@link EventHandler} is called after the
+ * {@link FMLPostInitializationEvent} stages of all loaded mods executes
+ * successfully. {@link #onLoadComplete(FMLLoadCompleteEvent)} exists to
+ * inject recipe generation after Gregtech and all other mods are entirely
+ * loaded and initialized.
+ *
+ * @param event
+ * - The {@link EventHandler} object passed through from FML to
+ * {@link #GTplusplus()}'s {@link #instance}.
*/
@Mod.EventHandler
public void onLoadComplete(FMLLoadCompleteEvent event) {
@@ -254,17 +303,19 @@ public class GTplusplus implements ActionListener {
Logger.INFO("Passed verification checks.");
}
- @Mod.EventHandler
- public void onIDChangingEvent(FMLModIdMappingEvent aEvent) {
- GTPP_Recipe.reInit();
- }
+ @Mod.EventHandler
+ public void onIDChangingEvent(FMLModIdMappingEvent aEvent) {
+ GTPP_Recipe.reInit();
+ }
public static void tryPatchTurbineTextures() {
if (enableAnimatedTurbines) {
BlockIcons h = Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE;
BlockIcons h2 = Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE;
- try {
- Logger.INFO("Trying to patch GT textures to make Turbines animated.");
+ try {
+ Logger.INFO(
+ "Trying to patch GT textures to make Turbines animated."
+ );
IIcon aIcon = TexturesGtBlock.Overlay_Machine_Turbine_Active.getIcon();
if (ReflectionUtils.setField(h, "mIcon", aIcon)) {
Logger.INFO("Patched Gas Turbine Icon.");
@@ -281,16 +332,33 @@ public class GTplusplus implements ActionListener {
protected void generateGregtechRecipeMaps() {
- int[] mValidCount = new int[] {0, 0, 0};
- int[] mInvalidCount = new int[] {0, 0, 0};
- int[] mOriginalCount = new int[] {0, 0, 0};
+ int[] mValidCount = new int[]{
+ 0, 0, 0
+ };
+ int[] mInvalidCount = new int[]{
+ 0, 0, 0
+ };
+ int[] mOriginalCount = new int[]{
+ 0, 0, 0
+ };
RecipeGen_BlastSmelterGT_GTNH.generateGTNHBlastSmelterRecipesFromEBFList();
- FishPondFakeRecipe.generateFishPondRecipes();
+ FishPondFakeRecipe.generateFishPondRecipes();
GregtechMiniRaFusion.generateSlowFusionrecipes();
SemiFluidFuelHandler.generateFuels();
GregtechMTE_ChemicalPlant.generateRecipes();
+ mInvalidCount[0] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells(
+ GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes, GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT
+ );
+ mInvalidCount[1] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells(
+ GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes, GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT
+ );
+ mInvalidCount[2] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells(
+ GT_Recipe.GT_Recipe_Map.sVacuumRecipes, GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT
+ );
+ /*
+
//Large Centrifuge generation
mOriginalCount[0] = GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.mRecipeList.size();
for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.mRecipeList) {
@@ -315,13 +383,13 @@ public class GTplusplus implements ActionListener {
mInvalidCount[0]++;
}
}
-
+
if (GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mRecipeList.size() < 1) {
- for (GT_Recipe a : GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes.mRecipeList) {
+ for (GT_Recipe a : GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mRecipeList) {
GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.add(a);
}
}
-
+
//Large Electrolyzer generation
mOriginalCount[1] = GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes.mRecipeList.size();
for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes.mRecipeList) {
@@ -346,13 +414,13 @@ public class GTplusplus implements ActionListener {
mInvalidCount[1]++;
}
}
-
+
if (GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.mRecipeList.size() < 1) {
- for (GT_Recipe a : GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes.mRecipeList) {
+ for (GT_Recipe a : GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.mRecipeList) {
GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.add(a);
}
}
-
+
//Advanced Vacuum Freezer generation
mOriginalCount[2] = GT_Recipe.GT_Recipe_Map.sVacuumRecipes.mRecipeList.size();
for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sVacuumRecipes.mRecipeList) {
@@ -370,15 +438,15 @@ public class GTplusplus implements ActionListener {
mInvalidCount[2]++;
}
}
-
+
//Redo plasma recipes in Adv. Vac.
//Meta_GT_Proxy.generatePlasmaRecipesForAdvVacFreezer();
-
-
+
+
String[] machineName = new String[] {"Centrifuge", "Electrolyzer", "Vacuum Freezer"};
for (int i=0;i<3;i++) {
Logger.INFO("[Recipe] Generated "+mValidCount[i]+" recipes for the Industrial "+machineName[i]+". The original machine can process "+mOriginalCount[i]+" recipes, meaning "+mInvalidCount[i]+" are invalid for this Multiblock's processing in some way.");
- }
+ }*/
}
protected void dumpGtRecipeMap(final GT_Recipe_Map r) {
@@ -386,29 +454,43 @@ public class GTplusplus implements ActionListener {
Logger.INFO("Dumping " + r.mUnlocalizedName + " Recipes for Debug.");
for (final GT_Recipe newBo : x) {
Logger.INFO("========================");
- Logger.INFO("Dumping Input: " + ItemUtils.getArrayStackNames(newBo.mInputs));
- Logger.INFO("Dumping Inputs " + ItemUtils.getFluidArrayStackNames(newBo.mFluidInputs));
+ Logger.INFO(
+ "Dumping Input: "
+ + ItemUtils.getArrayStackNames(newBo.mInputs)
+ );
+ Logger.INFO(
+ "Dumping Inputs " + ItemUtils.getFluidArrayStackNames(
+ newBo.mFluidInputs
+ )
+ );
Logger.INFO("Dumping Duration: " + newBo.mDuration);
Logger.INFO("Dumping EU/t: " + newBo.mEUt);
- Logger.INFO("Dumping Output: " + ItemUtils.getArrayStackNames(newBo.mOutputs));
- Logger.INFO("Dumping Output: " + ItemUtils.getFluidArrayStackNames(newBo.mFluidOutputs));
+ Logger.INFO(
+ "Dumping Output: "
+ + ItemUtils.getArrayStackNames(newBo.mOutputs)
+ );
+ Logger.INFO(
+ "Dumping Output: " + ItemUtils.getFluidArrayStackNames(
+ newBo.mFluidOutputs
+ )
+ );
Logger.INFO("========================");
}
}
- private static final boolean setupMaterialBlacklist(){
+ private static final boolean setupMaterialBlacklist() {
Material.invalidMaterials.put(Materials._NULL);
Material.invalidMaterials.put(Materials.Clay);
Material.invalidMaterials.put(Materials.Phosphorus);
Material.invalidMaterials.put(Materials.Steel);
Material.invalidMaterials.put(Materials.Bronze);
Material.invalidMaterials.put(Materials.Hydrogen);
- //Infused TC stuff
- Material.invalidMaterials.put(Materials.InfusedAir);
- Material.invalidMaterials.put(Materials.InfusedEarth);
- Material.invalidMaterials.put(Materials.InfusedFire);
+ // Infused TC stuff
+ Material.invalidMaterials.put(Materials.InfusedAir);
+ Material.invalidMaterials.put(Materials.InfusedEarth);
+ Material.invalidMaterials.put(Materials.InfusedFire);
Material.invalidMaterials.put(Materials.InfusedWater);
- //EIO Materials
+ // EIO Materials
Material.invalidMaterials.put(Materials.SoulSand);
Material.invalidMaterials.put(Materials.EnderPearl);
Material.invalidMaterials.put(Materials.EnderEye);
@@ -417,7 +499,7 @@ public class GTplusplus implements ActionListener {
Material.invalidMaterials.put(Materials.Soularium);
Material.invalidMaterials.put(Materials.PhasedIron);
- if (Material.invalidMaterials.size() > 0){
+ if (Material.invalidMaterials.size() > 0) {
return true;
}
return false;
@@ -429,14 +511,14 @@ public class GTplusplus implements ActionListener {
mGregMatLoader = new GT_Material_Loader();
- //Non GTNH Materials
- if (!CORE.GTNH){
- //Mithril - Random Dungeon Loot
- mGregMatLoader.enableMaterial(Materials.Mithril);
- }
+ // Non GTNH Materials
+ if (!CORE.GTNH) {
+ // Mithril - Random Dungeon Loot
+ mGregMatLoader.enableMaterial(Materials.Mithril);
+ }
- //Force - Alloying
- mGregMatLoader.enableMaterial(Materials.Force);
+ // Force - Alloying
+ mGregMatLoader.enableMaterial(Materials.Force);
}
}
diff --git a/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java b/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
index fb1258f6d2..6fe4209efe 100644
--- a/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
+++ b/src/Java/gtPlusPlus/api/helpers/GregtechPlusPlus_API.java
@@ -6,6 +6,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.WeightedCollection;
import gtPlusPlus.api.objects.minecraft.multi.SpecialMultiBehaviour;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG;
import gtPlusPlus.xmod.gregtech.api.util.SpecialBehaviourTooltipHandler;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
@@ -36,6 +37,15 @@ public class GregtechPlusPlus_API {
return mSpecialBehaviourItemMap;
}
+ /**
+ * Allows RTG Fuel pellets from other mods to be used in the RTG hatch.
+ * @param aStack - The Pellet Stack, sanitsed after passing through.
+ * @param aFuelValue - The Fuel Value of the Pellet to be added to the energy storage.
+ * @return - Did register?
+ */
+ public static boolean registerPelletForRtgHatch(ItemStack aStack, long aFuelValue) {
+ return GT_MetaTileEntity_Hatch_Energy_RTG.registerPelletForHatch(aStack, aFuelValue);
+ }
}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
index 4fb6b9d8a7..476926826b 100644
--- a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
@@ -27,7 +27,9 @@ public class ItemStackData {
}
public ItemStack getStack() {
- return ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
}
}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
new file mode 100644
index 0000000000..947b0a97b4
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
@@ -0,0 +1,71 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+import net.minecraft.item.ItemStack;
+import thaumcraft.api.aspects.AspectList;
+
+public class ThaumcraftDataStack extends Stack<ThaumcraftItemStackData> {
+
+ private final int mStackSize;
+
+ public ThaumcraftDataStack() {
+ this(Integer.MAX_VALUE);
+ }
+
+ public ThaumcraftDataStack(int aMaxSize) {
+ mStackSize = aMaxSize;
+ }
+
+ public boolean containsItemStack(ItemStack aStack, boolean aAddItemStackIfMissingFromStack) {
+ return getItemStackIndex(aStack) != -1;
+ }
+
+ private int getItemStackIndex(ItemStack aStack) {
+ if (this.empty() || aStack == null) {
+ return -1;
+ }
+ Iterator<ThaumcraftItemStackData> iterator = this.iterator();
+ int aIndex = 0;
+ while(iterator.hasNext()){
+ ThaumcraftItemStackData value = iterator.next();
+ if (value.doesItemStackDataMatch(aStack)) {
+ //int index = this.search(value);
+ return aIndex;
+ }
+ aIndex++;
+ }
+ return -1;
+ }
+
+ public AspectList getAspectsForStack(ItemStack aStack) {
+ if (aStack != null) {
+ int aIndex = getItemStackIndex(aStack);
+ if (!this.empty()) {
+ if (aIndex != -1) {
+ ThaumcraftItemStackData aValue = this.elementAt(aIndex);
+ if (aValue != null) {
+ return aValue.getAspectList();
+ }
+ }
+ }
+ if (this.empty() || aIndex == -1) {
+ ThaumcraftItemStackData aTemp = new ThaumcraftItemStackData(aStack);
+ this.push(aTemp);
+ return aTemp.getAspectList();
+ }
+ }
+ return new AspectList();
+ }
+
+ @Override
+ public ThaumcraftItemStackData push(ThaumcraftItemStackData item) {
+ if (this.size() >= this.mStackSize) {
+ this.pop();
+ }
+ return super.push(item);
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
new file mode 100644
index 0000000000..1e9ea49dbf
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
@@ -0,0 +1,57 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
+
+public class ThaumcraftItemStackData {
+
+ protected final Item mItem;
+ protected final int mDamage;
+ protected final int mStackSize;
+ protected final NBTTagCompound mNBT;
+ protected final String mUniqueDataTag;
+ private final AspectList mAspectList;
+
+ public ThaumcraftItemStackData (ItemStack aStack) {
+ mItem = aStack.getItem();
+ mDamage = aStack.getItemDamage();
+ mStackSize = aStack.stackSize;
+ mNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ mUniqueDataTag = ""+Item.getIdFromItem(mItem)+""+mDamage+""+mNBT.getId();
+ mAspectList = ThaumcraftCraftingManager.getObjectTags(aStack);
+ }
+
+ public String getUniqueDataIdentifier() {
+ return this.mUniqueDataTag;
+ }
+
+ public ItemStack getStack() {
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
+ }
+
+ public AspectList getAspectList() {
+ return mAspectList;
+ }
+
+ public boolean doesItemStackDataMatch(ItemStack aStack) {
+ if (aStack == null) {
+ return false;
+ }
+ Item aItem = aStack.getItem();
+ int aMeta = aStack.getItemDamage();
+ if (aItem != null) {
+ if (aItem == mItem && aMeta == mDamage) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
new file mode 100644
index 0000000000..1e16527065
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
@@ -0,0 +1,39 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.HashMap;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class ThaumcraftSmeltingCache {
+
+ HashMap<String, Boolean> mInternalCache = new HashMap<String, Boolean>();
+
+ public void addItemToCache(ItemStack aStack, Boolean aSmelting) {
+ String aKey = getUniqueKey(aStack);
+ mInternalCache.put(aKey, aSmelting);
+ }
+
+ public int canSmelt(ItemStack aStack) {
+ String aKey = getUniqueKey(aStack);
+ Boolean aCanSmeltValue = mInternalCache.get(aKey);
+ if (aCanSmeltValue != null) {
+ if (aCanSmeltValue) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ return -1;
+ }
+
+ public static final String getUniqueKey(ItemStack aStack) {
+ Item aItem = aStack.getItem();
+ int aDamage = aStack.getItemDamage();
+ NBTTagCompound aNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ return ""+Item.getIdFromItem(aItem)+""+aDamage+""+aNBT.getId();
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/australia/entity/type/EntityDingo.java b/src/Java/gtPlusPlus/australia/entity/type/EntityDingo.java
index 02068411fc..11b9737c4f 100644
--- a/src/Java/gtPlusPlus/australia/entity/type/EntityDingo.java
+++ b/src/Java/gtPlusPlus/australia/entity/type/EntityDingo.java
@@ -113,9 +113,6 @@ public class EntityDingo extends EntityWolf {
protected void entityInit() {
super.entityInit();
- this.dataWatcher.addObject(18, new Float(this.getHealth()));
- this.dataWatcher.addObject(19, new Byte((byte) 0));
- this.dataWatcher.addObject(20, new Byte((byte) BlockColored.func_150032_b(1)));
}
protected void func_145780_a(int p_145780_1_, int p_145780_2_, int p_145780_3_, Block p_145780_4_) {
@@ -127,8 +124,6 @@ public class EntityDingo extends EntityWolf {
*/
public void writeEntityToNBT(NBTTagCompound p_70014_1_) {
super.writeEntityToNBT(p_70014_1_);
- p_70014_1_.setBoolean("Angry", this.isAngry());
- p_70014_1_.setByte("CollarColor", (byte) this.getCollarColor());
}
/**
@@ -136,11 +131,6 @@ public class EntityDingo extends EntityWolf {
*/
public void readEntityFromNBT(NBTTagCompound p_70037_1_) {
super.readEntityFromNBT(p_70037_1_);
- this.setAngry(p_70037_1_.getBoolean("Angry"));
-
- if (p_70037_1_.hasKey("CollarColor", 99)) {
- this.setCollarColor(p_70037_1_.getByte("CollarColor"));
- }
}
/**
diff --git a/src/Java/gtPlusPlus/core/block/ModBlocks.java b/src/Java/gtPlusPlus/core/block/ModBlocks.java
index a8536683b5..b51915bb7b 100644
--- a/src/Java/gtPlusPlus/core/block/ModBlocks.java
+++ b/src/Java/gtPlusPlus/core/block/ModBlocks.java
@@ -13,22 +13,12 @@ import gtPlusPlus.core.block.general.PlayerDoors;
import gtPlusPlus.core.block.general.antigrief.BlockWitherProof;
import gtPlusPlus.core.block.general.redstone.BlockGenericRedstoneDetector;
import gtPlusPlus.core.block.general.redstone.BlockGenericRedstoneTest;
-import gtPlusPlus.core.block.machine.CircuitProgrammer;
-import gtPlusPlus.core.block.machine.DecayablesChest;
-import gtPlusPlus.core.block.machine.FishTrap;
-import gtPlusPlus.core.block.machine.HeliumGenerator;
-import gtPlusPlus.core.block.machine.Machine_ModularityTable;
-import gtPlusPlus.core.block.machine.Machine_PestKiller;
-import gtPlusPlus.core.block.machine.Machine_PooCollector;
-import gtPlusPlus.core.block.machine.Machine_ProjectTable;
-import gtPlusPlus.core.block.machine.Machine_RoundRobinator;
-import gtPlusPlus.core.block.machine.Machine_SuperJukebox;
-import gtPlusPlus.core.block.machine.Machine_TradeTable;
-import gtPlusPlus.core.block.machine.Machine_Workbench;
-import gtPlusPlus.core.block.machine.Machine_WorkbenchAdvanced;
+import gtPlusPlus.core.block.machine.*;
import gtPlusPlus.core.block.machine.bedrock.Mining_Head_Fake;
import gtPlusPlus.core.block.machine.bedrock.Mining_Pipe_Fake;
import gtPlusPlus.core.fluids.FluidRegistryHandler;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraftforge.fluids.Fluid;
@@ -37,6 +27,7 @@ public final class ModBlocks {
public static Block blockRoundRobinator;
public static Block blockCircuitProgrammer;
+ public static Block blockVolumetricFlaskSetter;
public static Block blockFakeMiningPipe;
public static Block blockFakeMiningHead;
@@ -44,6 +35,7 @@ public final class ModBlocks {
public static Block blockWorkbench;
public static Block blockWorkbenchAdvanced;
public static Block blockDecayablesChest;
+ public static Block blockEggBox;
//Blocks
//public static Block blockBloodSteel;
@@ -58,6 +50,7 @@ public final class ModBlocks {
public static Block blockCasings5Misc;
public static Block blockCasingsTieredGTPP;
public static Block blockSpecialMultiCasings;
+ public static Block blockCustomMachineCasings;
public static Block blockMetaTileEntity;
public static Block blockHeliumGenerator;
@@ -137,8 +130,9 @@ public final class ModBlocks {
blockFakeMiningHead = new Mining_Head_Fake();
blockCircuitProgrammer = new CircuitProgrammer();
-
+
blockDecayablesChest = new DecayablesChest();
+ blockEggBox = new EggBox();
blockPlayerDoorWooden = new PlayerDoors(Material.wood, "door_wood", true);
blockPlayerDoorIron = new PlayerDoors(Material.iron, "door_iron", true);
@@ -154,7 +148,11 @@ public final class ModBlocks {
blockPestKiller = new Machine_PestKiller();
blockRoundRobinator = new Machine_RoundRobinator();
-
+
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ blockVolumetricFlaskSetter = new VolumetricFlaskSetter();
+ }
+
new BlockGenericRedstoneDetector();
new BlockGenericRedstoneTest();
diff --git a/src/Java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java b/src/Java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java
index 6166835f31..2bfd09d848 100644
--- a/src/Java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java
+++ b/src/Java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java
@@ -1,6 +1,8 @@
package gtPlusPlus.core.block.base;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
@@ -22,6 +24,7 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
@@ -312,4 +315,14 @@ public abstract class BasicTileBlockWithTooltip extends BlockContainer implement
return l;
}
+
+ public Item getItemDropped(int meta, Random rand, int p_149650_3_){
+ return ItemUtils.getSimpleStack(this, 1).getItem();
+ }
+
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune){
+ ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
+ drops.add(ItemUtils.simpleMetaStack(this, metadata, 1));
+ return drops;
+ }
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/block/base/BlockBaseFluid.java b/src/Java/gtPlusPlus/core/block/base/BlockBaseFluid.java
index 49bb5aaf0c..db37e18a32 100644
--- a/src/Java/gtPlusPlus/core/block/base/BlockBaseFluid.java
+++ b/src/Java/gtPlusPlus/core/block/base/BlockBaseFluid.java
@@ -14,8 +14,7 @@ import net.minecraft.entity.EnumCreatureType;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
-
-import cofh.lib.render.particle.EntityDropParticleFX;
+import gtPlusPlus.core.client.renderer.particle.EntityDropParticleFX;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.item.base.itemblock.ItemBlockMeta;
import gtPlusPlus.core.lib.CORE;
diff --git a/src/Java/gtPlusPlus/core/block/machine/EggBox.java b/src/Java/gtPlusPlus/core/block/machine/EggBox.java
new file mode 100644
index 0000000000..630c4b5bc2
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/block/machine/EggBox.java
@@ -0,0 +1,175 @@
+package gtPlusPlus.core.block.machine;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.common.registry.LanguageRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.GTplusplus;
+import gtPlusPlus.api.interfaces.ITileTooltip;
+import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.core.handler.GuiHandler;
+import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.tileentities.general.TileEntityEggBox;
+import gtPlusPlus.core.util.minecraft.InventoryUtils;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockContainer;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class EggBox extends BlockContainer implements ITileTooltip
+{
+ @SideOnly(Side.CLIENT)
+ private IIcon textureTop;
+ @SideOnly(Side.CLIENT)
+ private IIcon textureBottom;
+ @SideOnly(Side.CLIENT)
+ private IIcon textureFront;
+
+ /**
+ * Determines which tooltip is displayed within the itemblock.
+ */
+ private final int mTooltipID = 7;
+ public final int field_149956_a = 0;
+
+ @Override
+ public int getTooltipID() {
+ return this.mTooltipID;
+ }
+
+ @SuppressWarnings("deprecation")
+ public EggBox(){
+ super(Material.wood);
+ this.setBlockName("blockEggBox");
+ this.setCreativeTab(AddToCreativeTab.tabMachines);
+ this.setHardness(5f);
+ this.setResistance(1f);
+ GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockEggBox");
+ LanguageRegistry.addName(this, "Egg Box");
+
+ }
+
+ /**
+ * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
+ */
+ public boolean renderAsNormalBlock()
+ {
+ return true;
+ }
+
+ /**
+ * The type of render function that is called for this block
+ */
+ @SideOnly(Side.CLIENT)
+ public int getRenderType(){
+ return super.getRenderType();
+ }
+
+ /**
+ * Gets the block's texture. Args: side, meta
+ */
+ @Override
+ @SideOnly(Side.CLIENT)
+ public IIcon getIcon(final int p_149691_1_, final int p_149691_2_)
+ {
+ return p_149691_1_ == 1 ? this.textureTop : this.textureFront;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(final IIconRegister p_149651_1_)
+ {
+ this.blockIcon = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "EggBox_top");
+ this.textureTop = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "EggBox_top");
+ this.textureBottom = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "EggBox_side");
+ this.textureFront = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "EggBox_side");
+ }
+
+ /**
+ * Called upon block activation (right click on the block.)
+ */
+ @Override
+ public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, final int side, final float lx, final float ly, final float lz)
+ {
+ if (world.isRemote) {
+ return true;
+ }
+
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if ((te != null) && (te instanceof TileEntityEggBox)){
+ player.openGui(GTplusplus.instance, GuiHandler.GUI17, world, x, y, z);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int getRenderBlockPass() {
+ return 0;
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(final World world, final int p_149915_2_) {
+ return new TileEntityEggBox();
+ }
+
+ @Override
+ public void onBlockAdded(final World world, final int x, final int y, final int z) {
+ super.onBlockAdded(world, x, y, z);
+ }
+
+ @Override
+ public void breakBlock(final World world, final int x, final int y, final int z, final Block block, final int number) {
+ InventoryUtils.dropInventoryItems(world, x, y, z, block);
+ super.breakBlock(world, x, y, z, block, number);
+ }
+
+ @Override
+ public void onBlockPlacedBy(final World world, final int x, final int y, final int z, final EntityLivingBase entity, final ItemStack stack) {
+ if (stack.hasDisplayName()) {
+ ((TileEntityEggBox) world.getTileEntity(x,y,z)).setCustomName(stack.getDisplayName());
+ }
+ }
+
+ @Override
+ public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, final int z) {
+ return false;
+ }
+
+ /*@Override
+ public void breakBlock(World world, BlockPos pos, IBlockState blockstate) {
+ TileEntityFishTrap te = (TileEntityFishTrap) world.getTileEntity(pos);
+ InventoryHelper.dropInventoryItems(world, pos, te);
+ super.breakBlock(world, pos, blockstate);
+ }
+
+
+ @Override
+ public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
+ if (stack.hasDisplayName()) {
+ ((TileEntityFishTrap) worldIn.getTileEntity(pos)).setCustomName(stack.getDisplayName());
+ }
+ }*/
+
+ /**
+ * Update Chest Meta - Stub
+ * @param aWorld
+ * @param xPos
+ * @param yPos
+ * @param zPos
+ */
+ @Deprecated
+ public void func_149954_e(World aWorld, int xPos, int yPos, int zPos)
+ {
+
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java b/src/Java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java
new file mode 100644
index 0000000000..36ea2af7cc
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java
@@ -0,0 +1,169 @@
+package gtPlusPlus.core.block.machine;
+
+import cpw.mods.fml.common.registry.LanguageRegistry;
+import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import gtPlusPlus.GTplusplus;
+import gtPlusPlus.api.objects.minecraft.CubicObject;
+import gtPlusPlus.core.block.base.BasicTileBlockWithTooltip;
+import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.core.handler.GuiHandler;
+import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.network.packet.Packet_VolumetricFlaskGui2;
+import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter;
+import gtPlusPlus.core.util.minecraft.PlayerUtils;
+import net.minecraft.block.material.Material;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class VolumetricFlaskSetter extends BasicTileBlockWithTooltip {
+
+ /**
+ * Determines which tooltip is displayed within the itemblock.
+ */
+ private final int mTooltipID = 8;
+
+ @Override
+ public int getTooltipID() {
+ return this.mTooltipID;
+ }
+
+ @Override
+ public Class<? extends ItemBlock> getItemBlockClass() {
+ return ItemBlockBasicTile.class;
+ }
+
+ @SuppressWarnings("deprecation")
+ public VolumetricFlaskSetter(){
+ super(Material.iron);
+ LanguageRegistry.addName(this, "Volumetric Flask Configurator");
+ }
+
+ /**
+ * Called upon block activation (right click on the block.)
+ */
+ @Override
+ public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, final int side, final float lx, final float ly, final float lz)
+ {
+ if (world.isRemote) {
+ return true;
+ }
+ else {
+
+ boolean mDidScrewDriver = false;
+ // Check For Screwdriver
+ try {
+ final ItemStack mHandStack = PlayerUtils.getItemStackInPlayersHand(world, player.getDisplayName());
+ final Item mHandItem = mHandStack.getItem();
+ if (((mHandItem instanceof GT_MetaGenerated_Tool_01)
+ && ((mHandItem.getDamage(mHandStack) == 22) || (mHandItem.getDamage(mHandStack) == 150)))) {
+ final TileEntityVolumetricFlaskSetter tile = (TileEntityVolumetricFlaskSetter) world.getTileEntity(x, y, z);
+ if (tile != null) {
+ mDidScrewDriver = tile.onScrewdriverRightClick((byte) side, player, x, y, z);
+ }
+ }
+ }
+ catch (final Throwable t) {}
+
+ if (!mDidScrewDriver) {
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if ((te != null) && (te instanceof TileEntityVolumetricFlaskSetter)){
+ player.openGui(GTplusplus.instance, GuiHandler.GUI18, world, x, y, z);
+ TileEntityVolumetricFlaskSetter aTile = (TileEntityVolumetricFlaskSetter) te;
+ //new Packet_VolumetricFlaskGui2(aTile, aTile.getCustomValue());
+ return true;
+ }
+ }
+ else {
+ return true;
+ }
+
+ }
+ return false;
+ }
+
+ @Override
+ public int getRenderBlockPass() {
+ return 1;
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(final World world, final int p_149915_2_) {
+ return new TileEntityVolumetricFlaskSetter();
+ }
+
+ @Override
+ public void onBlockAdded(final World world, final int x, final int y, final int z) {
+ super.onBlockAdded(world, x, y, z);
+ }
+
+ @Override
+ public void onBlockPlacedBy(final World world, final int x, final int y, final int z, final EntityLivingBase entity, final ItemStack stack) {
+ if (stack.hasDisplayName()) {
+ ((TileEntityVolumetricFlaskSetter) world.getTileEntity(x,y,z)).setCustomName(stack.getDisplayName());
+ }
+ }
+
+ @Override
+ public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, final int z) {
+ return false;
+ }
+
+ @Override
+ public int getMetaCount() {
+ return 0;
+ }
+
+ @Override
+ public String getUnlocalBlockName() {
+ return "blockVolumetricFlaskSetter";
+ }
+
+ @Override
+ protected float initBlockHardness() {
+ return 5f;
+ }
+
+ @Override
+ protected float initBlockResistance() {
+ return 1f;
+ }
+
+ @Override
+ protected CreativeTabs initCreativeTab() {
+ return AddToCreativeTab.tabMachines;
+ }
+
+ @Override
+ protected String getTileEntityName() {
+ return "Volumetric Flask Configurator";
+ }
+
+ @Override
+ public CubicObject<String>[] getCustomTextureDirectoryObject() {
+ String[] aTexData = new String[] {
+ CORE.MODID + ":" + "metro/" + "TEXTURE_METAL_PANEL_A",
+ CORE.MODID + ":" + "metro/" + "TEXTURE_TECH_PANEL_C",
+ CORE.MODID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H",
+ CORE.MODID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H",
+ CORE.MODID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H",
+ CORE.MODID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H"
+ };
+ CubicObject<String>[] aTextureData = new CubicObject[] {new CubicObject<String>(aTexData)};
+ return aTextureData;
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/client/model/ModelEggBox.java b/src/Java/gtPlusPlus/core/client/model/ModelEggBox.java
new file mode 100644
index 0000000000..0aef4eb7b0
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/client/model/ModelEggBox.java
@@ -0,0 +1,65 @@
+package gtPlusPlus.core.client.model;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.client.model.tabula.ModelTabulaBase;
+import gtPlusPlus.core.client.renderer.tabula.RenderTabulaBase;
+import gtPlusPlus.core.tileentities.general.TileEntityEggBox;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+
+/**
+ * ModelEggBox - Alkalus
+ * Created using Tabula 4.1.1
+ */
+public class ModelEggBox extends ModelTabulaBase {
+
+ private final AutoMap<Pair<ModelRenderer, Float>> mParts = new AutoMap<Pair<ModelRenderer, Float>>();
+
+ private static RenderTabulaBase mRendererInstance;
+
+ public ModelRenderer bottom;
+ //EggBox_full.png
+
+ public ModelEggBox() {
+ super(64, 64);
+ this.textureWidth = 64;
+ this.textureHeight = 64;
+
+ this.bottom = new ModelRenderer(this, 0, 19);
+ this.bottom.setRotationPoint(1.0F, 6.0F, 1.0F);
+ this.bottom.addBox(0.0F, 0.0F, 0.0F, 14, 10, 14, 0.0F);
+ mParts.add(new Pair<ModelRenderer, Float>(bottom, 0f));
+ }
+
+ @Override
+ public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
+ //Logger.INFO("Rendering EggBox");
+ this.bottom.render(f5);
+ }
+
+ /**
+ * This is a helper function from Tabula to set the rotation of model parts
+ */
+ public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) {
+ modelRenderer.rotateAngleX = x;
+ modelRenderer.rotateAngleY = y;
+ modelRenderer.rotateAngleZ = z;
+ }
+
+ @Override
+ protected AutoMap<Pair<ModelRenderer, Float>> getModelParts() {
+ AutoMap<Pair<ModelRenderer, Float>> aParts = new AutoMap<Pair<ModelRenderer, Float>>();
+ aParts.add(new Pair<ModelRenderer, Float>(bottom, 0.0625F));
+ return aParts;
+ //return mParts;
+ }
+
+ public static RenderTabulaBase getRenderer() {
+ if (mRendererInstance == null) {
+ mRendererInstance = new RenderTabulaBase(new ModelEggBox(), "textures/blocks/TileEntities/EggBox_full.png", TileEntityEggBox.class);
+ }
+ return mRendererInstance;
+ }
+}
diff --git a/src/Java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java b/src/Java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java
new file mode 100644
index 0000000000..3a0cbb636b
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java
@@ -0,0 +1,38 @@
+package gtPlusPlus.core.client.model.tabula;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+
+/**
+ * ModelEggBox - Alkalus
+ * Created using Tabula 4.1.1
+ */
+public abstract class ModelTabulaBase extends ModelBase {
+
+
+ public ModelTabulaBase(int aTexWidth, int aTexHeight) {
+ this.textureWidth = aTexWidth;
+ this.textureHeight = aTexHeight;
+ }
+
+ protected abstract AutoMap<Pair<ModelRenderer, Float>> getModelParts();
+
+ public void renderAll() {
+ for (Pair<ModelRenderer, Float> part : getModelParts()) {
+ //Logger.INFO("Rendering EggBox");
+ part.getKey().render(part.getValue());
+ }
+ }
+
+ /**
+ * This is a helper function from Tabula to set the rotation of model parts
+ */
+ public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) {
+ modelRenderer.rotateAngleX = x;
+ modelRenderer.rotateAngleY = y;
+ modelRenderer.rotateAngleZ = z;
+ }
+}
diff --git a/src/Java/gtPlusPlus/core/client/renderer/particle/EntityDropParticleFX.java b/src/Java/gtPlusPlus/core/client/renderer/particle/EntityDropParticleFX.java
new file mode 100644
index 0000000000..ed2fdff272
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/client/renderer/particle/EntityDropParticleFX.java
@@ -0,0 +1,96 @@
+package gtPlusPlus.core.client.renderer.particle;
+
+import cofh.lib.util.helpers.MathHelper;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+import net.minecraft.block.BlockLiquid;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.particle.EntityFX;
+import net.minecraft.world.World;
+
+@SideOnly(Side.CLIENT)
+public class EntityDropParticleFX extends EntityFX {
+
+ private int bobTimer;
+
+ public EntityDropParticleFX(World world, double x, double y, double z, float particleRed, float particleGreen, float particleBlue) {
+
+ this(world, x, y, z, particleRed, particleGreen, particleBlue, -1);
+ }
+
+ public EntityDropParticleFX(World world, double x, double y, double z, float particleRed, float particleGreen, float particleBlue, int gravityMod) {
+
+ super(world, x, y, z, 0.0D, 0.0D, 0.0D);
+ this.motionX = this.motionY = this.motionZ = 0.0D;
+
+ this.particleRed = particleRed;
+ this.particleGreen = particleGreen;
+ this.particleBlue = particleBlue;
+
+ this.setParticleTextureIndex(113);
+ this.setSize(0.01F, 0.01F);
+ this.particleGravity = -0.06F * gravityMod;
+ this.bobTimer = 40;
+ this.particleMaxAge = (int) (48.0D / (Math.random() * 0.8D + 0.2D));
+ this.motionX = this.motionY = this.motionZ = 0.0D;
+ }
+
+ @Override
+ public void onUpdate() {
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+
+ this.motionY -= this.particleGravity;
+
+ if (this.bobTimer-- > 0) {
+ this.motionX *= 0.02D;
+ this.motionY *= 0.02D;
+ this.motionZ *= 0.02D;
+ this.setParticleTextureIndex(113);
+ } else {
+ this.setParticleTextureIndex(112);
+ }
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.9800000190734863D;
+ this.motionY *= 0.9800000190734863D;
+ this.motionZ *= 0.9800000190734863D;
+
+ if (this.particleMaxAge-- <= 0) {
+ this.setDead();
+ }
+ if (this.onGround) {
+ this.setParticleTextureIndex(114);
+ this.motionX *= 0.699999988079071D;
+ this.motionZ *= 0.699999988079071D;
+ }
+ if (this.particleGravity > 0) {
+ Material material = this.worldObj.getBlock(MathHelper.floor(this.posX), MathHelper.floor(this.posY), MathHelper.floor(this.posZ)).getMaterial();
+
+ if (material.isLiquid() || material.isSolid()) {
+ double d0 = MathHelper.floor(this.posY)
+ + 1
+ - BlockLiquid.getLiquidHeightPercent(this.worldObj.getBlockMetadata(MathHelper.floor(this.posX), MathHelper.floor(this.posY),
+ MathHelper.floor(this.posZ)));
+ if (this.posY < d0) {
+ this.setDead();
+ }
+ }
+ } else {
+ Material material = this.worldObj.getBlock(MathHelper.ceil(this.posX), MathHelper.ceil(this.posY), MathHelper.ceil(this.posZ)).getMaterial();
+
+ if (material.isLiquid() || material.isSolid()) {
+ double d0 = MathHelper.ceil(this.posY)
+ + 1
+ - BlockLiquid.getLiquidHeightPercent(this.worldObj.getBlockMetadata(MathHelper.ceil(this.posX), MathHelper.ceil(this.posY),
+ MathHelper.ceil(this.posZ)));
+ if (this.posY > d0) {
+ this.setDead();
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/client/renderer/tabula/RenderTabulaBase.java b/src/Java/gtPlusPlus/core/client/renderer/tabula/RenderTabulaBase.java
new file mode 100644
index 0000000000..b4f64f9b35
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/client/renderer/tabula/RenderTabulaBase.java
@@ -0,0 +1,46 @@
+package gtPlusPlus.core.client.renderer.tabula;
+
+import cpw.mods.fml.client.registry.RenderingRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.client.model.tabula.ModelTabulaBase;
+import gtPlusPlus.core.lib.CORE;
+import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ResourceLocation;
+
+@SideOnly(Side.CLIENT)
+public class RenderTabulaBase extends TileEntitySpecialRenderer {
+
+ private final ModelTabulaBase mModel;
+ private final ResourceLocation mTexture;
+ private final Class mTileClass;
+
+ public final int mRenderID;
+ public final RenderTabulaBase mInstance;
+
+ public RenderTabulaBase(ModelTabulaBase aModel, String aTexturePath, Class aTileClass) {
+ mModel = aModel;
+ mTexture = new ResourceLocation(CORE.MODID, aTexturePath);
+ mTileClass = aTileClass;
+ this.mRenderID = RenderingRegistry.getNextAvailableRenderId();
+ mInstance = this;
+ }
+
+ public void renderTileEntityAt(Object aTile, double p_147500_2_, double p_147500_4_, double p_147500_6_, float p_147500_8_) {
+ if (mTileClass.isInstance(aTile)) {
+ //Logger.INFO("Rendering EggBox");
+ this.bindTexture(mTexture);
+ mModel.renderAll();
+ }
+ }
+
+ public void renderTileEntityAt(TileEntity aTile, double p_147500_2_, double p_147500_4_, double p_147500_6_, float p_147500_8_) {
+ if (mTileClass != null && aTile != null) {
+ if (mTileClass.isInstance(aTile)) {
+ this.renderTileEntityAt((Object) aTile, p_147500_2_, p_147500_4_, p_147500_6_, p_147500_8_);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/common/CommonProxy.java b/src/Java/gtPlusPlus/core/common/CommonProxy.java
index 4dad732e25..9565d242c4 100644
--- a/src/Java/gtPlusPlus/core/common/CommonProxy.java
+++ b/src/Java/gtPlusPlus/core/common/CommonProxy.java
@@ -1,6 +1,7 @@
package gtPlusPlus.core.common;
import cpw.mods.fml.common.event.*;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.OrePrefixes;
@@ -42,8 +43,10 @@ import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityZombie;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer;
public class CommonProxy {
@@ -138,7 +141,7 @@ public class CommonProxy {
Utils.registerEvent(new HandlerTooltip_EIO());
// Handles Custom Tooltips for GC
Utils.registerEvent(new HandlerTooltip_GC());
-
+
if (CORE.DEVENV) {
Utils.registerEvent(new StopAnnoyingFuckingAchievements());
}
@@ -231,13 +234,13 @@ public class CommonProxy {
Utils.createNewMobSpawner(1, EntitySickBlaze.class);
Utils.createNewMobSpawner(2, EntityStaballoyConstruct.class);
}
-
+
public void registerCustomItemsForMaterials() {
Material.registerComponentForMaterial(GenericChem.CARBYNE, OrePrefixes.plate, GregtechItemList.Carbyne_Sheet_Finished.get(1));
}
-
+
public void registerCustomMobDrops() {
-
+
//Zombie
EntityUtils.registerDropsForMob(EntityZombie.class, ItemUtils.getSimpleStack(ModItems.itemRope), 3, 100);
EntityUtils.registerDropsForMob(EntityZombie.class, ItemUtils.getSimpleStack(ModItems.itemFiber), 5, 250);
@@ -245,14 +248,14 @@ public class CommonProxy {
EntityUtils.registerDropsForMob(EntityZombie.class, ItemUtils.getSimpleStack(ModItems.itemBomb), 2, 10);
EntityUtils.registerDropsForMob(EntityZombie.class, ALLOY.TUMBAGA.getTinyDust(1), 1, 10);
EntityUtils.registerDropsForMob(EntityZombie.class, ALLOY.POTIN.getTinyDust(1), 1, 10);
-
+
//Blazes
if (ItemUtils.doesOreDictHaveEntryFor("dustPyrotheum")) {
EntityUtils.registerDropsForMob(EntityBlaze.class, ItemUtils.getItemStackOfAmountFromOreDict("dustPyrotheum", 1), 1, 10);
EntityUtils.registerDropsForMob(EntityBlaze.class, ItemUtils.getItemStackOfAmountFromOreDict("dustPyrotheum", 1), 1, 10);
}
-
-
+
+
//Special mobs Support
if (ReflectionUtils.doesClassExist("toast.specialMobs.entity.zombie.EntityBrutishZombie")) {
Class<?> aBrutishZombie = ReflectionUtils.getClass("toast.specialMobs.entity.zombie.EntityBrutishZombie");
@@ -264,7 +267,7 @@ public class CommonProxy {
EntityUtils.registerDropsForMob(aBrutishZombie, aFortune3, 1, 1);
EntityUtils.registerDropsForMob(aBrutishZombie, ItemUtils.getItemStackOfAmountFromOreDict("ingotRedAlloy", 1), 3, 200);
}
-
+
//GalaxySpace Support
if (ReflectionUtils.doesClassExist("galaxyspace.SolarSystem.moons.europa.entities.EntityEvolvedColdBlaze")) {
Class<?> aColdBlaze = ReflectionUtils.getClass("galaxyspace.SolarSystem.moons.europa.entities.EntityEvolvedColdBlaze");
@@ -287,16 +290,16 @@ public class CommonProxy {
EntityUtils.registerDropsForMob(aColdBlaze, aTinyCryo, 2, 100);
}
}
-
+
}
-
+
protected final AutoMap<Pair<Item, IItemRenderer>> mItemRenderMappings = new AutoMap<Pair<Item, IItemRenderer>>();
-
+
public static void registerItemRendererGlobal(Item aItem, IItemRenderer aRenderer) {
GTplusplus.proxy.registerItemRenderer(aItem, aRenderer);
}
-
+
public void registerItemRenderer(Item aItem, IItemRenderer aRenderer) {
if (Utils.isServer()) {
return;
@@ -306,4 +309,15 @@ public class CommonProxy {
}
}
+ public World getClientWorld() {
+ return null;
+ }
+
+ /**
+ * Returns a side-appropriate EntityPlayer for use during message handling
+ */
+ public EntityPlayer getPlayerEntity(MessageContext ctx) {
+ return ctx.getServerHandler().playerEntity;
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java b/src/Java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java
index 4d736e1362..d5ee51f61a 100644
--- a/src/Java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java
+++ b/src/Java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java
@@ -21,7 +21,7 @@ public class COMPAT_ExtraUtils {
if (ConfigSwitches.enableAlternativeDivisionSigilRecipe){
//Division Sigil
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateNetherStar", "gemIridium", "plateNetherStar",
"plateIridium", RECIPES_Tools.craftingToolHardHammer, "plateIridium",
"plateNetherStar", "gemIridium", "plateNetherStar",
diff --git a/src/Java/gtPlusPlus/core/container/Container_DecayablesChest.java b/src/Java/gtPlusPlus/core/container/Container_DecayablesChest.java
index dfb9bb7298..5bc384cd29 100644
--- a/src/Java/gtPlusPlus/core/container/Container_DecayablesChest.java
+++ b/src/Java/gtPlusPlus/core/container/Container_DecayablesChest.java
@@ -1,5 +1,8 @@
package gtPlusPlus.core.container;
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.core.inventories.Inventory_DecayablesChest;
+import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
@@ -7,12 +10,6 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
-import gtPlusPlus.core.block.ModBlocks;
-import gtPlusPlus.core.inventories.Inventory_DecayablesChest;
-import gtPlusPlus.core.slots.SlotNoInput;
-import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest;
-import gtPlusPlus.core.tileentities.general.TileEntityFishTrap;
-
public class Container_DecayablesChest extends Container {
protected TileEntityDecayablesChest tile_entity;
diff --git a/src/Java/gtPlusPlus/core/container/Container_EggBox.java b/src/Java/gtPlusPlus/core/container/Container_EggBox.java
new file mode 100644
index 0000000000..c4396cca6f
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/container/Container_EggBox.java
@@ -0,0 +1,140 @@
+package gtPlusPlus.core.container;
+
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.core.inventories.Inventory_EggBox;
+import gtPlusPlus.core.tileentities.general.TileEntityEggBox;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Container_EggBox extends Container {
+
+ protected TileEntityEggBox tile_entity;
+ public final Inventory_EggBox inventoryChest;
+
+ private final World worldObj;
+ private final int posX;
+ private final int posY;
+ private final int posZ;
+
+ public static int StorageSlotNumber = 15; // Number of slots in storage area
+ public static int InventorySlotNumber = 36; // Inventory Slots (Inventory
+ // and Hotbar)
+ public static int FullSlotNumber = InventorySlotNumber + StorageSlotNumber; // All
+ // slots
+
+ private final int[] slotStorage = new int[15];
+
+ public Container_EggBox(final InventoryPlayer inventory, final TileEntityEggBox te) {
+ this.tile_entity = te;
+ this.inventoryChest = te.getInventory();
+ te.openInventory();
+
+ int var6;
+ int var7;
+ this.worldObj = te.getWorldObj();
+ this.posX = te.xCoord;
+ this.posY = te.yCoord;
+ this.posZ = te.zCoord;
+
+ int o = 0;
+
+ // Storage Side
+ for (var6 = 0; var6 < 3; var6++) {
+ for (var7 = 0; var7 < 5; var7++) {
+ this.slotStorage[o] = o;
+ this.addSlotToContainer(new Slot(this.inventoryChest, o++, 44 + (var7 * 18), 15 + (var6 * 18)));
+ }
+ }
+
+ // Player Inventory
+ for (var6 = 0; var6 < 3; ++var6) {
+ for (var7 = 0; var7 < 9; ++var7) {
+ this.addSlotToContainer(new Slot(inventory, var7 + (var6 * 9) + 9, 8 + (var7 * 18), 84 + (var6 * 18)));
+ }
+ }
+
+ // Player Hotbar
+ for (var6 = 0; var6 < 9; ++var6) {
+ this.addSlotToContainer(new Slot(inventory, var6, 8 + (var6 * 18), 142));
+ }
+
+ }
+
+ @Override
+ public ItemStack slotClick(final int aSlotIndex, final int aMouseclick, final int aShifthold,
+ final EntityPlayer aPlayer) {
+
+ if (!aPlayer.worldObj.isRemote) {
+ if ((aSlotIndex == 999) || (aSlotIndex == -999)) {
+ // Utils.LOG_WARNING("??? - "+aSlotIndex);
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ @Override
+ public void onContainerClosed(final EntityPlayer par1EntityPlayer) {
+ super.onContainerClosed(par1EntityPlayer);
+ tile_entity.closeInventory();
+ }
+
+ @Override
+ public boolean canInteractWith(final EntityPlayer par1EntityPlayer) {
+ if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockEggBox) {
+ return false;
+ }
+
+ return par1EntityPlayer.getDistanceSq(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D) <= 64D;
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par2) {
+ ItemStack var3 = null;
+ final Slot var4 = (Slot) this.inventorySlots.get(par2);
+
+ if ((var4 != null) && var4.getHasStack()) {
+ final ItemStack var5 = var4.getStack();
+ var3 = var5.copy();
+
+ /*
+ * if (par2 == 0) { if (!this.mergeItemStack(var5,
+ * InOutputSlotNumber, FullSlotNumber, true)) { return null; }
+ *
+ * var4.onSlotChange(var5, var3); } else if (par2 >=
+ * InOutputSlotNumber && par2 < InventoryOutSlotNumber) { if
+ * (!this.mergeItemStack(var5, InventoryOutSlotNumber,
+ * FullSlotNumber, false)) { return null; } } else if (par2 >=
+ * InventoryOutSlotNumber && par2 < FullSlotNumber) { if
+ * (!this.mergeItemStack(var5, InOutputSlotNumber,
+ * InventoryOutSlotNumber, false)) { return null; } } else if
+ * (!this.mergeItemStack(var5, InOutputSlotNumber, FullSlotNumber,
+ * false)) { return null; }
+ */
+
+ if (var5.stackSize == 0) {
+ var4.putStack((ItemStack) null);
+ } else {
+ var4.onSlotChanged();
+ }
+
+ if (var5.stackSize == var3.stackSize) {
+ return null;
+ }
+
+ var4.onPickupFromSlot(par1EntityPlayer, var5);
+ }
+
+ return var3;
+ }
+
+ // Can merge Slot
+ @Override
+ public boolean func_94530_a(final ItemStack p_94530_1_, final Slot p_94530_2_) {
+ return super.func_94530_a(p_94530_1_, p_94530_2_);
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java b/src/Java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java
new file mode 100644
index 0000000000..de3106c957
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java
@@ -0,0 +1,185 @@
+package gtPlusPlus.core.container;
+
+import java.util.Iterator;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.core.inventories.Inventory_VolumetricFlaskSetter;
+import gtPlusPlus.core.slots.SlotNoInput;
+import gtPlusPlus.core.slots.SlotVolumetricFlask;
+import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter;
+import gtPlusPlus.core.util.Utils;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class Container_VolumetricFlaskSetter extends Container {
+
+ public TileEntityVolumetricFlaskSetter mTileEntity;
+ public final Inventory_VolumetricFlaskSetter inventoryChest;
+
+
+ public short mCustomValue;
+ private short oCustomValue;
+ private int mTimer;
+
+
+ private final World worldObj;
+ private final int posX;
+ private final int posY;
+ private final int posZ;
+
+ public static final int SLOT_OUTPUT = 8;
+
+ public static int StorageSlotNumber = 8; // Number of slots in storage area
+ public static int InventorySlotNumber = 36; // Inventory Slots (Inventory
+ // and Hotbar)
+ public static int FullSlotNumber = InventorySlotNumber + StorageSlotNumber; // All
+ // slots
+
+ public Container_VolumetricFlaskSetter(final InventoryPlayer inventory, final TileEntityVolumetricFlaskSetter te) {
+ this.mTileEntity = te;
+ this.inventoryChest = te.getInventory();
+
+ int var6;
+ int var7;
+ this.worldObj = te.getWorldObj();
+ this.posX = te.xCoord;
+ this.posY = te.yCoord;
+ this.posZ = te.zCoord;
+ //mCustomValue = te.getCustomValue();
+
+ int o = 0;
+
+ // Storage Side
+ /*for (var6 = 0; var6 < 3; var6++) {
+ for (var7 = 0; var7 < 5; var7++) {
+ this.addSlotToContainer(new SlotIntegratedCircuit(o, this.inventoryChest, o, 44 + (var7 * 18), 15 + (var6 * 18)));
+ o++;
+ }
+ }*/
+
+
+ int xStart = 26;
+ int yStart = 12;
+
+ try {
+ //0
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart+=18, yStart));
+ this.addSlotToContainer(new SlotVolumetricFlask(this.inventoryChest, o++, xStart, yStart+18));
+
+ //Add Output
+ this.addSlotToContainer(new SlotNoInput(this.inventoryChest, o++, 8+(8*18), 59));
+ o++;
+
+
+
+ // Player Inventory
+ for (var6 = 0; var6 < 3; ++var6) {
+ for (var7 = 0; var7 < 9; ++var7) {
+ this.addSlotToContainer(new Slot(inventory, var7 + (var6 * 9) + 9, 8 + (var7 * 18), 84 + (var6 * 18)));
+ }
+ }
+ // Player Hotbar
+ for (var6 = 0; var6 < 9; ++var6) {
+ this.addSlotToContainer(new Slot(inventory, var6, 8 + (var6 * 18), 142));
+ }
+ detectAndSendChanges();
+ }
+ catch (Throwable t) {}
+
+ }
+
+
+ @Override
+ public boolean canInteractWith(final EntityPlayer par1EntityPlayer) {
+ if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockVolumetricFlaskSetter) {
+ return false;
+ }
+ return par1EntityPlayer.getDistanceSq(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D) <= 64D;
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par2) {
+ ItemStack var3 = null;
+ final Slot var4 = (Slot) this.inventorySlots.get(par2);
+
+ if ((var4 != null) && var4.getHasStack()) {
+ final ItemStack var5 = var4.getStack();
+ var3 = var5.copy();
+
+ /*
+ * if (par2 == 0) { if (!this.mergeItemStack(var5,
+ * InOutputSlotNumber, FullSlotNumber, true)) { return null; }
+ *
+ * var4.onSlotChange(var5, var3); } else if (par2 >=
+ * InOutputSlotNumber && par2 < InventoryOutSlotNumber) { if
+ * (!this.mergeItemStack(var5, InventoryOutSlotNumber,
+ * FullSlotNumber, false)) { return null; } } else if (par2 >=
+ * InventoryOutSlotNumber && par2 < FullSlotNumber) { if
+ * (!this.mergeItemStack(var5, InOutputSlotNumber,
+ * InventoryOutSlotNumber, false)) { return null; } } else if
+ * (!this.mergeItemStack(var5, InOutputSlotNumber, FullSlotNumber,
+ * false)) { return null; }
+ */
+
+ if (var5.stackSize == 0) {
+ var4.putStack((ItemStack) null);
+ } else {
+ var4.onSlotChanged();
+ }
+
+ if (var5.stackSize == var3.stackSize) {
+ return null;
+ }
+
+ var4.onPickupFromSlot(par1EntityPlayer, var5);
+ }
+
+ return var3;
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if ((Utils.isClient()) || (this.mTileEntity == null)) {
+ return;
+ }
+
+ mCustomValue = mTileEntity.getCustomValue();
+ mTimer++;
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting) var2.next();
+ if (mTimer % 20 == 10 || oCustomValue != mCustomValue) {
+ var1.sendProgressBarUpdate(this, 0, mCustomValue);
+ }
+ }
+
+ oCustomValue = mCustomValue;
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 0:
+ mCustomValue = (short) par2;
+ break;
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/entity/InternalEntityRegistry.java b/src/Java/gtPlusPlus/core/entity/InternalEntityRegistry.java
index aec82119cc..6b88d5775c 100644
--- a/src/Java/gtPlusPlus/core/entity/InternalEntityRegistry.java
+++ b/src/Java/gtPlusPlus/core/entity/InternalEntityRegistry.java
@@ -17,6 +17,7 @@ import gtPlusPlus.core.entity.projectile.EntityLightningAttack;
import gtPlusPlus.core.entity.projectile.EntitySulfuricAcidPotion;
import gtPlusPlus.core.entity.projectile.EntityThrowableBomb;
import gtPlusPlus.core.entity.projectile.EntityToxinballSmall;
+import gtPlusPlus.core.item.general.spawn.ItemCustomSpawnEgg;
import gtPlusPlus.core.util.Utils;
public class InternalEntityRegistry {
@@ -28,7 +29,6 @@ public class InternalEntityRegistry {
//EntityRegistry.registerGlobalEntityID(EntityPrimedMiningExplosive.class, "MiningCharge", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(0, 0, 0), Utils.rgbtoHexValue(125, 125, 125));
EntityRegistry.registerModEntity(EntityPrimedMiningExplosive.class, "MiningCharge", mEntityID++, GTplusplus.instance, 64, 20, true);
-
//EntityRegistry.registerGlobalEntityID(EntitySulfuricAcidPotion.class, "throwablePotionSulfuric", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(200, 0, 200), Utils.rgbtoHexValue(125, 125, 125));
EntityRegistry.registerModEntity(EntitySulfuricAcidPotion.class, "throwablePotionSulfuric", mEntityID++, GTplusplus.instance, 64, 20, true);
@@ -44,11 +44,11 @@ public class InternalEntityRegistry {
//EntityRegistry.registerGlobalEntityID(EntityStaballoyConstruct.class, "constructStaballoy", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(0, 75, 0), Utils.rgbtoHexValue(50, 220, 50));
EntityRegistry.registerModEntity(EntityStaballoyConstruct.class, "constructStaballoy", mEntityID++, GTplusplus.instance, 64, 20, true);
-
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(0, "constructStaballoy", Utils.rgbtoHexValue(20, 200, 20), Utils.rgbtoHexValue(20, 20, 20));
//EntityRegistry.registerGlobalEntityID(EntitySickBlaze.class, "sickBlaze", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(0, 75, 0), Utils.rgbtoHexValue(75, 175, 75));
EntityRegistry.registerModEntity(EntitySickBlaze.class, "sickBlaze", mEntityID++, GTplusplus.instance, 64, 20, true);
-
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(1, "sickBlaze", Utils.rgbtoHexValue(40, 180, 40), Utils.rgbtoHexValue(75, 75, 75));
//EntityRegistry.registerGlobalEntityID(EntityTeslaTowerLightning.class, "plasmaBolt", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(125, 125, 125));
EntityRegistry.registerModEntity(EntityTeslaTowerLightning.class, "plasmaBolt", mEntityID++, GTplusplus.instance, 64, 5, true);
@@ -61,8 +61,10 @@ public class InternalEntityRegistry {
* Globals, which generate spawn eggs. (Currently required for Giant chicken spawning)
*/
- EntityRegistry.registerGlobalEntityID(EntityGiantChickenBase.class, "bigChickenFriendly", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(175, 175, 175));
- EntityRegistry.registerGlobalEntityID(EntityBatKing.class, "batKing", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(175, 175, 0), Utils.rgbtoHexValue(0, 175, 175));
+ EntityRegistry.registerModEntity(EntityGiantChickenBase.class, "bigChickenFriendly", mEntityID++, GTplusplus.instance, 64, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(2, "bigChickenFriendly", Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(175, 175, 175));
+ EntityRegistry.registerModEntity(EntityBatKing.class, "batKing", mEntityID++, GTplusplus.instance, 64, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(3, "batKing", Utils.rgbtoHexValue(175, 175, 0), Utils.rgbtoHexValue(0, 175, 175));
//EntityRegistry.registerModEntity(EntityGiantChickenBase.class, "bigChickenFriendly", mEntityID++, GTplusplus.instance, 64, 20, true);
@@ -71,9 +73,13 @@ public class InternalEntityRegistry {
//Australia
EntityRegistry.registerModEntity(EntityAustralianSpiderBase.class, "AusSpider", mEntityID++, GTplusplus.instance, 64, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(30, "AusSpider", Utils.rgbtoHexValue(125, 0, 125), Utils.rgbtoHexValue(175, 175, 175));
EntityRegistry.registerModEntity(EntityBoar.class, "AusBoar", mEntityID++, GTplusplus.instance, 64, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(31, "AusBoar", Utils.rgbtoHexValue(75, 75, 0), Utils.rgbtoHexValue(175, 175, 75));
EntityRegistry.registerModEntity(EntityDingo.class, "AusDingo", mEntityID++, GTplusplus.instance, 64, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(32, "AusDingo", Utils.rgbtoHexValue(175, 125, 0), Utils.rgbtoHexValue(175, 75, 175));
EntityRegistry.registerModEntity(EntityOctopus.class, "AusOctopus", mEntityID++, GTplusplus.instance, 32, 20, true);
+ ItemCustomSpawnEgg.registerEntityForSpawnEgg(33, "AusOctopus", Utils.rgbtoHexValue(150, 50, 150), Utils.rgbtoHexValue(75, 175, 175));
//EntityRegistry.registerGlobalEntityID(EntityAustralianSpiderBase.class, "AusSpider", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(175, 175, 175));
//EntityRegistry.registerGlobalEntityID(EntityBoar.class, "AusBoar", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(175, 175, 175));
//EntityRegistry.registerGlobalEntityID(EntityDingo.class, "AusDingo", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(255, 0, 0), Utils.rgbtoHexValue(175, 175, 175));
diff --git a/src/Java/gtPlusPlus/core/gui/machine/GUI_EggBox.java b/src/Java/gtPlusPlus/core/gui/machine/GUI_EggBox.java
new file mode 100644
index 0000000000..49d9890d3a
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/gui/machine/GUI_EggBox.java
@@ -0,0 +1,60 @@
+package gtPlusPlus.core.gui.machine;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.util.ResourceLocation;
+
+import gtPlusPlus.core.container.Container_EggBox;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.tileentities.general.TileEntityEggBox;
+
+@SideOnly(Side.CLIENT)
+public class GUI_EggBox extends GuiContainer {
+
+ private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation(CORE.MODID, "textures/gui/FishTrap.png");
+
+ public GUI_EggBox(final InventoryPlayer player_inventory, final TileEntityEggBox te){
+ super(new Container_EggBox(player_inventory, te));
+ }
+
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(final int i, final int j){
+ //this.fontRendererObj.drawString(I18n.format("Workbench", new Object[0]), 28, 6, 4210752);
+ this.fontRendererObj.drawString(I18n.format("container.EggBox", new Object[0]), 8, this.ySize - 96 + 2, 4210752);
+
+ }
+
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(final float f, final int i, final int j){
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ this.mc.renderEngine.bindTexture(craftingTableGuiTextures);
+ final int x = (this.width - this.xSize) / 2;
+ final int y = (this.height - this.ySize) / 2;
+ this.drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+
+
+ //This method is called when the Gui is first called!
+ @Override
+ public void initGui()
+ {
+ //You have to add this line for the Gui to function properly!
+ super.initGui();
+
+ //The parameters of GuiButton are(id, x, y, width, height, text);
+ //this.buttonList.add(new GuiButton( 1, 367, 132, 18, 18, "X"));
+ //this.buttonList.add(new GuiButton( 2, 385, 132, 18, 18, "Y"));
+ //NOTE: the id always has to be different or else it might get called twice or never!
+
+ //Add any other buttons here too!
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java b/src/Java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java
new file mode 100644
index 0000000000..0257e51d0c
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java
@@ -0,0 +1,183 @@
+package gtPlusPlus.core.gui.machine;
+
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.container.Container_VolumetricFlaskSetter;
+import gtPlusPlus.core.gui.widget.GuiValueField;
+import gtPlusPlus.core.handler.PacketHandler;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.network.packet.Packet_VolumetricFlaskGui;
+import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.util.ResourceLocation;
+
+@SideOnly(Side.CLIENT)
+public class GUI_VolumetricFlaskSetter extends GuiContainer {
+
+ private GuiTextField mText;
+ private boolean mIsOpen = false;
+ private TileEntityVolumetricFlaskSetter mTile;
+ private Container_VolumetricFlaskSetter mContainer;
+ private static final ResourceLocation mGuiTextures = new ResourceLocation(CORE.MODID, "textures/gui/VolumetricFlaskSetter.png");
+
+ public GUI_VolumetricFlaskSetter(Container_VolumetricFlaskSetter aContainer){
+ super(aContainer);
+ mContainer = aContainer;
+ mTile = mContainer.mTileEntity;
+ }
+
+ public void initGui(){
+ super.initGui();
+ Keyboard.enableRepeatEvents(true);
+ mIsOpen = true;
+ this.mText = new GuiValueField(this.fontRendererObj, 26, 31, this.width / 2 - 62, this.height/2-52, 106, 14);
+ mText.setMaxStringLength(5);
+ mText.setEnableBackgroundDrawing(true);
+ mText.setText("0");
+ mText.setFocused(true);
+ }
+
+ protected void keyTyped(char par1, int par2){
+ if (mIsOpen) {
+ if (mText.isFocused()) {
+ if (par2 == Keyboard.KEY_RETURN) {
+ if (mText.isFocused()) {
+ mText.setFocused(false);
+ }
+ }
+ else if (par2 == Keyboard.KEY_BACK) {
+ String aCurrentText = getText();
+ if (aCurrentText.length() > 0) {
+ this.mText.setText(aCurrentText.substring(0, aCurrentText.length() - 1));
+ if (getText().length() <= 0) {
+ this.mText.setText("0");
+ }
+ sendUpdateToServer();
+ }
+ }
+ else {
+ if (isNumber(par1)) {
+ if (this.mText.getText().equals("0")) {
+ this.mText.setText(""+par1);
+ sendUpdateToServer();
+ }
+ else {
+ this.mText.textboxKeyTyped(par1, par2);
+ sendUpdateToServer();
+ }
+ }
+ else {
+ super.keyTyped(par1, par2);
+ }
+ }
+ }
+ else {
+ super.keyTyped(par1, par2);
+ }
+ }
+ }
+
+ @Override
+ public void onGuiClosed() {
+ mIsOpen = false;
+ mText.setEnabled(false);
+ mText.setVisible(false);
+ super.onGuiClosed();
+ Keyboard.enableRepeatEvents(false);
+ }
+
+ public void updateScreen(){
+ super.updateScreen();
+ // Update Textbox to 0 if Empty
+ if (getText().length() <= 0) {
+ this.mText.setText("0");
+ sendUpdateToServer();
+ }
+ this.mText.updateCursorCounter();
+
+ // Check TextBox Value is correct
+ short aCustomValue = 0;
+ if (getText().length() > 0) {
+ try {
+ aCustomValue = Short.parseShort(getText());
+ short aTileValue = ((Container_VolumetricFlaskSetter) mContainer).mCustomValue;
+ if (mContainer != null) {
+ if (aTileValue != aCustomValue){
+ this.mText.setText(""+aTileValue);
+ }
+ }
+ } catch (NumberFormatException ex) {
+
+ }
+ }
+ }
+
+ public void drawScreen(int par1, int par2, float par3){
+ this.drawDefaultBackground();
+ super.drawScreen(par1, par2, par3);
+
+
+ }
+
+ protected void mouseClicked(int x, int y, int btn) {
+ if (mIsOpen) {
+ super.mouseClicked(x, y, btn);
+ this.mText.mouseClicked(x, y, btn);
+ }
+ }
+
+
+
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(final int i, final int j){
+ super.drawGuiContainerForegroundLayer(i, j);
+ this.mText.drawTextBox();
+ this.fontRendererObj.drawString(I18n.format("container.VolumetricFlaskSetter", new Object[0]), 4, 3, 4210752);
+ int aYVal = 49;
+ this.fontRendererObj.drawString(I18n.format("0 = 16l", new Object[0]), 8, aYVal, 4210752);
+ this.fontRendererObj.drawString(I18n.format("4 = 576l", new Object[0]), 64, aYVal, 4210752);
+ this.fontRendererObj.drawString(I18n.format("1 = 36l", new Object[0]), 8, aYVal+=8, 4210752);
+ this.fontRendererObj.drawString(I18n.format("5 = 720l", new Object[0]), 64, aYVal, 4210752);
+ this.fontRendererObj.drawString(I18n.format("2 = 144l", new Object[0]), 8, aYVal+=8, 4210752);
+ this.fontRendererObj.drawString(I18n.format("6 = 864l", new Object[0]), 64, aYVal, 4210752);
+ this.fontRendererObj.drawString(I18n.format("3 = 432l", new Object[0]), 8, aYVal+=8, 4210752);
+ this.fontRendererObj.drawString(I18n.format("-> = Custom", new Object[0]), 59, aYVal, 4210752);
+
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(final float f, final int i, final int j){
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ this.mc.renderEngine.bindTexture(mGuiTextures);
+ final int x = (this.width - this.xSize) / 2;
+ final int y = (this.height - this.ySize) / 2;
+ this.drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
+ }
+
+ public boolean isNumber(char c) {
+ return ((c >= 48 && c <= 57) || c == 45);
+ }
+
+ protected String getText() {
+ return this.mText.getText();
+ }
+
+ protected void sendUpdateToServer() {
+ short aCustomValue = 0;
+ if (getText().length() > 0) {
+ try {
+ aCustomValue = Short.parseShort(getText());
+ PacketHandler.sendToServer(new Packet_VolumetricFlaskGui(mTile, aCustomValue));
+ } catch (NumberFormatException ex) {
+
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/gui/widget/GuiValueField.java b/src/Java/gtPlusPlus/core/gui/widget/GuiValueField.java
new file mode 100644
index 0000000000..ac4c1a8aee
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/gui/widget/GuiValueField.java
@@ -0,0 +1,86 @@
+package gtPlusPlus.core.gui.widget;
+
+import java.lang.reflect.Field;
+
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiTextField;
+
+public class GuiValueField extends GuiTextField {
+
+ private final FontRenderer mFontRenderer;
+ private final int mScreenLocationX;
+ private final int mScreenLocationY;
+
+ public GuiValueField(FontRenderer aFontRenderer, int aX, int aY, int aScreenLocationX, int aScreenLocationY, int aWidth, int aHeight) {
+ super(aFontRenderer, aX, aY, aWidth, aHeight);
+ mFontRenderer = aFontRenderer;
+ mScreenLocationX = aScreenLocationX;
+ mScreenLocationY = aScreenLocationY;
+ }
+
+ public boolean canLoseFocus() {
+ Field canLoseFocus = ReflectionUtils.getField(GuiTextField.class, "canLoseFocus");
+ if (canLoseFocus != null) {
+ return (boolean) ReflectionUtils.getFieldValue(canLoseFocus, this);
+ }
+ return true;
+ }
+
+ public boolean isFocused() {
+ Field isFocused = ReflectionUtils.getField(GuiTextField.class, "isFocused");
+ if (isFocused != null) {
+ return (boolean) ReflectionUtils.getFieldValue(isFocused, this);
+ }
+ return false;
+ }
+
+ public boolean isBackgroundDrawingEnabled() {
+ Field enableBackgroundDrawing = ReflectionUtils.getField(GuiTextField.class, "enableBackgroundDrawing");
+ if (enableBackgroundDrawing != null) {
+ return (boolean) ReflectionUtils.getFieldValue(enableBackgroundDrawing, this);
+ }
+ return true;
+ }
+ public int getLineScrollOffset() {
+ Field lineScrollOffset = ReflectionUtils.getField(GuiTextField.class, "lineScrollOffset");
+ if (lineScrollOffset != null) {
+ return (int) ReflectionUtils.getFieldValue(lineScrollOffset, this);
+ }
+ return 0;
+ }
+
+ /**
+ * Args: x, y, buttonClicked
+ */
+ public void mouseClicked(int aX, int aY, int aButton){
+
+ boolean flag = aX >= this.mScreenLocationX && aX < this.mScreenLocationX + this.width && aY >= this.mScreenLocationY && aY < this.mScreenLocationY + this.height;
+
+ //Logger.INFO("Clicked X:"+aX);
+ //Logger.INFO("Clicked Y:"+aY);
+ //Logger.INFO("ScreenPos X:"+mScreenLocationX);
+ //Logger.INFO("ScreenPos Y:"+mScreenLocationY);
+ //Logger.INFO("Render X:"+xPosition);
+ //Logger.INFO("Render Y:"+yPosition);
+
+ if (canLoseFocus())
+ {
+ this.setFocused(flag);
+ }
+
+ if (isFocused() && aButton == 0)
+ {
+ int l = aX - this.mScreenLocationX;
+
+ if (isBackgroundDrawingEnabled())
+ {
+ l -= 4;
+ }
+
+ String s = this.mFontRenderer.trimStringToWidth(this.getText().substring(getLineScrollOffset()), this.getWidth());
+ this.setCursorPosition(this.mFontRenderer.trimStringToWidth(s, l).length() + getLineScrollOffset());
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/handler/BookHandler.java b/src/Java/gtPlusPlus/core/handler/BookHandler.java
index d9d3efe680..4bfd39e9a3 100644
--- a/src/Java/gtPlusPlus/core/handler/BookHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/BookHandler.java
@@ -3,6 +3,8 @@ package gtPlusPlus.core.handler;
import java.util.HashMap;
import java.util.Map;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.util.GT_OreDictUnificator;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.recipe.common.CI;
@@ -22,6 +24,7 @@ public class BookHandler {
public static BookTemplate book_ModularBauble;
public static BookTemplate book_MultiMachineManual;
public static BookTemplate book_NuclearManual;
+ public static BookTemplate book_MultiChemicalPlant;
public static void run(){
@@ -56,45 +59,45 @@ public class BookHandler {
"Power Storage & You [Version 0.64]",
"Alkalus",
new String[] {
- //Page 1
- "So, when it comes to power storage you relaly have three seperate options:\n"+
- " \n"+
- "Battery Buffers,\n"+
- "Energy Buffers,\n"+
- "The Power Sub-Station\n",
- //Page 2
- "Battery Buffer\n" +
- " \n" +
- "Is rather portable. Allowing you to throw set one up and insert batteries where ever you may need."+"\n"+
- "They output 1A for each battery stored inside, upto a maximum of 16A.",
- //Page 3
- "Energy Buffer\n" +
- " \n" +
- "Is a more optimal choice for storage in your base. Once placed down, they cannot be moved without losing all stored power."+"\n"+
- "Energy Buffers can output 4A from the output side, however accept 16A as input.",
- //Page 4
- "The Power Sub-Station"+
- " \n"+
- "Is used for storing Insane amounts of power later game."+"\n"+
- "Consumes 2% of the average voltage of all energy type hatches every tick."+"\n",
- //Page 5
- "Allows Insertation/Removal of power from the rear face of the controller, swap with a screwdriver."+"\n"+
- "Variable Height Structure, between 4-16Y. Inserted Redox Cells dictate max energy tier of structure."+"\n",
- //Page 6
- "Redox Cells cannot be placed into the Top or Bottom layer and only take up 3xhx3 internally."+"\n"+
- "Different Tier cells CANNOT be mixed together."+"\n",
- //Page 7
- "All Hatches Must be HV at a Minimum, this minimum tier is in place to stop people abusing ULV/LV hatches to lower the avg/t."+"\n"+
- "Currently the GUI will NOT display anything at all until the structure forms, this is a known bug."+"\n",
- //Page 8
- "Valid Hatches:\n"+
- "Energy Hatch,\n"+
- "Dynamo Hatch,\n"+
- "Charging Bus,\n"+
- "Discharging Bus,\n"+
- "Dynamo Buffer,\n"+
- "Multi-Amp Dynamo Hatch.\n\n\n"+
- "Structure MUST contain at least one energy input and one energy output hatch."
+ //Page 1
+ "So, when it comes to power storage you relaly have three seperate options:\n"+
+ " \n"+
+ "Battery Buffers,\n"+
+ "Energy Buffers,\n"+
+ "The Power Sub-Station\n",
+ //Page 2
+ "Battery Buffer\n" +
+ " \n" +
+ "Is rather portable. Allowing you to throw set one up and insert batteries where ever you may need."+"\n"+
+ "They output 1A for each battery stored inside, upto a maximum of 16A.",
+ //Page 3
+ "Energy Buffer\n" +
+ " \n" +
+ "Is a more optimal choice for storage in your base. Once placed down, they cannot be moved without losing all stored power."+"\n"+
+ "Energy Buffers can output 4A from the output side, however accept 16A as input.",
+ //Page 4
+ "The Power Sub-Station"+
+ " \n"+
+ "Is used for storing Insane amounts of power later game."+"\n"+
+ "Consumes 2% of the average voltage of all energy type hatches every tick."+"\n",
+ //Page 5
+ "Allows Insertation/Removal of power from the rear face of the controller, swap with a screwdriver."+"\n"+
+ "Variable Height Structure, between 4-16Y. Inserted Redox Cells dictate max energy tier of structure."+"\n",
+ //Page 6
+ "Redox Cells cannot be placed into the Top or Bottom layer and only take up 3xhx3 internally."+"\n"+
+ "Different Tier cells CANNOT be mixed together."+"\n",
+ //Page 7
+ "All Hatches Must be HV at a Minimum, this minimum tier is in place to stop people abusing ULV/LV hatches to lower the avg/t."+"\n"+
+ "Currently the GUI will NOT display anything at all until the structure forms, this is a known bug."+"\n",
+ //Page 8
+ "Valid Hatches:\n"+
+ "Energy Hatch,\n"+
+ "Dynamo Hatch,\n"+
+ "Charging Bus,\n"+
+ "Discharging Bus,\n"+
+ "Dynamo Buffer,\n"+
+ "Multi-Amp Dynamo Hatch.\n\n\n"+
+ "Structure MUST contain at least one energy input and one energy output hatch."
});
//Test Novel
@@ -102,7 +105,7 @@ public class BookHandler {
"Manual_Modular_Bauble", "How to: Modular Baubles", "Alkalus",
new String[] {
"Concept: This idea came from wanting flexibility. \n" +
- "First step, Build a Modularity table to begin customisation of your Bauble. \n"
+ "First step, Build a Modularity table to begin customisation of your Bauble. \n"
+ " After this has been constructed, you can now combine the upgrades listed within this book to improve the baubles level/100.",
"Defence:\n"
+ "Can be upgraded by combining metal plates with the bauble. \n"
@@ -127,7 +130,7 @@ public class BookHandler {
"[Fluid Work] Mode B - Allows the multiblock to function as a Fermenter, a Fluid Extractor or an Extractor. To allow a hatch to run in Fermenter mode, insert a No. 20 circuit. For Fluid Extractor, use No. 21 and for Extractor use No. 22.",
"[Misc. Work] Mode C - Allows the multiblock to function as a Laser Engraver, an Autoclave or a Fluid Solidifier. To allow a hatch to run in Laser Engraver mode, insert a No. 20 circuit. For Autoclave, use No. 21 and for Solidifier use No. 22.",
});
-
+
book_NuclearManual = writeBookTemplate(
"Manual_NuclearStuff_1", "Nuclear Chemistry [FFPP]", "Alkalus",
new String[] {
@@ -177,8 +180,168 @@ public class BookHandler {
"Processing Plant"+
"----------------------\n"+
"This structure is used to produce the Molten Salts required to run a Liquid Fluorine Thorium Reactor [LFTR]."
+
+ });
+
+
+ book_MultiChemicalPlant = writeBookTemplate(
+ "book_Multi_ChemicalPlant", "Chemical Plant Manual", "Alkalus",
+ new String[] {
+
+ // Intro
+ "This book will explain how the Chemical Plant is constructed, which blocks are valid to upgrade it and also how the upgrades work.",
+
+ // Info
+ "Solid Casings = Plant tier" + "\n" +
+ "Machine Casings = Hatch tier" + "\n" +
+ "Higher tier coils More Speed" + "\n" +
+ "T1 50% , T2 100% , T3 150%, etc" + "\n",
+
+ "Higher tier pipe casings boost parallel"+ "\n" +
+ "and reduce catalyst consumption" + "\n" +
+ "+2 parallel per tier, 20% extra chance of"+ "\n" +
+ "not damaging catalyst per tier" + "\n",
+
+ // Machine Casings
+ "Valid Solid Machine Casings:" + "\n" +
+ "0 - Strong Bronze" + "\n" +
+ "1 - Solid Steel" + "\n" +
+ "2 - Sturdy Aluminium" + "\n" +
+ "3 - Clean Stainless Steel" + "\n" +
+ "4 - Stable Titanium" + "\n" +
+ "5 - Robust Tungstensteel" + "\n" +
+ "6 - Vigorous Laurenium" + "\n" +
+ "7 - Rugged Botmium",
+
+ // Machine Casings
+ "Valid Tiered Machine Casings:" + "\n" + "\n" +
+ "1 - " + GT_Values.VN[0] + "\n" +
+ "2 - " + GT_Values.VN[1] + "\n" +
+ "3 - " + GT_Values.VN[2] + "\n" +
+ "4 - " + GT_Values.VN[3] + "\n" +
+ "5 - " + GT_Values.VN[4] + "\n" +
+ "6 - " + GT_Values.VN[5] + "\n" +
+ "7 - " + GT_Values.VN[6] + "\n" +
+ "8 - " + GT_Values.VN[7] + "\n" +
+ "9 - " + GT_Values.VN[8] + "\n" +
+ "10 - " + GT_Values.VN[9],
+
+ // Pipe Casings
+ "Valid Pipe Casings:" + "\n" + "\n" +
+ "1 - Bronze" + "\n" +
+ "2 - Steel" + "\n" +
+ "3 - Titanium" + "\n" +
+ "4 - Tungstensteel",
+
+ //Coils
+ "Valid Coils:" + "\n" + "\n" +
+ "1 - Cupronickel" + "\n" +
+ "2 - Kanthal" + "\n" +
+ "3 - Nichrome" + "\n" +
+ "4 - Tungstensteel" + "\n" +
+ "5 - HSS-G" + "\n" +
+ "6 - Naquadah" + "\n" +
+ "7 - Naquadah Alloy",
+
+ // Requirements
+ "Multiblock Requirements:" + "\n" + "\n" +
+ "27x Coils" + "\n" +
+ "18x Pipe Casings" + "\n" +
+ "57x Tiered Machine Casings" + "\n" +
+ "80+ Solid Casings" + "\n" +
+ "1x Catalyst Housing (Catalysts cannot go inside an Input Bus)",
+
+ // Construction Guide
+ "Construction Guide Pt1:" + "\n" + "\n" +
+ "Controller is placed on a middle casing in the bottom layer" + "\n" +
+ "Hatches can only be placed on the bottom layer edges",
+
+ "Construction Guide Pt2:" + "\n" + "\n" +
+ "7x7x7 Hollow frame of solid casings" + "\n" +
+ "5x1x5 layer of solid casings (fills in top layer)" + "\n" +
+ "5x1x5 layer of machine casings (fills in bottom layer)",
+
+ "Construction Guide Pt3:" + "\n" +
+ "In the central 3x5x3:" + "\n" +
+ "3x1x3 layer of Coils, surrounded by ring of Machine Casings" + "\n" +
+ "3x1x3 layer of Pipe Casings" + "\n" +
+ "3x1x3 layer of Coils" + "\n" +
+ "3x1x3 layer of Pipe Casings" + "\n" +
+ "3x1x3 layer of Coils, surrounded by ring of Machine Casings",
+
+ // Construction Guide Info
+ "Information:" + "\n" + "\n" +
+ "A = Air" + "\n" +
+ "X = Solid Casing" + "\n" +
+ "M = Machine Casing" + "\n" +
+ "P = Pipe Casing" + "\n" +
+ "C = Coil Casing",
+
+ "Layer 1:" + "\n" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XMMMMMX" + "\n" +
+ "XMMMMMX" + "\n" +
+ "XMMMMMX" + "\n" +
+ "XMMMMMX" + "\n" +
+ "XMMMMMX" + "\n" +
+ "XXXXXXX",
+
+ "Layer 2:" + "\n" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AMMMMMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMMMMMA" + "\n" +
+ "AAAAAAA",
+
+ "Layer 3:" + "\n" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA",
+
+ "Layer 4:" + "\n" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AACCCAA" + "\n" +
+ "AACCCAA" + "\n" +
+ "AACCCAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA",
+
+ "Layer 5:" + "\n" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAPPPAA" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AAAAAAA",
+
+ "Layer 6:" + "\n" + "\n" +
+ "AAAAAAA" + "\n" +
+ "AMMMMMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMCCCMA" + "\n" +
+ "AMMMMMA" + "\n" +
+ "AAAAAAA",
+
+ "Layer 7:" + "\n" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX" + "\n" +
+ "XXXXXXX",
});
+
}
@@ -189,6 +352,7 @@ public class BookHandler {
public static ItemStack ItemBookWritten_ModularBaubles;
public static ItemStack ItemBookWritten_MultiPowerStorage;
public static ItemStack ItemBookWritten_MultiMachineManual;
+ public static ItemStack ItemBookWritten_MultiChemicalPlant;
public static void runLater(){
ItemBookWritten_ThermalBoiler = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, 0, 1);
@@ -196,12 +360,21 @@ public class BookHandler {
ItemBookWritten_ModularBaubles = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, 2, 1);
ItemBookWritten_MultiMachineManual = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, 3, 1);
ItemBookWritten_NuclearManual = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, 4, 1);
+ ItemBookWritten_MultiChemicalPlant = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, 5, 1);
//Multiblock Manuals
RecipeUtils.addShapelessGregtechRecipe(new ItemStack[]{ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getSimpleStack(Items.lava_bucket)}, ItemBookWritten_ThermalBoiler);
RecipeUtils.addShapelessGregtechRecipe(new ItemStack[]{ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getItemStackOfAmountFromOreDict(CI.craftingToolWrench, 1)}, ItemBookWritten_MultiMachineManual);
RecipeUtils.addShapelessGregtechRecipe(new ItemStack[]{ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getItemStackOfAmountFromOreDict("wireGt01Tin", 1)}, ItemBookWritten_MultiPowerStorage);
RecipeUtils.addShapelessGregtechRecipe(new ItemStack[]{ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1)}, ItemBookWritten_NuclearManual);
+ RecipeUtils.addShapelessGregtechRecipe(new ItemStack[]{ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getItemStackOfAmountFromOreDict("wireGt01Copper", 1)}, ItemBookWritten_MultiChemicalPlant);
+
+ for (int i=0;i<mBookKeeperCount;i++){
+ ItemStack bookstack = ItemUtils.simpleMetaStack(ModItems.itemCustomBook, i, 1);
+ GT_OreDictUnificator.registerOre("bookWritten", bookstack);
+ GT_OreDictUnificator.registerOre("craftingBook", bookstack);
+ }
+
}
private static BookTemplate writeBookTemplate(String aMapping, String aTitle, String aAuthor, String[] aPages){
diff --git a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java
index 21f3e1d6cd..bbc0e44d7e 100644
--- a/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java
+++ b/src/Java/gtPlusPlus/core/handler/COMPAT_HANDLER.java
@@ -43,71 +43,7 @@ import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaGarbageCollector;
import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_FluidCanning;
import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Recycling;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.Gregtech4Content;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAdvancedBoilers;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAdvancedMixer;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAlgaeContent;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAmazonWarehouse;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechBedrockPlatforms;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechBufferDynamos;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechComponentAssembler;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechCustomHatches;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechCyclotron;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechDehydrator;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechEnergyBuffer;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechFactoryGradeReplacementMultis;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechFluidReactor;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechGeneratorsULV;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechGeothermalThermalGenerator;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechHiAmpTransformer;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialArcFurnace;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialBlastSmelter;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialCentrifuge;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialCokeOven;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialCuttingFactory;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialElectrolyzer;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialExtruder;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFishPond;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialAlloySmelter;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFuelRefinery;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialGeneratorArray;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialMacerator;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialMassFabricator;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialMixer;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialMultiMachine;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialMultiTank;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialPlatePress;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialSifter;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialThermalCentrifuge;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialTreeFarm;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialWashPlant;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialWiremill;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIronBlastFurnace;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIsaMill;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLFTR;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLargeTurbinesAndHeatExchanger;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechMiniRaFusion;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechNaqReactor;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPollutionDevices;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPowerBreakers;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPowerSubStation;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRTG;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRocketFuelGenerator;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSafeBlock;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSemiFluidgenerators;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSimpleWasher;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSolarGenerators;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSolarTower;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSteamCondenser;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSuperChests;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTeslaTower;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThaumcraftDevices;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThreadedBuffers;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTieredChunkloaders;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTieredFluidTanks;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTreeFarmerTE;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechWirelessChargers;
-import gtPlusPlus.xmod.gregtech.registration.gregtech.NewHorizonsAccelerator;
+import gtPlusPlus.xmod.gregtech.registration.gregtech.*;
import net.minecraft.item.ItemStack;
public class COMPAT_HANDLER {
@@ -220,6 +156,8 @@ public class COMPAT_HANDLER {
GregtechAlgaeContent.run();
GregtechIndustrialAlloySmelter.run();
GregtechIsaMill.run();
+ GregtechSteamMultis.run();
+ GregtechIndustrialElementDuplicator.run();
//New Horizons Content
NewHorizonsAccelerator.run();
diff --git a/src/Java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java b/src/Java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java
index cd25fdb1c3..9a1b551d30 100644
--- a/src/Java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java
+++ b/src/Java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java
@@ -16,6 +16,7 @@ import gtPlusPlus.xmod.ob.HANDLER_OpenBlocks;
import gtPlusPlus.xmod.railcraft.HANDLER_Railcraft;
import gtPlusPlus.xmod.reliquary.HANDLER_Reliquary;
import gtPlusPlus.xmod.sc2.HANDLER_SC2;
+import gtPlusPlus.xmod.sol.HANDLER_SpiceOfLife;
import gtPlusPlus.xmod.thaumcraft.HANDLER_Thaumcraft;
import gtPlusPlus.xmod.thermalfoundation.HANDLER_TF;
import gtPlusPlus.xmod.tinkers.HANDLER_Tinkers;
@@ -39,6 +40,7 @@ public class COMPAT_IntermodStaging {
HANDLER_Railcraft.preInit();
HANDLER_Reliquary.preInit();
HANDLER_OpenBlocks.preInit();
+ HANDLER_SpiceOfLife.preInit();
}
public static void init(FMLInitializationEvent init){
@@ -58,6 +60,7 @@ public class COMPAT_IntermodStaging {
HANDLER_Railcraft.init();
HANDLER_Reliquary.init();
HANDLER_OpenBlocks.init();
+ HANDLER_SpiceOfLife.init();
}
public static void postInit(FMLPostInitializationEvent postinit){
@@ -77,6 +80,7 @@ public class COMPAT_IntermodStaging {
HANDLER_Railcraft.postInit();
HANDLER_Reliquary.postInit();
HANDLER_OpenBlocks.postInit();
+ HANDLER_SpiceOfLife.postInit();
}
public static void onLoadComplete(FMLLoadCompleteEvent event) {
diff --git a/src/Java/gtPlusPlus/core/handler/GuiHandler.java b/src/Java/gtPlusPlus/core/handler/GuiHandler.java
index e44c9a8f20..0567d6c5dd 100644
--- a/src/Java/gtPlusPlus/core/handler/GuiHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/GuiHandler.java
@@ -5,19 +5,7 @@ import cpw.mods.fml.common.network.NetworkRegistry;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.machine.Machine_SuperJukebox.TileEntitySuperJukebox;
-import gtPlusPlus.core.container.Container_BackpackBase;
-import gtPlusPlus.core.container.Container_CircuitProgrammer;
-import gtPlusPlus.core.container.Container_DecayablesChest;
-import gtPlusPlus.core.container.Container_FishTrap;
-import gtPlusPlus.core.container.Container_Grindle;
-import gtPlusPlus.core.container.Container_ModularityTable;
-import gtPlusPlus.core.container.Container_PestKiller;
-import gtPlusPlus.core.container.Container_ProjectTable;
-import gtPlusPlus.core.container.Container_RoundRobinator;
-import gtPlusPlus.core.container.Container_SuperJukebox;
-import gtPlusPlus.core.container.Container_TradeTable;
-import gtPlusPlus.core.container.Container_Workbench;
-import gtPlusPlus.core.container.Container_WorkbenchAdvanced;
+import gtPlusPlus.core.container.*;
import gtPlusPlus.core.container.box.LunchBoxContainer;
import gtPlusPlus.core.container.box.MagicBagContainer;
import gtPlusPlus.core.container.box.ToolBoxContainer;
@@ -28,17 +16,7 @@ import gtPlusPlus.core.gui.item.GuiBaseGrindle;
import gtPlusPlus.core.gui.item.box.LunchBoxGui;
import gtPlusPlus.core.gui.item.box.MagicBagGui;
import gtPlusPlus.core.gui.item.box.ToolBoxGui;
-import gtPlusPlus.core.gui.machine.GUI_CircuitProgrammer;
-import gtPlusPlus.core.gui.machine.GUI_DecayablesChest;
-import gtPlusPlus.core.gui.machine.GUI_FishTrap;
-import gtPlusPlus.core.gui.machine.GUI_ModularityTable;
-import gtPlusPlus.core.gui.machine.GUI_PestKiller;
-import gtPlusPlus.core.gui.machine.GUI_ProjectTable;
-import gtPlusPlus.core.gui.machine.GUI_RoundRobinator;
-import gtPlusPlus.core.gui.machine.GUI_SuperJukebox;
-import gtPlusPlus.core.gui.machine.GUI_TradeTable;
-import gtPlusPlus.core.gui.machine.GUI_Workbench;
-import gtPlusPlus.core.gui.machine.GUI_WorkbenchAdvanced;
+import gtPlusPlus.core.gui.machine.*;
import gtPlusPlus.core.interfaces.IGuiManager;
import gtPlusPlus.core.inventories.BaseInventoryBackpack;
import gtPlusPlus.core.inventories.BaseInventoryGrindle;
@@ -46,9 +24,7 @@ import gtPlusPlus.core.inventories.box.LunchBoxInventory;
import gtPlusPlus.core.inventories.box.MagicBagInventory;
import gtPlusPlus.core.inventories.box.ToolBoxInventory;
import gtPlusPlus.core.tileentities.base.TileEntityBase;
-import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer;
-import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest;
-import gtPlusPlus.core.tileentities.general.TileEntityFishTrap;
+import gtPlusPlus.core.tileentities.general.*;
import gtPlusPlus.core.tileentities.machines.TileEntityModularityTable;
import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller;
import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable;
@@ -79,6 +55,8 @@ public class GuiHandler implements IGuiHandler {
public static final int GUI14 = 13; // Super Jukebox
public static final int GUI15 = 14; // Pest Killer
public static final int GUI16 = 15; // Round-Robinator
+ public static final int GUI17 = 16; // Egg Box
+ public static final int GUI18 = 17; // Volumetric Flask Setter
public static void init() {
@@ -129,6 +107,10 @@ public class GuiHandler implements IGuiHandler {
return new Container_PestKiller(player.inventory, (TileEntityPestKiller) te);
} else if (ID == GUI16) {
return new Container_RoundRobinator(player.inventory, (TileEntityRoundRobinator) te);
+ } else if (ID == GUI17) {
+ return new Container_EggBox(player.inventory, (TileEntityEggBox) te);
+ } else if (ID == GUI18) {
+ return new Container_VolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te);
}
}
@@ -191,7 +173,11 @@ public class GuiHandler implements IGuiHandler {
return new GUI_PestKiller(player.inventory, (TileEntityPestKiller) te);
} else if (ID == GUI16) {
return new GUI_RoundRobinator(player.inventory, (TileEntityRoundRobinator) te);
- }
+ } else if (ID == GUI17) {
+ return new GUI_EggBox(player.inventory, (TileEntityEggBox) te);
+ } else if (ID == GUI18) {
+ return new GUI_VolumetricFlaskSetter(new Container_VolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te));
+ }
}
if (ID == GUI9) {
diff --git a/src/Java/gtPlusPlus/core/handler/PacketHandler.java b/src/Java/gtPlusPlus/core/handler/PacketHandler.java
index 2b9d424b32..382b82df29 100644
--- a/src/Java/gtPlusPlus/core/handler/PacketHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/PacketHandler.java
@@ -1,69 +1,91 @@
package gtPlusPlus.core.handler;
-import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.NetworkRegistry;
-import cpw.mods.fml.common.network.simpleimpl.*;
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;
-
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.network.handler.AbstractClientMessageHandler;
+import gtPlusPlus.core.network.packet.AbstractPacket;
+import gtPlusPlus.core.network.packet.Packet_VolumetricFlaskGui;
+import gtPlusPlus.core.network.packet.Packet_VolumetricFlaskGui2;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
-import io.netty.buffer.ByteBuf;
-
public class PacketHandler {
-
- public static SimpleNetworkWrapper packetLightning;
- public PacketHandler(){
- packetLightning = NetworkRegistry.INSTANCE.newSimpleChannel("gtpp_Lightning");
- packetLightning.registerMessage(Packet_Lightning_Handler.class, Packet_Lightning.class, 0, Side.SERVER);
+ private static byte packetId = 0;
+
+ private static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel(CORE.MODID);
+
+ public static final void init() {
+ registerMessage(Packet_VolumetricFlaskGui.class, Packet_VolumetricFlaskGui.class);
+ registerMessage(Packet_VolumetricFlaskGui2.class, Packet_VolumetricFlaskGui2.class);
}
-
-
-
/**
- * Internal Packet Handlers
- * @author Alkalus
- *
+ * Registers a message and message handler
*/
+ private static final void registerMessage(Class handlerClass, Class messageClass) {
+ Side side = AbstractClientMessageHandler.class.isAssignableFrom(handlerClass) ? Side.CLIENT : Side.SERVER;
+ registerMessage(handlerClass, messageClass, side);
+ }
- private class Packet_Lightning implements IMessage{
-
- public void sendTo(IMessage msg, EntityPlayerMP player){
- packetLightning.sendTo(msg, player);
+ private static final void registerMessage(Class handlerClass, Class messageClass, Side side) {
+ INSTANCE.registerMessage(handlerClass, messageClass, packetId++, side);
+ if (AbstractPacket.class.isInstance(messageClass.getClass())) {
+ AbstractPacket aPacket = ReflectionUtils.createNewInstanceFromConstructor(ReflectionUtils.getConstructor(messageClass, new Class[] {}), new Object[] {});
+ if (aPacket != null) {
+ Logger.INFO("Registered Packet: "+aPacket.getPacketName());
+ }
}
-
- public void sendToServer(String string){
- packetLightning.sendToServer(new Packet_Lightning(string));
- }
-
- private String text;
+ }
+
+ /**
+ * Send this message to the specified player.
+ * See {@link SimpleNetworkWrapper#sendTo(IMessage, EntityPlayerMP)}
+ */
+ public static final void sendTo(IMessage message, EntityPlayerMP player) {
+ INSTANCE.sendTo(message, player);
+ }
+
+ /**
+ * Send this message to everyone within a certain range of a point.
+ * See {@link SimpleNetworkWrapper#sendToDimension(IMessage, NetworkRegistry.TargetPoint)}
+ */
+ public static final void sendToAllAround(IMessage message, NetworkRegistry.TargetPoint point) {
+ INSTANCE.sendToAllAround(message, point);
+ }
- public Packet_Lightning(String text) {
- this.text = text;
- }
+ /**
+ * Sends a message to everyone within a certain range of the coordinates in the same dimension.
+ */
+ public static final void sendToAllAround(IMessage message, int dimension, double x, double y, double z, double range) {
+ sendToAllAround(message, new NetworkRegistry.TargetPoint(dimension, x, y, z, range));
+ }
- @Override
- public void fromBytes(ByteBuf buf) {
- text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
- }
+ /**
+ * Sends a message to everyone within a certain range of the player provided.
+ */
+ public static final void sendToAllAround(IMessage message, EntityPlayer player, double range) {
+ sendToAllAround(message, player.worldObj.provider.dimensionId, player.posX, player.posY, player.posZ, range);
+ }
- @Override
- public void toBytes(ByteBuf buf) {
- ByteBufUtils.writeUTF8String(buf, text);
- }
-
+ /**
+ * Send this message to everyone within the supplied dimension.
+ * See {@link SimpleNetworkWrapper#sendToDimension(IMessage, int)}
+ */
+ public static final void sendToDimension(IMessage message, int dimensionId) {
+ INSTANCE.sendToDimension(message, dimensionId);
}
-
- private class Packet_Lightning_Handler implements IMessageHandler<Packet_Lightning, IMessage>{
- @Override
- public IMessage onMessage(Packet_Lightning message, MessageContext ctx) {
- System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
- return null; // no response in this case
- }
-
+ /**
+ * Send this message to the server.
+ * See {@link SimpleNetworkWrapper#sendToServer(IMessage)}
+ */
+ public static final void sendToServer(IMessage message) {
+ INSTANCE.sendToServer(message);
}
-
-
}
diff --git a/src/Java/gtPlusPlus/core/handler/StopAnnoyingFuckingAchievements.java b/src/Java/gtPlusPlus/core/handler/StopAnnoyingFuckingAchievements.java
index 8853acd4b7..b3b720497e 100644
--- a/src/Java/gtPlusPlus/core/handler/StopAnnoyingFuckingAchievements.java
+++ b/src/Java/gtPlusPlus/core/handler/StopAnnoyingFuckingAchievements.java
@@ -1,8 +1,13 @@
package gtPlusPlus.core.handler;
+import java.lang.reflect.Field;
+
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-import net.minecraft.client.Minecraft;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.stats.AchievementList;
import net.minecraftforge.event.entity.player.AchievementEvent;
@@ -14,11 +19,28 @@ public class StopAnnoyingFuckingAchievements {
*/
@SubscribeEvent(priority=EventPriority.HIGHEST)
public void FUCK_OFF(AchievementEvent event) {
+ if (Utils.isClient()) {
+ doClientStuff();
+ }
if (event.achievement.equals(AchievementList.openInventory)) {
event.setCanceled(true);
- if (Minecraft.getMinecraft() != null) {
- if (Minecraft.getMinecraft().gameSettings != null) {
- Minecraft.getMinecraft().gameSettings.showInventoryAchievementHint = false;
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ private final void doClientStuff() {
+ Class aMC = ReflectionUtils.getClass("net.minecraft.client.Minecraft");
+ if (aMC != null) {
+ Field aInstanceMC = ReflectionUtils.getField(aMC, "theMinecraft");
+ Object aMcObj = ReflectionUtils.getFieldValue(null, aInstanceMC);
+ Class aClazz2 = aMcObj.getClass();
+ if (aClazz2 != null) {
+ Field aGameSettings = ReflectionUtils.getField(aClazz2, "gameSettings");
+ Object aGameSettingsObj = ReflectionUtils.getFieldValue(aInstanceMC, aGameSettings);
+ Class aClazz3 = aGameSettingsObj.getClass();
+ if (aClazz2 != null) {
+ Field ainvHint = ReflectionUtils.getField(aClazz3, "showInventoryAchievementHint");
+ ReflectionUtils.setField(aGameSettingsObj, ainvHint, false);
}
}
}
diff --git a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
index 6da2dac38b..03bb99bb2a 100644
--- a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
@@ -1,18 +1,11 @@
package gtPlusPlus.core.handler.events;
-import static gtPlusPlus.core.lib.CORE.ConfigSwitches.*;
+import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropDrainedShard;
+import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropFluoriteOre;
import java.util.ArrayList;
-import java.util.Map;
-import java.util.WeakHashMap;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ChunkCoordinates;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.LoadedMods;
@@ -20,12 +13,14 @@ import gtPlusPlus.core.material.nuclear.FLUORIDES;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
-import net.minecraftforge.common.util.FakePlayer;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.common.lib.FakeThaumcraftPlayer;
public class BlockEventHandler {
public static ArrayList<ItemStack> oreLimestone;
diff --git a/src/Java/gtPlusPlus/core/handler/events/EntityDeathHandler.java b/src/Java/gtPlusPlus/core/handler/events/EntityDeathHandler.java
index 3492ee4788..391672e028 100644
--- a/src/Java/gtPlusPlus/core/handler/events/EntityDeathHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/EntityDeathHandler.java
@@ -11,14 +11,10 @@ import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
-import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.ChunkCoordinates;
-import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
-import thaumcraft.common.lib.FakeThaumcraftPlayer;
public class EntityDeathHandler {
diff --git a/src/Java/gtPlusPlus/core/inventories/Inventory_EggBox.java b/src/Java/gtPlusPlus/core/inventories/Inventory_EggBox.java
new file mode 100644
index 0000000000..334afc3300
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/inventories/Inventory_EggBox.java
@@ -0,0 +1,176 @@
+package gtPlusPlus.core.inventories;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+
+public class Inventory_EggBox implements IInventory{
+
+ private final String name = "EggBox";
+
+ /** Defining your inventory size this way is handy */
+ public static final int INV_SIZE = 15;
+
+ /** Inventory's size must be same as number of slots you add to the Container class */
+ private ItemStack[] inventory = new ItemStack[INV_SIZE];
+
+ public void readFromNBT(final NBTTagCompound nbt){
+ final NBTTagList list = nbt.getTagList("Items", 10);
+ this.inventory = new ItemStack[INV_SIZE];
+ for(int i = 0;i<list.tagCount();i++){
+ final NBTTagCompound data = list.getCompoundTagAt(i);
+ final int slot = data.getInteger("Slot");
+ if((slot >= 0) && (slot < INV_SIZE)){
+ //Utils.LOG_INFO("Trying to read NBT data from inventory.");
+ this.inventory[slot] = ItemStack.loadItemStackFromNBT(data);
+ }
+ }
+ }
+
+ public void writeToNBT(final NBTTagCompound nbt){
+ final NBTTagList list = new NBTTagList();
+ for(int i = 0;i<INV_SIZE;i++){
+ final ItemStack stack = this.inventory[i];
+ if(stack != null){
+ //Utils.LOG_INFO("Trying to write NBT data to inventory.");
+ final NBTTagCompound data = new NBTTagCompound();
+ stack.writeToNBT(data);
+ data.setInteger("Slot", i);
+ list.appendTag(data);
+ }
+ }
+ nbt.setTag("Items", list);
+ }
+
+ @Override
+ public int getSizeInventory()
+ {
+ return this.inventory.length;
+ }
+
+ public ItemStack[] getInventory(){
+ return this.inventory;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(final int slot)
+ {
+ return this.inventory[slot];
+ }
+
+ @Override
+ public ItemStack decrStackSize(final int slot, final int amount)
+ {
+ ItemStack stack = this.getStackInSlot(slot);
+ if(stack != null)
+ {
+ if(stack.stackSize > amount)
+ {
+ stack = stack.splitStack(amount);
+ // Don't forget this line or your inventory will not be saved!
+ this.markDirty();
+ }
+ else
+ {
+ // this method also calls markDirty, so we don't need to call it again
+ this.setInventorySlotContents(slot, null);
+ }
+ }
+ return stack;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(final int slot)
+ {
+ final ItemStack stack = this.getStackInSlot(slot);
+ this.setInventorySlotContents(slot, null);
+ return stack;
+ }
+
+ @Override
+ public void setInventorySlotContents(final int slot, final ItemStack stack)
+ {
+ this.inventory[slot] = stack;
+
+ if ((stack != null) && (stack.stackSize > this.getInventoryStackLimit()))
+ {
+ stack.stackSize = this.getInventoryStackLimit();
+ }
+
+ // Don't forget this line or your inventory will not be saved!
+ this.markDirty();
+ }
+
+ // 1.7.2+ renamed to getInventoryName
+ @Override
+ public String getInventoryName()
+ {
+ return this.name;
+ }
+
+ // 1.7.2+ renamed to hasCustomInventoryName
+ @Override
+ public boolean hasCustomInventoryName()
+ {
+ return this.name.length() > 0;
+ }
+
+ @Override
+ public int getInventoryStackLimit()
+ {
+ return 64;
+ }
+
+ /**
+ * This is the method that will handle saving the inventory contents, as it is called (or should be called!)
+ * anytime the inventory changes. Perfect. Much better than using onUpdate in an Item, as this will also
+ * let you change things in your inventory without ever opening a Gui, if you want.
+ */
+ // 1.7.2+ renamed to markDirty
+ @Override
+ public void markDirty()
+ {
+ for (int i = 0; i < this.getSizeInventory(); ++i)
+ {
+ final ItemStack temp = this.getStackInSlot(i);
+ if (temp != null){
+ //Utils.LOG_INFO("Slot "+i+" contains "+temp.getDisplayName()+" x"+temp.stackSize);
+ }
+
+ if ((temp != null) && (temp.stackSize == 0)) {
+ this.inventory[i] = null;
+ }
+ }
+ }
+
+ @Override
+ public boolean isUseableByPlayer(final EntityPlayer entityplayer)
+ {
+ return true;
+ }
+
+ // 1.7.2+ renamed to openInventory(EntityPlayer player)
+ @Override
+ public void openInventory() {}
+
+ // 1.7.2+ renamed to closeInventory(EntityPlayer player)
+ @Override
+ public void closeInventory() {}
+
+ /**
+ * This method doesn't seem to do what it claims to do, as
+ * items can still be left-clicked and placed in the inventory
+ * even when this returns false
+ */
+ @Override
+ public boolean isItemValidForSlot(final int slot, final ItemStack itemstack)
+ {
+ // Don't want to be able to store the inventory item within itself
+ // Bad things will happen, like losing your inventory
+ // Actually, this needs a custom Slot to work
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java b/src/Java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java
new file mode 100644
index 0000000000..e2dc91a413
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java
@@ -0,0 +1,173 @@
+package gtPlusPlus.core.inventories;
+
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+
+public class Inventory_VolumetricFlaskSetter implements IInventory{
+
+ private final String name = "Volumetric Flask Setter";
+
+ /** Defining your inventory size this way is handy */
+ public static final int INV_SIZE = 9;
+
+ /** Inventory's size must be same as number of slots you add to the Container class */
+ private ItemStack[] inventory = new ItemStack[INV_SIZE];
+
+ public void readFromNBT(final NBTTagCompound nbt){
+ final NBTTagList list = nbt.getTagList("Items", 10);
+ this.inventory = new ItemStack[INV_SIZE];
+ for(int i = 0;i<list.tagCount();i++){
+ final NBTTagCompound data = list.getCompoundTagAt(i);
+ final int slot = data.getInteger("Slot");
+ if((slot >= 0) && (slot < INV_SIZE)){
+ //Utils.LOG_INFO("Trying to read NBT data from inventory.");
+ this.inventory[slot] = ItemStack.loadItemStackFromNBT(data);
+ }
+ }
+ }
+
+ public void writeToNBT(final NBTTagCompound nbt){
+ final NBTTagList list = new NBTTagList();
+ for(int i = 0;i<INV_SIZE;i++){
+ final ItemStack stack = this.inventory[i];
+ if(stack != null){
+ //Utils.LOG_INFO("Trying to write NBT data to inventory.");
+ final NBTTagCompound data = new NBTTagCompound();
+ stack.writeToNBT(data);
+ data.setInteger("Slot", i);
+ list.appendTag(data);
+ }
+ }
+ nbt.setTag("Items", list);
+ }
+
+ @Override
+ public int getSizeInventory()
+ {
+ return this.inventory.length;
+ }
+
+ public ItemStack[] getInventory(){
+ return this.inventory;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(final int slot)
+ {
+ return this.inventory[slot];
+ }
+
+ @Override
+ public ItemStack decrStackSize(final int slot, final int amount)
+ {
+ ItemStack stack = this.getStackInSlot(slot);
+ if(stack != null)
+ {
+ if(stack.stackSize > amount)
+ {
+ stack = stack.splitStack(amount);
+ // Don't forget this line or your inventory will not be saved!
+ this.markDirty();
+ }
+ else
+ {
+ // this method also calls markDirty, so we don't need to call it again
+ this.setInventorySlotContents(slot, null);
+ }
+ }
+ return stack;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(final int slot)
+ {
+ final ItemStack stack = this.getStackInSlot(slot);
+ this.setInventorySlotContents(slot, null);
+ return stack;
+ }
+
+ @Override
+ public void setInventorySlotContents(final int slot, final ItemStack stack)
+ {
+ this.inventory[slot] = stack;
+
+ if ((stack != null) && (stack.stackSize > this.getInventoryStackLimit()))
+ {
+ stack.stackSize = this.getInventoryStackLimit();
+ }
+
+ // Don't forget this line or your inventory will not be saved!
+ this.markDirty();
+ }
+
+ // 1.7.2+ renamed to getInventoryName
+ @Override
+ public String getInventoryName()
+ {
+ return this.name;
+ }
+
+ // 1.7.2+ renamed to hasCustomInventoryName
+ @Override
+ public boolean hasCustomInventoryName()
+ {
+ return this.name.length() > 0;
+ }
+
+ @Override
+ public int getInventoryStackLimit()
+ {
+ return 16;
+ }
+
+ /**
+ * This is the method that will handle saving the inventory contents, as it is called (or should be called!)
+ * anytime the inventory changes. Perfect. Much better than using onUpdate in an Item, as this will also
+ * let you change things in your inventory without ever opening a Gui, if you want.
+ */
+ // 1.7.2+ renamed to markDirty
+ @Override
+ public void markDirty()
+ {
+ for (int i = 0; i < this.getSizeInventory(); ++i)
+ {
+ final ItemStack temp = this.getStackInSlot(i);
+ if (temp != null){
+ //Utils.LOG_INFO("Slot "+i+" contains "+temp.getDisplayName()+" x"+temp.stackSize);
+ }
+
+ if ((temp != null) && (temp.stackSize == 0)) {
+ this.inventory[i] = null;
+ }
+ }
+ }
+
+ @Override
+ public boolean isUseableByPlayer(final EntityPlayer entityplayer)
+ {
+ return true;
+ }
+
+ // 1.7.2+ renamed to openInventory(EntityPlayer player)
+ @Override
+ public void openInventory() {}
+
+ // 1.7.2+ renamed to closeInventory(EntityPlayer player)
+ @Override
+ public void closeInventory() {}
+
+ /**
+ * This method doesn't seem to do what it claims to do, as
+ * items can still be left-clicked and placed in the inventory
+ * even when this returns false
+ */
+ @Override
+ public boolean isItemValidForSlot(final int slot, final ItemStack itemstack) {
+ return VolumetricFlaskHelper.isVolumetricFlask(itemstack);
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/item/ModItems.java b/src/Java/gtPlusPlus/core/item/ModItems.java
index fd2b98c7be..1e0b779bac 100644
--- a/src/Java/gtPlusPlus/core/item/ModItems.java
+++ b/src/Java/gtPlusPlus/core/item/ModItems.java
@@ -11,12 +11,8 @@ import gtPlusPlus.core.block.base.BasicBlock.BlockTypes;
import gtPlusPlus.core.block.base.BlockBaseModular;
import gtPlusPlus.core.common.compat.COMPAT_Baubles;
import gtPlusPlus.core.creative.AddToCreativeTab;
-import gtPlusPlus.core.item.base.BaseEuItem;
-import gtPlusPlus.core.item.base.BaseItemBackpack;
+import gtPlusPlus.core.item.base.*;
import gtPlusPlus.core.item.base.BaseItemComponent.ComponentTypes;
-import gtPlusPlus.core.item.base.BaseItemDamageable;
-import gtPlusPlus.core.item.base.BaseItemTCShard;
-import gtPlusPlus.core.item.base.CoreItem;
import gtPlusPlus.core.item.base.foil.BaseItemFoil;
import gtPlusPlus.core.item.base.foods.BaseItemFood;
import gtPlusPlus.core.item.base.foods.BaseItemHotFood;
@@ -27,39 +23,18 @@ import gtPlusPlus.core.item.base.misc.BaseItemMisc;
import gtPlusPlus.core.item.base.misc.BaseItemMisc.MiscTypes;
import gtPlusPlus.core.item.base.plates.BaseItemPlate;
import gtPlusPlus.core.item.base.plates.BaseItemPlateDouble;
-import gtPlusPlus.core.item.bauble.BatteryPackBaseBauble;
-import gtPlusPlus.core.item.bauble.HealthBoostBauble;
-import gtPlusPlus.core.item.bauble.ModularBauble;
-import gtPlusPlus.core.item.bauble.MonsterKillerBaseBauble;
-import gtPlusPlus.core.item.chemistry.AgriculturalChem;
-import gtPlusPlus.core.item.chemistry.CoalTar;
-import gtPlusPlus.core.item.chemistry.GenericChem;
-import gtPlusPlus.core.item.chemistry.IonParticles;
-import gtPlusPlus.core.item.chemistry.MilledOreProcessing;
-import gtPlusPlus.core.item.chemistry.NuclearChem;
-import gtPlusPlus.core.item.chemistry.RocketFuels;
-import gtPlusPlus.core.item.chemistry.StandardBaseParticles;
+import gtPlusPlus.core.item.bauble.*;
+import gtPlusPlus.core.item.chemistry.*;
import gtPlusPlus.core.item.crafting.ItemDummyResearch;
import gtPlusPlus.core.item.effects.RarityUncommon;
import gtPlusPlus.core.item.food.BaseItemMetaFood;
-import gtPlusPlus.core.item.general.BaseItemGrindle;
-import gtPlusPlus.core.item.general.BufferCore;
-import gtPlusPlus.core.item.general.ItemAirFilter;
-import gtPlusPlus.core.item.general.ItemAreaClear;
-import gtPlusPlus.core.item.general.ItemBasicFirestarter;
-import gtPlusPlus.core.item.general.ItemBlueprint;
-import gtPlusPlus.core.item.general.ItemControlCore;
-import gtPlusPlus.core.item.general.ItemEmpty;
-import gtPlusPlus.core.item.general.ItemGemShards;
-import gtPlusPlus.core.item.general.ItemGenericToken;
-import gtPlusPlus.core.item.general.ItemGiantEgg;
-import gtPlusPlus.core.item.general.ItemHalfCompleteCasings;
-import gtPlusPlus.core.item.general.ItemLavaFilter;
+import gtPlusPlus.core.item.general.*;
import gtPlusPlus.core.item.general.books.ItemBaseBook;
import gtPlusPlus.core.item.general.capture.ItemEntityCatcher;
import gtPlusPlus.core.item.general.chassis.ItemBoilerChassis;
import gtPlusPlus.core.item.general.chassis.ItemDehydratorCoil;
import gtPlusPlus.core.item.general.chassis.ItemDehydratorCoilWire;
+import gtPlusPlus.core.item.general.spawn.ItemCustomSpawnEgg;
import gtPlusPlus.core.item.general.throwables.ItemHydrofluoricAcidPotion;
import gtPlusPlus.core.item.general.throwables.ItemSulfuricAcidPotion;
import gtPlusPlus.core.item.general.throwables.ItemThrowableBomb;
@@ -71,20 +46,12 @@ import gtPlusPlus.core.item.tool.misc.SandstoneHammer;
import gtPlusPlus.core.item.tool.misc.box.AutoLunchBox;
import gtPlusPlus.core.item.tool.misc.box.MagicToolBag;
import gtPlusPlus.core.item.tool.misc.box.UniversalToolBox;
-import gtPlusPlus.core.item.tool.staballoy.MultiPickaxeBase;
-import gtPlusPlus.core.item.tool.staballoy.MultiSpadeBase;
-import gtPlusPlus.core.item.tool.staballoy.StaballoyAxe;
-import gtPlusPlus.core.item.tool.staballoy.StaballoyPickaxe;
+import gtPlusPlus.core.item.tool.staballoy.*;
import gtPlusPlus.core.item.wearable.WearableLoader;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.CORE.ConfigSwitches;
import gtPlusPlus.core.lib.LoadedMods;
-import gtPlusPlus.core.material.ALLOY;
-import gtPlusPlus.core.material.ELEMENT;
-import gtPlusPlus.core.material.MISC_MATERIALS;
-import gtPlusPlus.core.material.Material;
-import gtPlusPlus.core.material.MaterialGenerator;
-import gtPlusPlus.core.material.NONMATERIAL;
+import gtPlusPlus.core.material.*;
import gtPlusPlus.core.material.nuclear.FLUORIDES;
import gtPlusPlus.core.material.nuclear.NUCLIDE;
import gtPlusPlus.core.recipe.common.CI;
@@ -99,19 +66,18 @@ import gtPlusPlus.everglades.GTplusplus_Everglades;
import gtPlusPlus.preloader.CORE_Preloader;
import gtPlusPlus.xmod.cofh.HANDLER_COFH;
import gtPlusPlus.xmod.eio.material.MaterialEIO;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechItems;
-import net.minecraft.item.EnumRarity;
-import net.minecraft.item.Item;
+import net.minecraft.item.*;
import net.minecraft.item.Item.ToolMaterial;
-import net.minecraft.item.ItemFood;
-import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
public final class ModItems {
-
public static ToolMaterial STABALLOY = EnumHelper.addToolMaterial("Staballoy", 3, 2500, 7, 1.0F, 18);
public static Item ZZZ_Empty;
@@ -120,7 +86,7 @@ public final class ModItems {
public static Item itemAlkalusDisk;
public static Item itemDebugShapeSpawner;
- public static Item itemBaseSpawnEgg;
+ public static ItemCustomSpawnEgg itemCustomSpawnEgg;
//EnderIO
public static Item itemPlateSoularium;
@@ -295,6 +261,7 @@ public final class ModItems {
public static Item itemSugarCoke;
public static Item itemCircuitLFTR;
+ public static Item itemBasicTurbine;
public static Item itemDebugAreaClear;
@@ -317,7 +284,7 @@ public final class ModItems {
public static Item dustDecayedRadium226;
public static Item dustRadium226;
- public static Item itemBigEgg;
+ public static ItemGiantEgg itemBigEgg;
public static GregtechPump toolGregtechPump;
@@ -384,9 +351,10 @@ public final class ModItems {
itemDebugScanner = new DebugScanner();
itemAlkalusDisk = new BaseItemDamageable("itemAlkalusDisk", AddToCreativeTab.tabMisc, 1, 0, "Unknown Use", EnumRarity.rare, EnumChatFormatting.AQUA, false, null);
- itemBigEgg = new ItemGiantEgg("itemBigEgg", "Ginourmous Chicken Egg", tabMisc, 64, 0, "I had best try disassemble this.. for science!", "fuelLargeChickenEgg", 5000, 0).setTextureName(CORE.MODID + ":itemBigEgg");
+ itemBigEgg = new ItemGiantEgg();
itemGenericToken = new ItemGenericToken();
itemDummyResearch = new ItemDummyResearch();
+ itemCustomSpawnEgg = new ItemCustomSpawnEgg();
//Debug Loading
if (CORE_Preloader.DEBUG_MODE){
@@ -662,6 +630,8 @@ public final class ModItems {
MaterialGenerator.generate(ALLOY.CINOBITE);
MaterialGenerator.generate(ALLOY.PIKYONIUM);
MaterialGenerator.generate(ALLOY.ABYSSAL);
+ MaterialGenerator.generate(ALLOY.LAURENIUM);
+ MaterialGenerator.generate(ALLOY.BOTMIUM);
MaterialGenerator.generate(ALLOY.TITANSTEEL);
@@ -749,6 +719,9 @@ public final class ModItems {
//LFTR Control Circuit
itemCircuitLFTR = new CoreItem("itemCircuitLFTR", ""+EnumChatFormatting.GREEN+"Control Circuit", AddToCreativeTab.tabMisc, 1, 0, new String[] {"Keeps Multiblocks Stable"}, EnumRarity.epic, EnumChatFormatting.DARK_GREEN, false, null);
+ if (CORE.ConfigSwitches.enableMachine_Pollution) {
+ itemBasicTurbine = new ItemBasicScrubberTurbine();
+ }
//Zirconium
//Cinter Pellet.
@@ -973,8 +946,12 @@ public final class ModItems {
itemIonParticleBase = new IonParticles();
itemStandarParticleBase = new StandardBaseParticles();
-
-
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ Item a8kFlask = VolumetricFlaskHelper.generateNewFlask("Volumetric_Flask_8k", "Large Volumetric Flask", 8000);
+ Item a64kFlask = VolumetricFlaskHelper.generateNewFlask("Volumetric_Flask_32k", "Gigantic Volumetric Flask", 32000);
+ GregtechItemList.VOLUMETRIC_FLASK_8k.set(a8kFlask);
+ GregtechItemList.VOLUMETRIC_FLASK_32k.set(a64kFlask);
+ }
itemBoilerChassis = new ItemBoilerChassis();
itemDehydratorCoilWire = new ItemDehydratorCoilWire();
diff --git a/src/Java/gtPlusPlus/core/item/base/BaseItemTickable.java b/src/Java/gtPlusPlus/core/item/base/BaseItemTickable.java
index 54710662d8..79a49f92b7 100644
--- a/src/Java/gtPlusPlus/core/item/base/BaseItemTickable.java
+++ b/src/Java/gtPlusPlus/core/item/base/BaseItemTickable.java
@@ -14,10 +14,11 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
-
+import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
public class BaseItemTickable extends CoreItem {
@@ -57,7 +58,7 @@ public class BaseItemTickable extends CoreItem {
}
- boolean active = getIsActive(world, iStack);
+ boolean active = isTicking(world, iStack);
if (active) {
tickItemTag(world, iStack);
}
@@ -113,12 +114,15 @@ public class BaseItemTickable extends CoreItem {
}
}
+ protected int getMaxTicks(ItemStack aStack) {
+ return maxTicks;
+ }
- private boolean createNBT(World world, ItemStack rStack){
+ protected boolean createNBT(World world, ItemStack rStack){
final NBTTagCompound tagMain = new NBTTagCompound();
final NBTTagCompound tagNBT = new NBTTagCompound();
tagNBT.setLong("Tick", 0);
- tagNBT.setLong("maxTick", this.maxTicks);
+ tagNBT.setLong("maxTick", getMaxTicks(rStack));
tagNBT.setBoolean("isActive", true);
//Try set world time
@@ -127,11 +131,12 @@ public class BaseItemTickable extends CoreItem {
}
tagMain.setTag("TickableItem", tagNBT);
- rStack.setTagCompound(tagMain);
+ rStack.setTagCompound(tagMain);
+ Logger.INFO("Created Tickable NBT data.");
return true;
}
- public final long getFilterDamage(World world, final ItemStack aStack) {
+ public final long getTicks(World world, final ItemStack aStack) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("TickableItem");
@@ -145,7 +150,7 @@ public class BaseItemTickable extends CoreItem {
return 0L;
}
- public final boolean setFilterDamage(World world, final ItemStack aStack, final long aDamage) {
+ public final boolean setTicks(World world, final ItemStack aStack, final long aDamage) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("TickableItem");
@@ -160,7 +165,7 @@ public class BaseItemTickable extends CoreItem {
return false;
}
- public final boolean getIsActive(World world, final ItemStack aStack) {
+ public final boolean isTicking(World world, final ItemStack aStack) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("TickableItem");
@@ -174,7 +179,7 @@ public class BaseItemTickable extends CoreItem {
return true;
}
- public final boolean setIsActive(World world, final ItemStack aStack, final boolean active) {
+ public final boolean setTicking(World world, final ItemStack aStack, final boolean active) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("TickableItem");
@@ -251,26 +256,15 @@ public class BaseItemTickable extends CoreItem {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
if (aNBT.hasKey("TickableItem")) {
- aNBT = aNBT.getCompoundTag("TickableItem");
-
- /*if (!aNBT.hasKey("CreationDate") && world != null) {
- aNBT.setLong("CreationDate", world.getTotalWorldTime());
- }*/
-
+ aNBT = aNBT.getCompoundTag("TickableItem");
//Done Ticking
- if (maxTicks-getFilterDamage(world, aStack) <= 0) {
- setIsActive(world, aStack, false);
+ if (getMaxTicks(aStack)-getTicks(world, aStack) <= 0) {
+ setTicking(world, aStack, false);
return false;
}
- if (getIsActive(world, aStack)) {
+ if (isTicking(world, aStack)) {
if (aNBT != null) {
-
- //if ((world.getTotalWorldTime()-))
-
- // Just tick once
- aNBT.setLong("Tick", getFilterDamage(world, aStack)+1);
-
-
+ aNBT.setLong("Tick", getTicks(world, aStack)+1);
return true;
}
else {
@@ -288,10 +282,11 @@ public class BaseItemTickable extends CoreItem {
@Override
public double getDurabilityForDisplay(ItemStack stack) {
if (stack.getTagCompound() == null){
- createNBT(null, stack);
+ //createNBT(null, stack);
+ return 0;
}
- double currentDamage = getFilterDamage(null, stack);
- double durabilitypercent = currentDamage / maxTicks;
+ double currentDamage = getTicks(null, stack);
+ double durabilitypercent = currentDamage / getMaxTicks(stack);
return durabilitypercent;
}
@@ -302,23 +297,28 @@ public class BaseItemTickable extends CoreItem {
if (this.descriptionString.length > 0) {
list.add(EnumChatFormatting.GRAY+this.descriptionString[0]);
}
+ long maxTicks = getMaxTicks(stack);
+ long ticks = 0;
+ if (stack.hasTagCompound()) {
+ ticks = getTicks(world, stack);
+ }
EnumChatFormatting durability = EnumChatFormatting.GRAY;
- if (maxTicks-getFilterDamage(world, stack) > (maxTicks*0.8)){
+ if (maxTicks-ticks > (maxTicks*0.8)){
durability = EnumChatFormatting.GRAY;
}
- else if (maxTicks-getFilterDamage(world, stack) > (maxTicks*0.6)){
+ else if (maxTicks-ticks > (maxTicks*0.6)){
durability = EnumChatFormatting.GREEN;
}
- else if (maxTicks-getFilterDamage(world, stack) > (maxTicks*0.4)){
+ else if (maxTicks-ticks > (maxTicks*0.4)){
durability = EnumChatFormatting.YELLOW;
}
- else if (maxTicks-getFilterDamage(world, stack) > (maxTicks*0.2)){
+ else if (maxTicks-ticks > (maxTicks*0.2)){
durability = EnumChatFormatting.GOLD;
}
- else if (maxTicks-getFilterDamage(world, stack) > 0){
+ else if (maxTicks-ticks > 0){
durability = EnumChatFormatting.RED;
}
- list.add(durability+""+((maxTicks-getFilterDamage(world, stack))/20)+EnumChatFormatting.GRAY+" seconds until decay");
+ list.add(durability+""+((maxTicks-ticks)/20)+EnumChatFormatting.GRAY+" seconds until decay");
if (this.descriptionString.length > 1) {
for (int h=1;h<this.descriptionString.length;h++) {
diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBasicTile.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBasicTile.java
index 251230932c..14344c1817 100644
--- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBasicTile.java
+++ b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBasicTile.java
@@ -51,11 +51,12 @@ public class ItemBlockBasicTile extends ItemBlock {
list.add("Use either Formaldehyde or Hydrogen cyanide");
list.add("Be weary of your neighbours");
}
- else if (this.mID == 7) {
-
+ else if (this.mID == 7) { // Egg Box
+ list.add("A box for holding big eggs");
}
- else if (this.mID == 8){
-
+ else if (this.mID == 8){ // Volumetric Flask Setter
+ list.add("Easy Flask Configuration");
+ list.add("Configure default input slot with a screwdriver");
}
else if (this.mID == 9){
diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockRoundRobinator.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockRoundRobinator.java
index 2d0fd00dd9..7a4222ed0f 100644
--- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockRoundRobinator.java
+++ b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockRoundRobinator.java
@@ -107,4 +107,9 @@ public class ItemBlockRoundRobinator extends ItemBlockWithMetadata
public int getItemEnchantability(ItemStack stack) {
return 0;
}
+
+ @Override
+ public boolean getHasSubtypes() {
+ return true;
+ }
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java b/src/Java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java
index 356fdac24e..883eb241da 100644
--- a/src/Java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java
+++ b/src/Java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java
@@ -178,9 +178,9 @@ public class BaseOreComponent extends Item{
@SideOnly(Side.CLIENT)
public void registerIcons(final IIconRegister par1IconRegister){
if (this.componentType == ComponentTypes.MILLED) {
- this.base = par1IconRegister.registerIcon(CORE.MODID + ":" + "processing/MilledOre/"+this.componentType.getComponent());
+ this.base = par1IconRegister.registerIcon(CORE.MODID + ":" + "processing/MilledOre/milled");
if (this.componentType.hasOverlay()){
- this.overlay = par1IconRegister.registerIcon(CORE.MODID + ":" + "processing/MilledOre/"+this.componentType.getComponent()+"_Overlay");
+ this.overlay = par1IconRegister.registerIcon(CORE.MODID + ":" + "processing/MilledOre/milled_OVERLAY");
}
}
else if (CORE.ConfigSwitches.useGregtechTextures){
diff --git a/src/Java/gtPlusPlus/core/item/chemistry/CoalTar.java b/src/Java/gtPlusPlus/core/item/chemistry/CoalTar.java
index 37428b18d6..badd318414 100644
--- a/src/Java/gtPlusPlus/core/item/chemistry/CoalTar.java
+++ b/src/Java/gtPlusPlus/core/item/chemistry/CoalTar.java
@@ -5,7 +5,6 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.util.GT_OreDictUnificator;
import gtPlusPlus.api.objects.minecraft.ItemPackage;
-import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.Utils;
@@ -289,6 +288,7 @@ public class CoalTar extends ItemPackage {
FluidStack aGtAcid = FluidUtils.getFluidStack("phtalicacid", 500);
if (aMyAcid != null && aGtAcid != null) {
CORE.RA.addDistilleryRecipe(CI.getNumberedBioCircuit(8), aMyAcid, aGtAcid, null, 50, 16, false);
+ CORE.RA.addDistilleryRecipe(CI.getNumberedBioCircuit(9), aGtAcid, aMyAcid, null, 50, 16, false);
}
}
@@ -354,7 +354,7 @@ public class CoalTar extends ItemPackage {
Naphthalene = FluidUtils.generateFluidNonMolten("Naphthalene", "Naphthalene", 115, new short[]{210, 185, 135, 100}, null, null);
// v - Oxidize with mercury and nitric acid
//Create Phthalic Acid
- Phthalic_Acid = FluidUtils.generateFluidNonMolten("PhthalicAcid", "Phtalic Acid", 207, new short[]{210, 220, 210, 100}, null, null);
+ Phthalic_Acid = FluidUtils.generateFluidNonMolten("PhthalicAcid", "Phthalic Acid", 207, new short[]{210, 220, 210, 100}, null, null);
// v - Dehydrate at 180C+
//Create Phthalic Anhydride
//ItemUtils.generateSpecialUseDusts("PhthalicAnhydride", "Phthalic Anhydride", "C6H4(CO)2O", Utils.rgbtoHexValue(175, 175, 175));
diff --git a/src/Java/gtPlusPlus/core/item/chemistry/GenericChem.java b/src/Java/gtPlusPlus/core/item/chemistry/GenericChem.java
index 80a51d80cc..f61a2096b7 100644
--- a/src/Java/gtPlusPlus/core/item/chemistry/GenericChem.java
+++ b/src/Java/gtPlusPlus/core/item/chemistry/GenericChem.java
@@ -406,7 +406,7 @@ public class GenericChem extends ItemPackage {
},
20 *60,
120,
- 2);
+ 4);
//Sodium ethyl xanthate - CH3CH2ONa + CS2 → CH3CH2OCS2Na
CORE.RA.addChemicalPlantRecipe(
@@ -425,7 +425,7 @@ public class GenericChem extends ItemPackage {
},
20 *60,
120,
- 2);
+ 4);
}
@@ -869,7 +869,7 @@ public class GenericChem extends ItemPackage {
},
20 * 30,
500,
- 3);
+ 4);
}
@@ -891,7 +891,7 @@ public class GenericChem extends ItemPackage {
},
20 * 15,
120,
- 1);
+ 2);
/*GT_Values.RA.addChemicalRecipe(
ItemUtils.getItemStackOfAmountFromOreDict("dustPhthalicAnhydride", 4),
@@ -922,7 +922,7 @@ public class GenericChem extends ItemPackage {
},
20 * 40,
120,
- 1);
+ 2);
/*GT_Values.RA.addChemicalRecipe(
ItemUtils.getItemStackOfAmountFromOreDict("platePalladium", 0),
diff --git a/src/Java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java b/src/Java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java
index 71bf2f3e6f..8c6e66fcb8 100644
--- a/src/Java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java
+++ b/src/Java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java
@@ -629,7 +629,7 @@ public class MilledOreProcessing extends ItemPackage {
},
20 * 60,
120,
- 2);
+ 3);
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -653,7 +653,7 @@ public class MilledOreProcessing extends ItemPackage {
},
20 * 45,
120,
- 3);
+ 4);
}
@@ -683,7 +683,7 @@ public class MilledOreProcessing extends ItemPackage {
aChances,
aTime * 20,
aEU,
- 1);
+ 3);
}
public static ItemStack[] cleanArray(ItemStack[] input) {
diff --git a/src/Java/gtPlusPlus/core/item/chemistry/RocketFuels.java b/src/Java/gtPlusPlus/core/item/chemistry/RocketFuels.java
index 719e5145e9..86088fe8c6 100644
--- a/src/Java/gtPlusPlus/core/item/chemistry/RocketFuels.java
+++ b/src/Java/gtPlusPlus/core/item/chemistry/RocketFuels.java
@@ -100,7 +100,7 @@ public class RocketFuels extends ItemPackage {
CORE.RA.addChemicalPlantRecipe(
new ItemStack[]{
- ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 16),
+ ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 12),
ItemUtils.getSimpleStack(GenericChem.mOrangeCatalyst, 0),
},
new FluidStack[] {
@@ -118,7 +118,7 @@ public class RocketFuels extends ItemPackage {
new int[]{100, 100, 50, 50},
20*30,
MaterialUtils.getVoltageForTier(3),
- 2);
+ 3);
}
@@ -276,7 +276,7 @@ public class RocketFuels extends ItemPackage {
},
20 * 60,
120,
- 2);
+ 3);
}
@@ -388,7 +388,7 @@ public class RocketFuels extends ItemPackage {
},
20 * 30,
240,
- 3);
+ 4);
// Monomethylhydrazine_Plus_Nitric_Acid
@@ -397,19 +397,19 @@ public class RocketFuels extends ItemPackage {
CI.getNumberedCircuit(3),
},
new FluidStack[] {
- FluidUtils.getFluidStack(Monomethylhydrazine, 1000),
+ FluidUtils.getFluidStack(Monomethylhydrazine, 2000),
FluidUtils.getFluidStack("nitricacid", 1000),
},
new ItemStack[] {
},
new FluidStack[] {
- FluidUtils.getFluidStack(Monomethylhydrazine_Plus_Nitric_Acid, 3000),
+ FluidUtils.getFluidStack(Monomethylhydrazine_Plus_Nitric_Acid, 2000),
},
20 * 45,
480,
- 3);
+ 5);
// Unsymmetrical_Dimethylhydrazine_Plus_Nitrogen_Tetroxide
@@ -425,12 +425,12 @@ public class RocketFuels extends ItemPackage {
},
new FluidStack[] {
- FluidUtils.getFluidStack(Unsymmetrical_Dimethylhydrazine_Plus_Nitrogen_Tetroxide, 4000),
+ FluidUtils.getFluidStack(Unsymmetrical_Dimethylhydrazine_Plus_Nitrogen_Tetroxide, 5000),
},
20 * 60,
480,
- 3);
+ 6);
}
diff --git a/src/Java/gtPlusPlus/core/item/general/ItemBasicScrubberTurbine.java b/src/Java/gtPlusPlus/core/item/general/ItemBasicScrubberTurbine.java
new file mode 100644
index 0000000000..bd8159eb01
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/item/general/ItemBasicScrubberTurbine.java
@@ -0,0 +1,147 @@
+package gtPlusPlus.core.item.general;
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IIcon;
+
+import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.Utils;
+
+public class ItemBasicScrubberTurbine extends Item {
+
+ public IIcon[] icons = new IIcon[1];
+
+ public ItemBasicScrubberTurbine() {
+ super();
+ this.setHasSubtypes(true);
+ String unlocalizedName = "itemBasicTurbine";
+ this.setUnlocalizedName(unlocalizedName);
+ this.setCreativeTab(AddToCreativeTab.tabMisc);
+ this.setMaxStackSize(1);
+ GameRegistry.registerItem(this, unlocalizedName);
+ }
+
+ @Override
+ public void registerIcons(IIconRegister reg) {
+ this.icons[0] = reg.registerIcon(CORE.MODID + ":" + "itemBasicTurbine");
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int meta) {
+ return this.icons[0];
+ }
+
+ @Override
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for (int i = 0; i < 2; i ++) {
+ list.add(new ItemStack(item, 1, i));
+ }
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack stack) {
+ return this.getUnlocalizedName() + "_" + stack.getItemDamage();
+ }
+
+ @Override
+ public String getItemStackDisplayName(final ItemStack tItem) {
+ if (tItem == null) {
+ return "Basic Turbine";
+ }
+ return super.getItemStackDisplayName(tItem);
+ }
+
+ @Override
+ public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) {
+ int meta = stack.getItemDamage();
+ if (meta == 0){
+ HEX_OxFFFFFF = Utils.rgbtoHexValue(200,200,200);
+ }
+ if (meta == 1){
+ HEX_OxFFFFFF = Utils.rgbtoHexValue(255,128,0);
+ }
+ return HEX_OxFFFFFF;
+ }
+
+ private static boolean createNBT(ItemStack rStack){
+ final NBTTagCompound tagMain = new NBTTagCompound();
+ final NBTTagCompound tagNBT = new NBTTagCompound();
+ tagNBT.setLong("Damage", 0);
+ tagMain.setTag("BasicTurbine", tagNBT);
+ rStack.setTagCompound(tagMain);
+ return true;
+ }
+
+ public static final long getFilterDamage(final ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("BasicTurbine");
+ if (aNBT != null) {
+ return aNBT.getLong("Damage");
+ }
+ }
+ else {
+ createNBT(aStack);
+ }
+ return 0L;
+ }
+
+ public static final boolean setFilterDamage(final ItemStack aStack, final long aDamage) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("BasicTurbine");
+ if (aNBT != null) {
+ aNBT.setLong("Damage", aDamage);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public int getMaxDurability(ItemStack aStack) {
+ if (aStack != null) {
+ int aMeta = aStack.getItemDamage();
+ if (aMeta == 0) {
+ return 2500;
+ }
+ if (aMeta == 1) {
+ return 5000;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public double getDurabilityForDisplay(ItemStack stack) {
+ if (stack.getTagCompound() == null){
+ createNBT(stack);
+ }
+ double currentDamage = getFilterDamage(stack);
+ double meta = getMaxDurability(stack);
+ double durabilitypercent = currentDamage / meta;
+ return durabilitypercent;
+ }
+
+ @Override
+ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
+ list.add(EnumChatFormatting.GRAY+"An early tier Turbine for Atmospheric Reconditioning.");
+ int maxDamage = getMaxDurability(stack);
+ list.add(EnumChatFormatting.GRAY+""+(maxDamage-getFilterDamage(stack))+"/"+maxDamage+" uses left.");
+ super.addInformation(stack, player, list, bool);
+ }
+
+ @Override
+ public boolean showDurabilityBar(ItemStack stack) {
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java b/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java
index d98b27d163..b3338bb681 100644
--- a/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java
+++ b/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java
@@ -4,188 +4,232 @@ import static gtPlusPlus.core.lib.CORE.RANDOM;
import java.util.List;
-import gregtech.api.enums.ItemList;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.entity.item.ItemEntityGiantEgg;
-import gtPlusPlus.core.item.base.BaseItemBurnable;
+import gtPlusPlus.core.item.base.BaseItemTickable;
+import gtPlusPlus.core.item.general.spawn.ItemCustomSpawnEgg;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.NBTUtils;
-import net.minecraft.creativetab.CreativeTabs;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
-import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
-public class ItemGiantEgg extends BaseItemBurnable {
+public class ItemGiantEgg extends BaseItemTickable {
- public ItemGiantEgg(String unlocalizedName, String displayName, CreativeTabs creativeTab, int stackSize, int maxDmg,
- String description, String oredictName, int burnTime, int meta) {
- super(unlocalizedName, displayName, creativeTab, stackSize, maxDmg, description, oredictName, burnTime, meta);
- this.setMaxStackSize(1);
- }
+ private static ItemStack turnsIntoItem;
+ private static ItemStack mCorrectEgg;
+ private static ItemStack mCorrectStemCells;
- @Override
- public String getItemStackDisplayName(ItemStack aStack) {
- String localName = super.getItemStackDisplayName(aStack);
- nbtWork(aStack);
- int size = 1;
- if (NBTUtils.hasKey(aStack, "size")){
- size = NBTUtils.getInteger(aStack, "size");
- return ""+size+" "+localName;
- }
- return "?? "+localName;
+ public void registerFuel(int burn){
+ CORE.burnables.add(new Pair<Integer, ItemStack>(burn, ItemUtils.getSimpleStack(this, 1)));
}
- private static ItemStack mCorrectEgg;
- private static ItemStack mCorrectStemCells;
+ public final void registerOrdictionary(String name){
+ ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(this), name);
+ }
- @Override
- public void onUpdate(ItemStack aStack, World world, Entity entityHolding, int p_77663_4_, boolean p_77663_5_) {
+ public ItemGiantEgg() {
+ this(Utils.rgbtoHexValue(255, 255, 255), Short.MAX_VALUE * Byte.MAX_VALUE, new String[] {"I had best try disassemble this.. for science!"});
+ }
- if (world.isRemote) {
- super.onUpdate(aStack, world, entityHolding, p_77663_4_, p_77663_5_);
- return;
- }
- try {
- boolean player = (entityHolding != null && entityHolding instanceof EntityPlayer);
+ private ItemGiantEgg(int colour, int maxTicks, String[] desc1) {
+ super(true, false, "itemBigEgg", colour, maxTicks, desc1);
+ setTextureName(CORE.MODID + ":itemBigEgg");
+ this.setMaxStackSize(1);
+ registerFuel(5000);
+ registerOrdictionary("fuelLargeChickenEgg");
+ }
+
+ public static void postInit(ItemGiantEgg aGiantEggItem) {
+ ItemGiantEgg.turnsIntoItem = getSpawnEggStack();
+ //new DecayableRecipe(aGiantEggItem.maxTicks, getSimpleStack(aGiantEggItem), ItemUtils.getSimpleStack(ItemGiantEgg.turnsIntoItem, 1));
+ }
- if (player) {
- NBTUtils.setBoolean(aStack, "playerHeld", true);
- }
- else {
- NBTUtils.setBoolean(aStack, "playerHeld", false);
- }
-
- nbtWork(aStack);
-
- int age = NBTUtils.hasKey(aStack, "mAge") ? NBTUtils.getInteger(aStack, "mAge") : 0;
- if (player) {
- NBTUtils.setInteger(aStack, "mAge", age+1);
-
- //Set the correct egg for future hatches
- if (mCorrectEgg == null) {
- if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) {
- if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) {
- for (int g=0;g<128;g++) {
- ItemStack mSpawn = ItemUtils.simpleMetaStack(Items.spawn_egg, g, 1);
- if (mSpawn != null) {
- String s = ("" + StatCollector.translateToLocal(mSpawn.getUnlocalizedName() + ".name")).trim();
- String s1 = EntityList.getStringFromID(mSpawn.getItemDamage());
- if (s1 != null){
- s = s + " " + StatCollector.translateToLocal("entity." + s1 + ".name");
- if (s1.equalsIgnoreCase("bigChickenFriendly")) {
- mCorrectEgg = mSpawn;
- break;
- }
- }
- }
- }
+ private static ItemStack getSpawnEggStack() {
+ //Set the correct egg for future hatches
+ if (mCorrectEgg == null) {
+ /*for (int g=0;g<Byte.MAX_VALUE;g++) {
+ ItemStack mSpawn = ItemUtils.simpleMetaStack(Items.spawn_egg, g, 1);
+ if (mSpawn != null) {
+ //String s = ("" + StatCollector.translateToLocal(mSpawn.getUnlocalizedName() + ".name")).trim();
+ String s1 = EntityList.getStringFromID(mSpawn.getItemDamage());
+ if (s1 != null){
+ //s = s + " " + StatCollector.translateToLocal("entity." + s1 + ".name");
+ if (s1.equalsIgnoreCase("bigChickenFriendly")) {
+ mCorrectEgg = mSpawn;
+ return mCorrectEgg;
}
}
- }
+ }
+ }*/
+ ItemStack aTempEgg = ItemCustomSpawnEgg.getSpawnEggForEntityname("bigChickenFriendly", 1);
+ if (aTempEgg != null) {
+ mCorrectEgg = aTempEgg;
+ }
+ }
+ return mCorrectEgg;
+ }
- if (mCorrectEgg != null) {
- if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) {
- if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) {
- if (MathUtils.randInt(0, 1000) >= 990) {
- if (NBTUtils.hasKey(aStack, "size")) {
- if ((NBTUtils.getInteger(aStack, "size")+1) >= MathUtils.randInt(0, 9)) {
- ((EntityPlayer) entityHolding).inventory.addItemStackToInventory((mCorrectEgg));
- ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this);
- }
- else {
- ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this);
- }
- }
- }
- }
- }
+ private static ItemStack getStemCellStack() {
+ if (mCorrectStemCells == null) {
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK && Utils.getGregtechSubVersion() > 28) {
+ ItemStack xl = ItemUtils.getValueOfItemList("Circuit_Chip_Stemcell", 1, ItemUtils.getSimpleStack(Items.egg, 2));
+ if (xl != null) {
+ mCorrectStemCells = xl.copy();
}
}
+ else {
+ mCorrectStemCells = ItemUtils.getSimpleStack(Items.egg, 2);
+ }
}
- catch (Throwable t) {
- t.printStackTrace();
- }
+ return mCorrectStemCells;
+ }
- super.onUpdate(aStack, world, entityHolding, p_77663_4_, p_77663_5_);
+ protected int getMaxTicks(ItemStack aStack) {
+ if (aStack != null && aStack.hasTagCompound() && aStack.getTagCompound().hasKey("mEggAge")) {
+ return NBTUtils.getInteger(aStack, "mEggAge");
+ }
+ return maxTicks;
}
@Override
- public void onCreated(ItemStack p_77622_1_, World p_77622_2_, EntityPlayer p_77622_3_) {
- super.onCreated(p_77622_1_, p_77622_2_, p_77622_3_);
+ public void registerIcons(final IIconRegister i) {
+ this.mIcon[0] = i.registerIcon(CORE.MODID + ":" + "itemBigEgg");
}
- public void nbtWork(ItemStack aStack) {
- if (NBTUtils.hasKey(aStack, "playerHeld")) {
- boolean player = NBTUtils.getBoolean(aStack, "playerHeld");
- if (player && !NBTUtils.hasKey(aStack, "size")) {
- NBTUtils.setInteger(aStack, "size", MathUtils.randInt(1, 8));
+
+ @Override
+ protected boolean createNBT(World world, ItemStack aStack){
+
+ if (aStack.getTagCompound() != null && aStack.getTagCompound().hasKey("size")) {
+ return false;
+ }
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(1));
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(2));
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(3));
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(4));
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(5));
+ Logger.INFO("Egg: "+ReflectionUtils.getMethodName(6));
+ //Logger.INFO("Creating Egg NBT.");
+ boolean aSuper = super.createNBT(world, aStack);
+ int size = MathUtils.randInt(1, 8);
+ NBTUtils.setInteger(aStack, "size", size);
+ NBTUtils.setInteger(aStack, "mEggAge", ((MathUtils.randInt(8000, 16000)*size)));
+ ItemStack aStemCells = getStemCellStack();
+ if (aStemCells != null) {
+ int mSize = NBTUtils.getInteger(aStack, "size");
+ float mSizeMod = (MathUtils.randInt(-5, 5)/5);
+ mSize += mSizeMod;
+ mSize = Math.max(mSize, 1);
+ ItemStack eggYolks[] = new ItemStack[mSize];
+ for (int u=0;u<mSize;u++) {
+ eggYolks[u] = ItemUtils.getSimpleStack(aStemCells, MathUtils.randInt(1, 4));
}
- if (player && !NBTUtils.hasKey(aStack, "mEggAge") && NBTUtils.hasKey(aStack, "size")) {
- NBTUtils.setInteger(aStack, "mEggAge", ((MathUtils.randInt(8000, 16000)*NBTUtils.getInteger(aStack, "size"))/2));
+ int mexpected = 0;
+ for (ItemStack e : eggYolks) {
+ if (e != null) {
+ mexpected += e.stackSize;
+ }
}
+ if (mexpected > 0) {
+ NBTUtils.setInteger(aStack, "mExpected", mexpected);
+ NBTUtils.writeItemsToGtCraftingComponents(aStack, new ItemStack[]{ ItemUtils.getSimpleStack(aStemCells, mexpected)}, true);
+ }
+ }
+ return aSuper;
+
+ }
- if (player && NBTUtils.getTagCompound(aStack, "GT.CraftingComponents") == null) {
- if (mCorrectStemCells == null) {
- if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK && Utils.getGregtechSubVersion() > 28) {
-
- ItemList xl = ItemUtils.getValueOfItemList("Circuit_Chip_Stemcell", ItemList.Circuit_Elite);
- if (xl != null && xl.hasBeenSet()) {
- mCorrectStemCells = xl.get(1);
- }
- }
- else {
- mCorrectStemCells = ItemUtils.getSimpleStack(Items.egg, 2);
- }
- }
- if (mCorrectStemCells != null) {
- int mSize = NBTUtils.getInteger(aStack, "size");
- float mSizeMod = (MathUtils.randInt(-5, 5)/10);
- mSize += mSizeMod;
- mSize = Math.max(mSize, 1);
- ItemStack eggYolks[] = new ItemStack[mSize];
- for (int u=0;u<mSize;u++) {
- eggYolks[u] = ItemUtils.getSimpleStack(mCorrectStemCells, MathUtils.randInt(1, 4));
- }
+ @Override
+ public void onUpdate(final ItemStack iStack, final World world, final Entity entityHolding, final int p_77663_4_, final boolean p_77663_5_) {
+ if (world == null || iStack == null) {
+ return;
+ }
+ if (world.isRemote) {
+ return;
+ }
+ if (iStack.getTagCompound() == null || !iStack.getTagCompound().hasKey("size")) {
+ this.createNBT(world, iStack);
+ Logger.INFO("Egg has no NBT, creating (onUpdate)");
+ }
+ boolean a1, a2;
+ a1 = this.isTicking(world, iStack);
+ a2 = a1 ? tickItemTag(world, iStack) : false;
- int mexpected = 0;
- for (ItemStack e : eggYolks) {
- if (e != null) {
- mexpected += e.stackSize;
+ //Logger.INFO("Is Ticking? "+a1);
+ //Logger.INFO("Did Tick? "+a2);
+ if (!a1 && !a2) {
+ if (entityHolding instanceof EntityPlayer){
+ if (MathUtils.randInt(0, 1000) >= 990) {
+ if (NBTUtils.hasKey(iStack, "size")) {
+ if ((NBTUtils.getInteger(iStack, "size")+1) >= MathUtils.randInt(0, 9)) {
+ ItemStack replacement = ItemUtils.getSimpleStack(getHatchResult(), 1);
+ if (replacement == null) {
+
+ }
+ //Logger.INFO("Replacing "+iStack.getDisplayName()+" with "+replacement.getDisplayName()+".");
+ final ItemStack tempTransform = replacement.copy();
+ if (iStack.stackSize > 1){
+ int u = iStack.stackSize;
+ tempTransform.stackSize = u;
+ ((EntityPlayer) entityHolding).inventory.addItemStackToInventory((tempTransform));
+ for (int l=0;l<u;l++){
+ ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this);
+ }
+ }
+ else {
+ tempTransform.stackSize=1;
+ ((EntityPlayer) entityHolding).inventory.addItemStackToInventory((tempTransform));
+ ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this);
+ }
}
}
- if (mexpected > 0) {
- NBTUtils.setInteger(aStack, "mExpected", mexpected);
- }
-
- NBTUtils.writeItemsToGtCraftingComponents(aStack, eggYolks, true);
}
}
- if (player && NBTUtils.getTagCompound(aStack, "GT.CraftingComponents") != null) {
+ }
+ }
- }
- }
+ public ItemStack getHatchResult() {
+ return turnsIntoItem;
}
@Override
+ public String getItemStackDisplayName(ItemStack aStack) {
+ String localName = super.getItemStackDisplayName(aStack);
+ /*if (aStack.getTagCompound() == null){
+ createNBT(null, aStack);
+ Logger.INFO("Egg has no NBT, creating (getDisplayName)");
+ }*/
+ int size = 1;
+ if (NBTUtils.hasKey(aStack, "size")){
+ size = NBTUtils.getInteger(aStack, "size");
+ return ""+size+" "+localName;
+ }
+ return "?? "+localName;
+ }
+
+
+ @Override
public boolean hasCustomEntity(ItemStack stack) {
return true;
}
@Override
public Entity createEntity(World world, Entity location, ItemStack itemstack) {
-
if (location instanceof EntityPlayer) {
-
EntityPlayer player = (EntityPlayer) location;
-
if (itemstack == null) {
return null;
}
@@ -217,27 +261,40 @@ public class ItemGiantEgg extends BaseItemBurnable {
@Override
public void addInformation(ItemStack stack, EntityPlayer aPlayer, List list, boolean bool) {
int size = 0;
- if (NBTUtils.hasKey(stack, "size")){
- size = NBTUtils.getInteger(stack, "size");
- }
- int age = 0;
- if (NBTUtils.hasKey(stack, "mAge")){
- age = NBTUtils.getInteger(stack, "mAge");
- }
- int life = 0;
- if (NBTUtils.hasKey(stack, "mEggAge")){
- life = NBTUtils.getInteger(stack, "mEggAge");
- }
+ long age = 0;
+ long life = 0;
int expected = 0;
- if (NBTUtils.hasKey(stack, "mExpected")){
- expected = NBTUtils.getInteger(stack, "mExpected");
+ if (this.descriptionString.length > 0) {
+ list.add(EnumChatFormatting.GRAY+this.descriptionString[0]);
}
- list.add("Egg Size: "+size+" ounces");
- list.add("Expected Stem Cells: "+expected);
- list.add("Age: "+(age/20)+"s"+" / "+(life/20)+"s");
+ if (NBTUtils.hasKey(stack, "size")){
+ size = NBTUtils.getInteger(stack, "size");
+ if (size > 0 && NBTUtils.hasKey(stack, "TickableItem")){
+ NBTTagCompound aNBT = stack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("TickableItem");
+ if (aNBT != null) {
+ age = aNBT.getLong("Tick");
+ }
+ }
+ }
+ if (NBTUtils.hasKey(stack, "mEggAge")){
+ life = NBTUtils.getInteger(stack, "mEggAge");
+ }
+ if (NBTUtils.hasKey(stack, "mExpected")){
+ expected = NBTUtils.getInteger(stack, "mExpected");
+ }
+ }
+ String aSize = size > 0 ? ""+size : "??";
+ String aExpected = expected > 0 ? ""+expected : "??";
+ String aAge = age > 0 ? ""+(age/20) : "??";
+ String aLife = life > 0 ? ""+(life/20) : "??";
+ list.add("Egg Size: "+aSize+" ounces");
+ list.add("Expected Stem Cells: "+aExpected);
+ list.add("Age: "+aAge+"s"+" / "+aLife+"s");
list.add("Larger eggs take longer to hatch,");
- list.add("but have a better chance of hatching.");
- super.addInformation(stack, aPlayer, list, bool);
+ list.add("but have a better chance of hatching.");
+
}
}
diff --git a/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java b/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java
index 2f49ac1287..9ac09b92e4 100644
--- a/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java
+++ b/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java
@@ -26,6 +26,7 @@ import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.handler.BookHandler;
import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.minecraft.NBTUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
@@ -54,9 +55,6 @@ public class ItemBaseBook extends ItemWritableBook{
mBookMap.get(i).mPages);*/
NBTUtils.createIntegerTagCompound(bookstack, "stats", "mMeta", i);
-
- GT_OreDictUnificator.registerOre("bookWritten", bookstack);
- GT_OreDictUnificator.registerOre("craftingBook", bookstack);
list.add(bookstack);
}
}
@@ -106,7 +104,9 @@ public class ItemBaseBook extends ItemWritableBook{
public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) {
//player.displayGUIBook(item);
int i = item.getItemDamage();
- ItemStack bookstack = GT_Utility.getWrittenBook(
+ ItemStack bookstack = Utils.getWrittenBook(
+ null,
+ mBookMap.get(i).mMeta,
mBookMap.get(i).mMapping,
mBookMap.get(i).mTitle,
mBookMap.get(i).mAuthor,
diff --git a/src/Java/gtPlusPlus/core/item/general/spawn/ItemCustomSpawnEgg.java b/src/Java/gtPlusPlus/core/item/general/spawn/ItemCustomSpawnEgg.java
new file mode 100644
index 0000000000..727b933fa7
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/item/general/spawn/ItemCustomSpawnEgg.java
@@ -0,0 +1,285 @@
+package gtPlusPlus.core.item.general.spawn;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.item.ModItems;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockLiquid;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.*;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.*;
+import net.minecraft.util.*;
+import net.minecraft.world.World;
+
+public class ItemCustomSpawnEgg extends ItemMonsterPlacer {
+
+ private static final HashMap<Integer, IIcon> mIconMap = new HashMap<Integer, IIcon>();
+ private static int mTotalMetaItems = 0;
+
+ private static final HashMap<Integer, Integer> mMaxStackSizeMap = new HashMap<Integer, Integer>();
+ private static final HashMap<Integer, EnumRarity> mRarityMap = new HashMap<Integer, EnumRarity>();
+ private static final HashMap<Integer, ArrayList<String>> mOreDictNames = new HashMap<Integer, ArrayList<String>>();
+
+ private static final HashMap<Integer, Integer> mColourBaseMap = new HashMap<Integer, Integer>();
+ private static final HashMap<Integer, Integer> mColourSpotsMap = new HashMap<Integer, Integer>();
+ private static final HashMap<Integer, String> mEntityNameMap = new HashMap<Integer, String>();
+ private static final HashMap<Integer, String> mEntityFullNameMap = new HashMap<Integer, String>();
+
+ private static final HashMap<String, Integer> mReverseEntityMap = new HashMap<String, Integer>();
+
+ protected EntityLiving entityToSpawn = null;
+
+ public static ItemStack getSpawnEggForEntityname(String aEntityName, int aSize) {
+ return ItemUtils.simpleMetaStack(ModItems.itemCustomSpawnEgg, mReverseEntityMap.get(aEntityName), aSize);
+ }
+
+ public static void registerEntityForSpawnEgg(final int aMetaID, String parEntityToSpawnName, int aPrimaryColor, int aSecondaryColor) {
+ registerEntityForSpawnEgg(aMetaID, parEntityToSpawnName, aPrimaryColor, aSecondaryColor, EnumRarity.common, new ArrayList<String>());
+ }
+
+ public static void registerEntityForSpawnEgg(final int aMetaID, String parEntityToSpawnName, int aPrimaryColor, int aSecondaryColor, EnumRarity aRarity, final ArrayList<String> aOreDictNames) {
+ mTotalMetaItems++;
+ mMaxStackSizeMap.put(aMetaID, 64);
+ mRarityMap.put(aMetaID, aRarity);
+ mOreDictNames.put(aMetaID, aOreDictNames);
+ mColourBaseMap.put(aMetaID, aPrimaryColor);
+ mColourSpotsMap.put(aMetaID, aSecondaryColor);
+ mReverseEntityMap.put(parEntityToSpawnName, aMetaID);
+ setEntityToSpawnName(aMetaID, parEntityToSpawnName);
+ }
+
+ public static void registerEggsToOreDict() {
+ for (int aMetaID = 0; aMetaID < mTotalMetaItems; aMetaID++) {
+ ArrayList<String> aOreDictNames = mOreDictNames.get(aMetaID);
+ if (aOreDictNames != null && !aOreDictNames.isEmpty()) {
+ ItemStack aFoodStack = ItemUtils.simpleMetaStack(ModItems.itemCustomSpawnEgg, aMetaID, 1
+ );
+ for (String aOreName : aOreDictNames) {
+ ItemUtils.addItemToOreDictionary(aFoodStack, aOreName);
+ }
+ }
+ }
+ }
+
+ public ItemCustomSpawnEgg() {
+ super();
+ this.setNoRepair();
+ this.setMaxStackSize(64);
+ this.setMaxDamage(0);
+ this.setUnlocalizedName("BasicMetaSpawnEgg");
+ GameRegistry.registerItem(this, this.getUnlocalizedName());
+ }
+
+ /**
+ * Callback for item usage. If the item does something special on right
+ * clicking,
+ *
+ * he will have one of those. Return True if something happen and false if
+ * it don't. This is for ITEMS, not BLOCKS
+ */
+ @Override
+ public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10){
+ if (par3World.isRemote) {
+ return true;
+ }
+ else {
+ Block block = par3World.getBlock(par4, par5, par6);
+ par4 += Facing.offsetsXForSide[par7];
+ par5 += Facing.offsetsYForSide[par7];
+ par6 += Facing.offsetsZForSide[par7];
+ double d0 = 0.0D;
+
+ if (par7 == 1 && block.getRenderType() == 11) {
+ d0 = 0.5D;
+ }
+
+ Entity entity = spawnEntity(par1ItemStack, par3World, par4 + 0.5D, par5 + d0, par6 + 0.5D);
+
+ if (entity != null) {
+ if (entity instanceof EntityLivingBase
+ && par1ItemStack.hasDisplayName()) {
+ ((EntityLiving) entity).setCustomNameTag(
+ par1ItemStack.getDisplayName()
+ );
+ }
+
+ if (!par2EntityPlayer.capabilities.isCreativeMode) {
+ --par1ItemStack.stackSize;
+ }
+ }
+
+ return true;
+ }
+ }
+
+ /**
+ * Called whenever this item is equipped and the right mouse button is
+ * pressed.
+ *
+ * Args: itemStack, world, entityPlayer
+ */
+ @Override
+ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
+ if (par2World.isRemote) {
+ return par1ItemStack;
+ }
+ else {
+ MovingObjectPosition movingobjectposition = getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, true);
+
+ if (movingobjectposition == null) {
+ return par1ItemStack;
+ }
+ else {
+ if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
+ int i = movingobjectposition.blockX;
+ int j = movingobjectposition.blockY;
+ int k = movingobjectposition.blockZ;
+
+ if (!par2World.canMineBlock(par3EntityPlayer, i, j, k)) {
+ return par1ItemStack;
+ }
+
+ if (!par3EntityPlayer.canPlayerEdit(
+ i, j, k, movingobjectposition
+
+ .sideHit, par1ItemStack
+ )) {
+ return par1ItemStack;
+ }
+
+ if (par2World.getBlock(i, j, k) instanceof BlockLiquid) {
+ Entity entity = spawnEntity(par1ItemStack, par2World, i, j, k);
+
+ if (entity != null) {
+ if (entity instanceof EntityLivingBase
+ && par1ItemStack
+
+ .hasDisplayName()) {
+ ((EntityLiving) entity).setCustomNameTag(
+ par1ItemStack
+
+ .getDisplayName()
+ );
+ }
+
+ if (!par3EntityPlayer.capabilities.isCreativeMode) {
+ --par1ItemStack.stackSize;
+ }
+ }
+ }
+ }
+
+ return par1ItemStack;
+ }
+ }
+ }
+
+ /**
+ * Spawns the creature specified by the egg's type in the location specified
+ * by
+ *
+ * the last three parameters. Parameters: world, entityID, x, y, z.
+ * @param par1ItemStack
+ */
+ public Entity spawnEntity(ItemStack par1ItemStack, World parWorld, double parX, double parY, double parZ) {
+
+ if (!parWorld.isRemote) // never spawn entity on client side
+ {
+ int aDamage = par1ItemStack.getItemDamage();
+ String entityToSpawnNameFull = mEntityFullNameMap.get(aDamage);
+ String entityToSpawnName = mEntityNameMap.get(aDamage);
+ //entityToSpawnNameFull = WildAnimals.MODID + "." + entityToSpawnName;
+ if (EntityList.stringToClassMapping.containsKey(entityToSpawnNameFull)) {
+ entityToSpawn = (EntityLiving) EntityList.createEntityByName(entityToSpawnNameFull, parWorld);
+ entityToSpawn.setLocationAndAngles(parX, parY, parZ, MathHelper.wrapAngleTo180_float(parWorld.rand.nextFloat() * 360.0F), 0.0F);
+ parWorld.spawnEntityInWorld(entityToSpawn);
+ entityToSpawn.onSpawnWithEgg((IEntityLivingData) null);
+ entityToSpawn.playLivingSound();
+ }
+ else {
+ // DEBUG
+ System.out.println("Entity not found " + entityToSpawnName);
+ }
+ }
+
+ return entityToSpawn;
+ }
+
+ /**
+ * returns a list of items with the same ID, but different meta (eg: dye
+ * returns 16 items)
+ */
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item aItem, CreativeTabs p_150895_2_, List aList) {
+ for (int aMeta : mReverseEntityMap.values()) {
+ aList.add(ItemUtils.simpleMetaStack(aItem, aMeta, 1));
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public int getColorFromItemStack(ItemStack par1ItemStack, int parColorType) {
+ int aID = par1ItemStack.getItemDamage();
+ return (parColorType == 0) ? mColourBaseMap.get(aID) : mColourSpotsMap.get(aID);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean requiresMultipleRenderPasses() {
+ return true;
+ }
+
+ @Override
+ // Doing this override means that there is no localization for language
+ // unless you specifically check for localization here and convert
+ public String getItemStackDisplayName(ItemStack par1ItemStack) {
+ return "Spawn " + mEntityNameMap.get(par1ItemStack.getItemDamage());
+ }
+
+
+ @Override
+ public void registerIcons(final IIconRegister u) {
+ mIconMap.put(0, u.registerIcon(CORE.MODID + ":" + "spawn_egg"));
+ mIconMap.put(1, u.registerIcon(CORE.MODID + ":" + "spawn_egg_overlay"));
+ }
+
+ @Override
+ public IIcon getIconFromDamageForRenderPass(final int damage, final int renderPass) {
+ return mIconMap.get(renderPass);
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int damage) {
+ return getIconFromDamageForRenderPass(0, 0);
+ }
+
+ @Override
+ public IIcon getIcon(ItemStack aStack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
+ return getIconFromDamageForRenderPass(0, renderPass);
+ }
+
+ @Override
+ public IIcon getIcon(ItemStack aStack, int renderPass) {
+ return getIconFromDamageForRenderPass(0, renderPass);
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack stack) {
+ return super.getUnlocalizedName() + "." + stack.getItemDamage();
+ }
+
+ public static void setEntityToSpawnName(int aMetaID, String parEntityToSpawnName) {
+ mEntityNameMap.put(aMetaID, parEntityToSpawnName);
+ mEntityFullNameMap.put(aMetaID, CORE.MODID + "." + parEntityToSpawnName);
+ }
+}
diff --git a/src/Java/gtPlusPlus/core/item/materials/DustDecayable.java b/src/Java/gtPlusPlus/core/item/materials/DustDecayable.java
index 9994c7d362..d42ac85012 100644
--- a/src/Java/gtPlusPlus/core/item/materials/DustDecayable.java
+++ b/src/Java/gtPlusPlus/core/item/materials/DustDecayable.java
@@ -64,7 +64,7 @@ public class DustDecayable extends BaseItemTickable {
}
boolean a1, a2;
- a1 = this.getIsActive(world, iStack);
+ a1 = this.isTicking(world, iStack);
a2 = tickItemTag(world, iStack);
if (!a1 && !a2) {
diff --git a/src/Java/gtPlusPlus/core/lib/LoadedMods.java b/src/Java/gtPlusPlus/core/lib/LoadedMods.java
index 329cf634b6..1eb8351d65 100644
--- a/src/Java/gtPlusPlus/core/lib/LoadedMods.java
+++ b/src/Java/gtPlusPlus/core/lib/LoadedMods.java
@@ -59,6 +59,7 @@ public class LoadedMods {
public static boolean Waila = false;
public static boolean CropsPlusPlus = false; //Barts Crop Mod
public static boolean Reliquary = false;
+ public static boolean SpiceOfLife = false;
@@ -211,6 +212,11 @@ public class LoadedMods {
Logger.INFO("Components enabled for: WAILA");
totalMods++;
}
+ if (isModLoaded("SpiceOfLife")){
+ SpiceOfLife = true;
+ Logger.INFO("Components enabled for: Spice Of Life");
+ totalMods++;
+ }
if (isModLoaded("Mekanism")){
Mekanism = true;
Logger.INFO("Components enabled for: Mekanism - This feature is not configurable and balances Mekanism to suit GT.");
diff --git a/src/Java/gtPlusPlus/core/material/ALLOY.java b/src/Java/gtPlusPlus/core/material/ALLOY.java
index 616a3f68ce..22ffc34205 100644
--- a/src/Java/gtPlusPlus/core/material/ALLOY.java
+++ b/src/Java/gtPlusPlus/core/material/ALLOY.java
@@ -813,6 +813,44 @@ public final class ALLOY {
new MaterialStack(ELEMENT.getInstance().RADON, 2),
new MaterialStack(ELEMENT.getInstance().GERMANIUM, 2),
});
+
+ //Alkalus Alloy
+ public static final Material LAURENIUM = new Material(
+ "Laurenium", //Material Name
+ MaterialState.SOLID, //State
+ new short[] {244, 168, 255, 0}, //Material Colour
+ 6825, //Melting Point in C
+ 11355, //Boiling Point in C
+ -1,
+ -1,
+ true, //Uses Blast furnace?
+ //Material Stacks with Percentage of required elements.
+ new MaterialStack[]{
+ new MaterialStack(ALLOY.EGLIN_STEEL, 40),
+ new MaterialStack(ELEMENT.getInstance().INDIUM, 10),
+ new MaterialStack(ELEMENT.getInstance().CHROMIUM, 20),
+ new MaterialStack(ELEMENT.getInstance().DYSPROSIUM, 5),
+ new MaterialStack(ELEMENT.getInstance().RHENIUM, 5),
+ });
+
+
+ //Bot Alloy
+ public static final Material BOTMIUM = new Material(
+ "Botmium", //Material Name
+ MaterialState.SOLID, //State
+ new short[] {80, 160, 80, 0}, //Material Colour
+ 8220, //Melting Point in C
+ 10540, //Boiling Point in C
+ -1,
+ -1,
+ true, //Uses Blast furnace?
+ //Material Stacks with Percentage of required elements.
+ new MaterialStack[]{
+ new MaterialStack(ALLOY.NITINOL_60, 2),
+ new MaterialStack(ELEMENT.getInstance().OSMIUM, 12),
+ new MaterialStack(ELEMENT.getInstance().RUTHENIUM, 12),
+ new MaterialStack(ELEMENT.getInstance().THALLIUM, 6),
+ });
//Titansteel
public static final Material TITANSTEEL = new Material(
diff --git a/src/Java/gtPlusPlus/core/network/handler/AbstractClientMessageHandler.java b/src/Java/gtPlusPlus/core/network/handler/AbstractClientMessageHandler.java
new file mode 100644
index 0000000000..b7ced2f7e9
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/handler/AbstractClientMessageHandler.java
@@ -0,0 +1,13 @@
+package gtPlusPlus.core.network.handler;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import net.minecraft.entity.player.EntityPlayer;
+
+public abstract class AbstractClientMessageHandler<T extends IMessage> extends AbstractMessageHandler<T> {
+
+ public final IMessage handleServerMessage(EntityPlayer player, T message, MessageContext ctx) {
+ return null;
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/network/handler/AbstractMessageHandler.java b/src/Java/gtPlusPlus/core/network/handler/AbstractMessageHandler.java
new file mode 100644
index 0000000000..ca350f220f
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/handler/AbstractMessageHandler.java
@@ -0,0 +1,37 @@
+package gtPlusPlus.core.network.handler;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.GTplusplus;
+import net.minecraft.entity.player.EntityPlayer;
+
+public abstract class AbstractMessageHandler <T extends IMessage> implements IMessageHandler <T, IMessage>
+{
+ /**
+ * Handle a message received on the client side
+ * @return a message to send back to the Server, or null if no reply is necessary
+ */
+ @SideOnly(Side.CLIENT)
+ public abstract IMessage handleClientMessage(EntityPlayer player, T message, MessageContext ctx);
+
+ /**
+ * Handle a message received on the server side
+ * @return a message to send back to the Client, or null if no reply is necessary
+ */
+ public abstract IMessage handleServerMessage(EntityPlayer player, T message, MessageContext ctx);
+
+ @Override
+ public IMessage onMessage(T message, MessageContext ctx) {
+ if (ctx.side.isClient()) {
+ return handleClientMessage(GTplusplus.proxy.getPlayerEntity(ctx), message, ctx);
+ } else {
+ // server side proxy will return the server side EntityPlayer
+ return handleServerMessage(GTplusplus.proxy.getPlayerEntity(ctx), message, ctx);
+ }
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/core/network/handler/AbstractServerMessageHandler.java b/src/Java/gtPlusPlus/core/network/handler/AbstractServerMessageHandler.java
new file mode 100644
index 0000000000..d49e6cf350
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/handler/AbstractServerMessageHandler.java
@@ -0,0 +1,13 @@
+package gtPlusPlus.core.network.handler;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import net.minecraft.entity.player.EntityPlayer;
+
+public abstract class AbstractServerMessageHandler<T extends IMessage> extends AbstractMessageHandler<T> {
+
+ public final IMessage handleClientMessage(EntityPlayer player, T message, MessageContext ctx) {
+ return null;
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/network/packet/AbstractPacket.java b/src/Java/gtPlusPlus/core/network/packet/AbstractPacket.java
new file mode 100644
index 0000000000..d6368e3d9e
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/packet/AbstractPacket.java
@@ -0,0 +1,9 @@
+package gtPlusPlus.core.network.packet;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+
+public interface AbstractPacket extends IMessage {
+
+ public abstract String getPacketName();
+
+}
diff --git a/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java b/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java
new file mode 100644
index 0000000000..609ea729b7
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java
@@ -0,0 +1,128 @@
+package gtPlusPlus.core.network.packet;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import cpw.mods.fml.relauncher.Side;
+import gtPlusPlus.GTplusplus;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.network.handler.AbstractServerMessageHandler;
+import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class Packet_VolumetricFlaskGui extends AbstractServerMessageHandler<Packet_VolumetricFlaskGui> implements AbstractPacket {
+
+ private int x;
+ private int y;
+ private int z;
+ private int flaskValue;
+
+ public Packet_VolumetricFlaskGui() {
+
+ }
+
+ public Packet_VolumetricFlaskGui(TileEntityVolumetricFlaskSetter tile, int aCustomValue) {
+ x = tile.xCoord;
+ y = tile.yCoord;
+ z = tile.zCoord;
+ flaskValue = aCustomValue;
+ Logger.INFO("Created Packet with values ("+x+", "+y+", "+z+" | "+flaskValue+")");
+ }
+
+ @Override
+ public void toBytes(ByteBuf buf) {
+ buf.writeInt(x);
+ buf.writeInt(y);
+ buf.writeInt(z);
+ buf.writeInt(flaskValue);
+ Logger.INFO("Writing to byte buffer.");
+ }
+
+ @Override
+ public void fromBytes(ByteBuf buf) {
+ x = buf.readInt();
+ y = buf.readInt();
+ z = buf.readInt();
+ flaskValue = buf.readInt();
+ Logger.INFO("Reading from byte buffer.");
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public int getZ() {
+ return z;
+ }
+
+ public void setZ(int z) {
+ this.z = z;
+ }
+
+ public int getCustomValue() {
+ return flaskValue;
+ }
+
+ public void setCustomValue(int aVal) {
+ this.flaskValue = aVal;
+ }
+
+ protected TileEntityVolumetricFlaskSetter getTileEntity(Packet_VolumetricFlaskGui message, MessageContext ctx) {
+ Logger.INFO("Trying to get tile.");
+ World worldObj = getWorld(ctx);
+ if(worldObj == null) {
+ Logger.INFO("Bad world object.");
+ return null;
+ }
+ TileEntity te = worldObj.getTileEntity(message.getX(), message.getY(), message.getZ());
+ if(te == null) {
+ Logger.INFO("Bad Tile.");
+ return null;
+ }
+ if(te instanceof TileEntityVolumetricFlaskSetter) {
+ Logger.INFO("Found Tile.");
+ return (TileEntityVolumetricFlaskSetter) te;
+ }
+ Logger.INFO("Error.");
+ return null;
+ }
+
+ protected World getWorld(MessageContext ctx) {
+ if(ctx.side == Side.SERVER) {
+ return ctx.getServerHandler().playerEntity.worldObj;
+ } else {
+ return GTplusplus.proxy.getClientWorld();
+ }
+ }
+
+ @Override
+ public IMessage handleServerMessage(EntityPlayer player, Packet_VolumetricFlaskGui message, MessageContext ctx) {
+ TileEntityVolumetricFlaskSetter te = getTileEntity(message, ctx);
+ if(te != null) {
+ Logger.INFO("Setting value on tile. "+message.getCustomValue());
+ te.setCustomValue(message.getCustomValue());
+ //return new Packet_VolumetricFlaskGui2(te, message.getCustomValue());
+ }
+ return null;
+ }
+
+ @Override
+ public String getPacketName() {
+ return "Packet_VoluemtricFlaskSetter_ToServer";
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java b/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java
new file mode 100644
index 0000000000..bc6e6149d8
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java
@@ -0,0 +1,127 @@
+package gtPlusPlus.core.network.packet;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import cpw.mods.fml.relauncher.Side;
+import gtPlusPlus.GTplusplus;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.network.handler.AbstractClientMessageHandler;
+import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class Packet_VolumetricFlaskGui2 extends AbstractClientMessageHandler<Packet_VolumetricFlaskGui2> implements AbstractPacket {
+
+ private int x;
+ private int y;
+ private int z;
+ private int flaskValue;
+
+ public Packet_VolumetricFlaskGui2() {
+
+ }
+
+ public Packet_VolumetricFlaskGui2(TileEntityVolumetricFlaskSetter tile, int aCustomValue) {
+ x = tile.xCoord;
+ y = tile.yCoord;
+ z = tile.zCoord;
+ flaskValue = aCustomValue;
+ Logger.INFO("Created Packet with values ("+x+", "+y+", "+z+" | "+flaskValue+")");
+ }
+
+ @Override
+ public void toBytes(ByteBuf buf) {
+ buf.writeInt(x);
+ buf.writeInt(y);
+ buf.writeInt(z);
+ buf.writeInt(flaskValue);
+ Logger.INFO("Writing to byte buffer.");
+ }
+
+ @Override
+ public void fromBytes(ByteBuf buf) {
+ x = buf.readInt();
+ y = buf.readInt();
+ z = buf.readInt();
+ flaskValue = buf.readInt();
+ Logger.INFO("Reading from byte buffer.");
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public int getZ() {
+ return z;
+ }
+
+ public void setZ(int z) {
+ this.z = z;
+ }
+
+ public int getCustomValue() {
+ return flaskValue;
+ }
+
+ public void setCustomValue(int aVal) {
+ this.flaskValue = aVal;
+ }
+
+ protected TileEntityVolumetricFlaskSetter getTileEntity(Packet_VolumetricFlaskGui2 message, MessageContext ctx) {
+ Logger.INFO("Trying to get tile.");
+ World worldObj = getWorld(ctx);
+ if(worldObj == null) {
+ Logger.INFO("Bad world object.");
+ return null;
+ }
+ TileEntity te = worldObj.getTileEntity(message.getX(), message.getY(), message.getZ());
+ if(te == null) {
+ Logger.INFO("Bad Tile.");
+ return null;
+ }
+ if(te instanceof TileEntityVolumetricFlaskSetter) {
+ Logger.INFO("Found Tile.");
+ return (TileEntityVolumetricFlaskSetter) te;
+ }
+ Logger.INFO("Error.");
+ return null;
+ }
+
+ protected World getWorld(MessageContext ctx) {
+ if(ctx.side == Side.SERVER) {
+ return ctx.getServerHandler().playerEntity.worldObj;
+ } else {
+ return GTplusplus.proxy.getClientWorld();
+ }
+ }
+
+ @Override
+ public String getPacketName() {
+ return "Packet_VoluemtricFlaskSetter_ToClient";
+ }
+
+ @Override
+ public IMessage handleClientMessage(EntityPlayer player, Packet_VolumetricFlaskGui2 message, MessageContext ctx) {
+ TileEntityVolumetricFlaskSetter te = getTileEntity(message, ctx);
+ if(te != null) {
+ Logger.INFO("Setting value on tile. "+message.getCustomValue());
+ te.setCustomValue(message.getCustomValue());
+ }
+ return null;
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/proxy/ClientProxy.java b/src/Java/gtPlusPlus/core/proxy/ClientProxy.java
index 2372762e0d..5a0c0f4ea3 100644
--- a/src/Java/gtPlusPlus/core/proxy/ClientProxy.java
+++ b/src/Java/gtPlusPlus/core/proxy/ClientProxy.java
@@ -1,14 +1,12 @@
package gtPlusPlus.core.proxy;
+import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.Optional;
-import cpw.mods.fml.common.event.FMLInitializationEvent;
-import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
-import cpw.mods.fml.common.event.FMLPostInitializationEvent;
-import cpw.mods.fml.common.event.FMLPreInitializationEvent;
-import cpw.mods.fml.common.event.FMLServerStartingEvent;
+import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.GTplusplus;
@@ -17,38 +15,16 @@ import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.australia.entity.model.ModelBoar;
import gtPlusPlus.australia.entity.model.ModelDingo;
import gtPlusPlus.australia.entity.model.ModelOctopus;
-import gtPlusPlus.australia.entity.render.RenderAustralianSpider;
-import gtPlusPlus.australia.entity.render.RenderBoar;
-import gtPlusPlus.australia.entity.render.RenderDingo;
-import gtPlusPlus.australia.entity.render.RenderOctopus;
-import gtPlusPlus.australia.entity.type.EntityAustralianSpiderBase;
-import gtPlusPlus.australia.entity.type.EntityBoar;
-import gtPlusPlus.australia.entity.type.EntityDingo;
-import gtPlusPlus.australia.entity.type.EntityOctopus;
+import gtPlusPlus.australia.entity.render.*;
+import gtPlusPlus.australia.entity.type.*;
import gtPlusPlus.core.client.model.ModelGiantChicken;
-import gtPlusPlus.core.client.renderer.CustomItemBlockRenderer;
-import gtPlusPlus.core.client.renderer.CustomOreBlockRenderer;
-import gtPlusPlus.core.client.renderer.RenderBatKing;
-import gtPlusPlus.core.client.renderer.RenderDecayChest;
-import gtPlusPlus.core.client.renderer.RenderGiantChicken;
-import gtPlusPlus.core.client.renderer.RenderMiningExplosivesPrimed;
-import gtPlusPlus.core.client.renderer.RenderPlasmaBolt;
-import gtPlusPlus.core.client.renderer.RenderSickBlaze;
-import gtPlusPlus.core.client.renderer.RenderStaballoyConstruct;
-import gtPlusPlus.core.client.renderer.RenderToxinball;
+import gtPlusPlus.core.client.renderer.*;
import gtPlusPlus.core.common.CommonProxy;
import gtPlusPlus.core.common.compat.COMPAT_PlayerAPI;
import gtPlusPlus.core.entity.EntityPrimedMiningExplosive;
import gtPlusPlus.core.entity.EntityTeslaTowerLightning;
-import gtPlusPlus.core.entity.monster.EntityBatKing;
-import gtPlusPlus.core.entity.monster.EntityGiantChickenBase;
-import gtPlusPlus.core.entity.monster.EntitySickBlaze;
-import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct;
-import gtPlusPlus.core.entity.projectile.EntityHydrofluoricAcidPotion;
-import gtPlusPlus.core.entity.projectile.EntityLightningAttack;
-import gtPlusPlus.core.entity.projectile.EntitySulfuricAcidPotion;
-import gtPlusPlus.core.entity.projectile.EntityThrowableBomb;
-import gtPlusPlus.core.entity.projectile.EntityToxinballSmall;
+import gtPlusPlus.core.entity.monster.*;
+import gtPlusPlus.core.entity.projectile.*;
import gtPlusPlus.core.handler.render.FirepitRender;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.CORE.ConfigSwitches;
@@ -56,14 +32,18 @@ import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest;
import gtPlusPlus.core.tileentities.general.TileEntityFirepit;
import gtPlusPlus.core.util.minecraft.particles.EntityParticleFXMysterious;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import gtPlusPlus.xmod.gregtech.common.render.GTPP_CapeRenderer;
+import gtPlusPlus.xmod.gregtech.common.render.GTPP_FlaskRenderer;
import gtPlusPlus.xmod.gregtech.common.render.GTPP_Render_MachineBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.entity.RenderFireball;
import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
+import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.MinecraftForgeClient;
@@ -116,6 +96,10 @@ public class ClientProxy extends CommonProxy implements Runnable{
new CustomItemBlockRenderer();
new GTPP_Render_MachineBlock();
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ new GTPP_FlaskRenderer();
+ }
+
super.init(e);
}
@@ -153,6 +137,8 @@ public class ClientProxy extends CommonProxy implements Runnable{
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFirepit.class, new FirepitRender());
Logger.INFO("Registering Custom Renderer for the Lead Lined Chest.");
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDecayablesChest.class, new RenderDecayChest());
+ Logger.INFO("Registering Custom Renderer for the Egg Box.");
+ //ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEggBox.class, ModelEggBox.getRenderer());
//GT++ Australia
@@ -165,20 +151,20 @@ public class ClientProxy extends CommonProxy implements Runnable{
RenderingRegistry.registerEntityRenderingHandler(EntityBoar.class, new RenderBoar(new ModelBoar(), new ModelBoar(0.5F), 0.7F));
RenderingRegistry.registerEntityRenderingHandler(EntityDingo.class, new RenderDingo(new ModelDingo(), new ModelDingo(), 0.5F));
RenderingRegistry.registerEntityRenderingHandler(EntityOctopus.class, new RenderOctopus(new ModelOctopus(), 0.7F));
-
-
-
-
-
-
-
+
+
+
+
+
+
+
/**
* Items
*/
for (Pair<Item, IItemRenderer> sItemRenderMappings : mItemRenderMappings) {
MinecraftForgeClient.registerItemRenderer(sItemRenderMappings.getKey(), sItemRenderMappings.getValue());
}
-
+
}
@Override
@@ -272,4 +258,14 @@ public class ClientProxy extends CommonProxy implements Runnable{
super.onLoadComplete(event);
}
+ @Override
+ public World getClientWorld() {
+ return FMLClientHandler.instance().getClient().theWorld;
+ }
+
+ @Override
+ public EntityPlayer getPlayerEntity(MessageContext ctx) {
+ return (ctx.side.isClient() ? Minecraft.getMinecraft().thePlayer : super.getPlayerEntity(ctx));
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
index ea1bcdb9de..34142d0390 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java
@@ -39,6 +39,7 @@ import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.MaterialUtils;
import gtPlusPlus.core.util.reflect.AddGregtechRecipe;
import gtPlusPlus.everglades.dimension.Dimension_Everglades;
+import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -92,6 +93,7 @@ public class RECIPES_GREGTECH {
vacuumFreezerRecipes();
fluidheaterRecipes();
chemplantRecipes();
+ packagerRecipes();
/**
@@ -107,16 +109,21 @@ public class RECIPES_GREGTECH {
addFuels();
}
-
+
+ private static void packagerRecipes() {
+
+
+ }
+
private static void chemplantRecipes() {
//This is subsequently absorbed in water to form nitric acid and nitric oxide.
- //3 NO2 (g) + H2O (l) → 2 HNO3 (aq) + NO (g) (ΔH = −117 kJ/mol)
- //The nitric oxide is cycled back for reoxidation. Alternatively, if the last step is carried out in air:
- //4 NO2 (g) + O2 (g) + 2 H2O (l) → 4 HNO3 (aq)
-
+ //3 NO2 (g) + H2O (l) → 2 HNO3 (aq) + NO (g) (ΔH = −117 kJ/mol)
+ //The nitric oxide is cycled back for reoxidation. Alternatively, if the last step is carried out in air:
+ //4 NO2 (g) + O2 (g) + 2 H2O (l) → 4 HNO3 (aq)
+
// Advanced method for Nitric Acid Production
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -137,7 +144,63 @@ public class RECIPES_GREGTECH {
10 * 20,
480,
3);
-
+
+ // Advanced recipe for Fluorine Production
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(17),
+ CI.getPurpleCatalyst(0),
+ ItemUtils.getSimpleStack(Blocks.sandstone, 64),
+ ItemUtils.getSimpleStack(Blocks.sandstone, 64)
+ },
+ new FluidStack[] {
+ FluidUtils.getFluidStack("nitricacid", 4000),
+ FluidUtils.getAir(8000)
+ },
+ new ItemStack[] {
+ FLUORIDES.FLUORITE.getOre(8),
+ FLUORIDES.FLUORITE.getOre(4),
+ FLUORIDES.FLUORITE.getOre(4),
+ FLUORIDES.FLUORITE.getOre(4),
+ },
+ new FluidStack[] {
+
+ },
+ new int[] {
+ 0, 2500, 2000, 1500
+ },
+ 10 * 20,
+ 1024,
+ 5);
+
+ // Advanced recipe for Fluorine Production
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(17),
+ CI.getPurpleCatalyst(0),
+ ItemUtils.getSimpleStack(Blocks.sand, 64),
+ ItemUtils.getSimpleStack(Blocks.sand, 64)
+ },
+ new FluidStack[] {
+ FluidUtils.getFluidStack("nitricacid", 5000),
+ FluidUtils.getAir(12000)
+ },
+ new ItemStack[] {
+ FLUORIDES.FLUORITE.getOre(4),
+ FLUORIDES.FLUORITE.getOre(2),
+ FLUORIDES.FLUORITE.getOre(2),
+ FLUORIDES.FLUORITE.getOre(2),
+ },
+ new FluidStack[] {
+
+ },
+ new int[] {
+ 7500, 1500, 1000, 500
+ },
+ 10 * 20,
+ 1024,
+ 5);
+
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
CI.getNumberedAdvancedCircuit(16),
@@ -157,7 +220,7 @@ public class RECIPES_GREGTECH {
10 * 20,
480,
2);
-
+
// Produce Boric Acid
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -177,8 +240,8 @@ public class RECIPES_GREGTECH {
},
20 * 30,
MaterialUtils.getVoltageForTier(3),
- 2);
-
+ 3);
+
// Produce Th232
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -203,7 +266,131 @@ public class RECIPES_GREGTECH {
},
20 * 300,
MaterialUtils.getVoltageForTier(4),
- 3);
+ 4);
+
+ // Modify Sapling into Pine Sapling
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedBioCircuit(6),
+ ItemUtils.getSimpleStack(Blocks.sapling, 32)
+ },
+ new FluidStack[] {
+ FluidUtils.getFluidStack("fluid.geneticmutagen", 2000),
+ FluidUtils.getDistilledWater(8000)
+ },
+ new ItemStack[] {
+ ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Pine, 16)
+ },
+ new FluidStack[] {
+
+ },
+ 120 * 20,
+ 64,
+ 2);
+
+
+ // Convert GT++ Plutonium239 into normal Plutonium
+ if (Materials.Plutonium.mDefaultLocalName.equals("Plutonium 239")) {
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(16),
+ ELEMENT.getInstance().PLUTONIUM239.getDust(1)
+ },
+ new FluidStack[] {
+
+ },
+ new ItemStack[] {
+ ItemUtils.getItemStackOfAmountFromOreDict("dustPlutonium", 1)
+ },
+ new FluidStack[] {
+
+ },
+ 5 * 20,
+ 1,
+ 2);
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(16),
+ ELEMENT.getInstance().PLUTONIUM239.getSmallDust(1)
+ },
+ new FluidStack[] {
+
+ },
+ new ItemStack[] {
+ ItemUtils.getItemStackOfAmountFromOreDict("dustSmallPlutonium", 1)
+ },
+ new FluidStack[] {
+
+ },
+ 5 * 20,
+ 1,
+ 2);
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(16),
+ ELEMENT.getInstance().PLUTONIUM239.getTinyDust(1)
+ },
+ new FluidStack[] {
+
+ },
+ new ItemStack[] {
+ ItemUtils.getItemStackOfAmountFromOreDict("dustTinyPlutonium", 1)
+ },
+ new FluidStack[] {
+
+ },
+ 5 * 20,
+ 1,
+ 2);
+ }
+
+ int aLaureniumTier = ALLOY.LAURENIUM.vTier;
+ // Adding Recipes for Casings
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(12),
+ CI.getTieredMachineCasing(aLaureniumTier-1),
+ ALLOY.LAURENIUM.getPlate(8),
+ CI.getGear(aLaureniumTier, 2)
+ },
+ new FluidStack[] {
+ CI.getTieredFluid(aLaureniumTier, 2 * 144),
+ CI.getAlternativeTieredFluid(aLaureniumTier-1, 4 * 144),
+ CI.getTertiaryTieredFluid(aLaureniumTier-2, 6 * 144)
+ },
+ new ItemStack[] {
+ GregtechItemList.Casing_Machine_Custom_3.get(1)
+ },
+ new FluidStack[] {
+
+ },
+ 20 * 20,
+ MaterialUtils.getVoltageForTier(aLaureniumTier-2),
+ 5);
+
+ int aBotmiumTier = ALLOY.BOTMIUM.vTier;
+ // Adding Recipes for Casings
+ CORE.RA.addChemicalPlantRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(12),
+ CI.getTieredMachineCasing(aBotmiumTier-1),
+ ALLOY.BOTMIUM.getPlate(8),
+ CI.getGear(aBotmiumTier, 2)
+ },
+ new FluidStack[] {
+ CI.getTieredFluid(aBotmiumTier, 2 * 144),
+ CI.getAlternativeTieredFluid(aBotmiumTier-1, 4 * 144),
+ CI.getTertiaryTieredFluid(aBotmiumTier-2, 6 * 144)
+ },
+ new ItemStack[] {
+ GregtechItemList.Casing_Machine_Custom_4.get(1)
+ },
+ new FluidStack[] {
+
+ },
+ 20 * 20,
+ MaterialUtils.getVoltageForTier(aBotmiumTier-2),
+ 6);
}
@@ -530,7 +717,7 @@ public class RECIPES_GREGTECH {
ItemUtils.getSimpleStack(ModItems.itemChargePack_High_3, 1),
ItemUtils.getSimpleStack(ModItems.itemChargePack_High_4, 1),
};
-
+
int aCurrSlot = 0;
for (int h = 6; h < 10; h++) {
CORE.RA.addAssemblylineRecipe(
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java
index 5048c5f2a5..08d8dda039 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java
@@ -18,13 +18,13 @@ import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.ALLOY;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.recipe.common.CI;
-import gtPlusPlus.core.util.minecraft.FluidUtils;
-import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.core.util.minecraft.RecipeUtils;
+import gtPlusPlus.core.util.minecraft.*;
import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils;
import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
@@ -63,14 +63,14 @@ public class RECIPES_General {
private static void run() {
//Workbench Blueprint
- /*RecipeUtils.recipeBuilder(
+ /*RecipeUtils.addShapedRecipe(
RECIPE_Paper, RECIPE_LapisDust, NULL,
RECIPE_Paper, RECIPE_LapisDust, NULL,
RECIPE_LapisDust, RECIPE_LapisDust, NULL,
OUTPUT_Blueprint);*/
//Bronze Workbench
- /*RecipeUtils.recipeBuilder(
+ /*RecipeUtils.addShapedRecipe(
RECIPE_BronzePlate, RECIPE_CraftingTable, RECIPE_BronzePlate,
RECIPE_BronzePlate, RECIPE_BasicCasingIC2, RECIPE_BronzePlate,
RECIPE_BronzePlate, RECIPE_BronzePlate, RECIPE_BronzePlate,
@@ -79,25 +79,25 @@ public class RECIPES_General {
//Generates recipes for the Dull shard when TC is not installed.
if (!LoadedMods.Thaumcraft) {
//Dull Shard to Aer
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
RECIPE_HydrogenDust, RECIPE_HydrogenDust, RECIPE_HydrogenDust,
RECIPE_HydrogenDust, ItemUtils.getSimpleStack(ModItems.shardDull), RECIPE_HydrogenDust,
RECIPE_HydrogenDust, RECIPE_HydrogenDust, RECIPE_HydrogenDust,
ItemUtils.getSimpleStack(ModItems.shardAer));
//Dull Shard to Ignis
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
RECIPE_Obsidian, RECIPE_Obsidian, RECIPE_Obsidian,
RECIPE_Obsidian, ItemUtils.getSimpleStack(ModItems.shardDull), RECIPE_Obsidian,
RECIPE_Obsidian, RECIPE_Obsidian, RECIPE_Obsidian,
ItemUtils.getSimpleStack(ModItems.shardIgnis));
//Dull Shard to Terra
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
RECIPE_Dirt, RECIPE_Dirt, RECIPE_Dirt,
RECIPE_Dirt, ItemUtils.getSimpleStack(ModItems.shardDull), RECIPE_Dirt,
RECIPE_Dirt, RECIPE_Dirt, RECIPE_Dirt,
ItemUtils.getSimpleStack(ModItems.shardTerra));
//Dull Shard to Aqua
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
RECIPE_LapisDust, RECIPE_LapisDust, RECIPE_LapisDust,
RECIPE_LapisDust, ItemUtils.getSimpleStack(ModItems.shardDull), RECIPE_LapisDust,
RECIPE_LapisDust, RECIPE_LapisDust, RECIPE_LapisDust,
@@ -111,7 +111,7 @@ public class RECIPES_General {
}
//Rainforest oak Sapling
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"stickWood", "stickWood", "stickWood",
"stickWood", "treeSapling", "stickWood",
"stickWood", "dustBone", "stickWood",
@@ -128,7 +128,7 @@ public class RECIPES_General {
}
//Fish Trap
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
ironBars, ironBars, ironBars,
ironBars, "frameGtWroughtIron", ironBars,
ironBars, ironBars, ironBars,
@@ -145,7 +145,7 @@ public class RECIPES_General {
for (int y=0;y<ironTypes.length;y++) {
//Iron bars
String ironRecipe = "stick"+ironTypes[y]+"Iron";
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
null, CI.craftingToolWrench, null,
ironRecipe, ironRecipe, ironRecipe,
ironRecipe, ironRecipe, ironRecipe,
@@ -181,15 +181,53 @@ public class RECIPES_General {
+ if (CORE.ConfigSwitches.enableMachine_Pollution) {
+ RecipeUtils.addShapedRecipe(
+ CI.craftingToolFile, "plateIron", "stickIron",
+ "plateIron", "ringIron", "plateIron",
+ "stickIron", "plateIron", CI.craftingToolHammer_Hard,
+ ItemUtils.simpleMetaStack(ModItems.itemBasicTurbine, 0, 1)
+ );
+ RecipeUtils.addShapedRecipe(
+ CI.craftingToolFile, "plateBronze", "stickBronze",
+ "plateBronze", "ringBronze", "plateBronze",
+ "stickBronze", "plateBronze", CI.craftingToolHammer_Hard,
+ ItemUtils.simpleMetaStack(ModItems.itemBasicTurbine, 1, 1)
+ );
+ }
-
-
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ CORE.RA.addSixSlotAssemblingRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(4),
+ ItemUtils.getSimpleStack(Blocks.glass, 16),
+ ItemUtils.getSimpleStack(Blocks.glowstone, 16),
+ ItemList.Large_Fluid_Cell_Steel.get(1)
+ },
+ FluidUtils.getFluidStack("molten.borosilicateglass", 2000),
+ VolumetricFlaskHelper.getLargeVolumetricFlask(2),
+ 20 * 15,
+ MaterialUtils.getVoltageForTier(3));
+
+ CORE.RA.addSixSlotAssemblingRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(5),
+ ItemUtils.getSimpleStack(Blocks.glass, 64),
+ ItemUtils.getSimpleStack(Blocks.glowstone, 64),
+ ItemList.Large_Fluid_Cell_TungstenSteel.get(1)
+ },
+ FluidUtils.getFluidStack("molten.borosilicateglass", 8000),
+ VolumetricFlaskHelper.getGiganticVolumetricFlask(2),
+ 20 * 15,
+ MaterialUtils.getVoltageForTier(5));
+
+ }
//Mining Explosive
Logger.RECIPE("[Inspection] Explosives");
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
CI.explosiveITNT, CI.explosiveTNT, CI.explosiveITNT,
CI.explosiveTNT, "frameGtIron", CI.explosiveTNT,
"dustSulfur", CI.explosiveTNT, "dustSulfur",
@@ -198,7 +236,7 @@ public class RECIPES_General {
}
//Alkalus Coin
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"gemExquisiteRuby", "gemFlawlessDiamond", "gemExquisiteDiamond",
"gemFlawlessRuby", ItemList.Credit_Greg_Osmium.get(1), "gemFlawlessSapphire",
"gemExquisiteEmerald", "gemFlawlessEmerald", "gemExquisiteSapphire",
@@ -222,7 +260,7 @@ public class RECIPES_General {
}*/
Logger.RECIPE("[Inspection] Wither Cage");
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"stickBlackSteel", "plateTungstenSteel", "stickBlackSteel",
"plateTungstenSteel", getSimpleStack(Items.nether_star), "plateTungstenSteel",
"stickBlackSteel", "plateTungstenSteel", "stickBlackSteel",
@@ -231,7 +269,7 @@ public class RECIPES_General {
}
/*Logger.RECIPE("[Inspection] Xp Converter");
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
getSimpleStack(Items.experience_bottle), ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 2, 1), getSimpleStack(Items.experience_bottle),
ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 5, 1), getSimpleStack(Items.nether_star), ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 5, 1),
getSimpleStack(Items.experience_bottle), ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 2, 1), getSimpleStack(Items.experience_bottle),
@@ -259,7 +297,7 @@ public class RECIPES_General {
Logger.INFO("Added a recipe for Fiber.");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
null, ItemUtils.getSimpleStack(ModItems.itemFiber, 1), null,
ItemUtils.getSimpleStack(ModItems.itemFiber, 1), CI.craftingToolKnife, ItemUtils.getSimpleStack(ModItems.itemFiber, 1),
null, ItemUtils.getSimpleStack(ModItems.itemFiber, 1), null,
@@ -268,7 +306,7 @@ public class RECIPES_General {
}
Logger.RECIPE("[Inspection] Net");
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
ItemUtils.getSimpleStack(ModItems.itemRope, 1), ItemUtils.getSimpleStack(ModItems.itemRope, 1), ItemUtils.getSimpleStack(ModItems.itemRope, 1),
ItemUtils.getSimpleStack(ModItems.itemRope, 1), ItemUtils.getSimpleStack(ModItems.itemRope, 1), ItemUtils.getSimpleStack(ModItems.itemRope, 1),
null, null, null,
@@ -307,7 +345,7 @@ public class RECIPES_General {
private static boolean addCompressedObsidian(){
//Invert Obsidian
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
getSimpleStack(Items.redstone), getSimpleStack(Items.glowstone_dust), getSimpleStack(Items.redstone),
getSimpleStack(Items.glowstone_dust), ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 1, 1), getSimpleStack(Items.glowstone_dust),
getSimpleStack(Items.redstone), getSimpleStack(Items.glowstone_dust), getSimpleStack(Items.redstone),
@@ -327,7 +365,7 @@ public class RECIPES_General {
final ItemStack input = mItems[r];
final ItemStack output = mItems[r+1];
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
input, input, input,
input, input, input,
input, input, input,
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java
index fd513809ed..71b4c4ef48 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java
@@ -264,22 +264,22 @@ public class RECIPES_MachineComponents {
CI.fieldGenerator_MAX);
//Sensor Modules
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier7, null, circuitTier6,
plateTier7, rodTier7c, null,
circuitTier7, plateTier7, plateTier7,
CI.sensor_LuV);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier8, null, circuitTier7,
plateTier8, rodTier8c, null,
circuitTier8, plateTier8, plateTier8,
CI.sensor_ZPM);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier9, null, circuitTier8,
plateTier9, rodTier9c, null,
circuitTier9, plateTier9, plateTier9,
CI.sensor_UV);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier10, null, circuitTier9,
plateTier10, rodTier10c, null,
circuitTier10, plateTier10, plateTier10,
@@ -334,7 +334,7 @@ public class RECIPES_MachineComponents {
wireTier0, circuitTier0, wireTier0,
CI.fieldGenerator_ULV);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier0, null, circuitTier1,
plateTier0, rodTier2, null,
circuitTier0, plateTier0, plateTier0,
@@ -377,7 +377,7 @@ public class RECIPES_MachineComponents {
circuitTier10, circuitTier9, circuitTier10,
wireTier10, circuitTier10, wireTier10,
CI.fieldGenerator_MAX);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateTier10, null, circuitTier9,
plateTier10, rodTier10c, null,
circuitTier10, plateTier10, plateTier10,
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
index 387f7bef65..0b0bf56a1c 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
@@ -2,14 +2,10 @@ package gtPlusPlus.core.recipe;
import static gtPlusPlus.core.lib.CORE.GTNH;
-import codechicken.nei.api.API;
import cpw.mods.fml.common.Loader;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.*;
import gregtech.api.util.GT_ModHandler;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.item.ModItems;
@@ -20,17 +16,15 @@ import gtPlusPlus.core.material.ALLOY;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.material.Material;
import gtPlusPlus.core.recipe.common.CI;
-import gtPlusPlus.core.util.minecraft.FluidUtils;
-import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.core.util.minecraft.MaterialUtils;
-import gtPlusPlus.core.util.minecraft.RecipeUtils;
+import gtPlusPlus.core.util.minecraft.*;
import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.everglades.dimension.Dimension_Everglades;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import gtPlusPlus.xmod.gregtech.common.covers.CoverManager;
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
import gtPlusPlus.xmod.gregtech.common.items.MetaCustomCoverItem;
-import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -247,9 +241,27 @@ public class RECIPES_Machines {
distillus();
algaeFarm();
chemPlant();
+ zyngen();
}
+ private static void zyngen() {
+ CORE.RA.addSixSlotAssemblingRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(6),
+ CI.getTieredMachineHull(4),
+ ItemList.Machine_EV_AlloySmelter.get(1),
+ CI.getGear(3, 16),
+ CI.getBolt(3, 64),
+ CI.getPlate(4, 16)
+ },
+ CI.getAlternativeTieredFluid(4, 144 * 8),
+ GregtechItemList.Industrial_AlloySmelter.get(1),
+ 20 * 30,
+ MaterialUtils.getVoltageForTier(4));
+
+ }
+
private static void chemPlant() {
CORE.RA.addSixSlotAssemblingRecipe(
@@ -335,7 +347,7 @@ public class RECIPES_Machines {
},
20 * 600,
MaterialUtils.getVoltageForTier(6),
- 3);
+ 5);
}
@@ -627,8 +639,37 @@ public class RECIPES_Machines {
RECIPE_SteamCondenser);
}
+ ItemStack aBronzeBricks = ItemUtils.simpleMetaStack(GregTech_API.sBlockCasings1, 10, 1);
+ // Steam Macerator Multi
+ RecipeUtils.addShapedGregtechRecipe(
+ aBronzeBricks, ALLOY.TUMBAGA.getGear(1), aBronzeBricks,
+ aBronzeBricks, ALLOY.TUMBAGA.getFrameBox(1), aBronzeBricks,
+ aBronzeBricks, ALLOY.TUMBAGA.getGear(1), aBronzeBricks,
+ GregtechItemList.Controller_SteamMaceratorMulti.get(1));
- //Steam Condenser
+ // Steam Hatch
+ RecipeUtils.addShapedGregtechRecipe(
+ "plateBronze", "pipeMediumBronze", "plateBronze",
+ "plateBronze", GregtechItemList.GT_FluidTank_ULV.get(1), "plateBronze",
+ "plateBronze", "pipeMediumBronze", "plateBronze",
+ GregtechItemList.Hatch_Input_Steam.get(1));
+
+ // Steam Input Bus
+ RecipeUtils.addShapedGregtechRecipe(
+ "plateBronze", ALLOY.TUMBAGA.getPlate(1), "plateBronze",
+ "plateTin", ItemUtils.getSimpleStack(Blocks.hopper), "plateTin",
+ "plateBronze", ALLOY.TUMBAGA.getPlate(1), "plateBronze",
+ GregtechItemList.Hatch_Input_Bus_Steam.get(1));
+
+ // Steam Output Bus
+ RecipeUtils.addShapedGregtechRecipe(
+ "plateBronze", "plateTin", "plateBronze",
+ ALLOY.TUMBAGA.getPlate(1), ItemUtils.getSimpleStack(Blocks.hopper), ALLOY.TUMBAGA.getPlate(1),
+ "plateBronze", "plateTin", "plateBronze",
+ GregtechItemList.Hatch_Output_Bus_Steam.get(1));
+
+
+ //RF Convertor
if (LoadedMods.CoFHCore && CORE.ConfigSwitches.enableMachine_RF_Convetor){
RecipeUtils.addShapedGregtechRecipe(
CI.getPlate(4, 1), CI.getTieredCircuitOreDictName(5), CI.getPlate(4, 1),
@@ -636,6 +677,37 @@ public class RECIPES_Machines {
CI.getPlate(4, 1), plateEnergeticAlloy, CI.getPlate(4, 1),
GregtechItemList.Energy_Buffer_RF_Convertor.get(1));
}
+
+ // Egg Box
+ CORE.RA.addSixSlotAssemblingRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(8),
+ CI.getTieredMachineHull(3),
+ ItemUtils.getSimpleStack(Items.egg, 64),
+ ItemUtils.getSimpleStack(ModItems.itemRope, 32),
+ CI.getPlate(4, GTNH ? 16 : 8)
+ },
+ FluidUtils.getFluidStack("mobessence", 4096),
+ ItemUtils.getSimpleStack(ModBlocks.blockEggBox, 1),
+ 20 * 60,
+ 480);
+
+ //Flask Configurator
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ CORE.RA.addSixSlotAssemblingRecipe(
+ new ItemStack[] {
+ CI.getNumberedAdvancedCircuit(8),
+ CI.getTieredMachineHull(2),
+ ItemUtils.getSimpleStack(ModBlocks.blockCircuitProgrammer),
+ VolumetricFlaskHelper.getVolumetricFlask(8),
+ CI.getTieredComponent(OrePrefixes.pipeSmall, 2, GTNH ? 4 : 2),
+ CI.getPlate(2, GTNH ? 8 : 4)
+ },
+ CI.getAlternativeTieredFluid(1, 144 * 8),
+ ItemUtils.getSimpleStack(ModBlocks.blockVolumetricFlaskSetter, 1),
+ 20 * 60,
+ 120);
+ }
if (CORE.ConfigSwitches.enableMultiblock_IronBlastFurnace){
@@ -1462,7 +1534,7 @@ public class RECIPES_Machines {
if (CORE.ConfigSwitches.enableMultiblock_PowerSubstation){
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"screwTitanium", "plateIncoloy020", "screwTitanium",
"plateIncoloy020", "frameGtIncoloyMA956", "plateIncoloy020",
"screwTitanium", "plateIncoloy020", "screwTitanium",
@@ -1470,7 +1542,7 @@ public class RECIPES_Machines {
ItemStack mBattery = ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateIncoloyMA956", mBattery, "plateIncoloyMA956",
GregtechItemList.Casing_Power_SubStation.get(1), GregtechItemList.Casing_Vanadium_Redox.get(1), GregtechItemList.Casing_Power_SubStation.get(1),
"plateIncoloy020", "plateIncoloyMA956", "plateIncoloy020",
@@ -1478,13 +1550,13 @@ public class RECIPES_Machines {
}
if (CORE.ConfigSwitches.enableMultiblock_IndustrialThermalCentrifuge){
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateRedSteel", CI.craftingToolHammer_Hard, "plateRedSteel",
"plateRedSteel", "frameGtBlackSteel", "plateRedSteel",
"plateRedSteel", CI.craftingToolWrench, "plateRedSteel",
GregtechItemList.Casing_ThermalCentrifuge.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateRedSteel","circuitData","plateRedSteel",
"stickTalonite",EV_MACHINE_ThermalCentrifuge,"stickTalonite",
"plateRedSteel","gearGtTalonite","plateRedSteel",
@@ -1492,13 +1564,13 @@ public class RECIPES_Machines {
}
if (CORE.ConfigSwitches.enableMultiblock_IndustrialWashPlant){
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateGrisium", CI.craftingToolHammer_Hard, "plateGrisium",
"plateTalonite", "frameGtGrisium", "plateTalonite",
"plateGrisium", CI.craftingToolWrench, "plateGrisium",
GregtechItemList.Casing_WashPlant.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateGrisium",CI.electricPump_MV,"plateGrisium",
"plateTalonite",EV_MACHINE_OreWasher,"plateTalonite",
"plateGrisium","circuitData","plateGrisium",
@@ -1550,13 +1622,13 @@ public class RECIPES_Machines {
if (CORE.ConfigSwitches.enableMultiblock_IndustrialCuttingMachine){
ItemStack plate = ALLOY.MARAGING300.getPlate(1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, CI.craftingToolHammer_Hard, plate,
"plateStellite", "frameGtTalonite", "plateStellite",
plate, CI.craftingToolWrench, plate,
GregtechItemList.Casing_CuttingFactoryFrame.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate,CI.getTieredCircuit(3),plate,
"wireFinePlatinum", EV_MACHINE_Cutter, "wireFinePlatinum",
plate,CI.getTieredCircuit(4),plate,
@@ -1566,13 +1638,13 @@ public class RECIPES_Machines {
//EV_MACHINE_Extruder
if (CORE.ConfigSwitches.enableMultiblock_IndustrialExtrudingMachine){
ItemStack plate = ALLOY.INCONEL_690.getPlate(1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, CI.craftingToolHammer_Hard, plate,
"plateTalonite", "frameGtStaballoy", "plateTalonite",
plate, CI.craftingToolWrench, plate,
GregtechItemList.Casing_Extruder.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate,CI.getTieredCircuit(4),plate,
CI.electricPiston_EV, EV_MACHINE_Extruder, CI.electricPiston_EV,
plate,CI.getTieredCircuit(4),plate,
@@ -1581,13 +1653,13 @@ public class RECIPES_Machines {
if (CORE.ConfigSwitches.enableMultiblock_IndustrialFishingPort){
ItemStack plate = ALLOY.AQUATIC_STEEL.getPlate(1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, CI.craftingToolHammer_Hard, plate,
"plateEglinSteel", "frameGtEglinSteel", "plateEglinSteel",
plate, CI.craftingToolWrench, plate,
GregtechItemList.Casing_FishPond.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate,CI.getTieredCircuit(3),plate,
"wireFineElectrum", ItemUtils.getSimpleStack(ModBlocks.blockFishTrap), "wireFineElectrum",
plate,CI.getTieredCircuit(2),plate,
@@ -1602,12 +1674,12 @@ public class RECIPES_Machines {
ItemStack cell1 = ItemList.Reactor_Coolant_He_6.get(1);
ItemStack cell2 = ItemList.Reactor_Coolant_NaK_6.get(1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, gear, plate,
cell1, frame, cell2,
plate, gear, plate,
GregtechItemList.Casing_AdvancedVacuum.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
gear,CI.getTieredCircuit(6),gear,
CI.electricPiston_IV, GregtechItemList.Casing_AdvancedVacuum.get(1), CI.electricPiston_IV,
plate, GregtechItemList.Gregtech_Computer_Cube.get(1), plate,
@@ -1621,12 +1693,12 @@ public class RECIPES_Machines {
cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1);
ItemStack cell3 = ItemUtils.simpleMetaStack("IC2:reactorVentDiamond:1:1", 1, 1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, cell1, plate,
cell3, frame, cell2,
plate, gear, plate,
GregtechItemList.Casing_Adv_BlastFurnace.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
gear,CI.getTieredCircuit(6),gear,
CI.robotArm_IV, GregtechItemList.Casing_Adv_BlastFurnace.get(1), CI.robotArm_IV,
plate, GregtechItemList.Gregtech_Computer_Cube.get(1), plate,
@@ -1639,7 +1711,7 @@ public class RECIPES_Machines {
cell1 = ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1);
cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
gear,CI.getTieredCircuit(6),gear,
CI.fieldGenerator_IV, CI.machineHull_ZPM, CI.robotArm_IV,
plate, GregtechItemList.Gregtech_Computer_Cube.get(1), plate,
@@ -1657,12 +1729,12 @@ public class RECIPES_Machines {
ItemStack aTieredUnboxinator = CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK ? ItemUtils.getValueOfItemList("Machine_LuV_Unboxinator", 1, ItemList.Machine_IV_Unboxinator.get(1)) : ItemList.Machine_IV_Unboxinator.get(1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, ItemUtils.getItemStackOfAmountFromOreDict("cableGt12VanadiumGallium", 1), plate,
cell1, frame, cell2,
plate, gear, plate,
GregtechItemList.Casing_AmazonWarehouse.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
casingAmazon, CI.getTieredCircuit(7), casingAmazon,
CI.robotArm_LuV, aTieredUnboxinator, CI.robotArm_LuV,
CI.conveyorModule_LuV, GregtechItemList.Gregtech_Computer_Cube.get(1), CI.conveyorModule_LuV,
@@ -1670,7 +1742,7 @@ public class RECIPES_Machines {
//Industrial Mixing Machine
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"plateStaballoy",CI.getTieredCircuit(5),"plateStaballoy",
"plateZirconiumCarbide", EV_MACHINE_Mixer, "plateZirconiumCarbide",
"plateStaballoy",CI.getTieredCircuit(5),"plateStaballoy",
@@ -1704,13 +1776,13 @@ public class RECIPES_Machines {
o_Distillery = ItemList.Machine_EV_FluidExtractor.get(1);
o_Extractor = ItemList.Machine_EV_Extractor.get(1);
}
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate, CI.craftingToolHammer_Hard, plate,
"plateStainlessSteel", "frameGtZirconiumCarbide", "plateStainlessSteel",
plate, CI.craftingToolWrench, plate,
GregtechItemList.Casing_Multi_Use.get(Casing_Amount));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
o_Compressor, o_Lathe, o_Electromagnet,
plate, ItemUtils.getSimpleStack(ModBlocks.blockProjectTable), plate,
o_Fermenter, o_Distillery, o_Extractor,
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_Tools.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_Tools.java
index 2cc6d7b41a..42448e6b74 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_Tools.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_Tools.java
@@ -135,42 +135,42 @@ public class RECIPES_Tools {
private static void run(){
//Staballoy Pickaxe
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateStaballoy, plateStaballoy, ingotStaballoy,
craftingToolFile, stickTungsten, craftingToolHardHammer,
craftingToolWrench, stickTungsten, craftingToolHardHammer,
RECIPE_StaballoyPickaxe);
//Staballoy Axe
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateStaballoy, ingotStaballoy, craftingToolHardHammer,
plateStaballoy, stickTungsten, craftingToolHardHammer,
craftingToolFile, stickTungsten, craftingToolWrench,
RECIPE_StaballoyAxe);
//Cobble to Sand
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
CobbleStone, CobbleStone, CobbleStone,
CobbleStone, sandHammer, CobbleStone,
CobbleStone, CobbleStone, CobbleStone,
RECIPE_Sand);
//Sand to Sandstone
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
Sand, Sand, Sand,
Sand, sandHammer, Sand,
Sand, Sand, Sand,
RECIPE_SandStone);
//Sandstone Hammer
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plateElectrum, ingotElectrum, plateElectrum,
craftingToolScrewdriver, stickBronze, craftingToolHardHammer,
null, stickSteel, null,
RECIPE_SandstoneHammer);
//Basic Firemaker
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
"cropWheat", "cropWheat", "cropWheat",
ItemUtils.getSimpleStack(Items.string), stickWood, ItemUtils.getSimpleStack(Items.string),
"cropWheat", "cropWheat", "cropWheat",
diff --git a/src/Java/gtPlusPlus/core/slots/SlotPollutionScrubber.java b/src/Java/gtPlusPlus/core/slots/SlotPollutionScrubber.java
new file mode 100644
index 0000000000..6dd3745d09
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/slots/SlotPollutionScrubber.java
@@ -0,0 +1,66 @@
+package gtPlusPlus.core.slots;
+
+import java.util.HashMap;
+
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.core.item.general.ItemAirFilter;
+import gtPlusPlus.core.item.general.ItemBasicScrubberTurbine;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.recipe.common.CI;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class SlotPollutionScrubber extends Slot {
+
+ private final int mType;
+ private final int mTier;
+
+ private static HashMap<Integer, ItemStack> mConveyorMap = new HashMap<Integer, ItemStack>();
+
+ static {
+ for (int i=0; i<(CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK ? 9 : 5); i++) {
+ mConveyorMap.put(i, CI.getConveyor(i, 1));
+ }
+ }
+
+ public SlotPollutionScrubber(final int aType, final int aTier, final IInventory inventory, final int slot, final int x, final int y) {
+ super(inventory, slot, x, y);
+ mType = aType;
+ mTier = aTier;
+ }
+
+ @Override
+ public synchronized boolean isItemValid(final ItemStack itemstack) {
+ return isItemValidForSlot(this, itemstack);
+ }
+
+ public static synchronized boolean isItemValidForSlot(final SlotPollutionScrubber aSlot, final ItemStack itemstack) {
+ if (aSlot.mType == 0) {
+ if (itemstack.getItem() instanceof ItemBasicScrubberTurbine) {
+ return true;
+ }
+ if (itemstack.getItem() instanceof GT_MetaGenerated_Tool && itemstack.getItemDamage() >= 170 && itemstack.getItemDamage() <= 179){
+ return true;
+ }
+ }
+ else if (aSlot.mType == 1) {
+ if (itemstack.getItem() instanceof ItemAirFilter) {
+ return true;
+ }
+ }
+ else if (aSlot.mType == 2) {
+ ItemStack aConveyorStack = mConveyorMap.get(aSlot.mTier);
+ if (GT_Utility.areStacksEqual(itemstack, aConveyorStack, true)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int getSlotStackLimit() {
+ return 1;
+ }
+}
diff --git a/src/Java/gtPlusPlus/core/slots/SlotVolumetricFlask.java b/src/Java/gtPlusPlus/core/slots/SlotVolumetricFlask.java
new file mode 100644
index 0000000000..b8955f6dc8
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/slots/SlotVolumetricFlask.java
@@ -0,0 +1,30 @@
+package gtPlusPlus.core.slots;
+
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class SlotVolumetricFlask extends Slot {
+
+ public static Item mFlask;
+
+ public SlotVolumetricFlask(final IInventory inventory, final int slot, final int x, final int y) {
+ super(inventory, slot, x, y);
+ }
+
+ @Override
+ public synchronized boolean isItemValid(final ItemStack itemstack) {
+ return isItemValidForSlot(itemstack);
+ }
+
+ public static synchronized boolean isItemValidForSlot(final ItemStack itemstack) {
+ return VolumetricFlaskHelper.isVolumetricFlask(itemstack);
+ }
+
+ @Override
+ public int getSlotStackLimit() {
+ return 16;
+ }
+}
diff --git a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
index 2d389d8bb2..62b545c5c8 100644
--- a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
+++ b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
@@ -5,13 +5,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.general.BlockSuperLight.TileEntitySuperLight;
import gtPlusPlus.core.block.machine.Machine_SuperJukebox.TileEntitySuperJukebox;
import gtPlusPlus.core.lib.LoadedMods;
-import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer;
-import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest;
-import gtPlusPlus.core.tileentities.general.TileEntityFirepit;
-import gtPlusPlus.core.tileentities.general.TileEntityFishTrap;
-import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid;
-import gtPlusPlus.core.tileentities.general.TileEntityPlayerDoorBase;
-import gtPlusPlus.core.tileentities.general.TileEntityXpConverter;
+import gtPlusPlus.core.tileentities.general.*;
import gtPlusPlus.core.tileentities.machines.TileEntityAdvPooCollector;
import gtPlusPlus.core.tileentities.machines.TileEntityModularityTable;
import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller;
@@ -47,7 +41,11 @@ public class ModTileEntities {
GameRegistry.registerTileEntity(TileEntitySuperLight.class, "TileEntitySuperLight");
GameRegistry.registerTileEntity(TileEntityPestKiller.class, "TileEntityPestKiller");
GameRegistry.registerTileEntity(TileEntityRoundRobinator.class, "TileEntityRoundRobinator");
-
+ GameRegistry.registerTileEntity(TileEntityEggBox.class, "TileEggBox");
+
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ GameRegistry.registerTileEntity(TileEntityVolumetricFlaskSetter.class, "TileEntityVolumetricFlaskSetter");
+ }
//Mod TEs
if (LoadedMods.Thaumcraft){
@@ -59,6 +57,7 @@ public class ModTileEntities {
private static void blacklistTilesFromAcceleration() {
Meta_GT_Proxy.setTileEntityClassAsBlacklistedInWorldAccelerator("gtPlusPlus.core.tileentities.general.TileEntityFishTrap");
Meta_GT_Proxy.setTileEntityClassAsBlacklistedInWorldAccelerator("gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest");
+ Meta_GT_Proxy.setTileEntityClassAsBlacklistedInWorldAccelerator("gtPlusPlus.core.tileentities.general.TileEggBox");
}
}
diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java
index c184b47d25..db93e9c4fc 100644
--- a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java
+++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java
@@ -90,14 +90,14 @@ public class TileEntityDecayablesChest extends TileEntity implements ISidedInven
boolean a1, a2;
int u = 0;
- a1 = b.getIsActive(world, iStack);
+ a1 = b.isTicking(world, iStack);
a2 = false;
int SECONDS_TO_PROCESS = 1;
while (u < (20 * SECONDS_TO_PROCESS)) {
if (!a1) {
break;
}
- a1 = b.getIsActive(world, iStack);
+ a1 = b.isTicking(world, iStack);
a2 = b.tickItemTag(world, iStack);
u++;
}
diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityEggBox.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityEggBox.java
new file mode 100644
index 0000000000..0c428537cb
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityEggBox.java
@@ -0,0 +1,359 @@
+package gtPlusPlus.core.tileentities.general;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.inventories.Inventory_EggBox;
+import gtPlusPlus.core.item.general.ItemGiantEgg;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class TileEntityEggBox extends TileEntity implements ISidedInventory {
+
+ private final Inventory_EggBox inventoryContents;
+
+ /** Determines if the check for adjacent chests has taken place. */
+ public boolean adjacentChestChecked;
+ /** Contains the chest tile located adjacent to this one (if any) */
+ public TileEntityEggBox adjacentChestZNeg;
+ /** Contains the chest tile located adjacent to this one (if any) */
+ public TileEntityEggBox adjacentChestXPos;
+ /** Contains the chest tile located adjacent to this one (if any) */
+ public TileEntityEggBox adjacentChestXNeg;
+ /** Contains the chest tile located adjacent to this one (if any) */
+ public TileEntityEggBox adjacentChestZPos;
+ /** The current angle of the lid (between 0 and 1) */
+ public float lidAngle;
+ /** The angle of the lid last tick */
+ public float prevLidAngle;
+ /** The number of players currently using this chest */
+ public int numPlayersUsing;
+
+ private String customName;
+
+ private int cachedChestType;
+ private int tickCount = 0;
+
+ public TileEntityEggBox() {
+ this.inventoryContents = new Inventory_EggBox();
+ }
+
+ public Inventory_EggBox getInventory() {
+ return this.inventoryContents;
+ }
+
+ @Override
+ public void updateEntity() {
+
+ // Try do chesty stuff
+ try {
+ this.updateEntityChest();
+ } catch (Throwable t) {
+
+ }
+
+ try {
+ if (!this.worldObj.isRemote) {
+ this.tickCount++;
+ if ((this.tickCount % 10) == 0) {
+ cachedChestType = 1;
+ }
+
+ if ((this.tickCount % 20) == 0) {
+ for (ItemStack inv : this.getInventory().getInventory()) {
+ if (inv == null) {
+ continue;
+ }
+ if (inv.getItem() instanceof ItemGiantEgg) {
+ ItemGiantEgg D = (ItemGiantEgg) inv.getItem();
+ tryUpdateDecayable(D, inv, this.worldObj);
+ }
+ }
+
+ }
+ updateSlots();
+ }
+ } catch (final Throwable t) {
+ }
+ }
+
+ public void tryUpdateDecayable(final ItemGiantEgg d, ItemStack iStack, final World world) {
+ if (world == null || iStack == null) {
+ return;
+ }
+ if (world.isRemote) {
+ return;
+ }
+
+ boolean a1, a2;
+ int u = 0;
+ a1 = d.isTicking(world, iStack);
+ a2 = false;
+ int SECONDS_TO_PROCESS = 1;
+ while (u < (20 * SECONDS_TO_PROCESS)) {
+ if (!a1) {
+ break;
+ }
+ a1 = d.isTicking(world, iStack);
+ a2 = d.tickItemTag(world, iStack);
+ u++;
+ }
+ Logger.MACHINE_INFO("| "+d.getUnlocalizedName()+" | "+a1+"/"+a2);
+
+ if (!a1 && !a2) {
+ ItemStack replacement = ItemUtils.getSimpleStack(d.getHatchResult(), 1);
+ replacement.stackSize = 1;
+ //iStack = replacement.copy();
+ for (int fff = 0; fff < this.inventoryContents.getSizeInventory(); fff++) {
+ if (this.inventoryContents.getStackInSlot(fff) == iStack) {
+ this.inventoryContents.setInventorySlotContents(fff, replacement.copy());
+ }
+ }
+
+ updateSlots();
+ this.inventoryContents.
+ markDirty();
+ }
+ }
+
+ public boolean anyPlayerInRange() {
+ return this.worldObj.getClosestPlayer(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D, 32) != null;
+ }
+
+ public NBTTagCompound getTag(final NBTTagCompound nbt, final String tag) {
+ if (!nbt.hasKey(tag)) {
+ nbt.setTag(tag, new NBTTagCompound());
+ }
+ return nbt.getCompoundTag(tag);
+ }
+
+ @Override
+ public void writeToNBT(final NBTTagCompound nbt) {
+ super.writeToNBT(nbt);
+ // Utils.LOG_WARNING("Trying to write NBT data to TE.");
+ final NBTTagCompound chestData = new NBTTagCompound();
+ this.inventoryContents.writeToNBT(chestData);
+ nbt.setTag("ContentsChest", chestData);
+ if (this.hasCustomInventoryName()) {
+ nbt.setString("CustomName", this.getCustomName());
+ }
+ }
+
+ @Override
+ public void readFromNBT(final NBTTagCompound nbt) {
+ super.readFromNBT(nbt);
+ // Utils.LOG_WARNING("Trying to read NBT data from TE.");
+ this.inventoryContents.readFromNBT(nbt.getCompoundTag("ContentsChest"));
+ if (nbt.hasKey("CustomName", 8)) {
+ this.setCustomName(nbt.getString("CustomName"));
+ }
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return this.getInventory().getSizeInventory();
+ }
+
+ @Override
+ public ItemStack getStackInSlot(final int slot) {
+ return this.getInventory().getStackInSlot(slot);
+ }
+
+ @Override
+ public ItemStack decrStackSize(final int slot, final int count) {
+ return this.getInventory().decrStackSize(slot, count);
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(final int slot) {
+ return this.getInventory().getStackInSlotOnClosing(slot);
+ }
+
+ @Override
+ public void setInventorySlotContents(final int slot, final ItemStack stack) {
+ this.getInventory().setInventorySlotContents(slot, stack);
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return this.getInventory().getInventoryStackLimit();
+ }
+
+ @Override
+ public boolean isUseableByPlayer(final EntityPlayer entityplayer) {
+ return this.getInventory().isUseableByPlayer(entityplayer);
+ }
+
+ @Override
+ public void openInventory() {
+ if (this.numPlayersUsing < 0) {
+ this.numPlayersUsing = 0;
+ }
+ if (!this.worldObj.isRemote) {
+ this.numPlayersUsing++;
+ cachedChestType = 1;
+ }
+ this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, this.numPlayersUsing);
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType());
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType());
+ this.getInventory().openInventory();
+ }
+
+ @Override
+ public void closeInventory() {
+ if (!this.worldObj.isRemote) {
+ this.numPlayersUsing--;
+ cachedChestType = 1;
+ }
+ this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, this.numPlayersUsing);
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType());
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType());
+ this.getInventory().closeInventory();
+ }
+
+ @Override
+ public boolean isItemValidForSlot(final int slot, final ItemStack itemstack) {
+ return this.getInventory().isItemValidForSlot(slot, itemstack);
+ }
+
+ @Override
+ public int[] getAccessibleSlotsFromSide(final int p_94128_1_) {
+ final int[] accessibleSides = new int[this.getSizeInventory()];
+ for (int r = 0; r < this.getInventory().getSizeInventory(); r++) {
+ accessibleSides[r] = r;
+ }
+ return accessibleSides;
+
+ }
+
+ @Override
+ public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) {
+ return this.getInventory().isItemValidForSlot(0, p_102007_2_);
+ }
+
+ @Override
+ public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) {
+ return this.getInventory().isItemValidForSlot(0, p_102008_2_);
+ }
+
+ public String getCustomName() {
+ return this.customName;
+ }
+
+ public void setCustomName(final String customName) {
+ this.customName = customName;
+ }
+
+ @Override
+ public String getInventoryName() {
+ return this.hasCustomInventoryName() ? this.customName : "container.EggBox";
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return (this.customName != null) && !this.customName.equals("");
+ }
+
+ /**
+ * Causes the TileEntity to reset all it's cached values for it's container
+ * Block, metadata and in the case of chests, the adjacent chest check
+ */
+ public void updateContainingBlockInfo() {
+ super.updateContainingBlockInfo();
+ this.adjacentChestChecked = false;
+ }
+
+ /**
+ * Performs the check for adjacent chests to determine if this chest is double
+ * or not.
+ */
+ public void checkForAdjacentChests() {
+ if (!this.adjacentChestChecked) {
+ this.adjacentChestChecked = true;
+ this.adjacentChestZNeg = null;
+ this.adjacentChestXPos = null;
+ this.adjacentChestXNeg = null;
+ this.adjacentChestZPos = null;
+ }
+ }
+
+ public void updateEntityChest() {
+ float f;
+ this.prevLidAngle = this.lidAngle;
+ f = 0.04F;
+ double d2;
+ if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F && this.adjacentChestZNeg == null
+ && this.adjacentChestXNeg == null) {
+ double d1 = (double) this.xCoord + 0.5D;
+ d2 = (double) this.zCoord + 0.5D;
+ this.worldObj.playSoundEffect(d1, (double) this.yCoord + 0.5D, d2, "random.chestopen", 0.5F,
+ this.worldObj.rand.nextFloat() * 0.1F + 0.9F);
+ }
+
+ if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) {
+ float f1 = this.lidAngle;
+ if (this.numPlayersUsing > 0) {
+ //this.lidAngle += f;
+ this.lidAngle += (float) (f * (1 + 0.10 * 0.01));
+ } else {
+ //this.lidAngle -= f;
+ this.lidAngle -= (float) (f * (1 + 0.10 * 0.01));
+ }
+ if (this.lidAngle > 1.0F) {
+ this.lidAngle = 1.0F;
+ }
+ float f2 = 0.5F;
+ if (this.lidAngle < f2 && f1 >= f2 && this.adjacentChestZNeg == null && this.adjacentChestXNeg == null) {
+ d2 = (double) this.xCoord + 0.5D;
+ double d0 = (double) this.zCoord + 0.5D;
+ this.worldObj.playSoundEffect(d2, (double) this.yCoord + 0.5D, d0, "random.chestclosed", 0.5F,
+ this.worldObj.rand.nextFloat() * 0.1F + 0.9F);
+ }
+
+ if (this.lidAngle < 0.0F) {
+ this.lidAngle = 0.0F;
+ }
+ }
+ }
+
+ /**
+ * Called when a client event is received with the event number and argument,
+ * see World.sendClientEvent
+ */
+ public boolean receiveClientEvent(int p_145842_1_, int p_145842_2_) {
+ if (p_145842_1_ == 1)
+ {
+ this.numPlayersUsing = p_145842_2_;
+ return true;
+ }
+ else
+ {
+ return super.receiveClientEvent(p_145842_1_, p_145842_2_);
+ }
+ }
+
+ /**
+ * invalidates a tile entity
+ */
+ public final void invalidate() {
+ super.invalidate();
+ cachedChestType = 1;
+ this.updateContainingBlockInfo();
+ this.checkForAdjacentChests();
+ }
+
+ private final int updateSlots() {
+ //Have slots changed?
+ if (cachedChestType == 0) {
+ return 0;
+ }
+ ItemUtils.organiseInventory(getInventory());
+ cachedChestType = 0;
+ return cachedChestType;
+
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java
index e7c37f7994..beff269428 100644
--- a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java
+++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java
@@ -79,7 +79,8 @@ public class TileEntityFishTrap extends TileEntity implements ISidedInventory {
}
}
if ((waterCount >= 2) && (trapCount <= 4)) {
- this.waterSides = waterCount;
+ int aCheck = trapCount + waterCount;
+ this.waterSides = MathUtils.balance(aCheck, 0, 6);
Logger.MACHINE_INFO("Valid Trap. "+waterCount+" | "+(this.tickCount/20)+"/"+(this.baseTickRate/20));
return true;
}
diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java
new file mode 100644
index 0000000000..5b837397b1
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java
@@ -0,0 +1,403 @@
+package gtPlusPlus.core.tileentities.general;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.container.Container_VolumetricFlaskSetter;
+import gtPlusPlus.core.inventories.Inventory_VolumetricFlaskSetter;
+import gtPlusPlus.core.util.math.MathUtils;
+import gtPlusPlus.core.util.minecraft.PlayerUtils;
+import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.fluids.FluidStack;
+
+public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISidedInventory {
+
+ private int tickCount = 0;
+ private final Inventory_VolumetricFlaskSetter inventoryContents;
+ private String customName;
+ public int locationX;
+ public int locationY;
+ public int locationZ;
+ private int aCurrentMode = 0;
+ private short aCustomValue = 1000;
+
+ public TileEntityVolumetricFlaskSetter() {
+ this.inventoryContents = new Inventory_VolumetricFlaskSetter();
+ this.setTileLocation();
+ }
+
+ public short getCustomValue() {
+ //Logger.INFO("Value: "+this.aCustomValue);
+ return this.aCustomValue;
+ }
+
+ public void setCustomValue(int aVal) {
+ Logger.INFO("Old Value: "+this.aCustomValue);
+ this.aCustomValue = (short) MathUtils.balance(aVal, 0, Short.MAX_VALUE);
+ Logger.INFO("New Value: "+this.aCustomValue);
+ markDirty();
+ }
+
+ public boolean setTileLocation() {
+ if (this.hasWorldObj()) {
+ if (!this.getWorldObj().isRemote) {
+ this.locationX = this.xCoord;
+ this.locationY = this.yCoord;
+ this.locationZ = this.zCoord;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //Rename to hasCircuitToConfigure
+ public final boolean hasFlask() {
+ for (int i=0;i<this.getInventory().getInventory().length-1;i++) {
+ if (i == Container_VolumetricFlaskSetter.SLOT_OUTPUT) {
+ continue;
+ }
+ if (this.getInventory().getInventory()[i] != null) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Inventory_VolumetricFlaskSetter getInventory() {
+ return this.inventoryContents;
+ }
+
+ private int getFlaskType(ItemStack aStack) {
+ if (VolumetricFlaskHelper.isNormalVolumetricFlask(aStack)) {
+ return 1;
+ }
+ else if (VolumetricFlaskHelper.isLargeVolumetricFlask(aStack)) {
+ return 2;
+ }
+ else if (VolumetricFlaskHelper.isGiganticVolumetricFlask(aStack)) {
+ return 3;
+ }
+ return 0;
+ }
+
+ private int getCapacityForSlot(int aSlot) {
+ switch (aSlot) {
+ case 0: //16
+ return 16;
+ case 1: //36
+ return 36;
+ case 2: //144
+ return 144;
+ case 3: //432
+ return 432;
+ case 4: //576
+ return 576;
+ case 5: //720
+ return 720;
+ case 6: //864
+ return 864;
+ case 7: //Custom
+ return getCustomValue();
+ }
+ return 1000;
+ }
+
+ public boolean addOutput() {
+
+ // Don't do anything unless we have items
+ if (!hasFlask()) {
+ Logger.INFO("No Flasks.");
+ return false;
+ }
+
+
+ ItemStack[] aInputs = this.getInventory().getInventory().clone();
+
+
+ //Check if there is output in slot.
+ Boolean hasOutput = false;
+ if (aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT] != null) {
+ hasOutput = true;
+ if (aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT].stackSize >= 16) {
+ return false;
+ }
+ }
+ AutoMap<Integer> aValidSlots = new AutoMap<Integer>();
+ int aSlotCount = 0;
+ for (ItemStack i : aInputs) {
+ if (i != null) {
+ aValidSlots.put(aSlotCount);
+ }
+ aSlotCount++;
+ }
+ for (int e : aValidSlots) {
+
+ // Skip slot 7 (Custom) unless it has a value > 0
+ if (e == 7 && getCustomValue() <= 0) {
+ Logger.INFO("Skipping Custom slot as value <= 0");
+ continue;
+ }
+ if (e == Container_VolumetricFlaskSetter.SLOT_OUTPUT) {
+ continue;
+ }
+
+ boolean doAdd = false;
+ ItemStack g = this.getStackInSlot(e);
+ FluidStack aInputFluidStack = VolumetricFlaskHelper.getFlaskFluid(g);
+ int aSize = 0;
+ ItemStack aInputStack = null;
+ int aTypeInSlot = getFlaskType(g);
+ if (aTypeInSlot > 0 && g != null) {
+ // No Existing Output
+ if (!hasOutput) {
+ aSize = g.stackSize;
+ doAdd = true;
+ }
+ // Existing Output
+ else {
+ ItemStack f = aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT];
+ FluidStack aFluidInCheckedSlot = VolumetricFlaskHelper.getFlaskFluid(f);
+ int aTypeInCheckedSlot = getFlaskType(f);
+ // Check that the Circuit in the Output slot is not null and the same type as the circuit input.
+ if (aTypeInCheckedSlot > 0 && (aTypeInSlot == aTypeInCheckedSlot) && f != null) {
+ if (g.getItem() == f.getItem() && VolumetricFlaskHelper.getFlaskCapacity(f) == getCapacityForSlot(e) && ((aInputFluidStack == null && aFluidInCheckedSlot == null) || aInputFluidStack.isFluidEqual(aFluidInCheckedSlot))) {
+ Logger.INFO("Input Slot Flask Contains: "+(aInputFluidStack != null ? aInputFluidStack.getLocalizedName() : "Empty"));
+ Logger.INFO("Output Slot Flask Contains: "+(aFluidInCheckedSlot != null ? aFluidInCheckedSlot.getLocalizedName() : "Empty"));
+ aSize = f.stackSize + g.stackSize;
+ if (aSize > 16) {
+ aInputStack = g.copy();
+ aInputStack.stackSize = (aSize-16);
+ }
+ doAdd = true;
+ }
+ }
+ }
+ if (doAdd) {
+ // Check Circuit Type
+ ItemStack aOutput;
+ FluidStack aOutputFluid = null;
+ if (!VolumetricFlaskHelper.isFlaskEmpty(g)) {
+ aOutputFluid = aInputFluidStack.copy();
+ }
+ if (aTypeInSlot == 1) {
+ aOutput = VolumetricFlaskHelper.getVolumetricFlask(1);
+ }
+ else if (aTypeInSlot == 2) {
+ aOutput = VolumetricFlaskHelper.getLargeVolumetricFlask(1);
+ }
+ else if (aTypeInSlot == 3) {
+ aOutput = VolumetricFlaskHelper.getGiganticVolumetricFlask(1);
+ }
+ else {
+ aOutput = null;
+ }
+ if (aOutput != null) {
+ aOutput.stackSize = aSize;
+ int aCapacity = getCapacityForSlot(e);
+ VolumetricFlaskHelper.setNewFlaskCapacity(aOutput, aCapacity);
+ if (aOutputFluid != null) {
+ if (aOutputFluid.amount > aCapacity) {
+ aOutputFluid.amount = aCapacity;
+ }
+ VolumetricFlaskHelper.setFluid(aOutput, aOutputFluid);
+ }
+ this.setInventorySlotContents(e, aInputStack);
+ this.setInventorySlotContents(Container_VolumetricFlaskSetter.SLOT_OUTPUT, aOutput);
+ return true;
+ }
+ }
+ }
+ continue;
+ }
+ return false;
+ }
+
+ @Override
+ public void updateEntity() {
+ try{
+ if (!this.worldObj.isRemote) {
+ if (tickCount % 10 == 0) {
+ if (hasFlask()) {
+ this.addOutput();
+ this.markDirty();
+ }
+ }
+ this.tickCount++;
+ }
+ }
+ catch (final Throwable t){}
+ }
+
+ public boolean anyPlayerInRange() {
+ return this.worldObj.getClosestPlayer(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D, 32) != null;
+ }
+
+ public NBTTagCompound getTag(final NBTTagCompound nbt, final String tag) {
+ if (!nbt.hasKey(tag)) {
+ nbt.setTag(tag, new NBTTagCompound());
+ }
+ return nbt.getCompoundTag(tag);
+ }
+
+ @Override
+ public void writeToNBT(final NBTTagCompound nbt) {
+ super.writeToNBT(nbt);
+ // Utils.LOG_WARNING("Trying to write NBT data to TE.");
+ final NBTTagCompound chestData = new NBTTagCompound();
+ this.inventoryContents.writeToNBT(chestData);
+ nbt.setTag("ContentsChest", chestData);
+ nbt.setShort("aCustomValue", aCustomValue);
+ if (this.hasCustomInventoryName()) {
+ nbt.setString("CustomName", this.getCustomName());
+ }
+ nbt.setInteger("aCurrentMode", aCurrentMode);
+ }
+
+ @Override
+ public void readFromNBT(final NBTTagCompound nbt) {
+ super.readFromNBT(nbt);
+ // Utils.LOG_WARNING("Trying to read NBT data from TE.");
+ this.inventoryContents.readFromNBT(nbt.getCompoundTag("ContentsChest"));
+ this.aCustomValue = nbt.getShort("aCustomValue");
+ if (nbt.hasKey("CustomName", 8)) {
+ this.setCustomName(nbt.getString("CustomName"));
+ }
+ aCurrentMode = nbt.getInteger("aCurrentMode");
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return this.getInventory().getSizeInventory();
+ }
+
+ @Override
+ public ItemStack getStackInSlot(final int slot) {
+ return this.getInventory().getStackInSlot(slot);
+ }
+
+ @Override
+ public ItemStack decrStackSize(final int slot, final int count) {
+ return this.getInventory().decrStackSize(slot, count);
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(final int slot) {
+ return this.getInventory().getStackInSlotOnClosing(slot);
+ }
+
+ @Override
+ public void setInventorySlotContents(final int slot, final ItemStack stack) {
+ this.getInventory().setInventorySlotContents(slot, stack);
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return this.getInventory().getInventoryStackLimit();
+ }
+
+ @Override
+ public boolean isUseableByPlayer(final EntityPlayer entityplayer) {
+ return this.getInventory().isUseableByPlayer(entityplayer);
+ }
+
+ @Override
+ public void openInventory() {
+ this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, 1);
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType());
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType());
+ this.getInventory().openInventory();
+ }
+
+ @Override
+ public void closeInventory() {
+ this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, 1);
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType());
+ this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType());
+ this.getInventory().closeInventory();
+ }
+
+ @Override
+ public boolean isItemValidForSlot(final int slot, final ItemStack itemstack) {
+ return this.getInventory().isItemValidForSlot(slot, itemstack);
+ }
+
+ @Override
+ public int[] getAccessibleSlotsFromSide(final int p_94128_1_) {
+ final int[] accessibleSides = new int[this.getSizeInventory()];
+ for (int r=0; r<this.getInventory().getSizeInventory(); r++){
+ accessibleSides[r]=r;
+ }
+ return accessibleSides;
+
+ }
+
+ @Override
+ public boolean canInsertItem(final int aSlot, final ItemStack p_102007_2_, final int p_102007_3_) {
+ return aSlot == aCurrentMode;
+ }
+
+ @Override
+ public boolean canExtractItem(final int aSlot, final ItemStack p_102008_2_, final int p_102008_3_) {
+ return aSlot == Container_VolumetricFlaskSetter.SLOT_OUTPUT;
+ }
+
+ public String getCustomName() {
+ return this.customName;
+ }
+
+ public void setCustomName(final String customName) {
+ this.customName = customName;
+ }
+
+ @Override
+ public String getInventoryName() {
+ return this.hasCustomInventoryName() ? this.customName : "container.VolumetricFlaskSetter";
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return (this.customName != null) && !this.customName.equals("");
+ }
+
+ @Override
+ public Packet getDescriptionPacket() {
+ final NBTTagCompound tag = new NBTTagCompound();
+ this.writeToNBT(tag);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, this.blockMetadata, tag);
+ }
+
+ @Override
+ public void onDataPacket(final NetworkManager net, final S35PacketUpdateTileEntity pkt) {
+ final NBTTagCompound tag = pkt.func_148857_g();
+ this.readFromNBT(tag);
+ }
+
+ public boolean onScrewdriverRightClick(byte side, EntityPlayer player, int x, int y, int z) {
+
+ if (player.isSneaking()) {
+ PlayerUtils.messagePlayer(player, "Value: "+this.getCustomValue());
+ }
+
+ try {
+ if (aCurrentMode == 7) {
+ aCurrentMode = 0;
+ }
+ else {
+ aCurrentMode++;
+ }
+ PlayerUtils.messagePlayer(player, "Slot "+aCurrentMode+" is now default.");
+ return true;
+ }
+ catch (Throwable t) {
+ return false;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java
index 72b13b3067..982c55282e 100644
--- a/src/Java/gtPlusPlus/core/util/Utils.java
+++ b/src/Java/gtPlusPlus/core/util/Utils.java
@@ -735,11 +735,6 @@ public class Utils {
}
}
- private static int sBookCount = 0;
-
- public static int getBookCount() {
- return sBookCount;
- }
public static ItemStack getWrittenBook(final ItemStack aBook, final int aID, final String aMapping, final String aTitle, final String aAuthor,
final String[] aPages) {
@@ -753,8 +748,7 @@ public class Utils {
if ((GT_Utility.isStringInvalid(aTitle)) || (GT_Utility.isStringInvalid(aAuthor)) || (aPages.length <= 0)) {
return null;
}
- sBookCount += 1;
- final int vMeta = (aID == -1 ? sBookCount : aID);
+ final int vMeta = aID;
rStack = (aBook == null ? new ItemStack(ModItems.itemCustomBook, 1, vMeta) : aBook);
final NBTTagCompound tNBT = new NBTTagCompound();
tNBT.setString("title", GT_LanguageManager.addStringLocalization(
@@ -771,17 +765,19 @@ public class Utils {
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(sBookCount)
+ .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);
diff --git a/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java b/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
index 6f5bb5b453..c9c8d26744 100644
--- a/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
+++ b/src/Java/gtPlusPlus/core/util/data/ArrayUtils.java
@@ -31,6 +31,13 @@ public class ArrayUtils {
return r.get();
}*/
+
+ public static Object[] removeNulls(final Object[] v) {
+ List<Object> list = new ArrayList<Object>(Arrays.asList(v));
+ list.removeAll(Collections.singleton((Object)null));
+ return list.toArray(new Object[list.size()]);
+ }
+
public static ItemStack[] removeNulls(final ItemStack[] v) {
List<ItemStack> list = new ArrayList<ItemStack>(Arrays.asList(v));
list.removeAll(Collections.singleton((ItemStack)null));
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
index f0b93a32dc..287820404a 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
@@ -3,6 +3,7 @@ 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;
@@ -101,7 +102,147 @@ public class HazmatUtils {
addProtection(aItem);
}
Logger.INFO("[Hazmat] Registered EMT Items as hazmat gear.");
- }
+ }
+
+ if (LoadedMods.isModLoaded("DraconicEvolution")) {
+ AutoMap<Field> aItemFields = new AutoMap<Field>();
+ 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<ItemStack> aItemMap = new AutoMap<ItemStack>();
+ 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<Field> aItemFields = new AutoMap<Field>();
+ 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<ItemStack> aItemMap = new AutoMap<ItemStack>();
+ 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<Field> aItemFields = new AutoMap<Field>();
+ 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<ItemStack> aItemMap = new AutoMap<ItemStack>();
+ 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<Item> aItems = new AutoMap<Item>();
+ 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<ItemStack> aItemMap = new AutoMap<ItemStack>();
+ 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<Field> aItemFields = new AutoMap<Field>();
@@ -288,7 +429,7 @@ public class HazmatUtils {
Logger.INFO("==========================================================");
return false;
}
- Logger.INFO("[Hazmat] Registering " + aVanStack.getDisplayName() + " for full Hazmat protection.");
+ Logger.INFO("[Hazmat] Registering " + ItemUtils.getItemName(aVanStack) + " for full Hazmat protection.");
GT_ItemStack aStack = getGtStackFromVanilla(aVanStack);
AutoMap<Boolean> aAdded = new AutoMap<Boolean>();
aAdded.put(addProtection_Frost(aStack));
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
index aaa81a0057..fe67c88d69 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/InventoryUtils.java
@@ -2,6 +2,11 @@ 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 net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.IInventory;
@@ -58,5 +63,26 @@ public class InventoryUtils {
}
}
+
+ 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<ItemStack> aInvContents = new AutoMap<ItemStack>();
+ 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/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
index 70b635583d..09e7f51e06 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/ItemUtils.java
@@ -451,9 +451,10 @@ public class ItemUtils {
final ItemStack smallDust = ItemUtils.getSimpleStack(output[1]);
final ItemStack tinyDust = ItemUtils.getSimpleStack(output[2]);
-
+ CORE.RA.addpackagerRecipe(ItemList.Schematic_Dust.get(1), smallDust, tinyDust, normalDust);
+
if (ItemUtils.checkForInvalidItems(tinyDust) && ItemUtils.checkForInvalidItems(normalDust)) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
@@ -464,7 +465,7 @@ public class ItemUtils {
Logger.WARNING("9 Tiny dust to 1 Dust Recipe: "+materialName+" - Failed");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
normalDust, null, null,
null, null, null,
null, null, null,
@@ -477,7 +478,7 @@ public class ItemUtils {
}
if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(normalDust)) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
smallDust, smallDust, null,
smallDust, smallDust, null,
null, null, null,
@@ -487,7 +488,7 @@ public class ItemUtils {
else {
Logger.WARNING("4 Small dust to 1 Dust Recipe: "+materialName+" - Failed");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
null, normalDust, null,
null, null, null,
null, null, null,
@@ -1136,8 +1137,8 @@ public class ItemUtils {
String aDisplay = null;
try {
aDisplay = (aStack.getUnlocalizedName()).trim();
-
- } catch (Throwable t) {
+ }
+ catch (Throwable t) {
aDisplay = aStack.getItem().getUnlocalizedName();
}
if (aDisplay == null || aDisplay.length() <= 0) {
@@ -1368,4 +1369,12 @@ public class ItemUtils {
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/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java
index b0623d429d..7ed4d887cc 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java
@@ -2,6 +2,7 @@ package gtPlusPlus.core.util.minecraft;
import static gtPlusPlus.core.item.ModItems.ZZZ_Empty;
+import java.util.HashMap;
import java.util.Map;
import net.minecraft.entity.Entity;
@@ -413,6 +414,107 @@ public class NBTUtils {
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;
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/PlayerUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/PlayerUtils.java
index 110b2baf25..24ffa295b7 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/PlayerUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/PlayerUtils.java
@@ -4,8 +4,8 @@ import java.util.*;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
-import gtPlusPlus.core.handler.events.BlockEventHandler;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -16,11 +16,20 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
-import thaumcraft.common.lib.FakeThaumcraftPlayer;
public class PlayerUtils {
public static final Map<String, EntityPlayer> mCachedFakePlayers = new WeakHashMap<String, EntityPlayer>();
+ 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);
@@ -203,7 +212,7 @@ public class PlayerUtils {
public static void cacheFakePlayer(EntityPlayer aPlayer) {
ChunkCoordinates aChunkLocation = aPlayer.getPlayerCoordinates();
// Cache Fake Player
- if (aPlayer instanceof FakePlayer || aPlayer instanceof FakeThaumcraftPlayer
+ if (aPlayer instanceof FakePlayer || (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(aPlayer))
|| (aPlayer.getCommandSenderName() == null
|| aPlayer.getCommandSenderName().length() <= 0)
|| (aPlayer.isEntityInvulnerable() && !aPlayer.canCommandSenderUseCommand(0, "")
@@ -225,7 +234,7 @@ public class PlayerUtils {
cacheFakePlayer(p);
return false;
}
- if (p instanceof FakeThaumcraftPlayer) {
+ if (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(p) ) {
cacheFakePlayer(p);
return false;
}
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
index 56772f0dc7..a20678c354 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/RecipeUtils.java
@@ -6,11 +6,8 @@ import java.util.List;
import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.enums.Materials;
-import gregtech.api.interfaces.internal.IGT_CraftingRecipe;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.*;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.api.interfaces.RunnableWithInfo;
@@ -20,9 +17,11 @@ import gtPlusPlus.api.objects.minecraft.ShapedRecipe;
import gtPlusPlus.core.handler.COMPAT_HANDLER;
import gtPlusPlus.core.handler.Recipes.LateRegistrationHandler;
import gtPlusPlus.core.handler.Recipes.RegistrationHandler;
-import gtPlusPlus.core.item.ModItems;
+import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.recipe.common.CI;
+import gtPlusPlus.core.util.data.ArrayUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
@@ -38,15 +37,15 @@ public static int mInvalidID = 1;
//Old Debug Code, useful for finding recipes loading too early.
/*if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) {
- 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(ReflectionUtils.getMethodName(7));
- Logger.INFO(ReflectionUtils.getMethodName(8));
- Logger.INFO(ReflectionUtils.getMethodName(9));
+ 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));
System.exit(1);
}*/
@@ -348,15 +347,15 @@ public static int mInvalidID = 1;
if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) {
- 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(ReflectionUtils.getMethodName(7));
- Logger.INFO(ReflectionUtils.getMethodName(8));
- Logger.INFO(ReflectionUtils.getMethodName(9));
+ 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));
System.exit(1);
}
@@ -517,6 +516,9 @@ public static int mInvalidID = 1;
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;
}
@@ -536,6 +538,9 @@ public static int mInvalidID = 1;
else if (p instanceof Item) {
validCounter++;
}
+ else if (p instanceof Block) {
+ validCounter++;
+ }
else if (p instanceof String) {
validCounter++;
}
@@ -643,6 +648,151 @@ public static int mInvalidID = 1;
}
+ 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.INFO("Using String: "+aFullString);
+
+ String aRow1 = aFullString.substring(0, 3);
+ String aRow2 = aFullString.substring(3, 6);
+ String aRow3 = aFullString.substring(6, 9);
+ Logger.INFO(""+aRow1);
+ Logger.INFO(""+aRow2);
+ Logger.INFO(""+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.INFO("Data Size: "+aDataObject.length);
+ aDataObject = ArrayUtils.removeNulls(aDataObject);
+ Logger.INFO("Clean Size: "+aDataObject.length);
+ Logger.INFO("ArrayData: "+aDataObject.toString());
+
+ 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<String> {
+
+ 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 "";
+ }
+
+ }
}
diff --git a/src/Java/gtPlusPlus/nei/DecayableRecipeHandler.java b/src/Java/gtPlusPlus/nei/DecayableRecipeHandler.java
index dae1a663d7..ce2062d12c 100644
--- a/src/Java/gtPlusPlus/nei/DecayableRecipeHandler.java
+++ b/src/Java/gtPlusPlus/nei/DecayableRecipeHandler.java
@@ -23,6 +23,8 @@ import net.minecraft.util.StatCollector;
public class DecayableRecipeHandler extends TemplateRecipeHandler {
+ public static final String mNEIName = "Decayables";
+
public String getRecipeName() {
return StatCollector.translateToLocal("GTPP.container.decaychest.name");
}
diff --git a/src/Java/gtPlusPlus/nei/GTPP_NEI_CustomMapHandler.java b/src/Java/gtPlusPlus/nei/GTPP_NEI_CustomMapHandler.java
deleted file mode 100644
index ca6eb55b90..0000000000
--- a/src/Java/gtPlusPlus/nei/GTPP_NEI_CustomMapHandler.java
+++ /dev/null
@@ -1,828 +0,0 @@
-package gtPlusPlus.nei;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.util.*;
-
-import org.lwjgl.opengl.GL11;
-
-import codechicken.lib.gui.GuiDraw;
-import codechicken.nei.PositionedStack;
-import codechicken.nei.guihook.GuiContainerManager;
-import codechicken.nei.guihook.IContainerInputHandler;
-import codechicken.nei.guihook.IContainerTooltipHandler;
-import codechicken.nei.recipe.*;
-import cpw.mods.fml.common.event.FMLInterModComms;
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
-import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
-import gregtech.common.gui.GT_GUIContainer_FusionReactor;
-import gregtech.common.gui.GT_GUIContainer_PrimitiveBlastFurnace;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-public class GTPP_NEI_CustomMapHandler
- extends TemplateRecipeHandler {
- public static final int sOffsetX = 5;
- public static final int sOffsetY = 11;
-
- static {
- GuiContainerManager.addInputHandler(new GT_RectHandler());
- GuiContainerManager.addTooltipHandler(new GT_RectHandler());
- }
-
- protected final CustomRecipeMap mRecipeMap;
-
- public GTPP_NEI_CustomMapHandler(CustomRecipeMap tMap) {
- this.mRecipeMap = tMap;
- this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier(), new Object[0]));
- if (!NEI_GT_Config.sIsAdded) {
- FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier());
- GuiCraftingRecipe.craftinghandlers.add(this);
- GuiUsageRecipe.usagehandlers.add(this);
- }
- }
-
- public List<GT_Recipe> getSortedRecipes() {
- List<GT_Recipe> result = new ArrayList<>(this.mRecipeMap.mRecipeList);
- Collections.sort(result);
- return result;
- }
-
- public static void drawText(int aX, int aY, String aString, int aColor) {
- Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
- }
-
- public TemplateRecipeHandler newInstance() {
- return new GTPP_NEI_CustomMapHandler(this.mRecipeMap);
- }
-
- public void loadCraftingRecipes(String outputId, Object... results) {
- if (outputId.equals(getOverlayIdentifier())) {
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- this.arecipes.add(new CachedDefaultRecipe(tRecipe));
- }
- }
- } else {
- super.loadCraftingRecipes(outputId, results);
- }
- }
-
- public void loadCraftingRecipes(ItemStack aResult) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
-
- ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
- tResults.add(aResult);
- tResults.add(GT_OreDictUnificator.get(true, aResult));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
- if (tFluid != null) {
- tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tResults) {
- if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- public void loadUsageRecipes(ItemStack aInput) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
- ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
- tInputs.add(aInput);
- tInputs.add(GT_OreDictUnificator.get(false, aInput));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
- if (tFluid != null) {
- tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tInputs) {
- if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- public String getOverlayIdentifier() {
- return this.mRecipeMap.mNEIName;
- }
-
- public void drawBackground(int recipe) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GuiDraw.changeTexture(getGuiTexture());
- GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
- }
-
- public int recipiesPerPage() {
- return 1;
- }
-
- public String getRecipeName() {
- return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
- }
-
- public String getGuiTexture() {
-// return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
- return this.mRecipeMap.mNEIGUIPath;
- }
-
- public List<String> handleItemTooltip(GuiRecipe gui, ItemStack aStack, List<String> currenttip, int aRecipeIndex) {
- TemplateRecipeHandler.CachedRecipe tObject = (TemplateRecipeHandler.CachedRecipe) this.arecipes.get(aRecipeIndex);
- if ((tObject instanceof CachedDefaultRecipe)) {
- CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
- for (PositionedStack tStack : tRecipe.mOutputs) {
- if (aStack == tStack.item) {
- if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
- break;
- }
- currenttip.add(trans("150","Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 + "." + (((FixedPositionedStack) tStack).mChance % 100 < 10 ? "0" + ((FixedPositionedStack) tStack).mChance % 100 : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
- break;
- }
- }
- for (PositionedStack tStack : tRecipe.mInputs) {
- if (aStack == tStack.item) {
- if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
- (tStack.item.stackSize != 0)) {
- break;
- }
- currenttip.add(trans("151","Does not get consumed in the process"));
- break;
- }
- }
- }
- return currenttip;
- }
-
- public void drawExtras(int aRecipeIndex) {
- int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
- int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
- String[] recipeDesc = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc();
- if (recipeDesc == null) {
- if (tEUt != 0) {
- drawText(10, 73, trans("152","Total: ") + ((long)tDuration * tEUt) + " EU", -16777216);
- drawText(10, 83, trans("153","Usage: ") + tEUt + " EU/t", -16777216);
- if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- drawText(10, 93, trans("154","Voltage: ") + tEUt / this.mRecipeMap.mAmperage + " EU", -16777216);
- drawText(10, 103, trans("155","Amperage: ") + this.mRecipeMap.mAmperage, -16777216);
- } else {
- drawText(10, 93, trans("156","Voltage: unspecified"), -16777216);
- drawText(10, 103, trans("157","Amperage: unspecified"), -16777216);
- }
- }
- if (tDuration > 0) {
-// drawText(10, 113, trans("158","Time: ") + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + trans("161"," secs"), -16777216);
- drawText(10, 113, String.format("%s%.2f%s", trans("158","Time: "), 0.05 * tDuration, trans("161"," secs")), -16777216);
- }
- int tSpecial = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue;
- if (tSpecial == -100 && GT_Mod.gregtechproxy.mLowGravProcessing) {
- drawText(10, 123, trans("159","Needs Low Gravity"), -16777216);
- } else if (tSpecial == -200 && GT_Mod.gregtechproxy.mEnableCleanroom) {
- drawText(10, 123, trans("160","Needs Cleanroom"), -16777216);
- } else if (tSpecial == -201) {
- drawText(10, 123, trans("206","Scan for Assembly Line"), -16777216);
- } else if (tSpecial == -300) {
- drawText(10, 123, trans("216","Deprecated Recipe"), -16777216);
- } else if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + tSpecial * this.mRecipeMap.mNEISpecialValueMultiplier + this.mRecipeMap.mNEISpecialValuePost, -16777216);
- }
- } else {
- int i = 0;
- for (String descLine : recipeDesc) {
- drawText(10, 73 + 10 * i, descLine, -16777216);
- i++;
- }
- }
- }
-
- public static class GT_RectHandler
- implements IContainerInputHandler, IContainerTooltipHandler {
- public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- if (canHandle(gui)) {
- if (button == 0) {
- return transferRect(gui, false);
- }
- if (button == 1) {
- return transferRect(gui, true);
- }
- }
- return false;
- }
-
- public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public boolean canHandle(GuiContainer gui) {
- return (gui instanceof GT_GUIContainer_BasicMachine && GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI))
- || (gui instanceof GT_GUIContainer_FusionReactor && GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI));
- }
-
- public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip) {
- if ((canHandle(gui)) && (currenttip.isEmpty())) {
- if (gui instanceof GT_GUIContainer_BasicMachine && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_PrimitiveBlastFurnace && new Rectangle(51, 10, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- }
-
- }
- return currenttip;
- }
-
- private boolean transferRect(GuiContainer gui, boolean usage) {
- if (gui instanceof GT_GUIContainer_BasicMachine) {
- return (canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
- } else if (gui instanceof GT_GUIContainer_FusionReactor) {
- return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
- }
- return false;
- }
-
- public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip) {
- return currenttip;
- }
-
- public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey, List<String> currenttip) {
- return currenttip;
- }
-
- public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {
- }
-
- public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- return false;
- }
-
- public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- }
-
- public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {
- }
- }
-
- public static class FixedPositionedStack extends PositionedStack {
- public final int mChance;
- public boolean permutated = false;
-
- public FixedPositionedStack(Object object, int x, int y) {
- this(object, x, y, 0);
- }
-
- public FixedPositionedStack(Object object, int x, int y, int aChance) {
- super(object, x, y, true);
- this.mChance = aChance;
- }
-
- public void generatePermutations() {
- if (this.permutated) {
- return;
- }
- ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
- for (ItemStack tStack : this.items) {
- if (GT_Utility.isStackValid(tStack)) {
- if (tStack.getItemDamage() == 32767) {
- List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
- if (!permutations.isEmpty()) {
- ItemStack stack;
- for (Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
- stack = (ItemStack) i$.next();
- }
- } else {
- ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
- base.stackTagCompound = tStack.stackTagCompound;
- tDisplayStacks.add(base);
- }
- } else {
- tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
- }
- }
- }
- this.items = ((ItemStack[]) tDisplayStacks.toArray(new ItemStack[0]));
- if (this.items.length == 0) {
- this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
- }
- this.permutated = true;
- setPermutationToRender(0);
- }
- }
-
- public class CachedDefaultRecipe
- extends TemplateRecipeHandler.CachedRecipe {
- public final GT_Recipe mRecipe;
- public final List<PositionedStack> mOutputs;
- public final List<PositionedStack> mInputs;
-
- public CachedDefaultRecipe(GT_Recipe aRecipe) {
- super();
- this.mRecipe = aRecipe;
-
- if (aRecipe.getInputPositionedStacks() != null && aRecipe.getOutputPositionedStacks() != null) {
- mInputs = aRecipe.getInputPositionedStacks();
- mOutputs = aRecipe.getOutputPositionedStacks();
- return;
- }
-
- mOutputs = new ArrayList<PositionedStack>();
- mInputs = new ArrayList<PositionedStack>();
-
- int tStartIndex = 0;
- switch (GTPP_NEI_CustomMapHandler.this.mRecipeMap.mUsualInputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
- }
- tStartIndex++;
- }
- if (aRecipe.mSpecialItems != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
- }
- tStartIndex = 0;
- switch (GTPP_NEI_CustomMapHandler.this.mRecipeMap.mUsualOutputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- }
- if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
- if ((aRecipe.mFluidInputs.length > 1) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
- }
- }
- if (aRecipe.mFluidOutputs.length > 1) {
- if (aRecipe.mFluidOutputs[0] != null && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 120, 5));
- }
- if (aRecipe.mFluidOutputs[1] != null && (aRecipe.mFluidOutputs[1].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 138, 5));
- }
- if (aRecipe.mFluidOutputs.length > 2 && aRecipe.mFluidOutputs[2] != null && (aRecipe.mFluidOutputs[2].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 102, 23));
- }
- if (aRecipe.mFluidOutputs.length > 3 && aRecipe.mFluidOutputs[3] != null && (aRecipe.mFluidOutputs[3].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 120, 23));
- }
- if (aRecipe.mFluidOutputs.length > 4 && aRecipe.mFluidOutputs[4] != null && (aRecipe.mFluidOutputs[4].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 138, 23));
- }
- } else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 52));
- }
- }
-
- public List<PositionedStack> getIngredients() {
- return getCycledIngredients(GTPP_NEI_CustomMapHandler.this.cycleticks / 10, this.mInputs);
- }
-
- public PositionedStack getResult() {
- return null;
- }
-
- public List<PositionedStack> getOtherStacks() {
- return this.mOutputs;
- }
- }
-
- public String trans(String aKey, String aEnglish){
- return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
- }
-}
diff --git a/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandler.java b/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandler.java
index 12c1b501bd..2c00010a1a 100644
--- a/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandler.java
+++ b/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandler.java
@@ -6,65 +6,66 @@ import java.util.*;
import org.lwjgl.opengl.GL11;
-import codechicken.lib.gui.GuiDraw;
-import codechicken.nei.PositionedStack;
-import codechicken.nei.guihook.GuiContainerManager;
-import codechicken.nei.guihook.IContainerInputHandler;
-import codechicken.nei.guihook.IContainerTooltipHandler;
-import codechicken.nei.recipe.*;
import cpw.mods.fml.common.event.FMLInterModComms;
-import gregtech.GT_Mod;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.objects.ItemData;
import gregtech.api.util.*;
-import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map;
-import gregtech.common.gui.GT_GUIContainer_FusionReactor;
-import gregtech.common.gui.GT_GUIContainer_PrimitiveBlastFurnace;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import codechicken.lib.gui.GuiDraw;
+import codechicken.nei.PositionedStack;
+import codechicken.nei.guihook.GuiContainerManager;
+import codechicken.nei.guihook.IContainerInputHandler;
+import codechicken.nei.guihook.IContainerTooltipHandler;
+import codechicken.nei.recipe.*;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
public class GTPP_NEI_DefaultHandler
- extends TemplateRecipeHandler {
- public static final int sOffsetX = 5;
- public static final int sOffsetY = 11;
+extends TemplateRecipeHandler {
+ public static final int sOffsetX = 5;
+ public static final int sOffsetY = 11;
- static {
- GuiContainerManager.addInputHandler(new GT_RectHandler());
- GuiContainerManager.addTooltipHandler(new GT_RectHandler());
- }
+ static {
+ GuiContainerManager.addInputHandler(new GT_RectHandler());
+ GuiContainerManager.addTooltipHandler(new GT_RectHandler());
+ }
- protected final GTPP_Recipe_Map mRecipeMap;
+ protected final GT_Recipe_Map mRecipeMap;
- public GTPP_NEI_DefaultHandler(GTPP_Recipe_Map tMap) {
- this.mRecipeMap = tMap;
- this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier(), new Object[0]));
- if (!NEI_GT_Config.sIsAdded) {
- FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier());
- GuiCraftingRecipe.craftinghandlers.add(this);
- GuiUsageRecipe.usagehandlers.add(this);
- }
- }
+ public GTPP_NEI_DefaultHandler(final GT_Recipe_Map tMap) {
+ this.mRecipeMap = tMap;
+ this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), this.getOverlayIdentifier(), new Object[0]));
+ if (!NEI_GT_Config.sIsAdded) {
+ FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtechplusplus@" + this.getRecipeName() + "@" + this.getOverlayIdentifier());
+ GuiCraftingRecipe.craftinghandlers.add(this);
+ GuiUsageRecipe.usagehandlers.add(this);
+ }
+ }
+
+ public static void drawText(final int aX, final int aY, final String aString, final int aColor) {
+ Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
+ }
+
+ @Override
+ public TemplateRecipeHandler newInstance() {
+ return new GTPP_NEI_DefaultHandler(this.mRecipeMap);
+ }
+
public List<GT_Recipe> getSortedRecipes() {
List<GT_Recipe> result = new ArrayList<>(this.mRecipeMap.mRecipeList);
Collections.sort(result);
return result;
}
-
- public static void drawText(int aX, int aY, String aString, int aColor) {
- Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
- }
-
- public TemplateRecipeHandler newInstance() {
- return new GTPP_NEI_DefaultHandler(this.mRecipeMap);
- }
-
+
public void loadCraftingRecipes(String outputId, Object... results) {
if (outputId.equals(getOverlayIdentifier())) {
for (GT_Recipe tRecipe : getSortedRecipes()) {
@@ -142,647 +143,639 @@ public class GTPP_NEI_DefaultHandler
}
}
- public String getOverlayIdentifier() {
- return this.mRecipeMap.mNEIName;
- }
-
- public void drawBackground(int recipe) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GuiDraw.changeTexture(getGuiTexture());
- GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
- }
+ @Override
+ public String getOverlayIdentifier() {
+ return this.mRecipeMap.mNEIName;
+ }
- public int recipiesPerPage() {
- return 1;
- }
+ @Override
+ public void drawBackground(final int recipe) {
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GuiDraw.changeTexture(this.getGuiTexture());
+ GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
+ }
- public String getRecipeName() {
- return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
- }
+ @Override
+ public int recipiesPerPage() {
+ return 1;
+ }
- public String getGuiTexture() {
-// return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
- return this.mRecipeMap.mNEIGUIPath;
- }
+ @Override
+ public String getRecipeName() {
+ return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
+ }
- public List<String> handleItemTooltip(GuiRecipe gui, ItemStack aStack, List<String> currenttip, int aRecipeIndex) {
- TemplateRecipeHandler.CachedRecipe tObject = (TemplateRecipeHandler.CachedRecipe) this.arecipes.get(aRecipeIndex);
- if ((tObject instanceof CachedDefaultRecipe)) {
- CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
- for (PositionedStack tStack : tRecipe.mOutputs) {
- if (aStack == tStack.item) {
- if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
- break;
- }
- currenttip.add(trans("150","Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 + "." + (((FixedPositionedStack) tStack).mChance % 100 < 10 ? "0" + ((FixedPositionedStack) tStack).mChance % 100 : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
- break;
- }
- }
- for (PositionedStack tStack : tRecipe.mInputs) {
- if (aStack == tStack.item) {
- if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
- (tStack.item.stackSize != 0)) {
- break;
- }
- currenttip.add(trans("151","Does not get consumed in the process"));
- break;
- }
- }
- }
- return currenttip;
- }
+ @Override
+ public String getGuiTexture() {
+ // return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
+ return this.mRecipeMap.mNEIGUIPath;
+ }
- public void drawExtras(int aRecipeIndex) {
- int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
- int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
- String[] recipeDesc = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc();
- if (recipeDesc == null) {
- if (tEUt != 0) {
- drawText(10, 73, trans("152","Total: ") + ((long)tDuration * tEUt) + " EU", -16777216);
- drawText(10, 83, trans("153","Usage: ") + tEUt + " EU/t", -16777216);
- if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- drawText(10, 93, trans("154","Voltage: ") + tEUt / this.mRecipeMap.mAmperage + " EU", -16777216);
- drawText(10, 103, trans("155","Amperage: ") + this.mRecipeMap.mAmperage, -16777216);
- } else {
- drawText(10, 93, trans("156","Voltage: unspecified"), -16777216);
- drawText(10, 103, trans("157","Amperage: unspecified"), -16777216);
+ @Override
+ public List<String> handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List<String> currenttip, final int aRecipeIndex) {
+ final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex);
+ if ((tObject instanceof CachedDefaultRecipe)) {
+ final CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
+ for (final PositionedStack tStack : tRecipe.mOutputs) {
+ if (aStack == tStack.item) {
+ if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
+ break;
+ }
+ currenttip.add("Chance: " + (((FixedPositionedStack) tStack).mChance / 100) + "." + ((((FixedPositionedStack) tStack).mChance % 100) < 10 ? "0" + (((FixedPositionedStack) tStack).mChance % 100) : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
+ break;
}
}
- if (tDuration > 0) {
-// drawText(10, 113, trans("158","Time: ") + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + trans("161"," secs"), -16777216);
- drawText(10, 113, String.format("%s%.2f%s", trans("158","Time: "), 0.05 * tDuration, trans("161"," secs")), -16777216);
- }
- int tSpecial = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue;
- if (tSpecial == -100 && GT_Mod.gregtechproxy.mLowGravProcessing) {
- drawText(10, 123, trans("159","Needs Low Gravity"), -16777216);
- } else if (tSpecial == -200 && GT_Mod.gregtechproxy.mEnableCleanroom) {
- drawText(10, 123, trans("160","Needs Cleanroom"), -16777216);
- } else if (tSpecial == -201) {
- drawText(10, 123, trans("206","Scan for Assembly Line"), -16777216);
- } else if (tSpecial == -300) {
- drawText(10, 123, trans("216","Deprecated Recipe"), -16777216);
- } else if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + tSpecial * this.mRecipeMap.mNEISpecialValueMultiplier + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ for (final PositionedStack tStack : tRecipe.mInputs) {
+ if (aStack == tStack.item) {
+ if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
+ (tStack.item.stackSize != 0)) {
+ break;
+ }
+ currenttip.add("Does not get consumed in the process");
+ break;
+ }
}
- } else {
- int i = 0;
- for (String descLine : recipeDesc) {
- drawText(10, 73 + 10 * i, descLine, -16777216);
- i++;
+ }
+ return currenttip;
+ }
+
+ @Override
+ public void drawExtras(final int aRecipeIndex) {
+ final int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
+ final int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
+ if (tEUt != 0) {
+ drawText(10, 73, "Total: " + (tDuration * tEUt) + " EU", -16777216);
+ drawText(10, 83, "Usage: " + tEUt + " EU/t", -16777216);
+ if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
+ drawText(10, 93, "Voltage: " + (tEUt / this.mRecipeMap.mAmperage) + " EU", -16777216);
+ drawText(10, 103, "Amperage: " + this.mRecipeMap.mAmperage, -16777216);
+ } else {
+ drawText(10, 93, "Voltage: unspecified", -16777216);
+ drawText(10, 103, "Amperage: unspecified", -16777216);
}
}
+ if (tDuration > 0) {
+ drawText(10, 113, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
+ }
+ if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
+ drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ }
}
- public static class GT_RectHandler
- implements IContainerInputHandler, IContainerTooltipHandler {
- public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- if (canHandle(gui)) {
- if (button == 0) {
- return transferRect(gui, false);
- }
- if (button == 1) {
- return transferRect(gui, true);
- }
- }
- return false;
- }
+ public static class GT_RectHandler
+ implements IContainerInputHandler, IContainerTooltipHandler {
+ @Override
+ public boolean mouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ if (this.canHandle(gui)) {
+ if (button == 0) {
+ return this.transferRect(gui, false);
+ }
+ if (button == 1) {
+ return this.transferRect(gui, true);
+ }
+ }
+ return false;
+ }
- public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
+ @Override
+ public boolean lastKeyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
- public boolean canHandle(GuiContainer gui) {
- return (gui instanceof GT_GUIContainer_BasicMachine && GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI))
- || (gui instanceof GT_GUIContainer_FusionReactor && GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI));
- }
+ public boolean canHandle(final GuiContainer gui) {
+ return (((gui instanceof GT_GUIContainer_BasicMachine)) && (GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI)) /*|| ((gui instanceof GT_GUIContainer_FusionReactor)) && (GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI))*/);
+ }
- public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip) {
- if ((canHandle(gui)) && (currenttip.isEmpty())) {
- if (gui instanceof GT_GUIContainer_BasicMachine && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ @Override
+ public List<String> handleTooltip(final GuiContainer gui, final int mousex, final int mousey, final List<String> currenttip) {
+ if ((this.canHandle(gui)) && (currenttip.isEmpty())) {
+ if ((gui instanceof GT_GUIContainer_BasicMachine) && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ currenttip.add("Recipes");
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_PrimitiveBlastFurnace && new Rectangle(51, 10, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- }
+ }*/
- }
- return currenttip;
- }
+ }
+ return currenttip;
+ }
- private boolean transferRect(GuiContainer gui, boolean usage) {
- if (gui instanceof GT_GUIContainer_BasicMachine) {
- return (canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
- } else if (gui instanceof GT_GUIContainer_FusionReactor) {
+ private boolean transferRect(final GuiContainer gui, final boolean usage) {
+ if (gui instanceof GT_GUIContainer_BasicMachine) {
+ return (this.canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor) {
return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
- }
- return false;
- }
+ }*/
+ return false;
+ }
- public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip) {
- return currenttip;
- }
+ @Override
+ public List<String> handleItemDisplayName(final GuiContainer gui, final ItemStack itemstack, final List<String> currenttip) {
+ return currenttip;
+ }
- public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey, List<String> currenttip) {
- return currenttip;
- }
+ @Override
+ public List<String> handleItemTooltip(final GuiContainer gui, final ItemStack itemstack, final int mousex, final int mousey, final List<String> currenttip) {
+ return currenttip;
+ }
- public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
+ @Override
+ public boolean keyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
- public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {
- }
+ @Override
+ public void onKeyTyped(final GuiContainer gui, final char keyChar, final int keyID) {
+ }
- public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- }
+ @Override
+ public void onMouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
- public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {
- }
+ @Override
+ public void onMouseUp(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
- public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- return false;
- }
+ @Override
+ public boolean mouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ return false;
+ }
- public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- }
+ @Override
+ public void onMouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ }
- public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {
- }
- }
+ @Override
+ public void onMouseDragged(final GuiContainer gui, final int mousex, final int mousey, final int button, final long heldTime) {
+ }
+ }
- public static class FixedPositionedStack extends PositionedStack {
- public final int mChance;
- public boolean permutated = false;
+ public class FixedPositionedStack
+ extends PositionedStack {
+ public final int mChance;
+ public boolean permutated = false;
- public FixedPositionedStack(Object object, int x, int y) {
- this(object, x, y, 0);
- }
+ public FixedPositionedStack(final Object object, final int x, final int y) {
+ this(object, x, y, 0);
+ }
- public FixedPositionedStack(Object object, int x, int y, int aChance) {
- super(object, x, y, true);
- this.mChance = aChance;
- }
+ public FixedPositionedStack(final Object object, final int x, final int y, final int aChance) {
+ super(object, x, y, true);
+ this.mChance = aChance;
+ }
- public void generatePermutations() {
- if (this.permutated) {
- return;
- }
- ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
- for (ItemStack tStack : this.items) {
- if (GT_Utility.isStackValid(tStack)) {
- if (tStack.getItemDamage() == 32767) {
- List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
- if (!permutations.isEmpty()) {
- ItemStack stack;
- for (Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
- stack = (ItemStack) i$.next();
- }
- } else {
- ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
- base.stackTagCompound = tStack.stackTagCompound;
- tDisplayStacks.add(base);
- }
- } else {
- tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
- }
- }
- }
- this.items = ((ItemStack[]) tDisplayStacks.toArray(new ItemStack[0]));
- if (this.items.length == 0) {
- this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
- }
- this.permutated = true;
- setPermutationToRender(0);
- }
- }
+ @Override
+ public void generatePermutations() {
+ if (this.permutated) {
+ return;
+ }
+ final ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
+ for (final ItemStack tStack : this.items) {
+ if (GT_Utility.isStackValid(tStack)) {
+ if (tStack.getItemDamage() == 32767) {
+ final List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
+ if (!permutations.isEmpty()) {
+ ItemStack stack;
+ for (final Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
+ stack = i$.next();
+ }
+ } else {
+ final ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
+ base.stackTagCompound = tStack.stackTagCompound;
+ tDisplayStacks.add(base);
+ }
+ } else {
+ tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
+ }
+ }
+ }
+ this.items = (tDisplayStacks.toArray(new ItemStack[0]));
+ if (this.items.length == 0) {
+ this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
+ }
+ this.permutated = true;
+ this.setPermutationToRender(0);
+ }
+ }
- public class CachedDefaultRecipe
- extends TemplateRecipeHandler.CachedRecipe {
- public final GT_Recipe mRecipe;
- public final List<PositionedStack> mOutputs;
- public final List<PositionedStack> mInputs;
+ public class CachedDefaultRecipe
+ extends TemplateRecipeHandler.CachedRecipe {
+ public final GT_Recipe mRecipe;
+ public final List<PositionedStack> mOutputs = new ArrayList<PositionedStack>();
+ public final List<PositionedStack> mInputs = new ArrayList<PositionedStack>();
+
+ public CachedDefaultRecipe(final GT_Recipe aRecipe) {
+ super();
+ this.mRecipe = aRecipe;
+
+ int tStartIndex = 0;
+ switch (GTPP_NEI_DefaultHandler.this.mRecipeMap.mUsualInputCount) {
+ case 0:
+ break;
+ case 1:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 2:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 3:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ break;
+ case 4:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 5:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 6:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+ break;
+ case 7:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ break;
+ case 8:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
+ }
+ tStartIndex++;
+ break;
+ default:
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
+ }
+ tStartIndex++;
+ }
+ if (aRecipe.mSpecialItems != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
+ }
+ tStartIndex = 0;
+ switch (GTPP_NEI_DefaultHandler.this.mRecipeMap.mUsualOutputCount) {
+ case 0:
+ break;
+ case 1:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 2:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 3:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 4:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 5:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 6:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 7:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ case 8:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ break;
+ default:
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ }
- public CachedDefaultRecipe(GT_Recipe aRecipe) {
- super();
- this.mRecipe = aRecipe;
- if (aRecipe.getInputPositionedStacks() != null && aRecipe.getOutputPositionedStacks() != null) {
- mInputs = aRecipe.getInputPositionedStacks();
- mOutputs = aRecipe.getOutputPositionedStacks();
- return;
- }
-
- mOutputs = new ArrayList<PositionedStack>();
- mInputs = new ArrayList<PositionedStack>();
-
- int tStartIndex = 0;
- switch (GTPP_NEI_DefaultHandler.this.mRecipeMap.mUsualInputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
- }
- tStartIndex++;
- }
- if (aRecipe.mSpecialItems != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
- }
- tStartIndex = 0;
- switch (GTPP_NEI_DefaultHandler.this.mRecipeMap.mUsualOutputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- }
if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
if ((aRecipe.mFluidInputs.length > 1) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
@@ -807,23 +800,23 @@ public class GTPP_NEI_DefaultHandler
}
} else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 52));
- }
- }
+ }
+
+ }
- public List<PositionedStack> getIngredients() {
- return getCycledIngredients(GTPP_NEI_DefaultHandler.this.cycleticks / 10, this.mInputs);
- }
+ @Override
+ public List<PositionedStack> getIngredients() {
+ return this.getCycledIngredients(GTPP_NEI_DefaultHandler.this.cycleticks / 10, this.mInputs);
+ }
- public PositionedStack getResult() {
- return null;
- }
+ @Override
+ public PositionedStack getResult() {
+ return null;
+ }
- public List<PositionedStack> getOtherStacks() {
- return this.mOutputs;
- }
- }
-
- public String trans(String aKey, String aEnglish){
- return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
- }
+ @Override
+ public List<PositionedStack> getOtherStacks() {
+ return this.mOutputs;
+ }
+ }
}
diff --git a/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandlerEx.java b/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandlerEx.java
deleted file mode 100644
index 0d9fc52943..0000000000
--- a/src/Java/gtPlusPlus/nei/GTPP_NEI_DefaultHandlerEx.java
+++ /dev/null
@@ -1,829 +0,0 @@
-package gtPlusPlus.nei;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.util.*;
-
-import org.lwjgl.opengl.GL11;
-
-import codechicken.lib.gui.GuiDraw;
-import codechicken.nei.PositionedStack;
-import codechicken.nei.guihook.GuiContainerManager;
-import codechicken.nei.guihook.IContainerInputHandler;
-import codechicken.nei.guihook.IContainerTooltipHandler;
-import codechicken.nei.recipe.*;
-import cpw.mods.fml.common.event.FMLInterModComms;
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
-import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
-import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map;
-import gregtech.common.gui.GT_GUIContainer_FusionReactor;
-import gregtech.common.gui.GT_GUIContainer_PrimitiveBlastFurnace;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-public class GTPP_NEI_DefaultHandlerEx
- extends TemplateRecipeHandler {
- public static final int sOffsetX = 5;
- public static final int sOffsetY = 11;
-
- static {
- GuiContainerManager.addInputHandler(new GT_RectHandler());
- GuiContainerManager.addTooltipHandler(new GT_RectHandler());
- }
-
- protected final GTPP_Recipe_Map mRecipeMap;
-
- public GTPP_NEI_DefaultHandlerEx(GTPP_Recipe_Map tMap) {
- this.mRecipeMap = tMap;
- this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier(), new Object[0]));
- if (!NEI_GT_Config.sIsAdded) {
- FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier());
- GuiCraftingRecipe.craftinghandlers.add(this);
- GuiUsageRecipe.usagehandlers.add(this);
- }
- }
-
- public List<GT_Recipe> getSortedRecipes() {
- List<GT_Recipe> result = new ArrayList<>(this.mRecipeMap.mRecipeList);
- Collections.sort(result);
- return result;
- }
-
- public static void drawText(int aX, int aY, String aString, int aColor) {
- Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
- }
-
- public TemplateRecipeHandler newInstance() {
- return new GTPP_NEI_DefaultHandlerEx(this.mRecipeMap);
- }
-
- public void loadCraftingRecipes(String outputId, Object... results) {
- if (outputId.equals(getOverlayIdentifier())) {
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- this.arecipes.add(new CachedDefaultRecipe(tRecipe));
- }
- }
- } else {
- super.loadCraftingRecipes(outputId, results);
- }
- }
-
- public void loadCraftingRecipes(ItemStack aResult) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
-
- ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
- tResults.add(aResult);
- tResults.add(GT_OreDictUnificator.get(true, aResult));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
- if (tFluid != null) {
- tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tResults) {
- if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- public void loadUsageRecipes(ItemStack aInput) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
- ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
- tInputs.add(aInput);
- tInputs.add(GT_OreDictUnificator.get(false, aInput));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
- if (tFluid != null) {
- tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GT_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tInputs) {
- if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- public String getOverlayIdentifier() {
- return this.mRecipeMap.mNEIName;
- }
-
- public void drawBackground(int recipe) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GuiDraw.changeTexture(getGuiTexture());
- GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
- }
-
- public int recipiesPerPage() {
- return 1;
- }
-
- public String getRecipeName() {
- return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
- }
-
- public String getGuiTexture() {
-// return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
- return this.mRecipeMap.mNEIGUIPath;
- }
-
- public List<String> handleItemTooltip(GuiRecipe gui, ItemStack aStack, List<String> currenttip, int aRecipeIndex) {
- TemplateRecipeHandler.CachedRecipe tObject = (TemplateRecipeHandler.CachedRecipe) this.arecipes.get(aRecipeIndex);
- if ((tObject instanceof CachedDefaultRecipe)) {
- CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
- for (PositionedStack tStack : tRecipe.mOutputs) {
- if (aStack == tStack.item) {
- if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
- break;
- }
- currenttip.add(trans("150","Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 + "." + (((FixedPositionedStack) tStack).mChance % 100 < 10 ? "0" + ((FixedPositionedStack) tStack).mChance % 100 : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
- break;
- }
- }
- for (PositionedStack tStack : tRecipe.mInputs) {
- if (aStack == tStack.item) {
- if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
- (tStack.item.stackSize != 0)) {
- break;
- }
- currenttip.add(trans("151","Does not get consumed in the process"));
- break;
- }
- }
- }
- return currenttip;
- }
-
- public void drawExtras(int aRecipeIndex) {
- int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
- int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
- String[] recipeDesc = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc();
- if (recipeDesc == null) {
- if (tEUt != 0) {
- drawText(10, 73, trans("152","Total: ") + ((long)tDuration * tEUt) + " EU", -16777216);
- drawText(10, 83, trans("153","Usage: ") + tEUt + " EU/t", -16777216);
- if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- drawText(10, 93, trans("154","Voltage: ") + tEUt / this.mRecipeMap.mAmperage + " EU", -16777216);
- drawText(10, 103, trans("155","Amperage: ") + this.mRecipeMap.mAmperage, -16777216);
- } else {
- drawText(10, 93, trans("156","Voltage: unspecified"), -16777216);
- drawText(10, 103, trans("157","Amperage: unspecified"), -16777216);
- }
- }
- if (tDuration > 0) {
-// drawText(10, 113, trans("158","Time: ") + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + trans("161"," secs"), -16777216);
- drawText(10, 113, String.format("%s%.2f%s", trans("158","Time: "), 0.05 * tDuration, trans("161"," secs")), -16777216);
- }
- int tSpecial = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue;
- if (tSpecial == -100 && GT_Mod.gregtechproxy.mLowGravProcessing) {
- drawText(10, 123, trans("159","Needs Low Gravity"), -16777216);
- } else if (tSpecial == -200 && GT_Mod.gregtechproxy.mEnableCleanroom) {
- drawText(10, 123, trans("160","Needs Cleanroom"), -16777216);
- } else if (tSpecial == -201) {
- drawText(10, 123, trans("206","Scan for Assembly Line"), -16777216);
- } else if (tSpecial == -300) {
- drawText(10, 123, trans("216","Deprecated Recipe"), -16777216);
- } else if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + tSpecial * this.mRecipeMap.mNEISpecialValueMultiplier + this.mRecipeMap.mNEISpecialValuePost, -16777216);
- }
- } else {
- int i = 0;
- for (String descLine : recipeDesc) {
- drawText(10, 73 + 10 * i, descLine, -16777216);
- i++;
- }
- }
- }
-
- public static class GT_RectHandler
- implements IContainerInputHandler, IContainerTooltipHandler {
- public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- if (canHandle(gui)) {
- if (button == 0) {
- return transferRect(gui, false);
- }
- if (button == 1) {
- return transferRect(gui, true);
- }
- }
- return false;
- }
-
- public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public boolean canHandle(GuiContainer gui) {
- return (gui instanceof GT_GUIContainer_BasicMachine && GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI))
- || (gui instanceof GT_GUIContainer_FusionReactor && GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI));
- }
-
- public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip) {
- if ((canHandle(gui)) && (currenttip.isEmpty())) {
- if (gui instanceof GT_GUIContainer_BasicMachine && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } else if (gui instanceof GT_GUIContainer_PrimitiveBlastFurnace && new Rectangle(51, 10, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_PrimitiveBlastFurnace) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- }
-
- }
- return currenttip;
- }
-
- private boolean transferRect(GuiContainer gui, boolean usage) {
- if (gui instanceof GT_GUIContainer_BasicMachine) {
- return (canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
- } else if (gui instanceof GT_GUIContainer_FusionReactor) {
- return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
- }
- return false;
- }
-
- public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip) {
- return currenttip;
- }
-
- public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey, List<String> currenttip) {
- return currenttip;
- }
-
- public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {
- }
-
- public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- return false;
- }
-
- public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- }
-
- public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {
- }
- }
-
- public static class FixedPositionedStack extends PositionedStack {
- public final int mChance;
- public boolean permutated = false;
-
- public FixedPositionedStack(Object object, int x, int y) {
- this(object, x, y, 0);
- }
-
- public FixedPositionedStack(Object object, int x, int y, int aChance) {
- super(object, x, y, true);
- this.mChance = aChance;
- }
-
- public void generatePermutations() {
- if (this.permutated) {
- return;
- }
- ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
- for (ItemStack tStack : this.items) {
- if (GT_Utility.isStackValid(tStack)) {
- if (tStack.getItemDamage() == 32767) {
- List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
- if (!permutations.isEmpty()) {
- ItemStack stack;
- for (Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
- stack = (ItemStack) i$.next();
- }
- } else {
- ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
- base.stackTagCompound = tStack.stackTagCompound;
- tDisplayStacks.add(base);
- }
- } else {
- tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
- }
- }
- }
- this.items = ((ItemStack[]) tDisplayStacks.toArray(new ItemStack[0]));
- if (this.items.length == 0) {
- this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
- }
- this.permutated = true;
- setPermutationToRender(0);
- }
- }
-
- public class CachedDefaultRecipe
- extends TemplateRecipeHandler.CachedRecipe {
- public final GT_Recipe mRecipe;
- public final List<PositionedStack> mOutputs;
- public final List<PositionedStack> mInputs;
-
- public CachedDefaultRecipe(GT_Recipe aRecipe) {
- super();
- this.mRecipe = aRecipe;
-
- if (aRecipe.getInputPositionedStacks() != null && aRecipe.getOutputPositionedStacks() != null) {
- mInputs = aRecipe.getInputPositionedStacks();
- mOutputs = aRecipe.getOutputPositionedStacks();
- return;
- }
-
- mOutputs = new ArrayList<PositionedStack>();
- mInputs = new ArrayList<PositionedStack>();
-
- int tStartIndex = 0;
- switch (GTPP_NEI_DefaultHandlerEx.this.mRecipeMap.mUsualInputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
- }
- tStartIndex++;
- }
- if (aRecipe.mSpecialItems != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
- }
- tStartIndex = 0;
- switch (GTPP_NEI_DefaultHandlerEx.this.mRecipeMap.mUsualOutputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- }
- if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
- if ((aRecipe.mFluidInputs.length > 1) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
- }
- }
- if (aRecipe.mFluidOutputs.length > 1) {
- if (aRecipe.mFluidOutputs[0] != null && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 120, 5));
- }
- if (aRecipe.mFluidOutputs[1] != null && (aRecipe.mFluidOutputs[1].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 138, 5));
- }
- if (aRecipe.mFluidOutputs.length > 2 && aRecipe.mFluidOutputs[2] != null && (aRecipe.mFluidOutputs[2].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 102, 23));
- }
- if (aRecipe.mFluidOutputs.length > 3 && aRecipe.mFluidOutputs[3] != null && (aRecipe.mFluidOutputs[3].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 120, 23));
- }
- if (aRecipe.mFluidOutputs.length > 4 && aRecipe.mFluidOutputs[4] != null && (aRecipe.mFluidOutputs[4].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 138, 23));
- }
- } else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 52));
- }
- }
-
- public List<PositionedStack> getIngredients() {
- return getCycledIngredients(GTPP_NEI_DefaultHandlerEx.this.cycleticks / 10, this.mInputs);
- }
-
- public PositionedStack getResult() {
- return null;
- }
-
- public List<PositionedStack> getOtherStacks() {
- return this.mOutputs;
- }
- }
-
- public String trans(String aKey, String aEnglish){
- return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
- }
-}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_DefaultHandler.java b/src/Java/gtPlusPlus/nei/GT_NEI_DefaultHandler.java
deleted file mode 100644
index f1b689b65c..0000000000
--- a/src/Java/gtPlusPlus/nei/GT_NEI_DefaultHandler.java
+++ /dev/null
@@ -1,864 +0,0 @@
-package gtPlusPlus.nei;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.lwjgl.opengl.GL11;
-
-import cpw.mods.fml.common.event.FMLInterModComms;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
-import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
-
-import codechicken.lib.gui.GuiDraw;
-import codechicken.nei.PositionedStack;
-import codechicken.nei.guihook.GuiContainerManager;
-import codechicken.nei.guihook.IContainerInputHandler;
-import codechicken.nei.guihook.IContainerTooltipHandler;
-import codechicken.nei.recipe.*;
-import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-public class GT_NEI_DefaultHandler
-extends TemplateRecipeHandler {
- public static final int sOffsetX = 5;
- public static final int sOffsetY = 11;
-
- static {
- GuiContainerManager.addInputHandler(new GT_RectHandler());
- GuiContainerManager.addTooltipHandler(new GT_RectHandler());
- }
-
- protected final CustomRecipeMap mRecipeMap;
-
- public GT_NEI_DefaultHandler(final CustomRecipeMap tMap) {
- this.mRecipeMap = tMap;
- this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), this.getOverlayIdentifier(), new Object[0]));
- if (!NEI_GT_Config.sIsAdded) {
- FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtechplusplus@" + this.getRecipeName() + "@" + this.getOverlayIdentifier());
- GuiCraftingRecipe.craftinghandlers.add(this);
- GuiUsageRecipe.usagehandlers.add(this);
- }
- }
-
- public static void drawText(final int aX, final int aY, final String aString, final int aColor) {
- Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
- }
-
- @Override
- public TemplateRecipeHandler newInstance() {
- return new GT_NEI_DefaultHandler(this.mRecipeMap);
- }
-
- @Override
- public void loadCraftingRecipes(final String outputId, final Object... results) {
- if (outputId.equals(this.getOverlayIdentifier())) {
- for (final GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
- if (!tRecipe.mHidden) {
- this.arecipes.add(new CachedDefaultRecipe(tRecipe));
- }
- }
- } else {
- super.loadCraftingRecipes(outputId, results);
- }
- }
-
- @Override
- public void loadCraftingRecipes(final ItemStack aResult) {
- final ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
-
- final ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
- tResults.add(aResult);
- tResults.add(GT_OreDictUnificator.get(true, aResult));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (final OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- final FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
- if (tFluid != null) {
- tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (final FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (final GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
- if (!tRecipe.mHidden) {
- final CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (final ItemStack tStack : tResults) {
- if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- @Override
- public void loadUsageRecipes(final ItemStack aInput) {
- final ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
-
- final ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
- tInputs.add(aInput);
- tInputs.add(GT_OreDictUnificator.get(false, aInput));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (final OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- final FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
- if (tFluid != null) {
- tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (final FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (final GT_Recipe tRecipe : this.mRecipeMap.mRecipeList) {
- if (!tRecipe.mHidden) {
- final CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (final ItemStack tStack : tInputs) {
- if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- }
-
- @Override
- public String getOverlayIdentifier() {
- return this.mRecipeMap.mNEIName;
- }
-
- @Override
- public void drawBackground(final int recipe) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GuiDraw.changeTexture(this.getGuiTexture());
- GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
- }
-
- @Override
- public int recipiesPerPage() {
- return 1;
- }
-
- @Override
- public String getRecipeName() {
- return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
- }
-
- @Override
- public String getGuiTexture() {
- // return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
- return this.mRecipeMap.mNEIGUIPath;
- }
-
- @Override
- public List<String> handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List<String> currenttip, final int aRecipeIndex) {
- final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex);
- if ((tObject instanceof CachedDefaultRecipe)) {
- final CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
- for (final PositionedStack tStack : tRecipe.mOutputs) {
- if (aStack == tStack.item) {
- if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
- break;
- }
- currenttip.add("Chance: " + (((FixedPositionedStack) tStack).mChance / 100) + "." + ((((FixedPositionedStack) tStack).mChance % 100) < 10 ? "0" + (((FixedPositionedStack) tStack).mChance % 100) : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
- break;
- }
- }
- for (final PositionedStack tStack : tRecipe.mInputs) {
- if (aStack == tStack.item) {
- if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
- (tStack.item.stackSize != 0)) {
- break;
- }
- currenttip.add("Does not get consumed in the process");
- break;
- }
- }
- }
- return currenttip;
- }
-
- @Override
- public void drawExtras(final int aRecipeIndex) {
- final int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
- final int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
- if (tEUt != 0) {
- drawText(10, 73, "Total: " + (tDuration * tEUt) + " EU", -16777216);
- drawText(10, 83, "Usage: " + tEUt + " EU/t", -16777216);
- if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- drawText(10, 93, "Voltage: " + (tEUt / this.mRecipeMap.mAmperage) + " EU", -16777216);
- drawText(10, 103, "Amperage: " + this.mRecipeMap.mAmperage, -16777216);
- } else {
- drawText(10, 93, "Voltage: unspecified", -16777216);
- drawText(10, 103, "Amperage: unspecified", -16777216);
- }
- }
- if (tDuration > 0) {
- drawText(10, 113, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
- }
- if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
- }
- }
-
- public static class GT_RectHandler
- implements IContainerInputHandler, IContainerTooltipHandler {
- @Override
- public boolean mouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
- if (this.canHandle(gui)) {
- if (button == 0) {
- return this.transferRect(gui, false);
- }
- if (button == 1) {
- return this.transferRect(gui, true);
- }
- }
- return false;
- }
-
- @Override
- public boolean lastKeyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
- return false;
- }
-
- public boolean canHandle(final GuiContainer gui) {
- return (((gui instanceof GT_GUIContainer_BasicMachine)) && (GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI)) /*|| ((gui instanceof GT_GUIContainer_FusionReactor)) && (GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI))*/);
- }
-
- @Override
- public List<String> handleTooltip(final GuiContainer gui, final int mousex, final int mousey, final List<String> currenttip) {
- if ((this.canHandle(gui)) && (currenttip.isEmpty())) {
- if ((gui instanceof GT_GUIContainer_BasicMachine) && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- } /*else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- }*/
-
- }
- return currenttip;
- }
-
- private boolean transferRect(final GuiContainer gui, final boolean usage) {
- if (gui instanceof GT_GUIContainer_BasicMachine) {
- return (this.canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
- } /*else if (gui instanceof GT_GUIContainer_FusionReactor) {
- return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
- }*/
- return false;
- }
-
- @Override
- public List<String> handleItemDisplayName(final GuiContainer gui, final ItemStack itemstack, final List<String> currenttip) {
- return currenttip;
- }
-
- @Override
- public List<String> handleItemTooltip(final GuiContainer gui, final ItemStack itemstack, final int mousex, final int mousey, final List<String> currenttip) {
- return currenttip;
- }
-
- @Override
- public boolean keyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
- return false;
- }
-
- @Override
- public void onKeyTyped(final GuiContainer gui, final char keyChar, final int keyID) {
- }
-
- @Override
- public void onMouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
- }
-
- @Override
- public void onMouseUp(final GuiContainer gui, final int mousex, final int mousey, final int button) {
- }
-
- @Override
- public boolean mouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
- return false;
- }
-
- @Override
- public void onMouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
- }
-
- @Override
- public void onMouseDragged(final GuiContainer gui, final int mousex, final int mousey, final int button, final long heldTime) {
- }
- }
-
- public class FixedPositionedStack
- extends PositionedStack {
- public final int mChance;
- public boolean permutated = false;
-
- public FixedPositionedStack(final Object object, final int x, final int y) {
- this(object, x, y, 0);
- }
-
- public FixedPositionedStack(final Object object, final int x, final int y, final int aChance) {
- super(object, x, y, true);
- this.mChance = aChance;
- }
-
- @Override
- public void generatePermutations() {
- if (this.permutated) {
- return;
- }
- final ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
- for (final ItemStack tStack : this.items) {
- if (GT_Utility.isStackValid(tStack)) {
- if (tStack.getItemDamage() == 32767) {
- final List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
- if (!permutations.isEmpty()) {
- ItemStack stack;
- for (final Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
- stack = i$.next();
- }
- } else {
- final ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
- base.stackTagCompound = tStack.stackTagCompound;
- tDisplayStacks.add(base);
- }
- } else {
- tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
- }
- }
- }
- this.items = (tDisplayStacks.toArray(new ItemStack[0]));
- if (this.items.length == 0) {
- this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
- }
- this.permutated = true;
- this.setPermutationToRender(0);
- }
- }
-
- public class CachedDefaultRecipe
- extends TemplateRecipeHandler.CachedRecipe {
- public final GT_Recipe mRecipe;
- public final List<PositionedStack> mOutputs = new ArrayList<PositionedStack>();
- public final List<PositionedStack> mInputs = new ArrayList<PositionedStack>();
-
- public CachedDefaultRecipe(final GT_Recipe aRecipe) {
- super();
- this.mRecipe = aRecipe;
-
- int tStartIndex = 0;
- switch (GT_NEI_DefaultHandler.this.mRecipeMap.mUsualInputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
- }
- tStartIndex++;
- }
- if (aRecipe.mSpecialItems != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
- }
- tStartIndex = 0;
- switch (GT_NEI_DefaultHandler.this.mRecipeMap.mUsualOutputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- }
-
-
- //New fluid display behaviour when 3 fluid inputs are detected. (Basically a mix of the code below for outputs an the code above for 9 input slots.)
- if (aRecipe.mFluidInputs.length > 2) {
- if ((aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 12, 5));
- }
- if ((aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 5));
- }
- if ((aRecipe.mFluidInputs.length > 2) && (aRecipe.mFluidInputs[2] != null) && (aRecipe.mFluidInputs[2].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[2], true), 48, 5));
- }
- if ((aRecipe.mFluidInputs.length > 3) && (aRecipe.mFluidInputs[3] != null) && (aRecipe.mFluidInputs[3].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[3], true), 12, 23));
- }
- if ((aRecipe.mFluidInputs.length > 4) && (aRecipe.mFluidInputs[4] != null) && (aRecipe.mFluidInputs[4].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[4], true), 30, 23));
- }
- if ((aRecipe.mFluidInputs.length > 5) && (aRecipe.mFluidInputs[5] != null) && (aRecipe.mFluidInputs[5].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[5], true), 48, 23));
- }
- if ((aRecipe.mFluidInputs.length > 6) && (aRecipe.mFluidInputs[6] != null) && (aRecipe.mFluidInputs[6].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[6], true), 12, 41));
- }
- if ((aRecipe.mFluidInputs.length > 7) && (aRecipe.mFluidInputs[7] != null) && (aRecipe.mFluidInputs[7].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[7], true), 30, 41));
- }
- if ((aRecipe.mFluidInputs.length > 8) && (aRecipe.mFluidInputs[8] != null) && (aRecipe.mFluidInputs[8].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[8], true), 48, 41));
- }
- }
- //Returns to old behaviour if fluid inputs < 3
- else if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
- if ((aRecipe.mFluidInputs.length == 2) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
- }
- }
-
- if (aRecipe.mFluidOutputs.length > 1) {
- if ((aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 5));
- }
- if ((aRecipe.mFluidOutputs[1] != null) && (aRecipe.mFluidOutputs[1].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 120, 5));
- }
- if ((aRecipe.mFluidOutputs.length > 2) && (aRecipe.mFluidOutputs[2] != null) && (aRecipe.mFluidOutputs[2].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 138, 5));
- }
- if ((aRecipe.mFluidOutputs.length > 3) && (aRecipe.mFluidOutputs[3] != null) && (aRecipe.mFluidOutputs[3].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 102, 23));
- }
- if ((aRecipe.mFluidOutputs.length > 4) && (aRecipe.mFluidOutputs[4] != null) && (aRecipe.mFluidOutputs[4].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 120, 23));
- }
- if ((aRecipe.mFluidOutputs.length > 5) && (aRecipe.mFluidOutputs[5] != null) && (aRecipe.mFluidOutputs[5].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[5], true), 138, 23));
- }
- if ((aRecipe.mFluidOutputs.length > 6) && (aRecipe.mFluidOutputs[6] != null) && (aRecipe.mFluidOutputs[6].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[6], true), 102, 41));
- }
- if ((aRecipe.mFluidOutputs.length > 7) && (aRecipe.mFluidOutputs[7] != null) && (aRecipe.mFluidOutputs[7].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[7], true), 120, 41));
- }
- if ((aRecipe.mFluidOutputs.length > 8) && (aRecipe.mFluidOutputs[8] != null) && (aRecipe.mFluidOutputs[8].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[8], true), 138, 41));
- }
- } else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 5));
- }
- }
-
- @Override
- public List<PositionedStack> getIngredients() {
- return this.getCycledIngredients(GT_NEI_DefaultHandler.this.cycleticks / 10, this.mInputs);
- }
-
- @Override
- public PositionedStack getResult() {
- return null;
- }
-
- @Override
- public List<PositionedStack> getOtherStacks() {
- return this.mOutputs;
- }
- }
-}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_FluidReactor.java b/src/Java/gtPlusPlus/nei/GT_NEI_FluidReactor.java
index 57e6e1a899..213d022478 100644
--- a/src/Java/gtPlusPlus/nei/GT_NEI_FluidReactor.java
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_FluidReactor.java
@@ -242,7 +242,34 @@ extends TemplateRecipeHandler {
drawText(10, 103, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
}
if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 113, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ int aTier = (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue);
+ String aTierMaterial = " - ";
+ if (aTier <= 0) {
+ aTierMaterial += "Bronze";
+ }
+ else if (aTier == 1) {
+ aTierMaterial += "Steel";
+ }
+ else if (aTier == 2) {
+ aTierMaterial += "Aluminium";
+ }
+ else if (aTier == 3) {
+ aTierMaterial += "Stainless Steel";
+ }
+ else if (aTier == 4) {
+ aTierMaterial += "Titanium";
+ }
+ else if (aTier == 5) {
+ aTierMaterial += "Tungsten Steel";
+ }
+ else if (aTier == 6) {
+ aTierMaterial += "Laurenium";
+ }
+ else if (aTier == 7) {
+ aTierMaterial += "Botmium";
+ }
+
+ drawText(10, 113, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + aTierMaterial, -16777216);
}
}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_MultiBlockHandler.java b/src/Java/gtPlusPlus/nei/GT_NEI_MultiBlockHandler.java
deleted file mode 100644
index e5bee4979f..0000000000
--- a/src/Java/gtPlusPlus/nei/GT_NEI_MultiBlockHandler.java
+++ /dev/null
@@ -1,950 +0,0 @@
-package gtPlusPlus.nei;
-
-import codechicken.lib.gui.GuiDraw;
-import codechicken.nei.PositionedStack;
-import codechicken.nei.guihook.GuiContainerManager;
-import codechicken.nei.guihook.IContainerInputHandler;
-import codechicken.nei.guihook.IContainerTooltipHandler;
-import codechicken.nei.recipe.GuiCraftingRecipe;
-import codechicken.nei.recipe.GuiRecipe;
-import codechicken.nei.recipe.GuiUsageRecipe;
-import codechicken.nei.recipe.TemplateRecipeHandler;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
-import gtPlusPlus.xmod.gregtech.api.util.GregtechOreDictUnificator;
-
-import cpw.mods.fml.common.event.FMLInterModComms;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
-import gregtech.api.objects.GT_ItemStack;
-import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
-import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidStack;
-import org.lwjgl.opengl.GL11;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.*;
-
-public class GT_NEI_MultiBlockHandler
-extends TemplateRecipeHandler {
- public static final int sOffsetX = 5;
- public static final int sOffsetY = 11;
-
- static {
- GuiContainerManager.addInputHandler(new GT_RectHandler());
- GuiContainerManager.addTooltipHandler(new GT_RectHandler());
- }
-
- protected final GTPP_Recipe.GTPP_Recipe_Map mRecipeMap;
-
- public GT_NEI_MultiBlockHandler(GTPP_Recipe_Map aRecipeMap) {
- this.mRecipeMap = aRecipeMap;
- this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier(), new Object[0]));
- if (!NEI_GT_Config.sIsAdded) {
- FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier());
- GuiCraftingRecipe.craftinghandlers.add(this);
- GuiUsageRecipe.usagehandlers.add(this);
- }
- }
-
- public List<GTPP_Recipe> getSortedRecipes() {
- List<GTPP_Recipe> result = new ArrayList<>(this.mRecipeMap.mRecipeList);
- //List<Recipe_GT> resultReal = new ArrayList<Recipe_GT>();
- /*for (Recipe_GT g : this.mRecipeMap.mRecipeList) {
-
- }
- this.mRecipeMap.findRecipe(null, aRecipe, aNotUnificated, aVoltage, aFluids, fluidStacks)*/
- //result.sort(new recipeCompare());
- Collections.sort(result);
- return result;
- }
-
- public static void drawText(int aX, int aY, String aString, int aColor) {
- Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
- }
-
- public TemplateRecipeHandler newInstance() {
- return new GT_NEI_MultiBlockHandler(this.mRecipeMap);
- }
-
- public void loadCraftingRecipes(String outputId, Object... results) {
- if (outputId.equals(getOverlayIdentifier())) {
- for (GTPP_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- this.arecipes.add(new CachedDefaultRecipe(tRecipe));
- }
- }
- } else {
- super.loadCraftingRecipes(outputId, results);
- }
- }
-
- public void loadCraftingRecipes(ItemStack aResult) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
-
- ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
- tResults.add(aResult);
- tResults.add(GT_OreDictUnificator.get(true, aResult));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
- if (tFluid != null) {
- tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GTPP_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tResults) {
- if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- //CachedDefaultRecipe tNEIRecipe;
- }
-
- public void loadUsageRecipes(ItemStack aInput) {
- ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
-
- ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
- tInputs.add(aInput);
- tInputs.add(GT_OreDictUnificator.get(false, aInput));
- if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
- for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
- tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
- }
- }
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
- if (tFluid != null) {
- tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
- for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
- if (tData.fluid.isFluidEqual(tFluid)) {
- tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
- }
- }
- }
- for (GTPP_Recipe tRecipe : getSortedRecipes()) {
- if (!tRecipe.mHidden) {
- CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
- for (ItemStack tStack : tInputs) {
- if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
- this.arecipes.add(tNEIRecipe);
- break;
- }
- }
- }
- }
- //CachedDefaultRecipe tNEIRecipe;
- }
-
- public String getOverlayIdentifier() {
- return this.mRecipeMap.mNEIName;
- }
-
- public void drawBackground(int recipe) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GuiDraw.changeTexture(getGuiTexture());
- GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
- }
-
- public int recipiesPerPage() {
- return 1;
- }
-
- public String getRecipeName() {
- return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
- }
-
- public String getGuiTexture() {
- // return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png";
- return this.mRecipeMap.mNEIGUIPath;
- }
-
- public List<String> handleItemTooltip(GuiRecipe gui, ItemStack aStack, List<String> currenttip, int aRecipeIndex) {
- TemplateRecipeHandler.CachedRecipe tObject = (TemplateRecipeHandler.CachedRecipe) this.arecipes.get(aRecipeIndex);
- if ((tObject instanceof CachedDefaultRecipe)) {
- CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
- for (PositionedStack tStack : tRecipe.mOutputs) {
- if (aStack == tStack.item) {
- if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
- break;
- }
- currenttip.add(trans("150","Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 + "." + (((FixedPositionedStack) tStack).mChance % 100 < 10 ? "0" + ((FixedPositionedStack) tStack).mChance % 100 : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
- break;
- }
- }
- for (PositionedStack tStack : tRecipe.mInputs) {
- if (aStack == tStack.item) {
- if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
- (tStack.item.stackSize != 0)) {
- break;
- }
- currenttip.add(trans("151","Does not get consumed in the process"));
- break;
- }
- }
- }
- return currenttip;
- }
-
- public void drawExtras(int aRecipeIndex) {
- int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
- int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
- //String[] recipeDesc = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc();
- String[] recipeDesc = null;
- if (recipeDesc == null) {
- if (tEUt != 0) {
- drawText(10, 73, trans("152","Total: ") + ((long)tDuration * tEUt) + " EU", -16777216);
- drawText(10, 83, trans("153","Usage: ") + tEUt + " EU/t", -16777216);
- if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
- drawText(10, 93, trans("154","Voltage: ") + tEUt / this.mRecipeMap.mAmperage + " EU", -16777216);
- drawText(10, 103, trans("155","Amperage: ") + this.mRecipeMap.mAmperage, -16777216);
- } else {
- drawText(10, 93, trans("156","Voltage: unspecified"), -16777216);
- drawText(10, 103, trans("157","Amperage: unspecified"), -16777216);
- }
- }
- if (tDuration > 0) {
- // drawText(10, 113, trans("158","Time: ") + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + trans("161"," secs"), -16777216);
- drawText(10, 113, String.format("%s%.2f%s", trans("158","Time: "), 0.05 * tDuration, trans("161"," secs")), -16777216);
- }
- int tSpecial = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue;
- if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
- drawText(10, 123, this.mRecipeMap.mNEISpecialValuePre + tSpecial * this.mRecipeMap.mNEISpecialValueMultiplier + this.mRecipeMap.mNEISpecialValuePost, -16777216);
- }
- } else {
- int i = 0;
- for (String descLine : recipeDesc) {
- drawText(10, 73 + 10 * i, descLine, -16777216);
- i++;
- }
- }
- }
-
- public static class GT_RectHandler
- implements IContainerInputHandler, IContainerTooltipHandler {
- public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- if (canHandle(gui)) {
- if (button == 0) {
- return transferRect(gui, false);
- }
- if (button == 1) {
- return transferRect(gui, true);
- }
- }
- return false;
- }
-
- public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public boolean canHandle(GuiContainer gui) {
- return (gui instanceof GT_GUIContainer_BasicMachine && GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI));
- }
-
- public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip) {
- if ((canHandle(gui)) && (currenttip.isEmpty())) {
- if (gui instanceof GT_GUIContainer_BasicMachine && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
- currenttip.add("Recipes");
- }
- }
- return currenttip;
- }
-
- private boolean transferRect(GuiContainer gui, boolean usage) {
- if (gui instanceof GT_GUIContainer_BasicMachine) {
- return (canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
- }
- return false;
- }
-
- public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip) {
- return currenttip;
- }
-
- public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int mousex, int mousey, List<String> currenttip) {
- return currenttip;
- }
-
- public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode) {
- return false;
- }
-
- public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {
- }
-
- public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {
- }
-
- public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- return false;
- }
-
- public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
- }
-
- public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {
- }
- }
-
- public static class FixedPositionedStack extends PositionedStack {
- public final int mChance;
- public boolean permutated = false;
-
- public FixedPositionedStack(Object object, int x, int y) {
- this(object, x, y, 0);
- }
-
- public FixedPositionedStack(Object object, int x, int y, int aChance) {
- super(getNonUnifiedStacks(object), x, y, true);
- this.mChance = aChance;
- }
-
- public void generatePermutations() {
- if (this.permutated) {
- return;
- }
- ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
- for (ItemStack tStack : this.items) {
- if (GT_Utility.isStackValid(tStack)) {
- if (tStack.getItemDamage() == 32767) {
- List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
- if (!permutations.isEmpty()) {
- ItemStack stack;
- for (Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
- stack = (ItemStack) i$.next();
- }
- } else {
- ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
- base.stackTagCompound = tStack.stackTagCompound;
- tDisplayStacks.add(base);
- }
- } else {
- tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
- }
- }
- }
- this.items = ((ItemStack[]) tDisplayStacks.toArray(new ItemStack[0]));
- if (this.items.length == 0) {
- this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
- }
- this.permutated = true;
- setPermutationToRender(0);
- }
- }
-
- public class CachedDefaultRecipe extends TemplateRecipeHandler.CachedRecipe {
- public final GTPP_Recipe mRecipe;
- public final List<PositionedStack> mOutputs;
- public final List<PositionedStack> mInputs;
-
- public CachedDefaultRecipe(GTPP_Recipe aRecipe) {
- super();
- this.mRecipe = aRecipe;
-
- if (aRecipe.getInputPositionedStacks() != null && aRecipe.getOutputPositionedStacks() != null) {
- mInputs = aRecipe.getInputPositionedStacks();
- mOutputs = aRecipe.getOutputPositionedStacks();
- return;
- }
-
- mOutputs = new ArrayList<PositionedStack>();
- mInputs = new ArrayList<PositionedStack>();
-
- int tStartIndex = 0;
- switch (GT_NEI_MultiBlockHandler.this.mRecipeMap.mUsualInputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, -4));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 32));
- }
- tStartIndex++;
- if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 32));
- }
- tStartIndex++;
- }
- if (aRecipe.mSpecialItems != null) {
- this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
- }
- tStartIndex = 0;
- switch (GT_NEI_MultiBlockHandler.this.mRecipeMap.mUsualOutputCount) {
- case 0:
- break;
- case 1:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 2:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 3:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 4:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 5:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 6:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 5, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 23, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 7:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- case 8:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- break;
- default:
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, -4, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 14, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- if (aRecipe.getOutput(tStartIndex) != null) {
- this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 138, 32, aRecipe.getOutputChance(tStartIndex)));
- }
- tStartIndex++;
- }
- if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
- if ((aRecipe.mFluidInputs.length > 1) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
- this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
- }
- }
- if (aRecipe.mFluidOutputs.length > 1) {
- if (aRecipe.mFluidOutputs[0] != null && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 120, 5));
- }
- if (aRecipe.mFluidOutputs[1] != null && (aRecipe.mFluidOutputs[1].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 138, 5));
- }
- if (aRecipe.mFluidOutputs.length > 2 && aRecipe.mFluidOutputs[2] != null && (aRecipe.mFluidOutputs[2].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 102, 23));
- }
- if (aRecipe.mFluidOutputs.length > 3 && aRecipe.mFluidOutputs[3] != null && (aRecipe.mFluidOutputs[3].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 120, 23));
- }
- if (aRecipe.mFluidOutputs.length > 4 && aRecipe.mFluidOutputs[4] != null && (aRecipe.mFluidOutputs[4].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 138, 23));
- }
- } else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
- this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 52));
- }
- }
-
- public List<PositionedStack> getIngredients() {
- return getCycledIngredients(GT_NEI_MultiBlockHandler.this.cycleticks / 10, this.mInputs);
- }
-
- public PositionedStack getResult() {
- return null;
- }
-
- public List<PositionedStack> getOtherStacks() {
- return this.mOutputs;
- }
- }
-
- public String trans(String aKey, String aEnglish){
- return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
- }
-
- public static Map<String, ItemStack> sUnifTable;
- public static Map<GT_ItemStack, ItemData> sNametoStackTable;
- public static Map<GT_ItemStack, List<ItemStack>> sItemToDataTable;
- public static Field sFields[] = new Field[3];
- public static Method sMethods[] = new Method[2];
- public static boolean hasLooked = false;
-
- @SuppressWarnings("unchecked")
- private static synchronized final void setVars() {
- try {
- //Set Fields
- for (int u=0;u<3;u++) {
- if (sFields[u] == null) {
- if (u==0) {
- for (Field f : GT_OreDictUnificator.class.getDeclaredFields()) {
- ReflectionUtils.makeFieldAccessible(f);
- if (f.getName().equalsIgnoreCase("sUnificationTable")) {
- hasLooked = true;
- }
- }
- if (sFields[0] == null && hasLooked) {
- sFields[0] = ReflectionUtils.getField(GT_OreDictUnificator.class, "sUnificationTable");
- }
- if (sFields[0] == null) {
- sFields[0] = ReflectionUtils.getField(GregtechOreDictUnificator.class, "sUnificationTable");
- }
- }
- else if (u==1) {
- sFields[1] = ReflectionUtils.getField(GT_OreDictUnificator.class, "sName2StackMap");
- }
- else if (u==2) {
- sFields[2] = ReflectionUtils.getField(GT_OreDictUnificator.class, "sItemStack2DataMap");
- }
- }
- }
-
- //Set Method
- if (sMethods[0] == null) {
- sMethods[0] = GT_OreDictUnificator.class.getMethod("get", boolean.class, ItemStack.class, boolean.class);
- }
-
- //Set Local Fields
- sUnifTable = (Map<String, ItemStack>) sFields[0].get(null);
- sNametoStackTable = (Map<GT_ItemStack, ItemData>) sFields[1].get(null);
- sItemToDataTable = (Map<GT_ItemStack, List<ItemStack>>) sFields[2].get(null);
-
- }
- catch (Throwable T) {
-
- }
- }
-
- public static List<ItemStack> getNonUnifiedStacks(Object obj) {
- setVars();
- if (sUnifTable != null)
- synchronized (sUnifTable) {
- if (sUnifTable.isEmpty() && !sItemToDataTable.isEmpty()) {
- for (GT_ItemStack tGTStack0 : sItemToDataTable.keySet()) {
- ItemStack tStack0 = tGTStack0.toStack();
- ItemStack tStack1 = null;
- try {
- tStack1 = (ItemStack) sMethods[0].invoke(null, false, tStack0, true);
- }
- catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- GregtechOreDictUnificator.get(false, tStack0, true);
- }
-
- if (tStack0 != null && tStack1 != null && !GT_Utility.areStacksEqual(tStack0, tStack1)) {
- GT_ItemStack tGTStack1 = new GT_ItemStack(tStack1);
- List<ItemStack> list = sItemToDataTable.get(tGTStack1);
- if (list == null) sItemToDataTable.put(tGTStack1, list = new ArrayList<ItemStack>());
- if (!list.contains(tStack0)) list.add(tStack0);
- }
- }
- }
- }
- ItemStack[] aStacks = {};
- if (obj instanceof ItemStack) aStacks = new ItemStack[]{(ItemStack) obj};
- else if (obj instanceof ItemStack[]) aStacks = (ItemStack[]) obj;
- else if (obj instanceof List) aStacks = (ItemStack[]) ((List)obj).toArray(new ItemStack[0]);
- List<ItemStack> rList = new ArrayList<ItemStack>();
- for (ItemStack aStack : aStacks) {
- rList.add(aStack);
- if (sItemToDataTable != null) {
- List<ItemStack> tList = sItemToDataTable.get(new GT_ItemStack(aStack));
- if (tList != null) {
- for (ItemStack tStack : tList) {
- ItemStack tStack1 = GT_Utility.copyAmount(aStack.stackSize, tStack);
- tStack1.setTagCompound(aStack.getTagCompound());
- rList.add(tStack1);
- }
- }
- }
- }
- return rList;
-
- //List<ItemStack> x = new ArrayList<ItemStack>();
- //return x;
- }
-
-
- public class RecipeCompare implements Comparator<GT_Recipe> {
- public int compare(GT_Recipe a, GT_Recipe b) {
- if (a.mEUt != b.mEUt) {
- return a.mEUt - b.mEUt;
- } else if (a.mDuration != b.mDuration) {
- return a.mDuration - b.mDuration;
- } else if (a.mSpecialValue != b.mSpecialValue) {
- return a.mSpecialValue - b.mSpecialValue;
- } else if (a.mFluidInputs.length != b.mFluidInputs.length) {
- return a.mFluidInputs.length - b.mFluidInputs.length;
- } else if (a.mInputs.length != b.mInputs.length) {
- return a.mInputs.length - b.mInputs.length;
- }
- return 0;
- }
- }
-
-
-
-}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_RFPP.java b/src/Java/gtPlusPlus/nei/GT_NEI_RFPP.java
new file mode 100644
index 0000000000..93ad7a775b
--- /dev/null
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_RFPP.java
@@ -0,0 +1,515 @@
+package gtPlusPlus.nei;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.util.*;
+
+import org.lwjgl.opengl.GL11;
+
+import codechicken.lib.gui.GuiDraw;
+import codechicken.nei.PositionedStack;
+import codechicken.nei.guihook.GuiContainerManager;
+import codechicken.nei.guihook.IContainerInputHandler;
+import codechicken.nei.guihook.IContainerTooltipHandler;
+import codechicken.nei.recipe.*;
+import cpw.mods.fml.common.event.FMLInterModComms;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.*;
+import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map_Internal;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_NEI_RFPP
+extends TemplateRecipeHandler {
+ public static final int sOffsetX = 5;
+ public static final int sOffsetY = 11;
+
+ static {
+ GuiContainerManager.addInputHandler(new GT_RectHandler());
+ GuiContainerManager.addTooltipHandler(new GT_RectHandler());
+ }
+
+ protected GTPP_Recipe_Map_Internal mRecipeMap;
+
+ public GT_NEI_RFPP() {
+ this.mRecipeMap = GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing;
+ this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), this.getRecipeMapName(), new Object[0]));
+ if (!NEI_GT_Config.sIsAdded) {
+ FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtechplusplus@" + this.getRecipeName() + "@" + this.getRecipeMapName());
+ GuiCraftingRecipe.craftinghandlers.add(this);
+ GuiUsageRecipe.usagehandlers.add(this);
+ }
+ }
+
+ public List<GTPP_Recipe> getSortedRecipes() {
+ List<GTPP_Recipe> result = new ArrayList(this.mRecipeMap.mRecipeList);
+ Collections.sort(result);
+ return result;
+ }
+
+ public static void drawText(final int aX, final int aY, final String aString, final int aColor) {
+ Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
+ }
+
+ @Override
+ public TemplateRecipeHandler newInstance() {
+ return new GT_NEI_RFPP();
+ }
+
+ @Override
+ public void loadCraftingRecipes(final String outputId, final Object... results) {
+ if (outputId.equals(getRecipeMapName())) {
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ this.arecipes.add(new CachedDefaultRecipe(tRecipe));
+ }
+ }
+ } else {
+ super.loadCraftingRecipes(outputId, results);
+ }
+ }
+
+ @Override
+ public void loadCraftingRecipes(final ItemStack aResult) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
+
+ ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
+ tResults.add(aResult);
+ tResults.add(GT_OreDictUnificator.get(true, aResult));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
+ if (tFluid != null) {
+ tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
+ }
+ }
+ }
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
+ for (ItemStack tStack : tResults) {
+ if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ //CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public void loadUsageRecipes(ItemStack aInput) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
+
+ ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
+ tInputs.add(aInput);
+ tInputs.add(GT_OreDictUnificator.get(false, aInput));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
+ if (tFluid != null) {
+ tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
+ }
+ }
+ }
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe);
+ for (ItemStack tStack : tInputs) {
+ if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ //CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public String getRecipeMapName() {
+ return this.mRecipeMap.mNEIName;
+ }
+
+ @Override
+ public String getOverlayIdentifier() {
+ return this.mRecipeMap.mNEIName;
+ }
+
+ @Override
+ public void drawBackground(final int recipe) {
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GuiDraw.changeTexture(this.getGuiTexture());
+ GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
+ }
+
+ @Override
+ public int recipiesPerPage() {
+ return 1;
+ }
+
+ @Override
+ public String getRecipeName() {
+ return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
+ }
+
+ @Override
+ public String getGuiTexture() {
+ return this.mRecipeMap.mNEIGUIPath;
+ }
+
+ @Override
+ public List<String> handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List<String> currenttip, final int aRecipeIndex) {
+ final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex);
+ if ((tObject instanceof CachedDefaultRecipe)) {
+ final CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
+ for (final PositionedStack tStack : tRecipe.mOutputs) {
+ if (aStack == tStack.item) {
+ if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
+ break;
+ }
+ currenttip.add("Chance: " + (((FixedPositionedStack) tStack).mChance / 100) + "." + ((((FixedPositionedStack) tStack).mChance % 100) < 10 ? "0" + (((FixedPositionedStack) tStack).mChance % 100) : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
+ break;
+ }
+ }
+ for (final PositionedStack tStack : tRecipe.mInputs) {
+ if (GT_Utility.areStacksEqual(aStack, tStack.item)) {
+ if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
+ (tStack.item.stackSize != 0)) {
+ break;
+ }
+ if (ItemUtils.isControlCircuit(aStack)) {
+ currenttip.add("Does not get consumed in the process");
+ }
+ break;
+ }
+ }
+ }
+ return currenttip;
+ }
+
+ @Override
+ public void drawExtras(final int aRecipeIndex) {
+ final long tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
+ final int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
+ if (tEUt != 0) {
+ drawText(10, 73, "Total: " + (long) (tDuration * tEUt) + " EU", -16777216);
+ //drawText(10, 83, "Usage: " + tEUt + " EU/t", -16777216);
+ if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
+ drawText(10, 83, "Voltage: " + (tEUt / this.mRecipeMap.mAmperage) + " EU/t", -16777216);
+ drawText(10, 93, "Amperage: " + this.mRecipeMap.mAmperage, -16777216);
+ } else {
+ drawText(10, 93, "Voltage: unspecified", -16777216);
+ drawText(10, 103, "Amperage: unspecified", -16777216);
+ }
+ }
+ if (tDuration > 0) {
+ drawText(10, 103, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
+ }
+ //if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
+ //drawText(10, 113, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ //}
+ }
+
+ public static class GT_RectHandler
+ implements IContainerInputHandler, IContainerTooltipHandler {
+ @Override
+ public boolean mouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ if (this.canHandle(gui)) {
+ if (button == 0) {
+ return this.transferRect(gui, false);
+ }
+ if (button == 1) {
+ return this.transferRect(gui, true);
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean lastKeyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
+
+ public boolean canHandle(final GuiContainer gui) {
+ return (((gui instanceof GT_GUIContainer_BasicMachine)) && (GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI)) /*|| ((gui instanceof GT_GUIContainer_FusionReactor)) && (GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI))*/);
+ }
+
+ @Override
+ public List<String> handleTooltip(final GuiContainer gui, final int mousex, final int mousey, final List<String> currenttip) {
+ if ((this.canHandle(gui)) && (currenttip.isEmpty())) {
+ if ((gui instanceof GT_GUIContainer_BasicMachine) && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ currenttip.add("Recipes");
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ currenttip.add("Recipes");
+ }*/
+
+ }
+ return currenttip;
+ }
+
+ private boolean transferRect(final GuiContainer gui, final boolean usage) {
+ if (gui instanceof GT_GUIContainer_BasicMachine) {
+ return (this.canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor) {
+ return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
+ }*/
+ return false;
+ }
+
+ @Override
+ public List<String> handleItemDisplayName(final GuiContainer gui, final ItemStack itemstack, final List<String> currenttip) {
+ return currenttip;
+ }
+
+ @Override
+ public List<String> handleItemTooltip(final GuiContainer gui, final ItemStack itemstack, final int mousex, final int mousey, final List<String> currenttip) {
+ return currenttip;
+ }
+
+ @Override
+ public boolean keyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
+
+ @Override
+ public void onKeyTyped(final GuiContainer gui, final char keyChar, final int keyID) {
+ }
+
+ @Override
+ public void onMouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
+
+ @Override
+ public void onMouseUp(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
+
+ @Override
+ public boolean mouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ return false;
+ }
+
+ @Override
+ public void onMouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ }
+
+ @Override
+ public void onMouseDragged(final GuiContainer gui, final int mousex, final int mousey, final int button, final long heldTime) {
+ }
+ }
+
+ public class FixedPositionedStack
+ extends PositionedStack {
+ public final int mChance;
+ public boolean permutated = false;
+
+ public FixedPositionedStack(final Object object, final int x, final int y) {
+ this(object, x, y, 0);
+ }
+
+ public FixedPositionedStack(final Object object, final int x, final int y, final int aChance) {
+ super(object, x, y, true);
+ this.mChance = aChance;
+ }
+
+ @Override
+ public void generatePermutations() {
+ if (this.permutated) {
+ return;
+ }
+ final ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
+ for (final ItemStack tStack : this.items) {
+ if (GT_Utility.isStackValid(tStack)) {
+ if (tStack.getItemDamage() == 32767) {
+ final List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
+ if (!permutations.isEmpty()) {
+ ItemStack stack;
+ for (final Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
+ stack = i$.next();
+ }
+ } else {
+ final ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
+ base.stackTagCompound = tStack.stackTagCompound;
+ tDisplayStacks.add(base);
+ }
+ } else {
+ tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
+ }
+ }
+ }
+ this.items = (tDisplayStacks.toArray(new ItemStack[0]));
+ if (this.items.length == 0) {
+ this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
+ }
+ this.permutated = true;
+ this.setPermutationToRender(0);
+ }
+ }
+
+ public class CachedDefaultRecipe
+ extends TemplateRecipeHandler.CachedRecipe {
+ public final GT_Recipe mRecipe;
+ public final List<PositionedStack> mOutputs = new ArrayList<PositionedStack>();
+ public final List<PositionedStack> mInputs = new ArrayList<PositionedStack>();
+
+ public CachedDefaultRecipe(final GT_Recipe aRecipe) {
+ super();
+ this.mRecipe = aRecipe;
+
+ int tStartIndex = 0;
+
+
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 5));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 12, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 30, 23));
+ }
+ tStartIndex++;
+ if (aRecipe.getRepresentativeInput(tStartIndex) != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 23));
+ }
+ tStartIndex++;
+
+ if (aRecipe.mSpecialItems != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
+ }
+ tStartIndex = 0;
+
+ //Four Output Slots
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 5, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 102, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+ if (aRecipe.getOutput(tStartIndex) != null) {
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(tStartIndex), 120, 23, aRecipe.getOutputChance(tStartIndex)));
+ }
+ tStartIndex++;
+
+ //New fluid display behaviour when 3 fluid inputs are detected. (Basically a mix of the code below for outputs an the code above for 9 input slots.)
+ if (aRecipe.mFluidInputs.length > 2) {
+ if ((aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 12, 5));
+ }
+ if ((aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 5));
+ }
+ if ((aRecipe.mFluidInputs.length > 2) && (aRecipe.mFluidInputs[2] != null) && (aRecipe.mFluidInputs[2].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[2], true), 48, 5));
+ }
+ if ((aRecipe.mFluidInputs.length > 3) && (aRecipe.mFluidInputs[3] != null) && (aRecipe.mFluidInputs[3].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[3], true), 12, 23));
+ }
+ if ((aRecipe.mFluidInputs.length > 4) && (aRecipe.mFluidInputs[4] != null) && (aRecipe.mFluidInputs[4].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[4], true), 30, 23));
+ }
+ if ((aRecipe.mFluidInputs.length > 5) && (aRecipe.mFluidInputs[5] != null) && (aRecipe.mFluidInputs[5].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[5], true), 48, 23));
+ }
+ if ((aRecipe.mFluidInputs.length > 6) && (aRecipe.mFluidInputs[6] != null) && (aRecipe.mFluidInputs[6].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[6], true), 12, 41));
+ }
+ if ((aRecipe.mFluidInputs.length > 7) && (aRecipe.mFluidInputs[7] != null) && (aRecipe.mFluidInputs[7].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[7], true), 30, 41));
+ }
+ if ((aRecipe.mFluidInputs.length > 8) && (aRecipe.mFluidInputs[8] != null) && (aRecipe.mFluidInputs[8].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[8], true), 48, 41));
+ }
+ }
+ //Returns to old behaviour if fluid inputs < 3
+ else if ((aRecipe.mFluidInputs.length > 0) && (aRecipe.mFluidInputs[0] != null) && (aRecipe.mFluidInputs[0].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[0], true), 48, 52));
+ if ((aRecipe.mFluidInputs.length == 2) && (aRecipe.mFluidInputs[1] != null) && (aRecipe.mFluidInputs[1].getFluid() != null)) {
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[1], true), 30, 52));
+ }
+ }
+
+ if (aRecipe.mFluidOutputs.length > 1) {
+ if ((aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 5));
+ }
+ if ((aRecipe.mFluidOutputs[1] != null) && (aRecipe.mFluidOutputs[1].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[1], true), 120, 5));
+ }
+ if ((aRecipe.mFluidOutputs.length > 2) && (aRecipe.mFluidOutputs[2] != null) && (aRecipe.mFluidOutputs[2].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[2], true), 138, 5));
+ }
+ if ((aRecipe.mFluidOutputs.length > 3) && (aRecipe.mFluidOutputs[3] != null) && (aRecipe.mFluidOutputs[3].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[3], true), 102, 23));
+ }
+ if ((aRecipe.mFluidOutputs.length > 4) && (aRecipe.mFluidOutputs[4] != null) && (aRecipe.mFluidOutputs[4].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[4], true), 120, 23));
+ }
+ if ((aRecipe.mFluidOutputs.length > 5) && (aRecipe.mFluidOutputs[5] != null) && (aRecipe.mFluidOutputs[5].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[5], true), 138, 23));
+ }
+ if ((aRecipe.mFluidOutputs.length > 6) && (aRecipe.mFluidOutputs[6] != null) && (aRecipe.mFluidOutputs[6].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[6], true), 102, 41));
+ }
+ if ((aRecipe.mFluidOutputs.length > 7) && (aRecipe.mFluidOutputs[7] != null) && (aRecipe.mFluidOutputs[7].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[7], true), 120, 41));
+ }
+ if ((aRecipe.mFluidOutputs.length > 8) && (aRecipe.mFluidOutputs[8] != null) && (aRecipe.mFluidOutputs[8].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[8], true), 138, 41));
+ }
+ } else if ((aRecipe.mFluidOutputs.length > 0) && (aRecipe.mFluidOutputs[0] != null) && (aRecipe.mFluidOutputs[0].getFluid() != null)) {
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[0], true), 102, 5));
+ }
+ }
+
+ @Override
+ public List<PositionedStack> getIngredients() {
+ return this.getCycledIngredients(GT_NEI_RFPP.this.cycleticks / 10, this.mInputs);
+ }
+
+ @Override
+ public PositionedStack getResult() {
+ return null;
+ }
+
+ @Override
+ public List<PositionedStack> getOtherStacks() {
+ return this.mOutputs;
+ }
+ }
+}
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_VacFurnace.java b/src/Java/gtPlusPlus/nei/GT_NEI_VacFurnace.java
index fd07d66fed..e17bc6b15e 100644
--- a/src/Java/gtPlusPlus/nei/GT_NEI_VacFurnace.java
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_VacFurnace.java
@@ -21,7 +21,6 @@ import gregtech.api.util.*;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map;
import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.nei.GT_NEI_MultiBlockHandler.FixedPositionedStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.init.Blocks;
@@ -176,7 +175,7 @@ extends TemplateRecipeHandler {
@Override
public String getGuiTexture() {
- return CustomRecipeMap.sFissionFuelProcessing.mNEIGUIPath;
+ return GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mNEIGUIPath;
}
@Override
diff --git a/src/Java/gtPlusPlus/nei/GT_NEI_multiCentriElectroFreezer.java b/src/Java/gtPlusPlus/nei/GT_NEI_multiCentriElectroFreezer.java
new file mode 100644
index 0000000000..a8c77094cd
--- /dev/null
+++ b/src/Java/gtPlusPlus/nei/GT_NEI_multiCentriElectroFreezer.java
@@ -0,0 +1,554 @@
+package gtPlusPlus.nei;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.util.*;
+
+import org.lwjgl.opengl.GL11;
+
+import codechicken.lib.gui.GuiDraw;
+import codechicken.nei.PositionedStack;
+import codechicken.nei.guihook.GuiContainerManager;
+import codechicken.nei.guihook.IContainerInputHandler;
+import codechicken.nei.guihook.IContainerTooltipHandler;
+import codechicken.nei.recipe.*;
+import cpw.mods.fml.common.event.FMLInterModComms;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.gui.GT_GUIContainer_BasicMachine;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.*;
+import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map_Internal;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GT_NEI_multiCentriElectroFreezer
+extends TemplateRecipeHandler {
+ public static final int sOffsetX = 5;
+ public static final int sOffsetY = 11;
+
+ static {
+ GuiContainerManager.addInputHandler(new GT_RectHandler());
+ GuiContainerManager.addTooltipHandler(new GT_RectHandler());
+ }
+
+ protected GTPP_Recipe_Map_Internal mRecipeMap;
+
+ public GT_NEI_multiCentriElectroFreezer(GTPP_Recipe_Map_Internal aMap) {
+ this.mRecipeMap = aMap;
+ this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), this.getRecipeMapName(), new Object[0]));
+ if (!NEI_GT_Config.sIsAdded) {
+ FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtechplusplus@" + this.getRecipeName() + "@" + this.getRecipeMapName());
+ GuiCraftingRecipe.craftinghandlers.add(this);
+ GuiUsageRecipe.usagehandlers.add(this);
+ }
+ }
+
+ public static void logRecipeError(GT_Recipe aRecipe) {
+ if (aRecipe == null) {
+ Logger.INFO("Tried to handle null recipe. :(");
+ }
+ else {
+ ItemStack[] aInputs = aRecipe.mInputs;
+ ItemStack[] aOutputs = aRecipe.mOutputs;
+ FluidStack[] aFluidInputs = aRecipe.mFluidInputs;
+ FluidStack[] aFluidOutputs = aRecipe.mFluidOutputs;
+ int aEU = aRecipe.mEUt;
+ int aTime = aRecipe.mDuration;
+ int aSpecialValue = aRecipe.mSpecialValue;
+ String aInputitems = ItemUtils.getArrayStackNames(aInputs);
+ String aOutputitems = ItemUtils.getArrayStackNames(aOutputs);
+ String aInputFluids = ItemUtils.getArrayStackNames(aFluidInputs);
+ String aOutputFluids = ItemUtils.getArrayStackNames(aFluidOutputs);
+ Logger.INFO("Logging Broken Recipe Details:");
+ Logger.INFO("Input Items - "+aInputitems);
+ Logger.INFO("Output Items - "+aOutputitems);
+ Logger.INFO("Input Fluids - "+aInputFluids);
+ Logger.INFO("Output Fluids - "+aOutputFluids);
+ Logger.INFO("EU/t - "+aEU);
+ Logger.INFO("Duration - "+aTime);
+ Logger.INFO("Special Value - "+aSpecialValue);
+ }
+ }
+
+ public List<GTPP_Recipe> getSortedRecipes() {
+ List<GTPP_Recipe> result = new ArrayList(this.mRecipeMap.mRecipeList);
+ Collections.sort(result);
+ return result;
+ }
+
+ public static void drawText(final int aX, final int aY, final String aString, final int aColor) {
+ Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor);
+ }
+
+ @Override
+ public TemplateRecipeHandler newInstance() {
+ return new GT_NEI_multiCentriElectroFreezer(mRecipeMap);
+ }
+
+ @Override
+ public void loadCraftingRecipes(final String outputId, final Object... results) {
+ if (outputId.equals(getRecipeMapName())) {
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ CachedDefaultRecipe tNEIRecipe = getCachedRecipe(tRecipe);
+ if (tNEIRecipe == null) {
+ continue;
+ }
+ this.arecipes.add(tNEIRecipe);
+ }
+ }
+ } else {
+ super.loadCraftingRecipes(outputId, results);
+ }
+ }
+
+ @Override
+ public void loadCraftingRecipes(final ItemStack aResult) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult);
+
+ ArrayList<ItemStack> tResults = new ArrayList<ItemStack>();
+ tResults.add(aResult);
+ tResults.add(GT_OreDictUnificator.get(true, aResult));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true);
+ if (tFluid != null) {
+ tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tResults.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
+ }
+ }
+ }
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ CachedDefaultRecipe tNEIRecipe = getCachedRecipe(tRecipe);
+ if (tNEIRecipe == null) {
+ continue;
+ }
+ for (ItemStack tStack : tResults) {
+ if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ //CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public void loadUsageRecipes(ItemStack aInput) {
+ ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput);
+
+ ArrayList<ItemStack> tInputs = new ArrayList<ItemStack>();
+ tInputs.add(aInput);
+ tInputs.add(GT_OreDictUnificator.get(false, aInput));
+ if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) {
+ for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) {
+ tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L));
+ }
+ }
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true);
+ if (tFluid != null) {
+ tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false));
+ for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry.getRegisteredFluidContainerData()) {
+ if (tData.fluid.isFluidEqual(tFluid)) {
+ tInputs.add(GT_Utility.copy(new Object[]{tData.filledContainer}));
+ }
+ }
+ }
+ for (GTPP_Recipe tRecipe : getSortedRecipes()) {
+ if (!tRecipe.mHidden) {
+ CachedDefaultRecipe tNEIRecipe = getCachedRecipe(tRecipe);
+ if (tNEIRecipe == null) {
+ continue;
+ }
+ for (ItemStack tStack : tInputs) {
+ if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) {
+ this.arecipes.add(tNEIRecipe);
+ break;
+ }
+ }
+ }
+ }
+ //CachedDefaultRecipe tNEIRecipe;
+ }
+
+ public String getRecipeMapName() {
+ return this.mRecipeMap.mNEIName;
+ }
+
+ @Override
+ public String getOverlayIdentifier() {
+ return this.mRecipeMap.mNEIName;
+ }
+
+ @Override
+ public void drawBackground(final int recipe) {
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GuiDraw.changeTexture(this.getGuiTexture());
+ GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78);
+ }
+
+ @Override
+ public int recipiesPerPage() {
+ return 1;
+ }
+
+ @Override
+ public String getRecipeName() {
+ return GT_LanguageManager.getTranslation(this.mRecipeMap.mUnlocalizedName);
+ }
+
+ @Override
+ public String getGuiTexture() {
+ return this.mRecipeMap.mNEIGUIPath;
+ }
+
+ @Override
+ public List<String> handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List<String> currenttip, final int aRecipeIndex) {
+ final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex);
+ if ((tObject instanceof CachedDefaultRecipe)) {
+ final CachedDefaultRecipe tRecipe = (CachedDefaultRecipe) tObject;
+ for (final PositionedStack tStack : tRecipe.mOutputs) {
+ if (aStack == tStack.item) {
+ if ((!(tStack instanceof FixedPositionedStack)) || (((FixedPositionedStack) tStack).mChance <= 0) || (((FixedPositionedStack) tStack).mChance == 10000)) {
+ break;
+ }
+ currenttip.add("Chance: " + (((FixedPositionedStack) tStack).mChance / 100) + "." + ((((FixedPositionedStack) tStack).mChance % 100) < 10 ? "0" + (((FixedPositionedStack) tStack).mChance % 100) : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + "%");
+ break;
+ }
+ }
+ for (final PositionedStack tStack : tRecipe.mInputs) {
+ if (aStack == tStack.item) {
+ if ((gregtech.api.enums.ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) ||
+ (tStack.item.stackSize != 0)) {
+ break;
+ }
+ currenttip.add("Does not get consumed in the process");
+ break;
+ }
+ }
+ }
+ return currenttip;
+ }
+
+ @Override
+ public void drawExtras(final int aRecipeIndex) {
+ final int tEUt = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt;
+ final int tDuration = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration;
+ if (tEUt != 0) {
+ drawText(10, 83, "Total: " + (tDuration * tEUt) + " EU", -16777216);
+ drawText(10, 93, "Usage: " + tEUt + " EU/t", -16777216);
+ if (this.mRecipeMap.mShowVoltageAmperageInNEI) {
+ drawText(10, 103, "Voltage: " + (tEUt / this.mRecipeMap.mAmperage) + " EU", -16777216);
+ drawText(10, 113, "Amperage: " + this.mRecipeMap.mAmperage, -16777216);
+ } else {
+ drawText(10, 103, "Voltage: unspecified", -16777216);
+ drawText(10, 113, "Amperage: unspecified", -16777216);
+ }
+ }
+ if (tDuration > 0) {
+ drawText(10, 123, "Time: " + (tDuration < 20 ? "< 1" : Integer.valueOf(tDuration / 20)) + " secs", -16777216);
+ }
+ if ((GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePre)) || (GT_Utility.isStringValid(this.mRecipeMap.mNEISpecialValuePost))) {
+ drawText(10, 133, this.mRecipeMap.mNEISpecialValuePre + (((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue * this.mRecipeMap.mNEISpecialValueMultiplier) + this.mRecipeMap.mNEISpecialValuePost, -16777216);
+ }
+ }
+
+ public static class GT_RectHandler
+ implements IContainerInputHandler, IContainerTooltipHandler {
+ @Override
+ public boolean mouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ if (this.canHandle(gui)) {
+ if (button == 0) {
+ return this.transferRect(gui, false);
+ }
+ if (button == 1) {
+ return this.transferRect(gui, true);
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean lastKeyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
+
+ public boolean canHandle(final GuiContainer gui) {
+ return (((gui instanceof GT_GUIContainer_BasicMachine)) && (GT_Utility.isStringValid(((GT_GUIContainer_BasicMachine) gui).mNEI)) /*|| ((gui instanceof GT_GUIContainer_FusionReactor)) && (GT_Utility.isStringValid(((GT_GUIContainer_FusionReactor) gui).mNEI))*/);
+ }
+
+ @Override
+ public List<String> handleTooltip(final GuiContainer gui, final int mousex, final int mousey, final List<String> currenttip) {
+ if ((this.canHandle(gui)) && (currenttip.isEmpty())) {
+ if ((gui instanceof GT_GUIContainer_BasicMachine) && new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ currenttip.add("Recipes");
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor && new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) {
+ currenttip.add("Recipes");
+ }*/
+
+ }
+ return currenttip;
+ }
+
+ private boolean transferRect(final GuiContainer gui, final boolean usage) {
+ if (gui instanceof GT_GUIContainer_BasicMachine) {
+ return (this.canHandle(gui)) && (new Rectangle(65, 13, 36, 18).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_BasicMachine) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_BasicMachine) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_BasicMachine) gui).mNEI, new Object[0]));
+ } /*else if (gui instanceof GT_GUIContainer_FusionReactor) {
+ return (canHandle(gui)) && (new Rectangle(145, 0, 24, 24).contains(new Point(GuiDraw.getMousePosition().x - ((GT_GUIContainer_FusionReactor) gui).getLeft() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[0], GuiDraw.getMousePosition().y - ((GT_GUIContainer_FusionReactor) gui).getTop() - codechicken.nei.recipe.RecipeInfo.getGuiOffset(gui)[1]))) && (usage ? GuiUsageRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]) : GuiCraftingRecipe.openRecipeGui(((GT_GUIContainer_FusionReactor) gui).mNEI, new Object[0]));
+ }*/
+ return false;
+ }
+
+ @Override
+ public List<String> handleItemDisplayName(final GuiContainer gui, final ItemStack itemstack, final List<String> currenttip) {
+ return currenttip;
+ }
+
+ @Override
+ public List<String> handleItemTooltip(final GuiContainer gui, final ItemStack itemstack, final int mousex, final int mousey, final List<String> currenttip) {
+ return currenttip;
+ }
+
+ @Override
+ public boolean keyTyped(final GuiContainer gui, final char keyChar, final int keyCode) {
+ return false;
+ }
+
+ @Override
+ public void onKeyTyped(final GuiContainer gui, final char keyChar, final int keyID) {
+ }
+
+ @Override
+ public void onMouseClicked(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
+
+ @Override
+ public void onMouseUp(final GuiContainer gui, final int mousex, final int mousey, final int button) {
+ }
+
+ @Override
+ public boolean mouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ return false;
+ }
+
+ @Override
+ public void onMouseScrolled(final GuiContainer gui, final int mousex, final int mousey, final int scrolled) {
+ }
+
+ @Override
+ public void onMouseDragged(final GuiContainer gui, final int mousex, final int mousey, final int button, final long heldTime) {
+ }
+ }
+
+ public class FixedPositionedStack
+ extends PositionedStack {
+ public final int mChance;
+ public boolean permutated = false;
+
+ public FixedPositionedStack(final Object object, final int x, final int y) {
+ this(object, x, y, 0);
+ }
+
+ public FixedPositionedStack(final Object object, final int x, final int y, final int aChance) {
+ super(object, x, y, true);
+ this.mChance = aChance;
+ }
+
+ @Override
+ public void generatePermutations() {
+ if (this.permutated) {
+ return;
+ }
+ final ArrayList<ItemStack> tDisplayStacks = new ArrayList<ItemStack>();
+ for (final ItemStack tStack : this.items) {
+ if (GT_Utility.isStackValid(tStack)) {
+ if (tStack.getItemDamage() == 32767) {
+ final List<ItemStack> permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem());
+ if (!permutations.isEmpty()) {
+ ItemStack stack;
+ for (final Iterator<ItemStack> i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, new Object[]{stack}))) {
+ stack = i$.next();
+ }
+ } else {
+ final ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize);
+ base.stackTagCompound = tStack.stackTagCompound;
+ tDisplayStacks.add(base);
+ }
+ } else {
+ tDisplayStacks.add(GT_Utility.copy(new Object[]{tStack}));
+ }
+ }
+ }
+ this.items = (tDisplayStacks.toArray(new ItemStack[0]));
+ if (this.items.length == 0) {
+ this.items = new ItemStack[]{new ItemStack(Blocks.fire)};
+ }
+ this.permutated = true;
+ this.setPermutationToRender(0);
+ }
+ }
+ private static final HashMap<Integer, Pair<Integer, Integer>> mInputSlotMap = new HashMap<Integer, Pair<Integer, Integer>>();
+ private static final HashMap<Integer, Pair<Integer, Integer>> mOutputSlotMap = new HashMap<Integer, Pair<Integer, Integer>>();
+
+ static {
+ int aSlotX_1 = 12;
+ int aSlotX_2 = 30;
+ int aSlotX_3 = 48;
+ int aSlotY_1 = 5;
+ int aSlotY_2 = 23;
+ int aSlotY_3 = 41;
+ int aSlotY_10 = 65; // Only if 9 input items and a FLuid
+ mInputSlotMap.put(0, new Pair<Integer, Integer>(aSlotX_1, aSlotY_1));
+ mInputSlotMap.put(1, new Pair<Integer, Integer>(aSlotX_2, aSlotY_1));
+ mInputSlotMap.put(2, new Pair<Integer, Integer>(aSlotX_3, aSlotY_1));
+ mInputSlotMap.put(3, new Pair<Integer, Integer>(aSlotX_1, aSlotY_2));
+ mInputSlotMap.put(4, new Pair<Integer, Integer>(aSlotX_2, aSlotY_2));
+ mInputSlotMap.put(5, new Pair<Integer, Integer>(aSlotX_3, aSlotY_2));
+ mInputSlotMap.put(6, new Pair<Integer, Integer>(aSlotX_1, aSlotY_3));
+ mInputSlotMap.put(7, new Pair<Integer, Integer>(aSlotX_2, aSlotY_3));
+ mInputSlotMap.put(8, new Pair<Integer, Integer>(aSlotX_3, aSlotY_3));
+ mInputSlotMap.put(9, new Pair<Integer, Integer>(aSlotX_1, aSlotY_10));
+ mInputSlotMap.put(10, new Pair<Integer, Integer>(aSlotX_2, aSlotY_10));
+ mInputSlotMap.put(11, new Pair<Integer, Integer>(aSlotX_3, aSlotY_10));
+ aSlotX_1 = 102;
+ aSlotX_2 = 120;
+ aSlotX_3 = 138;
+ mOutputSlotMap.put(0, new Pair<Integer, Integer>(aSlotX_1, aSlotY_1));
+ mOutputSlotMap.put(1, new Pair<Integer, Integer>(aSlotX_2, aSlotY_1));
+ mOutputSlotMap.put(2, new Pair<Integer, Integer>(aSlotX_3, aSlotY_1));
+ mOutputSlotMap.put(3, new Pair<Integer, Integer>(aSlotX_1, aSlotY_2));
+ mOutputSlotMap.put(4, new Pair<Integer, Integer>(aSlotX_2, aSlotY_2));
+ mOutputSlotMap.put(5, new Pair<Integer, Integer>(aSlotX_3, aSlotY_2));
+ mOutputSlotMap.put(6, new Pair<Integer, Integer>(aSlotX_1, aSlotY_3));
+ mOutputSlotMap.put(7, new Pair<Integer, Integer>(aSlotX_2, aSlotY_3));
+ mOutputSlotMap.put(8, new Pair<Integer, Integer>(aSlotX_3, aSlotY_3));
+ mOutputSlotMap.put(9, new Pair<Integer, Integer>(aSlotX_1, aSlotY_10));
+ mOutputSlotMap.put(10, new Pair<Integer, Integer>(aSlotX_2, aSlotY_10));
+ mOutputSlotMap.put(11, new Pair<Integer, Integer>(aSlotX_3, aSlotY_10));
+ }
+
+ private CachedDefaultRecipe getCachedRecipe(GT_Recipe aRecipe) {
+ try {
+ return new CachedDefaultRecipe(aRecipe);
+ }
+ catch(Throwable e) {
+ logRecipeError(aRecipe);
+ }
+ return null;
+ }
+
+ public class CachedDefaultRecipe
+ extends TemplateRecipeHandler.CachedRecipe {
+
+
+ public final GT_Recipe mRecipe;
+ public final List<PositionedStack> mOutputs = new ArrayList<PositionedStack>();
+ public final List<PositionedStack> mInputs = new ArrayList<PositionedStack>();
+
+ public CachedDefaultRecipe(final GT_Recipe aRecipe) {
+ super();
+ this.mRecipe = aRecipe;
+ int aInputItemsCount = this.mRecipe.mInputs.length;
+ int aInputFluidsCount = this.mRecipe.mFluidInputs.length;
+ int aOutputItemsCount = this.mRecipe.mOutputs.length;
+ int aOutputFluidsCount = this.mRecipe.mFluidOutputs.length;
+ int aInputSlotsUsed = 0;
+ int aOutputSlotsUsed = 0;
+ int aSlotToCheck = 0;
+
+ // Special Slot
+ if (aRecipe.mSpecialItems != null) {
+ this.mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52));
+ }
+
+ /*
+ * Items
+ */
+
+ // Upto 9 Inputs Slots
+ if (aInputItemsCount > 0) {
+ if (aInputItemsCount > 9) {
+ aInputItemsCount = 9;
+ }
+ for (int i=0;i<aInputItemsCount;i++) {
+ int x = mInputSlotMap.get(aSlotToCheck).getKey();
+ int y = mInputSlotMap.get(aSlotToCheck).getValue();
+ this.mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(aSlotToCheck), x, y));
+ aSlotToCheck++;
+ aInputSlotsUsed++;
+ }
+ }
+ aSlotToCheck = 0;
+ // Upto 9 Output Slots
+ if (aOutputItemsCount > 0) {
+ if (aOutputItemsCount > 9) {
+ aOutputItemsCount = 9;
+ }
+ for (int i=0;i<aOutputItemsCount;i++) {
+ int x = mOutputSlotMap.get(aSlotToCheck).getKey();
+ int y = mOutputSlotMap.get(aSlotToCheck).getValue();
+ this.mOutputs.add(new FixedPositionedStack(aRecipe.getOutput(aSlotToCheck), x, y, aRecipe.getOutputChance(aSlotToCheck)));
+ aSlotToCheck++;
+ aOutputSlotsUsed++;
+ }
+ }
+
+ /*
+ * Fluids
+ */
+
+ // Upto 9 Fluid Inputs Slots
+ aSlotToCheck = aInputSlotsUsed;
+ if (aInputFluidsCount > 0) {
+ for (int i=0;i<aInputFluidsCount;i++) {
+ int x = mInputSlotMap.get(aSlotToCheck).getKey();
+ int y = mInputSlotMap.get(aSlotToCheck).getValue();
+ this.mInputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[i], true), x, y));
+ aSlotToCheck++;
+ aInputSlotsUsed++;
+ }
+ }
+ // Upto 9 Fluid Outputs Slots
+ aSlotToCheck = aOutputSlotsUsed;
+ if (aOutputFluidsCount > 0) {
+ for (int i=0;i<aOutputFluidsCount;i++) {
+ int x = mOutputSlotMap.get(aSlotToCheck).getKey();
+ int y = mOutputSlotMap.get(aSlotToCheck).getValue();
+ this.mOutputs.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[i], true), x, y));
+ aSlotToCheck++;
+ aOutputSlotsUsed++;
+ }
+ }
+
+ }
+
+ @Override
+ public List<PositionedStack> getIngredients() {
+ return this.getCycledIngredients(GT_NEI_multiCentriElectroFreezer.this.cycleticks / 10, this.mInputs);
+ }
+
+ @Override
+ public PositionedStack getResult() {
+ return null;
+ }
+
+ @Override
+ public List<PositionedStack> getOtherStacks() {
+ return this.mOutputs;
+ }
+ }
+}
diff --git a/src/Java/gtPlusPlus/nei/NEI_GT_Config.java b/src/Java/gtPlusPlus/nei/NEI_GT_Config.java
index 514612752d..589e45ad90 100644
--- a/src/Java/gtPlusPlus/nei/NEI_GT_Config.java
+++ b/src/Java/gtPlusPlus/nei/NEI_GT_Config.java
@@ -2,59 +2,87 @@ package gtPlusPlus.nei;
import codechicken.nei.api.API;
import codechicken.nei.api.IConfigureNEI;
-import gregtech.api.util.CustomRecipeMap;
-import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GTPP_Recipe;
import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map;
-import gregtech.nei.GT_NEI_DefaultHandler;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
public class NEI_GT_Config
implements IConfigureNEI {
- public static boolean sIsAdded = true;
+
+ public static boolean sIsAdded = false;
private static final AutoMap<String> mUniqueRecipeMapHandling = new AutoMap<String>();
-
+
@Override
public synchronized void loadConfig() {
- sIsAdded = false;
+ mUniqueRecipeMapHandling.add(GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mUnlocalizedName);
mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sChemicalPlantRecipes.mUnlocalizedName);
mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sOreMillRecipes.mUnlocalizedName);
mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sFlotationCellRecipes.mUnlocalizedName);
- mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sVacuumFurnaceRecipes.mUnlocalizedName);
+ mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sVacuumFurnaceRecipes.mUnlocalizedName);
+
+ mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mUnlocalizedName);
+ mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mUnlocalizedName);
+ mUniqueRecipeMapHandling.add(GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.mUnlocalizedName);
// Custom Recipe Maps
+ /*Logger.INFO("NEI Registration: "+CustomRecipeMap.sMappings.size()+" CustomRecipeMaps");
for (final CustomRecipeMap tMap : CustomRecipeMap.sMappings) {
if (tMap.mNEIAllowed) {
- new GTPP_NEI_CustomMapHandler(tMap);
- }
- }
-
- // Custom Recipe maps
- for (final GTPP_Recipe_Map tMap : GTPP_Recipe.GTPP_Recipe_Map.sMappings) {
- if (tMap.mNEIAllowed) {
if (!mUniqueRecipeMapHandling.contains(tMap.mUnlocalizedName)) {
- new GTPP_NEI_DefaultHandler(tMap);
- }
+ Logger.INFO("NEI Registration: Registering NEI handler for "+tMap.mNEIName);
+ new GTPP_NEI_CustomMapHandler(tMap);
+ }
+ else {
+ Logger.INFO("NEI Registration: Not allowed to register NEI handler for "+tMap.mNEIName);
+ }
}
- }
+ else {
+ Logger.INFO("NEI Registration: Not allowed to register NEI handler for "+tMap.mNEIName);
+ }
+ }*/
// Standard GT Recipe Maps
+ Logger.INFO("NEI Registration: "+GTPP_Recipe.GTPP_Recipe_Map_Internal.sMappingsEx.size()+" sMappingEx");
for (final GT_Recipe_Map tMap : GTPP_Recipe.GTPP_Recipe_Map_Internal.sMappingsEx) {
if (tMap.mNEIAllowed) {
if (!mUniqueRecipeMapHandling.contains(tMap.mUnlocalizedName)) {
- new GT_NEI_DefaultHandler(tMap);
- }
+ Logger.INFO("NEI Registration: Registering NEI handler for "+tMap.mNEIName);
+ new GTPP_NEI_DefaultHandler(tMap);
+ }
+ else {
+ Logger.INFO("NEI Registration: Not allowed to register NEI handler for "+tMap.mNEIName);
+ }
+ }
+ else {
+ Logger.INFO("NEI Registration: Skipping registration of NEI handler for "+tMap.mNEIName);
}
}
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlantRecipes.mNEIName);
new GT_NEI_FluidReactor();
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sOreMillRecipes.mNEIName);
new GT_NEI_MillingMachine();
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sFlotationCellRecipes.mNEIName);
new GT_NEI_FlotationCell();
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sVacuumFurnaceRecipes.mNEIName);
new GT_NEI_VacFurnace();
- sIsAdded = true;
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mNEIName);
+ new GT_NEI_RFPP();
+
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mNEIName);
+ new GT_NEI_multiCentriElectroFreezer(GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT);
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mNEIName);
+ new GT_NEI_multiCentriElectroFreezer(GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT);
+ Logger.INFO("NEI Registration: Registering NEI handler for "+GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.mNEIName);
+ new GT_NEI_multiCentriElectroFreezer(GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT);
+
+ Logger.INFO("NEI Registration: Registering NEI handler for "+DecayableRecipeHandler.mNEIName);
API.registerRecipeHandler(new DecayableRecipeHandler());
API.registerUsageHandler(new DecayableRecipeHandler());
+ sIsAdded = true;
}
@Override
@@ -64,6 +92,6 @@ implements IConfigureNEI {
@Override
public String getVersion() {
- return "(1.01)";
+ return "(1.12)";
}
}
diff --git a/src/Java/gtPlusPlus/plugin/agrichem/BioRecipes.java b/src/Java/gtPlusPlus/plugin/agrichem/BioRecipes.java
index 490b94d71c..077b397f88 100644
--- a/src/Java/gtPlusPlus/plugin/agrichem/BioRecipes.java
+++ b/src/Java/gtPlusPlus/plugin/agrichem/BioRecipes.java
@@ -595,7 +595,7 @@ public class BioRecipes {
},
60 * 20,
2,
- 1);
+ 0);
}
}
@@ -617,7 +617,7 @@ public class BioRecipes {
},
60 * 20,
2,
- 1);
+ 0);
}
}
@@ -638,7 +638,7 @@ public class BioRecipes {
},
90 * 20,
30,
- 1);
+ 0);
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -657,7 +657,7 @@ public class BioRecipes {
},
120 * 20,
30,
- 1);
+ 0);
// Sugar Beet
if (OreDictUtils.containsValidEntries("cropSugarbeet")) {
@@ -678,7 +678,7 @@ public class BioRecipes {
},
60 * 20,
30,
- 1);
+ 0);
CORE.RA.addChemicalPlantRecipe(
new ItemStack[] {
@@ -697,7 +697,7 @@ public class BioRecipes {
},
90 * 20,
30,
- 1);
+ 0);
}
// Produce Acetone, Butanol and Ethanol
@@ -720,9 +720,9 @@ public class BioRecipes {
new FluidStack[] {
},
- 900 * 20,
+ 450 * 20,
32,
- 2);
+ 1);
}
@@ -1212,7 +1212,7 @@ public class BioRecipes {
},
120 * 20,
60,
- 2);
+ 1);
}
aFert = ItemUtils.getSimpleStack(AgriculturalChem.aFertIC2, 2);
@@ -1233,7 +1233,7 @@ public class BioRecipes {
},
120 * 20,
60,
- 2);
+ 1);
}
@@ -1275,7 +1275,7 @@ public class BioRecipes {
},
60 * 20,
60,
- 2);
+ 1);
}
private static void recipeBenzene() {
@@ -1315,7 +1315,7 @@ public class BioRecipes {
},
16 * 20,
480,
- 3);
+ 2);
}
private static void recipeBioChip() {
diff --git a/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java b/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
index 3366f4aefe..ac8fd26415 100644
--- a/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
+++ b/src/Java/gtPlusPlus/preloader/asm/ClassesToTransform.java
@@ -39,6 +39,7 @@ public class ClassesToTransform {
public static final String GT_ITEM_MACHINES = "gregtech.common.blocks.GT_Item_Machines";
public static final String GT_METAGENERATED_TOOL = "gregtech.api.items.GT_MetaGenerated_Tool";
public static final String GT_BLOCK_MACHINES = "gregtech.common.blocks.GT_Block_Machines";
+ public static final String GT_MTE_HATCH_ENERGY = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy";
public static final String GT_MTE_HATCH_INPUTBUS = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus";
public static final String GT_MTE_HATCH_OUTPUTBUS = "gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus";
public static final String GT_METAPIPE_ITEM = "gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item";
@@ -48,10 +49,12 @@ public class ClassesToTransform {
public static final String GTPP_MTE_HATCH_SUPER_INPUT_BUS = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Input";
public static final String GTPP_MTE_HATCH_SUPER_OUTPUT_BUS = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Output";
- public static final String NAME = "";
+ public static final String GTPP_MTE_HATCH_RTG = "gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG";
public static final String THAUMCRAFT_ITEM_WISP_ESSENCE = "thaumcraft.common.items.ItemWispEssence";
+ public static final String THAUMCRAFT_CRAFTING_MANAGER = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager";
+ public static final String THAUMCRAFT_TILE_ALCHEMY_FURNACE = "thaumcraft.common.tiles.TileAlchemyFurnace";
public static final String THAUMICTINKERER_TILE_REPAIRER = "thaumic.tinkerer.common.block.tile.TileRepairer";
public static final String IC2_ITEM_ARMOUR_HAZMAT = "ic2.core.item.armor.ItemArmorHazmat";
diff --git a/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_CC.java b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_CC.java
new file mode 100644
index 0000000000..664ffe7b2d
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_CC.java
@@ -0,0 +1,28 @@
+package gtPlusPlus.preloader.asm.helpers;
+
+import codechicken.nei.guihook.GuiContainerManager;
+import codechicken.nei.guihook.IContainerInputHandler;
+import net.minecraft.client.gui.inventory.GuiContainer;
+
+public class MethodHelper_CC {
+
+
+ public void mouseUp2(int mousex, int mousey, int button) {
+ MethodHelper_CC.mouseUp(mousex, mousey, button);
+ }
+
+ public static void mouseUp(int mousex, int mousey, int button) {
+ GuiContainerManager aManager = codechicken.nei.guihook.GuiContainerManager.getManager();
+ if (aManager != null) {
+ GuiContainer aWindow = aManager.window;
+ for (IContainerInputHandler inputhander : GuiContainerManager.inputHandlers) {
+ //Preloader_Logger.INFO("Found Handler: "+aWindow.getClass().getName() + " | "+inputhander.getClass().getName());
+ }
+ for (IContainerInputHandler inputhander : GuiContainerManager.inputHandlers) {
+ //Preloader_Logger.INFO("Trying to handle events for "+aWindow.getClass().getName() + " | "+inputhander.getClass().getName());
+ inputhander.onMouseUp(aWindow, mousex, mousey, button);
+ }
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java
new file mode 100644
index 0000000000..f1219241cf
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/helpers/MethodHelper_TC.java
@@ -0,0 +1,252 @@
+package gtPlusPlus.preloader.asm.helpers;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemPotion;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.items.wands.ItemWandCasting;
+import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
+
+public class MethodHelper_TC {
+
+ private static Class mThaumcraftCraftingManager;
+
+ public static AspectList generateTags(Item item, int meta) {
+ AspectList temp = generateTags(item, meta, new ArrayList());
+ return temp;
+ }
+
+ public static AspectList generateTags(final Item item, final int meta, final ArrayList<List> history) {
+ int tmeta = meta;
+ if (item == null) {
+ return null;
+ }
+ //Preloader_Logger.INFO("Generating aspect tags for "+item.getUnlocalizedName()+":"+meta);
+ try {
+ tmeta = ((new ItemStack(item, 1, meta).getItem().isDamageable() || !new ItemStack(item, 1, meta).getItem().getHasSubtypes()) ? 32767 : meta);
+ }
+ catch (Exception ex) {}
+ //Preloader_Logger.INFO("Set Meta to "+tmeta);
+ if (ThaumcraftApi.exists(item, tmeta)) {
+ return ThaumcraftCraftingManager.getObjectTags(new ItemStack(item, 1, tmeta));
+ }
+ if (history.contains(Arrays.asList(item, tmeta))) {
+ return null;
+ }
+ history.add(Arrays.asList(item, tmeta));
+ if (history.size() < 100) {
+ AspectList ret = generateTagsFromRecipes(item, (tmeta == 32767) ? 0 : meta, history);
+ ret = capAspects(ret, 64);
+ ThaumcraftApi.registerObjectTag(new ItemStack(item, 1, tmeta), ret);
+ return ret;
+ }
+ return null;
+ }
+
+ private static AspectList capAspects(final AspectList sourcetags, final int amount) {
+ if (sourcetags == null) {
+ return sourcetags;
+ }
+ final AspectList out = new AspectList();
+ for (final Aspect aspect : sourcetags.getAspects()) {
+ out.merge(aspect, Math.min(amount, sourcetags.getAmount(aspect)));
+ }
+ return out;
+ }
+
+ private static AspectList generateTagsFromRecipes(final Item item, final int meta, final ArrayList<List> history) {
+ AspectList ret = null;
+ ret = generateTagsFromCrucibleRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromArcaneRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromInfusionRecipes(item, meta, history);
+ if (ret != null) {
+ return ret;
+ }
+ ret = generateTagsFromCraftingRecipes(item, meta, history);
+ return ret;
+ }
+
+ private static boolean isClassSet() {
+ if (mThaumcraftCraftingManager == null) {
+ mThaumcraftCraftingManager = ReflectionUtils.getClass("thaumcraft.common.lib.crafting.ThaumcraftCraftingManager");
+ }
+ return true;
+ }
+
+ private static Method mGetTagsFromCraftingRecipes;
+ private static Method mGetTagsFromInfusionRecipes;
+ private static Method mGetTagsFromArcaneRecipes;
+ private static Method mGetTagsFromCrucibleRecipes;
+
+ private static AspectList generateTagsFromCraftingRecipes(Item item, int meta, ArrayList<List> history) {
+ isClassSet();
+ if (mGetTagsFromCraftingRecipes == null) {
+ mGetTagsFromCraftingRecipes = ReflectionUtils.getMethod(mThaumcraftCraftingManager, "generateTagsFromCraftingRecipes", new Class[] {Item.class, int.class, ArrayList.class});
+ }
+ return (AspectList) ReflectionUtils.invokeNonBool(null, mGetTagsFromCraftingRecipes, new Object[] {item, meta, history});
+ }
+
+ private static AspectList generateTagsFromInfusionRecipes(Item item, int meta, ArrayList<List> history) {
+ isClassSet();
+ if (mGetTagsFromInfusionRecipes == null) {
+ mGetTagsFromInfusionRecipes = ReflectionUtils.getMethod(mThaumcraftCraftingManager, "generateTagsFromInfusionRecipes", new Class[] {Item.class, int.class, ArrayList.class});
+ }
+ return (AspectList) ReflectionUtils.invokeNonBool(null, mGetTagsFromInfusionRecipes, new Object[] {item, meta, history});
+ }
+
+ private static AspectList generateTagsFromArcaneRecipes(Item item, int meta, ArrayList<List> history) {
+ isClassSet();
+ if (mGetTagsFromArcaneRecipes == null) {
+ mGetTagsFromArcaneRecipes = ReflectionUtils.getMethod(mThaumcraftCraftingManager, "generateTagsFromArcaneRecipes", new Class[] {Item.class, int.class, ArrayList.class});
+ }
+ return (AspectList) ReflectionUtils.invokeNonBool(null, mGetTagsFromArcaneRecipes, new Object[] {item, meta, history});
+ }
+
+ private static AspectList generateTagsFromCrucibleRecipes(Item item, int meta, ArrayList<List> history) {
+ isClassSet();
+ if (mGetTagsFromCrucibleRecipes == null) {
+ mGetTagsFromCrucibleRecipes = ReflectionUtils.getMethod(mThaumcraftCraftingManager, "generateTagsFromCrucibleRecipes", new Class[] {Item.class, int.class, ArrayList.class});
+ }
+ return (AspectList) ReflectionUtils.invokeNonBool(null, mGetTagsFromCrucibleRecipes, new Object[] {item, meta, history});
+ }
+
+
+
+ /*
+ * Let's improve the TC lookup for aspects, cause the default implementation is shit.
+ */
+
+
+ public static AspectList getObjectTags(ItemStack itemstack) {
+ Item item;
+ int meta;
+ try {
+ item = itemstack.getItem();
+ meta = itemstack.getItemDamage();
+ } catch (Exception var8) {
+ return null;
+ }
+
+ AspectList tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(meta)}));
+ if(tmp == null) {
+ for(List l : ThaumcraftApi.objectTags.keySet()) {
+ if((Item)l.get(0) == item && l.get(1) instanceof int[]) {
+ int[] range = (int[])((int[])l.get(1));
+ Arrays.sort(range);
+ if(Arrays.binarySearch(range, meta) >= 0) {
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, range}));
+ return tmp;
+ }
+ }
+ }
+
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(32767)}));
+ if(tmp == null && tmp == null) {
+ if(meta == 32767 && tmp == null) {
+ int index = 0;
+
+ while(true) {
+ tmp = (AspectList)ThaumcraftApi.objectTags.get(Arrays.asList(new Object[]{item, Integer.valueOf(index)}));
+ ++index;
+ if(index >= 16 || tmp != null) {
+ break;
+ }
+ }
+ }
+
+ if(tmp == null) {
+ tmp = generateTags(item, meta);
+ }
+ }
+ }
+
+ if(itemstack.getItem() instanceof ItemWandCasting) {
+ ItemWandCasting wand = (ItemWandCasting)itemstack.getItem();
+ if(tmp == null) {
+ tmp = new AspectList();
+ }
+
+ tmp.merge(Aspect.MAGIC, (wand.getRod(itemstack).getCraftCost() + wand.getCap(itemstack).getCraftCost()) / 2);
+ tmp.merge(Aspect.TOOL, (wand.getRod(itemstack).getCraftCost() + wand.getCap(itemstack).getCraftCost()) / 3);
+ }
+
+ if(item != null && item == Items.potionitem) {
+ if(tmp == null) {
+ tmp = new AspectList();
+ }
+
+ tmp.merge(Aspect.WATER, 1);
+ ItemPotion ip = (ItemPotion)item;
+ List<PotionEffect> effects = ip.getEffects(itemstack.getItemDamage());
+ if(effects != null) {
+ if(ItemPotion.isSplash(itemstack.getItemDamage())) {
+ tmp.merge(Aspect.ENTROPY, 2);
+ }
+
+ for(PotionEffect var6 : effects) {
+ tmp.merge(Aspect.MAGIC, (var6.getAmplifier() + 1) * 2);
+ if(var6.getPotionID() == Potion.blindness.id) {
+ tmp.merge(Aspect.DARKNESS, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.confusion.id) {
+ tmp.merge(Aspect.ELDRITCH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.damageBoost.id) {
+ tmp.merge(Aspect.WEAPON, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.digSlowdown.id) {
+ tmp.merge(Aspect.TRAP, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.digSpeed.id) {
+ tmp.merge(Aspect.TOOL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.fireResistance.id) {
+ tmp.merge(Aspect.ARMOR, var6.getAmplifier() + 1);
+ tmp.merge(Aspect.FIRE, (var6.getAmplifier() + 1) * 2);
+ } else if(var6.getPotionID() == Potion.harm.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.heal.id) {
+ tmp.merge(Aspect.HEAL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.hunger.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.invisibility.id) {
+ tmp.merge(Aspect.SENSES, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.jump.id) {
+ tmp.merge(Aspect.FLIGHT, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.moveSlowdown.id) {
+ tmp.merge(Aspect.TRAP, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.moveSpeed.id) {
+ tmp.merge(Aspect.MOTION, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.nightVision.id) {
+ tmp.merge(Aspect.SENSES, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.poison.id) {
+ tmp.merge(Aspect.POISON, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.regeneration.id) {
+ tmp.merge(Aspect.HEAL, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.resistance.id) {
+ tmp.merge(Aspect.ARMOR, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.waterBreathing.id) {
+ tmp.merge(Aspect.AIR, (var6.getAmplifier() + 1) * 3);
+ } else if(var6.getPotionID() == Potion.weakness.id) {
+ tmp.merge(Aspect.DEATH, (var6.getAmplifier() + 1) * 3);
+ }
+ }
+ }
+ }
+
+ return capAspects(tmp, 64);
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_CC_GuiContainerManager.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_CC_GuiContainerManager.java
new file mode 100644
index 0000000000..8791d401c8
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_CC_GuiContainerManager.java
@@ -0,0 +1,121 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.*;
+
+import gtPlusPlus.preloader.Preloader_Logger;
+
+public class ClassTransformer_CC_GuiContainerManager {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+ public ClassTransformer_CC_GuiContainerManager(byte[] basicClass) {
+
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ localClassVisitor aTempMethodRemover = new localClassVisitor(aTempWriter);
+ aTempReader.accept(aTempMethodRemover, 0);
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Valid patch? " + isValid + ".");
+ reader = aTempReader;
+ writer = aTempWriter;
+
+ if (reader != null && writer != null) {
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Attempting Method Injection.");
+ injectMethod("mouseUp");
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ public boolean injectMethod(String aMethodName) {
+ MethodVisitor mv;
+ boolean didInject = false;
+ String aClassName = "codechicken/nei/guihook/GuiContainerManager";
+ ClassWriter cw = getWriter();
+ if (aMethodName.equals("mouseUp")) {
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Injecting " + aMethodName + ", static replacement call to "+aClassName+".");
+ mv = cw.visitMethod(ACC_PUBLIC, "mouseUp", "(III)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(12, l0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/helpers/MethodHelper_CC", "mouseUp", "(III)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(13, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "L+aClassName+;", null, l0, l2, 0);
+ mv.visitLocalVariable("mousex", "I", null, l0, l2, 1);
+ mv.visitLocalVariable("mousey", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("button", "I", null, l0, l2, 3);
+ mv.visitMaxs(3, 4);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ boolean obfuscated = false;
+
+ public localClassVisitor(ClassVisitor cv) {
+ super(ASM5, cv);
+ }
+
+ public boolean getObfuscatedRemoval() {
+ return obfuscated;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor;
+
+ if (name.equals("mouseUp")) {
+ methodVisitor = null;
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ if (methodVisitor == null) {
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Found method " + name + ", removing.");
+ Preloader_Logger.LOG("CodeChicken GuiContainerManager Patch", Level.INFO, "Descriptor: "+desc);
+ }
+ return methodVisitor;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java
new file mode 100644
index 0000000000..83560eb6c3
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_EnergyHatchPatch.java
@@ -0,0 +1,317 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.*;
+
+import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import gtPlusPlus.preloader.asm.ClassesToTransform;
+
+public class ClassTransformer_GT_EnergyHatchPatch {
+
+ private static final String aRtgInputFormatted = ClassesToTransform.GTPP_MTE_HATCH_RTG.replace(".", "/");
+ private static final String aEnergyFormatted = ClassesToTransform.GT_MTE_HATCH_ENERGY.replace(".", "/");
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+
+ public ClassTransformer_GT_EnergyHatchPatch(byte[] basicClass, String aClassName) {
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Attempting to add slots capabilities to GT Energy Hatches.");
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Patching "+aClassName+".");
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ aTempReader.accept(new localClassVisitor(aTempWriter, aClassName), 0);
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ }
+ else {
+ isValid = false;
+ }
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Valid patch? "+isValid+".");
+ reader = aTempReader;
+ writer = aTempWriter;
+
+
+ if (reader != null && writer != null) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Attempting Method Injection.");
+ injectMethod(aClassName);
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+
+ public boolean injectMethod(String aClassName) {
+
+ boolean didInject = false;
+ MethodVisitor mv;
+ ClassWriter cw = getWriter();
+ int aConID = 1;
+
+ //GT_MetaTileEntity_Hatch_Energy
+ //Constructor
+ if (aClassName.equals(ClassesToTransform.GT_MTE_HATCH_ENERGY)){
+
+
+ //Constructor 1
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(26, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitVarInsn(ALOAD, 6);
+ mv.visitInsn(ICONST_0);
+ mv.visitTypeInsn(ANEWARRAY, "gregtech/api/interfaces/ITexture");
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(27, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aID", "I", null, l0, l2, 1);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 2);
+ mv.visitLocalVariable("aNameRegional", "Ljava/lang/String;", null, l0, l2, 3);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 4);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 5);
+ mv.visitLocalVariable("aDesc", "[Ljava/lang/String;", null, l0, l2, 6);
+ mv.visitMaxs(8, 7);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+ //Constructor 2
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(30, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(31, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+ //Third constructor with String[] for GT 5.09
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(34, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch", "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(35, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "Lgregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "[Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ didInject = true;
+ }
+
+ //GT_MetaTileEntity_Hatch_Energy_RTG
+ //Constructor
+ if (aClassName.equals(ClassesToTransform.GTPP_MTE_HATCH_RTG)){
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(ILjava/lang/String;Ljava/lang/String;II)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(38, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitInsn(ICONST_2);
+ mv.visitTypeInsn(ANEWARRAY, "java/lang/String");
+ mv.visitInsn(DUP);
+ mv.visitInsn(ICONST_0);
+ mv.visitLdcInsn("Energy Injector for Multiblocks");
+ mv.visitInsn(AASTORE);
+ mv.visitInsn(DUP);
+ mv.visitInsn(ICONST_1);
+ mv.visitLdcInsn("Accepts RTG pellets for Fuel");
+ mv.visitInsn(AASTORE);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(ILjava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(39, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aID", "I", null, l0, l2, 1);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 2);
+ mv.visitLocalVariable("aNameRegional", "Ljava/lang/String;", null, l0, l2, 3);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 4);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 5);
+ mv.visitMaxs(10, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(42, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(Ljava/lang/String;IILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(43, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(46, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitMethodInsn(INVOKESPECIAL, "gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy", "<init>", "(Ljava/lang/String;II[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(47, l1);
+ mv.visitInsn(RETURN);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLocalVariable("this", "LgtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG;", null, l0, l2, 0);
+ mv.visitLocalVariable("aName", "Ljava/lang/String;", null, l0, l2, 1);
+ mv.visitLocalVariable("aTier", "I", null, l0, l2, 2);
+ mv.visitLocalVariable("aSlots", "I", null, l0, l2, 3);
+ mv.visitLocalVariable("aDescription", "[Ljava/lang/String;", null, l0, l2, 4);
+ mv.visitLocalVariable("aTextures", "[[[Lgregtech/api/interfaces/ITexture;", null, l0, l2, 5);
+ mv.visitMaxs(6, 6);
+ mv.visitEnd();
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Injection new constructor "+(aConID++));
+ }
+
+
+ didInject = true;
+ }
+
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Method injection complete. Successful? "+didInject);
+ return didInject;
+
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ private final String mClassName;
+
+ public localClassVisitor(ClassVisitor cv, String aClassName) {
+ super(ASM5, cv);
+ mClassName = aClassName;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor = null;
+ if ((mClassName.equals(ClassesToTransform.GTPP_MTE_HATCH_RTG)) && access == ACC_PUBLIC && name.equals("<init>") && (desc.equals("(Ljava/lang/String;ILjava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V") || desc.equals("(Ljava/lang/String;I[Ljava/lang/String;[[[Lgregtech/api/interfaces/ITexture;)V"))) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Found Constructor, "+"'"+access+"', "+"'"+name+"', "+"'"+desc+"', "+"'"+signature+"'");
+ methodVisitor = null;
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+ if (methodVisitor == null) {
+ if (mClassName.equals(ClassesToTransform.GT_MTE_HATCH_ENERGY)){
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Removed method from "+mClassName);
+ }
+ else {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Energy Hatch Patch", Level.INFO, "Removed Constructor with descriptor '"+desc+"' from "+mClassName);
+ }
+ }
+ return methodVisitor;
+ }
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java
index 30ee37d7b3..75896c1c0f 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java
@@ -34,16 +34,19 @@ public class ClassTransformer_Railcraft_InvTools {
if (stack == null) {
return GT_Values.NI;
} else {
- if (stack.stackSize <= 1) {
+ if (stack.stackSize == 0) {
+ return GT_Values.NI;
+ }
+ else if (stack.stackSize == 1) {
ItemStack container = stack.getItem().getContainerItem(stack);
if (container != null) {
return container;
} else {
return GT_Values.NI;
}
- } else {
- ItemUtils.depleteStack(stack);
- return stack;
+ }
+ else {
+ return ItemUtils.depleteStack(stack);
}
}
}
@@ -85,11 +88,11 @@ public class ClassTransformer_Railcraft_InvTools {
}
if (obfuscated && devEnv) {
-
+
}
else {
-
-
+
+
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java
new file mode 100644
index 0000000000..abdfb7d25a
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_AlchemicalFurnace.java
@@ -0,0 +1,513 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.*;
+
+import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import gtPlusPlus.preloader.Preloader_Logger;
+
+public class ClassTransformer_TC_AlchemicalFurnace {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+ public ClassTransformer_TC_AlchemicalFurnace(byte[] basicClass) {
+
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ localClassVisitor aTempMethodRemover = new localClassVisitor(aTempWriter);
+ aTempReader.accept(aTempMethodRemover, 0);
+ boolean wasMethodObfuscated = aTempMethodRemover.getObfuscatedRemoval();
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+
+ if (isValid) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Attempting Field Injection.");
+ boolean fields = addField(aTempWriter);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Success? "+fields);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Attempting Method Injection.");
+ boolean methods = injectMethod(wasMethodObfuscated, aTempWriter);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Success? "+methods);
+ }
+
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Valid patch? " + isValid + ".");
+ reader = aTempReader;
+ writer = aTempWriter;
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ // Add a field to hold the smelting cache
+ public boolean addField(ClassWriter cv) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Field injection complete.");
+ FieldVisitor fv = cv.visitField(ACC_PRIVATE, "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;", null, null);
+ if (fv != null) {
+ fv.visitEnd();
+ return true;
+ }
+ return false;
+ }
+
+ public boolean injectMethod(boolean wasMethodObfuscated, ClassWriter cw) {
+ MethodVisitor mv;
+ boolean didInject = false;
+
+ // Get the right string to use for the environment we are in.
+ String aItemStack = "net/minecraft/item/ItemStack";
+ String aItemStack_Obf = "add";
+ String aCorrectString = wasMethodObfuscated ? aItemStack_Obf : aItemStack;
+
+ // thaumcraft/common/tiles/TileAlchemyFurnace
+ // Replace the original canSmelt with one that uses the optimized cache
+ {
+ mv = cw.visitMethod(ACC_PRIVATE, "canSmelt", "()Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(306, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(307, l2);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(309, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(310, l3);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(311, l4);
+ mv.visitVarInsn(ALOAD, 1);
+ Label l5 = new Label();
+ mv.visitJumpInsn(IFNULL, l5);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "size", "()I", false);
+ mv.visitJumpInsn(IFEQ, l5);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(312, l6);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "visSize", "()I", false);
+ mv.visitVarInsn(ISTORE, 2);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(313, l7);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "maxVis", "I");
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "vis", "I");
+ mv.visitInsn(ISUB);
+ Label l8 = new Label();
+ mv.visitJumpInsn(IF_ICMPLE, l8);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(314, l9);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l8);
+ mv.visitLineNumber(316, l8);
+ mv.visitFrame(Opcodes.F_APPEND,2, new Object[] {"thaumcraft/api/aspects/AspectList", Opcodes.INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitIntInsn(BIPUSH, 10);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(I2F);
+ mv.visitInsn(FCONST_1);
+ mv.visitLdcInsn(new Float("0.125"));
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "bellows", "I");
+ mv.visitInsn(I2F);
+ mv.visitInsn(FMUL);
+ mv.visitInsn(FSUB);
+ mv.visitInsn(FMUL);
+ mv.visitInsn(F2I);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltTime", "I");
+ Label l10 = new Label();
+ mv.visitLabel(l10);
+ mv.visitLineNumber(317, l10);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l5);
+ mv.visitLineNumber(320, l5);
+ mv.visitFrame(Opcodes.F_CHOP,1, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l11, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l11, 1);
+ mv.visitLocalVariable("vs", "I", null, l7, l5, 2);
+ mv.visitMaxs(5, 3);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "smeltItem", "()V", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(330, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "canSmelt", "()Z", false);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFEQ, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(331, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(332, l3);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(334, l4);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "getAspects", "()[Lthaumcraft/api/aspects/Aspect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 5);
+ mv.visitInsn(ARRAYLENGTH);
+ mv.visitVarInsn(ISTORE, 4);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ISTORE, 3);
+ Label l5 = new Label();
+ mv.visitJumpInsn(GOTO, l5);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitFrame(Opcodes.F_FULL, 6, new Object[] {"thaumcraft/common/tiles/TileAlchemyFurnace", "thaumcraft/api/aspects/AspectList", Opcodes.TOP, Opcodes.INTEGER, Opcodes.INTEGER, "[Lthaumcraft/api/aspects/Aspect;"}, 0, new Object[] {});
+ mv.visitVarInsn(ALOAD, 5);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitInsn(AALOAD);
+ mv.visitVarInsn(ASTORE, 2);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(335, l7);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "aspects", "Lthaumcraft/api/aspects/AspectList;");
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "getAmount", "(Lthaumcraft/api/aspects/Aspect;)I", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "add", "(Lthaumcraft/api/aspects/Aspect;I)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitInsn(POP);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitLineNumber(334, l8);
+ mv.visitIincInsn(3, 1);
+ mv.visitLabel(l5);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitVarInsn(ILOAD, 4);
+ mv.visitJumpInsn(IF_ICMPLT, l6);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(338, l9);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "aspects", "Lthaumcraft/api/aspects/AspectList;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "visSize", "()I", false);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "vis", "I");
+ Label l10 = new Label();
+ mv.visitLabel(l10);
+ mv.visitLineNumber(339, l10);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETFIELD, ""+aCorrectString+"", "stackSize", "I");
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(ISUB);
+ mv.visitFieldInsn(PUTFIELD, ""+aCorrectString+"", "stackSize", "I");
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLineNumber(340, l11);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitFieldInsn(GETFIELD, ""+aCorrectString+"", "stackSize", "I");
+ mv.visitJumpInsn(IFGT, l1);
+ Label l12 = new Label();
+ mv.visitLabel(l12);
+ mv.visitLineNumber(341, l12);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(AASTORE);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(345, l1);
+ mv.visitFrame(Opcodes.F_FULL, 1, new Object[] {"thaumcraft/common/tiles/TileAlchemyFurnace"}, 0, new Object[] {});
+ mv.visitInsn(RETURN);
+ Label l13 = new Label();
+ mv.visitLabel(l13);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l13, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l1, 1);
+ mv.visitLocalVariable("a", "Lthaumcraft/api/aspects/Aspect;", null, l7, l8, 2);
+ mv.visitMaxs(4, 6);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "isItemValidForSlot", "(IL"+aCorrectString+";)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(362, l0);
+ mv.visitVarInsn(ILOAD, 1);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNE, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(363, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "thaumcraft/common/tiles/TileAlchemyFurnace", "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(364, l3);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/lib/crafting/ThaumcraftCraftingManager", "getBonusTags", "(L"+aCorrectString+";Lthaumcraft/api/aspects/AspectList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(365, l4);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitJumpInsn(IFNULL, l1);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "size", "()I", false);
+ mv.visitJumpInsn(IFLE, l1);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(366, l5);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(370, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ Label l6 = new Label();
+ mv.visitJumpInsn(IF_ICMPNE, l6);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKESTATIC, "thaumcraft/common/tiles/TileAlchemyFurnace", "isItemFuel", "(L"+aCorrectString+";)Z", false);
+ Label l7 = new Label();
+ mv.visitJumpInsn(GOTO, l7);
+ mv.visitLabel(l6);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitLabel(l7);
+ mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {Opcodes.INTEGER});
+ mv.visitInsn(IRETURN);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l8, 0);
+ mv.visitLocalVariable("par1", "I", null, l0, l8, 1);
+ mv.visitLocalVariable("par2ItemStack", "L"+aCorrectString+";", null, l0, l8, 2);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l1, 3);
+ mv.visitMaxs(2, 4);
+ mv.visitEnd();
+ }
+
+ {
+ mv = cw.visitMethod(ACC_PRIVATE, "getAspectsFromInventoryItem", "()Lthaumcraft/api/aspects/AspectList;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(416, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(417, l2);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitTypeInsn(NEW, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack");
+ mv.visitInsn(DUP);
+ mv.visitIntInsn(BIPUSH, 20);
+ mv.visitMethodInsn(INVOKESPECIAL, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack", "<init>", "(I)V", false);
+ mv.visitFieldInsn(PUTFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ mv.visitLabel(l1);
+ mv.visitLineNumber(419, l1);
+ mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "smeltingCache", "LgtPlusPlus/api/objects/minecraft/ThaumcraftDataStack;");
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "thaumcraft/common/tiles/TileAlchemyFurnace", "furnaceItemStacks", "[L"+aCorrectString+";");
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack", "getAspectsForStack", "(L"+aCorrectString+";)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitVarInsn(ASTORE, 1);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(420, l3);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitInsn(ARETURN);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/tiles/TileAlchemyFurnace;", null, l0, l4, 0);
+ mv.visitLocalVariable("al", "Lthaumcraft/api/aspects/AspectList;", null, l3, l4, 1);
+ mv.visitMaxs(4, 2);
+ mv.visitEnd();
+ }
+
+ didInject = true;
+
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ boolean obfuscated = false;
+
+ public localClassVisitor(ClassVisitor cv) {
+ super(ASM5, cv);
+ }
+
+ public boolean getObfuscatedRemoval() {
+ return obfuscated;
+ }
+
+ @Override
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
+ //Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found Field "+name+" | "+desc);
+ return cv.visitField(access, name, desc, signature, value);
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor;
+ String aDesc1_1 = "()Z";
+ String aDesc1_2 = "()V";
+ String aDesc1_3 = "(ILnet/minecraft/item/ItemStack;)Z";
+ String aDesc2_3 = "(ILadd;)Z";
+ if (name.equals("canSmelt")) {
+ if (desc.equals(aDesc1_1)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found canSmelt to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found canSmelt: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else if (name.equals("smeltItem")) {
+ if (desc.equals(aDesc1_2)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found smeltItem to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found smeltItem: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else if (name.equals("isItemValidForSlot")) {
+ if (desc.equals(aDesc1_3)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found isItemValidForSlot to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else if (desc.equals(aDesc2_3)) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found isItemValidForSlot to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ obfuscated = true;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found isItemValidForSlot: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ if (methodVisitor == null) {
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Found method " + name + ", removing.");
+ Preloader_Logger.LOG("TC Alchemy Furnace Patch", Level.INFO, "Descriptor: "+desc+" | "+signature);
+ }
+ return methodVisitor;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java
new file mode 100644
index 0000000000..424b316c02
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ThaumcraftCraftingManager.java
@@ -0,0 +1,192 @@
+package gtPlusPlus.preloader.asm.transformers;
+
+import static org.objectweb.asm.Opcodes.*;
+
+import org.apache.logging.log4j.Level;
+import org.objectweb.asm.*;
+
+import gtPlusPlus.preloader.Preloader_Logger;
+
+public class ClassTransformer_TC_ThaumcraftCraftingManager {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+
+ public ClassTransformer_TC_ThaumcraftCraftingManager(byte[] basicClass) {
+
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+ localClassVisitor aTempMethodRemover = new localClassVisitor(aTempWriter);
+ aTempReader.accept(aTempMethodRemover, 0);
+ boolean wasMethodObfuscated = aTempMethodRemover.getObfuscatedRemoval();
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ } else {
+ isValid = false;
+ }
+
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Valid patch? " + isValid + ".");
+ reader = aTempReader;
+ writer = aTempWriter;
+
+ if (reader != null && writer != null) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Attempting Method Injection.");
+ injectMethod("generateTags", wasMethodObfuscated);
+ injectMethod("getObjectTags", wasMethodObfuscated);
+ }
+
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ public boolean injectMethod(String aMethodName, boolean wasMethodObfuscated) {
+ MethodVisitor mv;
+ boolean didInject = false;
+ ClassWriter cw = getWriter();
+ String aitemClassName = wasMethodObfuscated ? "adb" : "net/minecraft/item/Item";
+ String aitemStackClassName = wasMethodObfuscated ? "add" : "net/minecraft/item/ItemStack";
+ String aClassName = "thaumcraft.common.lib.crafting.ThaumcraftCraftingManager";
+
+ if (aMethodName.equals("generateTags")) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Injecting " + aMethodName + ", static replacement call to "+aClassName+".");
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "generateTags", "(L"+aitemClassName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;", "(L"+aitemClassName+";ILjava/util/ArrayList<Ljava/util/List;>;)Lthaumcraft/api/aspects/AspectList;", null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(23, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/helpers/MethodHelper_TC", "generateTags", "(L"+aitemClassName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitInsn(ARETURN);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLocalVariable("item", "L"+aitemClassName+";", null, l0, l1, 0);
+ mv.visitLocalVariable("meta", "I", null, l0, l1, 1);
+ mv.visitLocalVariable("history", "Ljava/util/ArrayList;", "Ljava/util/ArrayList<Ljava/util/List;>;", l0, l1, 2);
+ mv.visitMaxs(3, 3);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("getObjectTags")) {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "getObjectTags", "(L"+aitemStackClassName+";)Lthaumcraft/api/aspects/AspectList;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(222, l0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/helpers/MethodHelper_TC", "getObjectTags", "(L"+aitemStackClassName+";)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitInsn(ARETURN);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLocalVariable("itemstack", "L"+aitemStackClassName+";", null, l0, l1, 0);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+ public final class localClassVisitor extends ClassVisitor {
+
+ boolean obfuscated = false;
+
+ public localClassVisitor(ClassVisitor cv) {
+ super(ASM5, cv);
+ }
+
+ public boolean getObfuscatedRemoval() {
+ return obfuscated;
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ MethodVisitor methodVisitor;
+ String aDeObfName = "net/minecraft/item/Item";
+ String aObfName = "adb";
+ String aDesc1 = "(L"+aDeObfName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;";
+ String aDesc2 = "(L"+aObfName+";ILjava/util/ArrayList;)Lthaumcraft/api/aspects/AspectList;";
+
+ if (name.equals("generateTags") && signature != null) {
+ if (desc.equals(aDesc1)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found generateTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else if (desc.equals(aDesc2)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found generateTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ obfuscated = true;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found generateTags: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else if (name.equals("getObjectTags")) {
+ if (desc.equals(aDesc1)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found getObjectTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ obfuscated = false;
+ methodVisitor = null;
+ }
+ else if (desc.equals(aDesc2)) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found getObjectTags to remove: "+desc+" | "+signature);
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ obfuscated = true;
+ methodVisitor = null;
+ }
+ else {
+ Preloader_Logger.INFO("Found getObjectTags: "+desc+" | "+signature);
+ if (desc.toLowerCase().contains("item")) {
+ obfuscated = false;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is not obfuscated.");
+ }
+ else {
+ obfuscated = true;
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Is obfuscated.");
+ }
+ methodVisitor = null;
+ }
+ }
+ else {
+ methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ if (methodVisitor == null) {
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Found method " + name + ", removing.");
+ Preloader_Logger.LOG("TC CraftingManager Patch", Level.INFO, "Descriptor: "+desc);
+ }
+ return methodVisitor;
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
index cb9799fce7..6e0f94a54b 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -120,6 +120,12 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0);
return classWriter.toByteArray();
}
+
+ // Log Handling of CodeChicken
+ if (transformedName.equals("codechicken.nei.guihook.GuiContainerManager")) {
+ Preloader_Logger.INFO("CodeChicken GuiContainerManager Patch", "Transforming "+transformedName);
+ return new ClassTransformer_CC_GuiContainerManager(basicClass).getWriter().toByteArray();
+ }
// Fix the OreDictionary COFH
if (transformedName.equals(COFH_ORE_DICTIONARY_ARBITER) && (AsmConfig.enableCofhPatch || !obfuscated)) {
Preloader_Logger.INFO("COFH", "Transforming "+transformedName);
@@ -184,6 +190,11 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
Preloader_Logger.INFO("Gregtech Bus Patch", "Transforming "+transformedName);
return new ClassTransformer_GT_BusPatch(basicClass, transformedName).getWriter().toByteArray();
}
+ //Inject Custom constructors for RTG Hatches
+ if (transformedName.equals(GT_MTE_HATCH_ENERGY) || transformedName.equals(GTPP_MTE_HATCH_RTG)) {
+ Preloader_Logger.INFO("Gregtech RTG Patch", "Transforming "+transformedName);
+ return new ClassTransformer_GT_EnergyHatchPatch(basicClass, transformedName).getWriter().toByteArray();
+ }
//Try patch achievements
if (transformedName.equals(GT_ACHIEVEMENTS)) {
Preloader_Logger.INFO("Gregtech Achievements Patch", "Transforming "+transformedName);
@@ -271,6 +282,14 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
Preloader_Logger.INFO("Thaumcraft WispEssence_Patch", "Transforming "+transformedName);
return new ClassTransformer_TC_ItemWispEssence(basicClass, obfuscated).getWriter().toByteArray();
}
+ if (transformedName.equals(THAUMCRAFT_CRAFTING_MANAGER)) {
+ Preloader_Logger.INFO("Thaumcraft CraftingManager Patch", "Transforming "+transformedName);
+ return new ClassTransformer_TC_ThaumcraftCraftingManager(basicClass).getWriter().toByteArray();
+ }
+ if (transformedName.equals(THAUMCRAFT_TILE_ALCHEMY_FURNACE)) {
+ Preloader_Logger.INFO("Thaumcraft Alchemy Furnace Patch", "Transforming "+transformedName);
+ return new ClassTransformer_TC_AlchemicalFurnace(basicClass).getWriter().toByteArray();
+ }
//Fix Thaumic Tinkerer Shit
if (transformedName.equals(THAUMICTINKERER_TILE_REPAIRER) && AsmConfig.enableThaumicTinkererRepairFix) {
//Preloader_Logger.INFO("Thaumic Tinkerer RepairItem Patch", "Transforming "+transformedName);
diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java b/src/Java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java
index 7e011a808e..ddc401f752 100644
--- a/src/Java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java
+++ b/src/Java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java
@@ -75,25 +75,25 @@ public class FR_Gregtech_Recipes {
if (!LoadedMods.ExtraBees){
//Extra Bee Like Frames
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, itemCocoaBeans, null,
itemCocoaBeans, hiveFrameImpregnated, itemCocoaBeans,
null, itemCocoaBeans, null,
hiveFrameCocoa);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
hiveFrameImpregnated, blockIronBars, null,
null, null, null,
null, null, null,
hiveFrameCaged);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
hiveFrameImpregnated, blockSoulSand, null,
null, null, null,
null, null, null,
hiveFrameSoul);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, itemClayDust, null,
itemClayDust, hiveFrameImpregnated, itemClayDust,
null, itemClayDust, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java b/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
index b7662ca25e..9e62d05df2 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
@@ -94,6 +94,10 @@ public enum GregtechItemList implements GregtechItemContainer {
//Debug
TESTITEM,
+
+ // Larger Volumetric Flasks
+ VOLUMETRIC_FLASK_8k,
+ VOLUMETRIC_FLASK_32k,
//RTG Fuels
Pellet_RTG_PU238, Pellet_RTG_SR90,
@@ -392,7 +396,22 @@ public enum GregtechItemList implements GregtechItemContainer {
// Flotation Cell
Controller_Flotation_Cell,
+
+ // Elemental Duplicator
+ Controller_ElementalDuplicator,
+ Casing_ElementalDuplicator,
+
+ // Big Steam Macerator
+ Controller_SteamMaceratorMulti,
+ // Custom Machine Casings
+ Casing_Machine_Custom_1,
+ Casing_Machine_Custom_2,
+ Casing_Machine_Custom_3,
+ Casing_Machine_Custom_4,
+ Casing_Machine_Custom_5,
+ Casing_Machine_Custom_6,
+
//----------------------------------------------------------------------------
@@ -426,7 +445,19 @@ public enum GregtechItemList implements GregtechItemContainer {
Hatch_Input_Cryotheum,
Hatch_Input_Pyrotheum,
Hatch_Input_Naquadah,
+ Hatch_Input_Steam,
+
+ //Steam Multi Buses
+ Hatch_Input_Bus_Steam,
+ Hatch_Output_Bus_Steam,
+ //Elemental Duplicator Data Orb Bus
+ Hatch_Input_Elemental_Duplicator,
+
+ //RTG Hatch
+ Hatch_RTG_LV,
+ Hatch_RTG_MV,
+ Hatch_RTG_HV,
//Battery hatches for PSS
Hatch_Input_Battery_MV,
@@ -678,12 +709,15 @@ public enum GregtechItemList implements GregtechItemContainer {
//Fluid Void Covers
Cover_Overflow_ULV, Cover_Overflow_LV, Cover_Overflow_MV, Cover_Overflow_HV, Cover_Overflow_EV, Cover_Overflow_IV,
+ //Item Void Covers
+ Cover_Overflow_Item_ULV, Cover_Overflow_Item_LV, Cover_Overflow_Item_MV, Cover_Overflow_Item_HV, Cover_Overflow_Item_EV, Cover_Overflow_Item_IV,
+
//Fake Hull Covers
FakeMachineCasingPlate_ULV, FakeMachineCasingPlate_LV,
FakeMachineCasingPlate_MV, FakeMachineCasingPlate_HV,
FakeMachineCasingPlate_EV, FakeMachineCasingPlate_IV,
FakeMachineCasingPlate_LuV, FakeMachineCasingPlate_ZPM,
- FakeMachineCasingPlate_UV, FakeMachineCasingPlate_MAX,
+ FakeMachineCasingPlate_UV, FakeMachineCasingPlate_MAX,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/CONTAINER_PollutionCleaner.java b/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/CONTAINER_PollutionCleaner.java
index e3365935aa..79d1033bd0 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/CONTAINER_PollutionCleaner.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/CONTAINER_PollutionCleaner.java
@@ -14,6 +14,8 @@ import net.minecraft.item.ItemStack;
import gregtech.api.gui.*;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.slots.SlotPollutionScrubber;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaAtmosphericReconditioner;
/**
@@ -23,132 +25,81 @@ import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaA
*/
public class CONTAINER_PollutionCleaner extends GT_Container_BasicTank {
- public boolean mFluidTransfer = false, mItemTransfer = false, mStuttering = false;
- public int mReduction = 0;
-
- public CONTAINER_PollutionCleaner(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 107, 63));
-
- int tStartIndex = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).getInputSlot();
-
- switch (((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mInputSlotCount) {
- case 2: //Pollution Scrubber
- //Add 2 Item Slots
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 107, 25));
- break;
- default:
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 43));
- addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 43));
- break;
- }
-
- tStartIndex = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).getOutputSlot();
-
- switch (((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mOutputItems.length) {
- case 0:
- break;
- default:
- break;
- }
-
- addSlotToContainer(new Slot(mTileEntity, 1, 80, 63));
- addSlotToContainer(new Slot(mTileEntity, 3, 125, 63));
- //addSlotToContainer(new GT_Slot_Render(mTileEntity, tStartIndex++, 53, 63));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- switch (aSlotIndex) {
- case 0:
- if (mTileEntity.getMetaTileEntity() == null) return null;
- ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mFluidTransfer = !((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mFluidTransfer;
- return null;
- case 1:
- if (mTileEntity.getMetaTileEntity() == null) return null;
- ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mItemTransfer = !((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mItemTransfer;
- return null;
- default:
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
-
- mFluidTransfer = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mFluidTransfer;
- mItemTransfer = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mItemTransfer;
- mStuttering = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mStuttering;
- mReduction = ((GregtechMetaAtmosphericReconditioner) mTileEntity.getMetaTileEntity()).mPollutionReduction;
-
- Iterator var2 = this.crafters.iterator();
- while (var2.hasNext()) {
- ICrafting var1 = (ICrafting) var2.next();
- var1.sendProgressBarUpdate(this, 102, mFluidTransfer ? 1 : 0);
- var1.sendProgressBarUpdate(this, 103, mItemTransfer ? 1 : 0);
- var1.sendProgressBarUpdate(this, 104, mStuttering ? 1 : 0);
- var1.sendProgressBarUpdate(this, 105, mReduction);
- }
- }
-
- @Override
- public void addCraftingToCrafters(ICrafting par1ICrafting) {
- super.addCraftingToCrafters(par1ICrafting);
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int par1, int par2) {
- super.updateProgressBar(par1, par2);
- switch (par1) {
- case 102:
- mFluidTransfer = (par2 != 0);
- break;
- case 103:
- mItemTransfer = (par2 != 0);
- break;
- case 104:
- mStuttering = (par2 != 0);
- break;
- case 105:
- mReduction = (par2);
- break;
- }
- }
-
- @Override
- public int getSlotStartIndex() {
- return 3;
- }
-
- @Override
- public int getShiftClickStartIndex() {
- return 3;
- }
-
- @Override
- public int getSlotCount() {
- return getShiftClickSlotCount() + ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mOutputItems.length + 2;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mInputSlotCount;
- }
+ public boolean mFluidTransfer = false, mItemTransfer = false, mStuttering = false;
+ public int mReduction = 0;
+
+ public CONTAINER_PollutionCleaner(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+
+ int tStartIndex = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).getInputSlot();
+ int aTier = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mTier;
+
+
+ //Add 2 Item Slots
+ addSlotToContainer(new SlotPollutionScrubber(0, aTier, mTileEntity, tStartIndex++, 53, 25));
+ addSlotToContainer(new SlotPollutionScrubber(1, aTier, mTileEntity, tStartIndex++, 107, 25));
+ // Upgrade Slot
+ addSlotToContainer(new SlotPollutionScrubber(2, aTier, mTileEntity, tStartIndex++, 125, 63));
+
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ Logger.INFO("Clicked on slot "+aSlotIndex);
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
+
+ mReduction = ((GregtechMetaAtmosphericReconditioner) mTileEntity.getMetaTileEntity()).mPollutionReduction;
+
+ Iterator var2 = this.crafters.iterator();
+ while (var2.hasNext()) {
+ ICrafting var1 = (ICrafting) var2.next();
+ var1.sendProgressBarUpdate(this, 105, mReduction);
+ }
+ }
+
+ @Override
+ public void addCraftingToCrafters(ICrafting par1ICrafting) {
+ super.addCraftingToCrafters(par1ICrafting);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ switch (par1) {
+ case 105:
+ mReduction = (par2);
+ break;
+ }
+ }
+
+ @Override
+ public int getSlotStartIndex() {
+ return 0;
+ }
+
+ @Override
+ public int getShiftClickStartIndex() {
+ return 0;
+ }
+
+ @Override
+ public int getSlotCount() {
+ return getShiftClickSlotCount();
+ }
+
+ @Override
+ public int getShiftClickSlotCount() {
+ return 3;
+ }
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/GUI_PollutionCleaner.java b/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/GUI_PollutionCleaner.java
index 2c1601cee2..7a9417eeb6 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/GUI_PollutionCleaner.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/gui/basic/GUI_PollutionCleaner.java
@@ -3,16 +3,10 @@ package gtPlusPlus.xmod.gregtech.api.gui.basic;
import java.util.ArrayList;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
-
import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
-import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_ControlCore;
-import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaAtmosphericReconditioner;
+import net.minecraft.entity.player.InventoryPlayer;
public class GUI_PollutionCleaner extends GT_GUIContainerMetaTile_Machine {
public final String mName;
@@ -48,13 +42,7 @@ public class GUI_PollutionCleaner extends GT_GUIContainerMetaTile_Machine {
final int x3 = x2 - xStart;
final int y3 = y2 - yStart + 5;
final List<String> list = new ArrayList<String>();
- if (y3 >= 67 && y3 <= 84) {
- if (x3 >= 7 && x3 <= 24) {
- list.add("Fluid Auto-Output");
- }
- if (x3 >= 25 && x3 <= 42) {
- list.add("Item Auto-Output");
- }
+ if (y3 >= 67 && y3 <= 84) {
if (x3 >= 77 && x3 <= 95) {
//Do Dumb shit
CONTAINER_PollutionCleaner aContainerCast = (CONTAINER_PollutionCleaner) this.mContainer;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
index bf36b56015..229bc234e9 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IGregtech_RecipeAdder.java
@@ -293,6 +293,9 @@ public interface IGregtech_RecipeAdder {
public boolean addFlotationRecipe(Materials aMat, ItemStack aXanthate, FluidStack[] aInputFluids, FluidStack[] aOutputFluids, int aTime, int aEU);
public boolean addFlotationRecipe(Material aMat, ItemStack aXanthate, FluidStack[] aInputFluids, FluidStack[] aOutputFluids, int aTime, int aEU);
-
+ public boolean addpackagerRecipe(ItemStack aRecipeType, ItemStack aInput1, ItemStack aInput2, ItemStack aOutputStack1);
+
+ public boolean addFuelForRTG(ItemStack aFuelPellet, int aFuelDays, int aVoltage);
+
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java
index 4e6e2bc35b..3a0c101375 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java
@@ -1,6 +1,8 @@
package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
import net.minecraft.world.World;
import net.minecraft.item.ItemStack;
@@ -196,6 +198,20 @@ public class GT_MetaTileEntity_Hatch_AirIntake extends GT_MetaTileEntity_Hatch_I
public boolean canTankBeEmptied() {
return true;
}
+
+ private static Fluid AIR;
+
+ public boolean isAirInHatch() {
+ if (this.mFluid != null) {
+ if (AIR == null) {
+ AIR = FluidUtils.getAir(1).getFluid();
+ }
+ if (AIR == this.mFluid.getFluid()) {
+ return true;
+ }
+ }
+ return false;
+ }
public boolean addAirToHatch(long aTick) {
if (!this.getBaseMetaTileEntity().getAirAtSide(this.getBaseMetaTileEntity().getFrontFacing())) {
@@ -209,6 +225,9 @@ public class GT_MetaTileEntity_Hatch_AirIntake extends GT_MetaTileEntity_Hatch_I
return false;
}
else {
+ if (!isAirInHatch()) {
+ return false;
+ }
if (this.mFluid != null && a1) {
this.mFluid.amount += 1000;
return true;
@@ -244,6 +263,26 @@ public class GT_MetaTileEntity_Hatch_AirIntake extends GT_MetaTileEntity_Hatch_I
@Override
public boolean doesFillContainers() {
- return true;
+ return false;
+ }
+
+ @Override
+ public int fill(FluidStack aFluid, boolean doFill) {
+ return 0;
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
+ return false;
+ }
+
+ @Override
+ public int fill(ForgeDirection arg0, FluidStack arg1, boolean arg2) {
+ return 0;
+ }
+
+ @Override
+ public int fill_default(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
+ return 0;
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java
new file mode 100644
index 0000000000..a98c57eb30
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java
@@ -0,0 +1,141 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
+
+import gregtech.api.gui.GT_Container_4by4;
+import gregtech.api.gui.GT_GUIContainer_4by4;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Hatch_ElementalDataOrbHolder extends GT_MetaTileEntity_Hatch {
+ public GT_Recipe_Map mRecipeMap = null;
+ public boolean disableSort;
+
+ public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 16, new String[]{
+ "Holds Data Orbs for the Elemental Duplicator",
+ });
+ disableSort = true;
+ }
+
+ public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 16, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 16, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Cyber_Interface)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Cyber_Interface)};
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return true;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_4by4(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Steam Input Bus");
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ fillStacksIntoFirstSlots();
+ }
+ }
+
+ public void updateSlots() {
+ for (int i = 0; i < mInventory.length; i++)
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null;
+ fillStacksIntoFirstSlots();
+ }
+
+ protected void fillStacksIntoFirstSlots() {
+ if (disableSort) {
+ for (int i = 0; i < mInventory.length; i++)
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0)
+ mInventory[i] = null;
+ }
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("disableSort", disableSort);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ disableSort = aNBT.getBoolean("disableSort");
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+
+ }
+
+ public String trans(String aKey, String aEnglish) {
+ return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish, false);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == getBaseMetaTileEntity().getFrontFacing() && (mRecipeMap == null || mRecipeMap.containsInput(aStack));
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java
new file mode 100644
index 0000000000..7b52b9449f
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy_RTG.java
@@ -0,0 +1,282 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
+
+import static gregtech.api.enums.GT_Values.V;
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+
+import gregtech.api.gui.GT_Container_3by3;
+import gregtech.api.gui.GT_GUIContainer_3by3;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.util.minecraft.InventoryUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Hatch_Energy_RTG extends GT_MetaTileEntity_Hatch_Energy {
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier);
+ }
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch_Energy_RTG(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return super.getDescription();
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, TexturesGtBlock.getTextureFromIcon(TexturesGtBlock.Overlay_Hatch_RTG_On, new short[] {220, 220, 220, 0})};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, TexturesGtBlock.getTextureFromIcon(TexturesGtBlock.Overlay_Hatch_RTG_Off, new short[] {220, 220, 220, 0})};
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isEnetInput() {
+ return false;
+ }
+
+ @Override
+ public boolean isInputFacing(byte aSide) {
+ return aSide == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return true;
+ }
+
+ @Override
+ public long getMinimumStoredEU() {
+ return 0;
+ }
+
+ @Override
+ public long maxEUInput() {
+ return V[mTier];
+ }
+
+ @Override
+ public long maxEUStore() {
+ return Long.MAX_VALUE / (Short.MAX_VALUE * Byte.MAX_VALUE) ;
+ }
+
+ @Override
+ public long maxAmperesIn() {
+ return 0;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ Constructor aCon = ReflectionUtils.getConstructor(this.getClass(), new Class[] {String.class, int.class, int.class, String[].class, ITexture[][][].class});
+ Object aInst = ReflectionUtils.createNewInstanceFromConstructor(aCon, new Object[] {mName, mTier, 9, mDescriptionArray, mTextures});
+ if (GT_MetaTileEntity_Hatch_Energy_RTG.class.isInstance(aInst)) {
+ return (MetaTileEntity) aInst;
+ }
+ Logger.INFO("Created bad sized RTG hatch.");
+ return new GT_MetaTileEntity_Hatch_Energy_RTG(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_3by3(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, "RTG Power Unit");
+ }
+
+ private static class Dat {
+
+ protected final String mUniqueDataTag;
+ private final ItemStack mStack;
+ private final NBTTagCompound mNBT;
+
+ public Dat(ItemStack aStack) {
+ mStack = aStack;
+ mNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ mUniqueDataTag = ""+Item.getIdFromItem(aStack.getItem())+""+aStack.getItemDamage()+""+1+""+mNBT.getId();
+ }
+
+ public int getKey() {
+ return Item.getIdFromItem(mStack.getItem())+mStack.getItemDamage();
+ }
+
+ }
+
+ private static final HashMap<String, ItemStack> mFuelInstanceMap = new HashMap<String, ItemStack>();
+ private static final HashMap<String, Long> mFuelValueMap = new HashMap<String, Long>();
+ private static final HashMap<String, Integer> mFuelTypeMap = new HashMap<String, Integer>();
+ private static final HashMap<Integer, String> mFuelTypeMapReverse = new HashMap<Integer, String>();
+
+ public static boolean registerPelletForHatch(ItemStack aStack, long aFuelValue) {
+ if (!ItemUtils.checkForInvalidItems(aStack)) {
+ return false;
+ }
+ ItemStack aTemp = aStack.copy();
+ aTemp.stackSize = 1;
+ Dat aDat = new Dat(aTemp);
+ String aKey = aDat.mUniqueDataTag;
+ mFuelInstanceMap.put(aKey, aTemp);
+ mFuelValueMap.put(aKey, aFuelValue);
+ mFuelTypeMap.put(aKey, aDat.getKey());
+ mFuelTypeMapReverse.put(aDat.getKey(), aKey);
+ Logger.INFO("RTG Hatch: Registered Fuel Pellet: "+ItemUtils.getItemName(aTemp)+", Fuel Value: "+aFuelValue+", Key: "+aKey+", Key2: "+aDat.getKey());
+ return true;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ InventoryUtils.sortInventoryItems(this);
+ }
+ if (aTimer % 100 == 0 && aBaseMetaTileEntity.isServerSide()) {
+ if (hasPellet(this)) {
+ Logger.INFO("Has Pellet");
+ tryConsumePellet(this);
+ }
+ }
+ }
+
+ private static void tryConsumePellet(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ ItemStack aPellet = getPelletToConsume(aTile);
+ if (aPellet != null) {
+ Logger.INFO("Found Pellet");
+ long aFuel = getFuelValueOfPellet(aPellet);
+ if (aFuel > 0) {
+ Logger.INFO("Has Fuel Value: "+aFuel);
+ if (hasSpaceForEnergy(aTile, aFuel)) {
+ Logger.INFO("Can buffer");
+ aPellet.stackSize = 0;
+ Logger.INFO("Stack set to 0");
+ aPellet = null;
+ Logger.INFO("null stack");
+ addEnergyToInternalStorage(aTile, aFuel);
+ Logger.INFO("Consumed");
+ }
+ }
+ }
+ aTile.updateSlots();
+ Logger.INFO("updating slots");
+ }
+
+ private static void addEnergyToInternalStorage(GT_MetaTileEntity_Hatch_Energy_RTG aTile, long aFuel) {
+ aTile.getBaseMetaTileEntity().increaseStoredEnergyUnits(aFuel, true);
+ }
+
+ public static boolean hasSpaceForEnergy(GT_MetaTileEntity_Hatch_Energy_RTG aTile, long aAmount) {
+ long aMax = aTile.maxEUStore();
+ long aCurrent = aTile.getEUVar();
+ if ((aMax - aCurrent) >= aAmount) {
+ return true;
+ }
+ return false;
+ }
+
+ public void updateSlots() {
+ for (int i = 0; i < mInventory.length; i++) {
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0) {
+ mInventory[i] = null;
+ }
+ }
+ InventoryUtils.sortInventoryItems(this);
+ }
+
+ public static boolean hasPellet(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ for (ItemStack o : aTile.mInventory) {
+ if (o != null ) {
+ for (ItemStack i : mFuelInstanceMap.values()) {
+ if (ItemUtils.areItemsEqual(o, i)) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public static String getPelletType(ItemStack o) {
+ if (o == null) {
+ return "error";
+ }
+ Dat aDat = new Dat(o);
+ return mFuelTypeMapReverse.get(aDat.getKey());
+ }
+
+ public static long getFuelValueOfPellet(ItemStack aPellet) {
+ String aType = getPelletType(aPellet);
+ if (mFuelValueMap.containsKey(aType)) {
+ return mFuelValueMap.get(aType);
+ }
+ return 0;
+ }
+
+ public static ItemStack getPelletToConsume(GT_MetaTileEntity_Hatch_Energy_RTG aTile) {
+ for (ItemStack o : aTile.mInventory) {
+ if (o != null ) {
+ for (ItemStack i : mFuelInstanceMap.values()) {
+ if (ItemUtils.areItemsEqual(o, i)) {
+ return o;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java
new file mode 100644
index 0000000000..fb67b48e7f
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java
@@ -0,0 +1,232 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_2by2;
+import gregtech.api.gui.GT_GUIContainer_2by2;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class GT_MetaTileEntity_Hatch_Steam_BusInput extends GT_MetaTileEntity_Hatch {
+ public GT_Recipe_Map mRecipeMap = null;
+ public boolean disableSort;
+
+ public GT_MetaTileEntity_Hatch_Steam_BusInput(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, getSlots(aTier), new String[]{
+ "Item Input for Steam Multiblocks",
+ "Shift + right click with screwdriver to toggle automatic item shuffling",
+ "Capacity: 4 stacks",
+ "Does not work with non-steam multiblocks"});
+ }
+
+ public GT_MetaTileEntity_Hatch_Steam_BusInput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch_Steam_BusInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return true;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Steam_BusInput(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, "Steam Input Bus");
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) {
+ if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) {
+ fillStacksIntoFirstSlots();
+ }
+ }
+
+ public void updateSlots() {
+ for (int i = 0; i < mInventory.length; i++)
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null;
+ fillStacksIntoFirstSlots();
+ }
+
+ protected void fillStacksIntoFirstSlots() {
+ if (disableSort) {
+ for (int i = 0; i < mInventory.length; i++)
+ if (mInventory[i] != null && mInventory[i].stackSize <= 0)
+ mInventory[i] = null;
+ } else {
+ 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(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1);
+ }
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setBoolean("disableSort", disableSort);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ disableSort = aNBT.getBoolean("disableSort");
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aPlayer.isSneaking()) {
+ disableSort = !disableSort;
+ GT_Utility.sendChatToPlayer(aPlayer, trans("200", "Automatic Item Shuffling: " + (disableSort ? "Disabled" : "Enabled")));
+ }
+ }
+
+ public String trans(String aKey, String aEnglish) {
+ return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish, false);
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == getBaseMetaTileEntity().getFrontFacing() && (mRecipeMap == null || mRecipeMap.containsInput(aStack));
+ }
+
+
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[14][17][];
+ for (byte c = -1; c < 16; c++) {
+ if (rTextures[0][c + 1] == null) rTextures[0][c + 1] = getSideFacingActive(c);
+ if (rTextures[1][c + 1] == null) rTextures[1][c + 1] = getSideFacingInactive(c);
+ if (rTextures[2][c + 1] == null) rTextures[2][c + 1] = getFrontFacingActive(c);
+ if (rTextures[3][c + 1] == null) rTextures[3][c + 1] = getFrontFacingInactive(c);
+ if (rTextures[4][c + 1] == null) rTextures[4][c + 1] = getTopFacingActive(c);
+ if (rTextures[5][c + 1] == null) rTextures[5][c + 1] = getTopFacingInactive(c);
+ if (rTextures[6][c + 1] == null) rTextures[6][c + 1] = getBottomFacingActive(c);
+ if (rTextures[7][c + 1] == null) rTextures[7][c + 1] = getBottomFacingInactive(c);
+ if (rTextures[8][c + 1] == null) rTextures[8][c + 1] = getBottomFacingPipeActive(c);
+ if (rTextures[9][c + 1] == null) rTextures[9][c + 1] = getBottomFacingPipeInactive(c);
+ if (rTextures[10][c + 1] == null) rTextures[10][c + 1] = getTopFacingPipeActive(c);
+ if (rTextures[11][c + 1] == null) rTextures[11][c + 1] = getTopFacingPipeInactive(c);
+ if (rTextures[12][c + 1] == null) rTextures[12][c + 1] = getSideFacingPipeActive(c);
+ if (rTextures[13][c + 1] == null) rTextures[13][c + 1] = getSideFacingPipeInactive(c);
+ }
+ return rTextures;
+ }
+
+ public ITexture[] getSideFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP)};
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP)};
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM)};
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM)};
+ }
+
+ public ITexture[] getBottomFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getBottomFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java
new file mode 100644
index 0000000000..fb626cb817
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java
@@ -0,0 +1,173 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.gui.GT_Container_2by2;
+import gregtech.api.gui.GT_GUIContainer_2by2;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+
+public class GT_MetaTileEntity_Hatch_Steam_BusOutput extends GT_MetaTileEntity_Hatch {
+ public GT_MetaTileEntity_Hatch_Steam_BusOutput(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 4, new String[]{"Item Output for Steam Multiblocks",
+ "Capacity: 4 stacks",
+ "Does not work with non-steam multiblocks"});
+ }
+
+ public GT_MetaTileEntity_Hatch_Steam_BusOutput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ public GT_MetaTileEntity_Hatch_Steam_BusOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 4, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return true;
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Hatch_Steam_BusOutput(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_2by2(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, "Steam Output Bus");
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return aSide == aBaseMetaTileEntity.getFrontFacing();
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ ITexture[][][] rTextures = new ITexture[14][17][];
+ for (byte c = -1; c < 16; c++) {
+ if (rTextures[0][c + 1] == null) rTextures[0][c + 1] = getSideFacingActive(c);
+ if (rTextures[1][c + 1] == null) rTextures[1][c + 1] = getSideFacingInactive(c);
+ if (rTextures[2][c + 1] == null) rTextures[2][c + 1] = getFrontFacingActive(c);
+ if (rTextures[3][c + 1] == null) rTextures[3][c + 1] = getFrontFacingInactive(c);
+ if (rTextures[4][c + 1] == null) rTextures[4][c + 1] = getTopFacingActive(c);
+ if (rTextures[5][c + 1] == null) rTextures[5][c + 1] = getTopFacingInactive(c);
+ if (rTextures[6][c + 1] == null) rTextures[6][c + 1] = getBottomFacingActive(c);
+ if (rTextures[7][c + 1] == null) rTextures[7][c + 1] = getBottomFacingInactive(c);
+ if (rTextures[8][c + 1] == null) rTextures[8][c + 1] = getBottomFacingPipeActive(c);
+ if (rTextures[9][c + 1] == null) rTextures[9][c + 1] = getBottomFacingPipeInactive(c);
+ if (rTextures[10][c + 1] == null) rTextures[10][c + 1] = getTopFacingPipeActive(c);
+ if (rTextures[11][c + 1] == null) rTextures[11][c + 1] = getTopFacingPipeInactive(c);
+ if (rTextures[12][c + 1] == null) rTextures[12][c + 1] = getSideFacingPipeActive(c);
+ if (rTextures[13][c + 1] == null) rTextures[13][c + 1] = getSideFacingPipeInactive(c);
+ }
+ return rTextures;
+ }
+
+
+
+ public ITexture[] getSideFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getSideFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getFrontFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getFrontFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE)};
+ }
+
+ public ITexture[] getTopFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP)};
+ }
+
+ public ITexture[] getTopFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP)};
+ }
+
+ public ITexture[] getBottomFacingActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM)};
+ }
+
+ public ITexture[] getBottomFacingInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM)};
+ }
+
+ public ITexture[] getBottomFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getBottomFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getTopFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeActive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+
+ public ITexture[] getSideFacingPipeInactive(byte aColor) {
+ return new ITexture[]{new GT_RenderedTexture(mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)};
+ }
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java
index c9b98a6a64..127d4c8407 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java
@@ -1,6 +1,7 @@
package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base;
import gregtech.api.util.GT_Utility;
+import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
@@ -15,7 +16,7 @@ import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
public class GT_MetaTileEntity_Hatch_CustomFluidBase extends GT_MetaTileEntity_Hatch_Input {
-
+
public final Fluid mLockedFluid;
public final int mFluidCapacity;
@@ -64,46 +65,51 @@ public class GT_MetaTileEntity_Hatch_CustomFluidBase extends GT_MetaTileEntity_H
protected FluidStack mLockedStack = null;
protected Integer mLockedTemp = null;
protected String mTempMod = null;
-
+
@Override
public String[] getDescription() {
if (mLockedStack == null) {
mLockedStack = FluidUtils.getFluidStack(mLockedFluid, 1);
}
- if (mLockedTemp == null) {
- if (mLockedStack != null) {
- mLockedTemp = mLockedStack.getFluid().getTemperature();
- }
+ int aFluidTemp = 0;
+ boolean isSteam = false;
+ if (mLockedFluid != null) {
+ aFluidTemp = mLockedFluid.getTemperature();
+ mTempMod = mLockedFluid.getName();
}
- if (mLockedTemp != null) {
- if (mLockedTemp <= -3000) {
- mTempMod = ""+EnumChatFormatting.DARK_PURPLE;
- }
- else if (mLockedTemp >= -2999 && mLockedTemp <= -500) {
- mTempMod = ""+EnumChatFormatting.DARK_BLUE;
- }
- else if (mLockedTemp >= -499 && mLockedTemp <= -50) {
- mTempMod = ""+EnumChatFormatting.BLUE;
- }
- else if (mLockedTemp >= 30 && mLockedTemp <= 300) {
- mTempMod = ""+EnumChatFormatting.AQUA;
- }
- else if (mLockedTemp >= 301 && mLockedTemp <= 800) {
- mTempMod = ""+EnumChatFormatting.YELLOW;
- }
- else if (mLockedTemp >= 801 && mLockedTemp <= 1500) {
- mTempMod = ""+EnumChatFormatting.GOLD;
- }
- else if (mLockedTemp >= 1501) {
- mTempMod = ""+EnumChatFormatting.RED;
- }
+ if (mTempMod.toLowerCase().equals("steam")) {
+ isSteam = true;
}
+
+ EnumChatFormatting aColour = EnumChatFormatting.BLUE;
+ if (aFluidTemp <= -3000) {
+ aColour = EnumChatFormatting.DARK_PURPLE;
+ }
+ else if (aFluidTemp >= -2999 && aFluidTemp <= -500) {
+ aColour = EnumChatFormatting.DARK_BLUE;
+ }
+ else if (aFluidTemp >= -499 && aFluidTemp <= -50) {
+ aColour = EnumChatFormatting.BLUE;
+ }
+ else if (aFluidTemp >= 30 && aFluidTemp <= 300) {
+ aColour = EnumChatFormatting.AQUA;
+ }
+ else if (aFluidTemp >= 301 && aFluidTemp <= 800) {
+ aColour = EnumChatFormatting.YELLOW;
+ }
+ else if (aFluidTemp >= 801 && aFluidTemp <= 1500) {
+ aColour = EnumChatFormatting.GOLD;
+ }
+ else if (aFluidTemp >= 1501) {
+ aColour = EnumChatFormatting.RED;
+ }
+ String aFluidName = "Accepted Fluid: " + aColour + (mLockedStack != null ? mLockedStack.getLocalizedName() : "Empty") + EnumChatFormatting.RESET;
String[] s2 = new String[]{
- "Fluid Input for Multiblocks",
+ "Fluid Input for "+(isSteam ? "Steam " : "")+"Multiblocks",
"Capacity: " + getCapacity()+"L",
- "Accepted Fluid: " + mTempMod + mLockedStack != null ? mLockedStack.getLocalizedName() : "Empty"
- };
+ aFluidName
+ };
return s2;
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
index ea14320f93..17bf67317b 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java
@@ -325,6 +325,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
private final String aRequiresMaint = "1x Maintanence Hatch";*/
public final static String TAG_HIDE_HATCHES = "TAG_HIDE_HATCHES";
+ public final static String TAG_HIDE_MAINT = "TAG_HIDE_MAINT";
public final static String TAG_HIDE_POLLUTION = "TAG_HIDE_POLLUTION";
public final static String TAG_HIDE_MACHINE_TYPE = "TAG_HIDE_MACHINE_TYPE";
@@ -348,13 +349,14 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
String aRequiresMuffler = "1x Muffler Hatch";
//String aRequiresCoreModule = "1x Core Module";
- String aRequiresMaint = "1x Maintanence Hatch";
+ String aRequiresMaint = "1x Maintenance Hatch";
String[] x = getTooltip();
//Filter List, toggle switches, rebuild map without flags
boolean showHatches = true;
boolean showMachineType = true;
+ boolean showMaint = true;
boolean showPollution = getPollutionPerTick(null) > 0;
AutoMap<String> aTempMap = new AutoMap<String>();
for (int ee = 0; ee < x.length; ee++) {
@@ -368,6 +370,9 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
else if (hh.equals(TAG_HIDE_MACHINE_TYPE)) {
showMachineType = false;
}
+ else if (hh.equals(TAG_HIDE_MAINT)) {
+ showMaint = false;
+ }
else {
aTempMap.put(x[ee]);
}
@@ -382,11 +387,13 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
//Assemble ordered map for misc tooltips
AutoMap<String> aOrderedMap = new AutoMap<String>();
if (showHatches) {
- aOrderedMap.put(aRequiresMaint);
//aOrderedMap.put(aRequiresCoreModule);
if (showPollution) {
aOrderedMap.put(aRequiresMuffler);
}
+ if (showMaint) {
+ aOrderedMap.put(aRequiresMaint);
+ }
}
if (showMachineType) {
@@ -478,7 +485,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
public int canBufferOutputs(final GT_Recipe aRecipe, int aParallelRecipes, boolean aAllow16SlotWithoutCheck) {
- Logger.INFO("Determining if we have space to buffer outputs. Parallel: "+aParallelRecipes);
+ log("Determining if we have space to buffer outputs. Parallel: "+aParallelRecipes);
// Null recipe or a recipe with lots of outputs?
// E.G. Gendustry custom comb with a billion centrifuge outputs?
@@ -510,7 +517,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
*/
if (aDoesOutputItems) {
- Logger.INFO("We have items to output.");
+ log("We have items to output.");
// How many slots are free across all the output buses?
int aInputBusSlotsFree = 0;
@@ -628,9 +635,9 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
if (aInputMap.size() > aInputBusSlotsFree) {
aParallelRecipes = (int) Math.floor((double) aInputBusSlotsFree/aInputMap.size() * aParallelRecipes);
// We do not have enough free slots in total to accommodate the remaining managed stacks.
- Logger.INFO(" Free: "+aInputBusSlotsFree+", Required: "+aInputMap.size());
+ log(" Free: "+aInputBusSlotsFree+", Required: "+aInputMap.size());
if(aParallelRecipes == 0) {
- Logger.INFO("Failed to find enough space for all item outputs.");
+ log("Failed to find enough space for all item outputs.");
return 0;
}
@@ -655,7 +662,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
if (aDoesOutputFluids) {
- Logger.INFO("We have Fluids to output.");
+ log("We have Fluids to output.");
// How many slots are free across all the output buses?
int aFluidHatches = 0;
int aEmptyFluidHatches = 0;
@@ -783,12 +790,12 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
}
// We have Fluid Stacks we did not merge. Do we have space?
- Logger.INFO("fluids to output "+aOutputFluids.size()+" empty hatches "+aEmptyFluidHatches);
+ log("fluids to output "+aOutputFluids.size()+" empty hatches "+aEmptyFluidHatches);
if (aOutputFluids.size() > 0) {
// Not enough space to add fluids.
if (aOutputFluids.size() > aEmptyFluidHatches) {
aParallelRecipes = (int) Math.floor((double) aEmptyFluidHatches/aOutputFluids.size() * aParallelRecipes);
- Logger.INFO("Failed to find enough space for all fluid outputs. Free: "+aEmptyFluidHatches+", Required: "+aOutputFluids.size());
+ log("Failed to find enough space for all fluid outputs. Free: "+aEmptyFluidHatches+", Required: "+aOutputFluids.size());
return 0;
}
@@ -922,18 +929,18 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
* log("parallelRecipes: "+parallelRecipes);
* log("aMaxParallelRecipes: "+aMaxParallelRecipes);
* log("tTotalEUt: "+tTotalEUt); log("tVoltage: "+tVoltage);
- * log("tRecipeEUt: "+tRecipeEUt); Logger.INFO("EU1: "+tRecipeEUt); // Count
+ * log("tRecipeEUt: "+tRecipeEUt); log("EU1: "+tRecipeEUt); // Count
* recipes to do in parallel, consuming input items and fluids and considering
* input voltage limits for (; parallelRecipes < aMaxParallelRecipes &&
* tTotalEUt < (tVoltage - tRecipeEUt); parallelRecipes++) { if
* (!tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) {
* log("Broke at "+parallelRecipes+"."); break; }
* log("Bumped EU from "+tTotalEUt+" to "+(tTotalEUt+tRecipeEUt)+"."); tTotalEUt
- * += tRecipeEUt; Logger.INFO("EU2: "+tTotalEUt); }
+ * += tRecipeEUt; log("EU2: "+tTotalEUt); }
*
* if (parallelRecipes == 0) { log("BAD RETURN - 3"); return false; }
*
- * Logger.INFO("EU3: "+tTotalEUt);
+ * log("EU3: "+tTotalEUt);
*
* // -- Try not to fail after this point - inputs have already been consumed!
* --
@@ -945,7 +952,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
* aSpeedBonusPercent); this.mMaxProgresstime = (int)(tRecipe.mDuration *
* tTimeFactor * 10000);
*
- * int aTempEu = (int) Math.floor(tTotalEUt); Logger.INFO("EU4: "+aTempEu);
+ * int aTempEu = (int) Math.floor(tTotalEUt); log("EU4: "+aTempEu);
* this.mEUt = (int) aTempEu;
*
*
@@ -1912,7 +1919,7 @@ public abstract class GregtechMeta_MultiBlockBase extends GT_MetaTileEntity_Mult
//Handle Fluid Hatches using seperate logic
else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input)
- aDidAdd = addFluidInputToMachineList(aMetaTileEntity, aBaseCasingIndex);
+ aDidAdd = addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex);
else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output)
aDidAdd = addToMachineListInternal(mOutputHatches, aMetaTileEntity, aBaseCasingIndex);
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java
new file mode 100644
index 0000000000..a15388b27b
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java
@@ -0,0 +1,796 @@
+package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base;
+
+import static gregtech.api.enums.GT_Values.V;
+import static gtPlusPlus.core.util.data.ArrayUtils.removeNulls;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.*;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.api.objects.data.*;
+import gtPlusPlus.core.util.minecraft.FluidUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusInput;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusOutput;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract class GregtechMeta_SteamMultiBase extends GregtechMeta_MultiBlockBase {
+
+ public ArrayList<GT_MetaTileEntity_Hatch_Steam_BusInput> mSteamInputs = new ArrayList<GT_MetaTileEntity_Hatch_Steam_BusInput>();
+ public ArrayList<GT_MetaTileEntity_Hatch_Steam_BusOutput> mSteamOutputs = new ArrayList<GT_MetaTileEntity_Hatch_Steam_BusOutput>();
+ public ArrayList<GT_MetaTileEntity_Hatch_CustomFluidBase> mSteamInputFluids = new ArrayList<GT_MetaTileEntity_Hatch_CustomFluidBase>();
+
+ public GregtechMeta_SteamMultiBase(String aName) {
+ super(aName);
+ }
+
+ public GregtechMeta_SteamMultiBase(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ @Override
+ public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final byte aFacing, final byte aColorIndex, final boolean aActive, final boolean aRedstone) {
+ if (aSide == aFacing) {
+ return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[getCasingTextureIndex()], aActive ? getFrontOverlayActive() : getFrontOverlay()};
+ }
+ return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[getCasingTextureIndex()]};
+ }
+
+ protected abstract GT_RenderedTexture getFrontOverlay();
+
+ protected abstract GT_RenderedTexture getFrontOverlayActive();
+
+ private int getCasingTextureIndex() {
+ return 10;
+ }
+
+ @Override
+ public boolean hasSlotInGUI() {
+ return true;
+ }
+
+ @Override
+ public String getCustomGUIResourceName() {
+ return null;
+ }
+
+ @Override
+ public int getEuDiscountForParallelism() {
+ return 0;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack arg0) {
+
+
+ log("Running checkRecipeGeneric(0)");
+ ArrayList<ItemStack> tItems = getStoredInputs();
+ ArrayList<FluidStack> tFluids = getStoredFluids();
+ GT_Recipe_Map tMap = this.getRecipeMap();
+ if (tMap == null) {
+ return false;
+ }
+ ItemStack[] aItemInputs = tItems.toArray(new ItemStack[tItems.size()]);
+ FluidStack[] aFluidInputs = tFluids.toArray(new FluidStack[tFluids.size()]);
+ GT_Recipe tRecipe = tMap.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, V[1], null, null, aItemInputs);
+ if (tRecipe == null) {
+ log("BAD RETURN - 1");
+ return false;
+ }
+
+ int aEUPercent = 100;
+ int aSpeedBonusPercent = 0;
+ int aOutputChanceRoll = 10000;
+
+ // Reset outputs and progress stats
+ this.mEUt = 0;
+ this.mMaxProgresstime = 0;
+ this.mOutputItems = new ItemStack[]{};
+ this.mOutputFluids = new FluidStack[]{};
+
+
+ log("Running checkRecipeGeneric(1)");
+ // Remember last recipe - an optimization for findRecipe()
+ this.mLastRecipe = tRecipe;
+
+
+ int aMaxParallelRecipes = canBufferOutputs(tRecipe.mOutputs, tRecipe.mFluidOutputs, this.getMaxParallelRecipes());
+ if (aMaxParallelRecipes == 0) {
+ log("BAD RETURN - 2");
+ return false;
+ }
+
+ // EU discount
+ float tRecipeEUt = (tRecipe.mEUt * aEUPercent) / 100.0f;
+ float tTotalEUt = 0.0f;
+
+ int parallelRecipes = 0;
+
+ log("parallelRecipes: "+parallelRecipes);
+ log("aMaxParallelRecipes: "+aMaxParallelRecipes);
+ log("tTotalEUt: "+tTotalEUt);
+ log("tRecipeEUt: "+tRecipeEUt);
+
+
+
+ // Count recipes to do in parallel, consuming input items and fluids and considering input voltage limits
+ for (; parallelRecipes < aMaxParallelRecipes && tTotalEUt < (32 - tRecipeEUt); parallelRecipes++) {
+ if (!tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) {
+ log("Broke at "+parallelRecipes+".");
+ break;
+ }
+ log("Bumped EU from "+tTotalEUt+" to "+(tTotalEUt+tRecipeEUt)+".");
+ tTotalEUt += tRecipeEUt;
+ }
+
+ if (parallelRecipes == 0) {
+ log("BAD RETURN - 3");
+ return false;
+ }
+
+ // -- Try not to fail after this point - inputs have already been consumed! --
+
+
+
+ // Convert speed bonus to duration multiplier
+ // e.g. 100% speed bonus = 200% speed = 100%/200% = 50% recipe duration.
+ aSpeedBonusPercent = Math.max(-99, aSpeedBonusPercent);
+ float tTimeFactor = 100.0f / (100.0f + aSpeedBonusPercent);
+ this.mMaxProgresstime = (int)(tRecipe.mDuration * tTimeFactor * 1.5f);
+
+ this.mEUt = (int)Math.ceil(tTotalEUt*1.33f);
+
+ //this.mEUt = (3 * tRecipe.mEUt);
+
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+
+ // Collect fluid outputs
+ FluidStack[] tOutputFluids = getOutputFluids(tRecipe, parallelRecipes);
+
+ // Collect output item types
+ ItemStack[] tOutputItems = getOutputItems(tRecipe);
+
+ // Set output item stack sizes (taking output chance into account)
+ for (int f = 0; f < tOutputItems.length; f++) {
+ if (tRecipe.mOutputs[f] != null && tOutputItems[f] != null) {
+ for (int g = 0; g < parallelRecipes; g++) {
+ if (getBaseMetaTileEntity().getRandomNumber(aOutputChanceRoll) < tRecipe.getOutputChance(f))
+ tOutputItems[f].stackSize += tRecipe.mOutputs[f].stackSize;
+ }
+ }
+ }
+
+ tOutputItems = removeNulls(tOutputItems);
+
+ // Sanitize item stack size, splitting any stacks greater than max stack size
+ List<ItemStack> splitStacks = new ArrayList<ItemStack>();
+ for (ItemStack tItem : tOutputItems) {
+ while (tItem.getMaxStackSize() < tItem.stackSize) {
+ ItemStack tmp = tItem.copy();
+ tmp.stackSize = tmp.getMaxStackSize();
+ tItem.stackSize = tItem.stackSize - tItem.getMaxStackSize();
+ splitStacks.add(tmp);
+ }
+ }
+
+ if (splitStacks.size() > 0) {
+ ItemStack[] tmp = new ItemStack[splitStacks.size()];
+ tmp = splitStacks.toArray(tmp);
+ tOutputItems = ArrayUtils.addAll(tOutputItems, tmp);
+ }
+
+ // Strip empty stacks
+ List<ItemStack> tSList = new ArrayList<ItemStack>();
+ for (ItemStack tS : tOutputItems) {
+ if (tS.stackSize > 0) tSList.add(tS);
+ }
+ tOutputItems = tSList.toArray(new ItemStack[tSList.size()]);
+
+ // Commit outputs
+ this.mOutputItems = tOutputItems;
+ this.mOutputFluids = tOutputFluids;
+ updateSlots();
+
+ // Play sounds (GT++ addition - GT multiblocks play no sounds)
+ startProcess();
+
+ log("GOOD RETURN - 1");
+ return true;
+
+ }
+
+ public ArrayList<FluidStack> getAllSteamStacks(){
+ ArrayList<FluidStack> aFluids = new ArrayList<FluidStack>();
+ FluidStack aSteam = FluidUtils.getSteam(1);
+ for (FluidStack aFluid : this.getStoredFluids()) {
+ if (aFluid.isFluidEqual(aSteam)) {
+ aFluids.add(aFluid);
+ }
+ }
+ return aFluids;
+ }
+
+ public int getTotalSteamStored() {
+ int aSteam = 0;
+ for (FluidStack aFluid : getAllSteamStacks()) {
+ aSteam += aFluid.amount;
+ }
+ return aSteam;
+ }
+
+ public boolean tryConsumeSteam(int aAmount) {
+ if (getTotalSteamStored() <= 0) {
+ return false;
+ }
+ else {
+ return this.depleteInput(FluidUtils.getSteam(aAmount));
+ }
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack arg0) {
+ return 0;
+ }
+
+ @Override
+ public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (this.mUpdate == 1 || this.mStartUpCheck == 1) {
+ this.mSteamInputs.clear();
+ this.mSteamOutputs.clear();
+ this.mSteamInputFluids.clear();
+ }
+ }
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ }
+
+ /**
+ * Called every tick the Machine runs
+ */
+ public boolean onRunningTick(ItemStack aStack) {
+ fixAllMaintenanceIssue();
+ if (mEUt < 0) {
+ long aSteamVal = (((long) -mEUt * 10000) / Math.max(1000, mEfficiency));
+ //Logger.INFO("Trying to drain "+aSteamVal+" steam per tick.");
+ if (!tryConsumeSteam((int) aSteamVal)) {
+ stopMachine();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) {
+ if (aTileEntity == null) {
+ return false;
+ }
+ final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ }
+
+ //Use this to determine the correct value, then update the hatch texture after.
+ boolean aDidAdd = false;
+
+ //Handle Custom Hustoms
+
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_CustomFluidBase)
+ aDidAdd = addToMachineListInternal(mSteamInputFluids, aMetaTileEntity, aBaseCasingIndex);
+
+ else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusInput)
+ aDidAdd = addToMachineListInternal(mSteamInputs, aMetaTileEntity, aBaseCasingIndex);
+
+ else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusOutput)
+ aDidAdd = addToMachineListInternal(mSteamOutputs, aMetaTileEntity, aBaseCasingIndex);
+
+ return aDidAdd;
+ }
+
+
+
+
+ @Override
+ public void stopMachine() {
+ super.stopMachine();
+ }
+
+ public FluidStack[] getOutputFluids(GT_Recipe aRecipe, int parallelRecipes) {
+ // Collect fluid outputs
+ FluidStack[] tOutputFluids = new FluidStack[aRecipe.mFluidOutputs.length];
+ for (int h = 0; h < aRecipe.mFluidOutputs.length; h++) {
+ if (aRecipe.getFluidOutput(h) != null) {
+ tOutputFluids[h] = aRecipe.getFluidOutput(h).copy();
+ tOutputFluids[h].amount *= parallelRecipes;
+ }
+ }
+ return tOutputFluids;
+ }
+
+ public ItemStack[] getOutputItems(GT_Recipe aRecipe) {
+ // Collect output item types
+ ItemStack[] tOutputItems = new ItemStack[aRecipe.mOutputs.length];
+ for (int h = 0; h < aRecipe.mOutputs.length; h++) {
+ if (aRecipe.getOutput(h) != null) {
+ tOutputItems[h] = aRecipe.getOutput(h).copy();
+ tOutputItems[h].stackSize = 0;
+ }
+ }
+ return tOutputItems;
+ }
+
+ public int getOutputCount(ItemStack[] aOutputs) {
+ return aOutputs.length;
+ }
+ public int getOutputFluidCount(FluidStack[] aOutputs) {
+ return aOutputs.length;
+ }
+
+ public int canBufferOutputs(final ItemStack[] aOutputs, FluidStack[] aFluidOutputs, int aParallelRecipes) {
+
+ log("Determining if we have space to buffer outputs. Parallel: "+aParallelRecipes);
+
+ // Null recipe or a recipe with lots of outputs?
+ // E.G. Gendustry custom comb with a billion centrifuge outputs?
+ // Do it anyway, provided the multi allows it. Default behaviour is aAllow16SlotWithoutCheck = true.
+ if (aOutputs == null && aFluidOutputs == null) {
+ return 0;
+ }
+
+ // Do we even need to check for item outputs?
+ boolean aDoesOutputItems = aOutputs != null ? aOutputs.length > 0 : false;
+ // Do we even need to check for fluid outputs?
+ boolean aDoesOutputFluids = aFluidOutputs != null ? aFluidOutputs.length > 0 : false;
+
+ if (!aDoesOutputItems && !aDoesOutputFluids) {
+ return 0;
+ }
+
+ /* ========================================
+ * Item Management
+ * ========================================
+ */
+
+ if (aDoesOutputItems) {
+ log("We have items to output.");
+
+ // How many slots are free across all the output buses?
+ int aInputBusSlotsFree = 0;
+
+ /*
+ * Create Variables for Item Output
+ */
+
+ AutoMap<FlexiblePair<ItemStack, Integer>> aItemMap = new AutoMap<FlexiblePair<ItemStack, Integer>>();
+ AutoMap<ItemStack> aItemOutputs = new AutoMap<ItemStack>(aOutputs);
+
+ for (final GT_MetaTileEntity_Hatch_Steam_BusOutput tBus : this.mSteamOutputs) {
+ if (!isValidMetaTileEntity(tBus)) {
+ continue;
+ }
+ final IInventory tBusInv = tBus.getBaseMetaTileEntity();
+ for (int i = 0; i < tBusInv.getSizeInventory(); i++) {
+ if (tBus.getStackInSlot(i) == null) {
+ aInputBusSlotsFree++;
+ }
+ else {
+ ItemStack aT = tBus.getStackInSlot(i);
+ int aSize = aT.stackSize;
+ aT = aT.copy();
+ aT.stackSize = 0;
+ aItemMap.put(new FlexiblePair<ItemStack, Integer>(aT, aSize));
+ }
+ }
+ }
+
+ // Count the slots we need, later we can check if any are able to merge with existing stacks
+ int aRecipeSlotsRequired = 0;
+
+ // A map to hold the items we will be 'inputting' into the output buses. These itemstacks are actually the recipe outputs.
+ ConcurrentSet<FlexiblePair<ItemStack, Integer>> aInputMap = new ConcurrentHashSet<FlexiblePair<ItemStack, Integer>>();
+
+ // Iterate over the outputs, calculating require stack spacing they will require.
+ for (int i=0;i<getOutputCount(aOutputs);i++) {
+ ItemStack aY = aItemOutputs.get(i);
+ if (aY == null) {
+ continue;
+ }
+ else {
+ int aStackSize = aY.stackSize * aParallelRecipes;
+ if (aStackSize > 64) {
+ int aSlotsNeedsForThisStack = (int) Math.ceil((double) ((float) aStackSize / 64f));
+ // Should round up and add as many stacks as required nicely.
+ aRecipeSlotsRequired += aSlotsNeedsForThisStack;
+ for (int o=0;o<aRecipeSlotsRequired;o++) {
+ int aStackToRemove = (aStackSize -= 64) > 64 ? 64 : aStackSize;
+ aY = aY.copy();
+ aY.stackSize = 0;
+ aInputMap.add(new FlexiblePair<ItemStack, Integer>(aY, aStackToRemove));
+ }
+ }
+ else {
+ // Only requires one slot
+ aRecipeSlotsRequired++;
+ aY = aY.copy();
+ aY.stackSize = 0;
+ aInputMap.add(new FlexiblePair<ItemStack, Integer>(aY, aStackSize));
+ }
+ }
+ }
+
+ // We have items to add to the output buses. See if any are not full stacks and see if we can make them full.
+ if (aInputMap.size() > 0) {
+ // Iterate over the current stored items in the Output busses, if any match and are not full, we can try account for merging.
+ busItems: for (FlexiblePair<ItemStack, Integer> y : aItemMap) {
+ // Iterate over the 'inputs', we can safely remove these as we go.
+ outputItems: for (FlexiblePair<ItemStack, Integer> u : aInputMap) {
+ // Create local vars for readability.
+ ItemStack aOutputBusStack = y.getKey();
+ ItemStack aOutputStack = u.getKey();
+ // Stacks match, including NBT.
+ if (GT_Utility.areStacksEqual(aOutputBusStack, aOutputStack, false)) {
+ // Stack Matches, but it's full, continue.
+ if (aOutputBusStack.stackSize >= 64) {
+ // This stack is full, no point checking it.
+ continue busItems;
+ }
+ else {
+ // We can merge these two stacks without any hassle.
+ if ((aOutputBusStack.stackSize + aOutputStack.stackSize) <= 64) {
+ // Update the stack size in the bus storage map.
+ y.setValue(aOutputBusStack.stackSize + aOutputStack.stackSize);
+ // Remove the 'input' stack from the recipe outputs, so we don't try count it again.
+ aInputMap.remove(u);
+ continue outputItems;
+ }
+ // Stack merging is too much, so we fill this stack, leave the remainder.
+ else {
+ int aRemainder = (aOutputBusStack.stackSize + aOutputStack.stackSize) - 64;
+ // Update the stack size in the bus storage map.
+ y.setValue(64);
+ // Create a new object to iterate over later, with the remainder data;
+ FlexiblePair<ItemStack, Integer> t = new FlexiblePair<ItemStack, Integer>(u.getKey(), aRemainder);
+ // Remove the 'input' stack from the recipe outputs, so we don't try count it again.
+ aInputMap.remove(u);
+ // Add the remainder stack.
+ aInputMap.add(t);
+ continue outputItems;
+ }
+ }
+ }
+ else {
+ continue outputItems;
+ }
+ }
+ }
+ }
+
+ // We have stacks that did not merge, do we have space for them?
+ if (aInputMap.size() > 0) {
+ if (aInputMap.size() > aInputBusSlotsFree) {
+ aParallelRecipes = (int) Math.floor((double) aInputBusSlotsFree/aInputMap.size() * aParallelRecipes);
+ // We do not have enough free slots in total to accommodate the remaining managed stacks.
+ log(" Free: "+aInputBusSlotsFree+", Required: "+aInputMap.size());
+ if(aParallelRecipes == 0) {
+ log("Failed to find enough space for all item outputs.");
+ return 0;
+ }
+
+ }
+ }
+
+ /*
+ * End Item Management
+ */
+
+ }
+
+
+
+
+
+ /* ========================================
+ * Fluid Management
+ * ========================================
+ */
+
+
+
+ if (aDoesOutputFluids) {
+ log("We have Fluids to output.");
+ // How many slots are free across all the output buses?
+ int aFluidHatches = 0;
+ int aEmptyFluidHatches = 0;
+ int aFullFluidHatches = 0;
+ // Create Map for Fluid Output
+ ArrayList<Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>> aOutputHatches = new ArrayList<Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>>();
+ for (final GT_MetaTileEntity_Hatch_Output tBus : this.mOutputHatches) {
+ if (!isValidMetaTileEntity(tBus)) {
+ continue;
+ }
+ aFluidHatches++;
+ // Map the Hatch with the space left for easy checking later.
+ if (tBus.getFluid() == null) {
+ aOutputHatches.add(new Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>(tBus, null, tBus.getCapacity()));
+ }
+ else {
+ int aSpaceLeft = tBus.getCapacity() - tBus.getFluidAmount();
+ aOutputHatches.add(new Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>(tBus, tBus.getFluid(), aSpaceLeft));
+ }
+ }
+ // Create a map of all the fluids we would like to output, we can iterate over this and see how many we can merge into existing hatch stacks.
+ ArrayList<FluidStack> aOutputFluids = new ArrayList<FluidStack>();
+ // Ugly ass boxing
+ aOutputFluids.addAll(new AutoMap<FluidStack>(aFluidOutputs));
+ // Iterate the Hatches, updating their 'stored' data.
+ //for (Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aHatchData : aOutputHatches) {
+ for (int i = 0;i<aOutputHatches.size();i++) {
+ // The Hatch Itself
+ GT_MetaTileEntity_Hatch_Output aHatch = aOutputHatches.get(i).getValue_1();
+ // Fluid in the Hatch
+ FluidStack aHatchStack = aOutputHatches.get(i).getValue_2();
+ // Space left in Hatch
+ int aSpaceLeftInHatch = aHatch.getCapacity() - aHatch.getFluidAmount();
+ // Hatch is full,
+ if (aSpaceLeftInHatch <= 0) {
+ aFullFluidHatches++;
+ aOutputHatches.remove(aOutputHatches.get(i));
+ i--;
+ continue;
+ }
+ // Hatch has space
+ else {
+ // Check if any fluids match
+ //aFluidMatch: for (FluidStack aOutputStack : aOutputFluids) {
+ for(int j = 0;j<getOutputFluidCount(aFluidOutputs);j++) {
+ //log(" aHatchStack "+aHatchStack.getLocalizedName()+" aOutput stack "+aOutputStack.getLocalizedName());
+ if (GT_Utility.areFluidsEqual(aHatchStack, aOutputFluids.get(j))) {
+ int aFluidToPutIntoHatch = aOutputFluids.get(j).amount * aParallelRecipes;
+ // Not Enough space to insert all of the fluid.
+ // We fill this hatch and add a smaller Fluidstack back to the iterator.
+ if (aSpaceLeftInHatch < aFluidToPutIntoHatch) {
+ // Copy existing Hatch Stack
+ FluidStack aNewHatchStack = aHatchStack.copy();
+ aNewHatchStack.amount = 0;
+ // Copy existing Hatch Stack again
+ FluidStack aNewOutputStack = aHatchStack.copy();
+ aNewOutputStack.amount = 0;
+ // How much fluid do we have left after we fill the hatch?
+ int aFluidLeftAfterInsert = aFluidToPutIntoHatch - aSpaceLeftInHatch;
+ // Set new stacks to appropriate values
+ aNewHatchStack.amount = aHatch.getCapacity();
+ aNewOutputStack.amount = aFluidLeftAfterInsert;
+ // Remove fluid from output list, merge success
+ aOutputFluids.remove(aOutputFluids.get(j));
+ j--;
+ // Remove hatch from hatch list, data is now invalid.
+ aOutputHatches.remove(aOutputHatches.get(i));
+ i--;
+ // Add remaining Fluid to Output list
+ aOutputFluids.add(aNewOutputStack);
+ // Re-add hatch to hatch list, with new data.
+ //Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aNewHatchData = new Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>(aHatch, aNewHatchStack, aNewHatchStack.amount);
+ //aOutputHatches.add(aNewHatchData);
+ break;
+ }
+ // We can fill this hatch perfectly (rare case), may as well add it directly to the full list.
+ else if (aSpaceLeftInHatch == aFluidToPutIntoHatch) {
+ // Copy Old Stack
+ FluidStack aNewHatchStack = aHatchStack.copy();
+ // Add in amount from output stack
+ aNewHatchStack.amount += aFluidToPutIntoHatch;
+ // Remove fluid from output list, merge success
+ aOutputFluids.remove(aOutputFluids.get(j));
+ j--;
+ // Remove hatch from hatch list, data is now invalid.
+ aOutputHatches.remove(aOutputHatches.get(i));
+ i--;
+ // Re-add hatch to hatch list, with new data.
+ Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aNewHatchData = new Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>(aHatch, aNewHatchStack, aNewHatchStack.amount);
+ aOutputHatches.add(aNewHatchData);
+ break;
+ }
+ // We have more space than we need to merge, so we remove the stack from the output list and update the hatch list.
+ else {
+ // Copy Old Stack
+ FluidStack aNewHatchStack = aHatchStack.copy();
+ // Add in amount from output stack
+ aNewHatchStack.amount += aFluidToPutIntoHatch;
+ // Remove fluid from output list, merge success
+ aOutputFluids.remove(aOutputFluids.get(j));
+ j--;
+ // Remove hatch from hatch list, data is now invalid.
+ aOutputHatches.remove(aOutputHatches.get(i));
+ i--;
+ // Re-add hatch to hatch list, with new data.
+ Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aNewHatchData = new Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer>(aHatch, aNewHatchStack, aNewHatchStack.amount);
+ aOutputHatches.add(aNewHatchData);
+ // Check next fluid
+ continue;
+ }
+
+ }
+ else {
+ continue;
+ }
+ }
+ }
+ }
+
+ for (Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aFreeHatchCheck : aOutputHatches) {
+ // Free Hatch
+ if (aFreeHatchCheck.getValue_2() == null || aFreeHatchCheck.getValue_3() == 0 || aFreeHatchCheck.getValue_1().getFluid() == null) {
+ aEmptyFluidHatches++;
+ }
+ }
+
+ // We have Fluid Stacks we did not merge. Do we have space?
+ log("fluids to output "+aOutputFluids.size()+" empty hatches "+aEmptyFluidHatches);
+ if (aOutputFluids.size() > 0) {
+ // Not enough space to add fluids.
+ if (aOutputFluids.size() > aEmptyFluidHatches) {
+ aParallelRecipes = (int) Math.floor((double) aEmptyFluidHatches/aOutputFluids.size() * aParallelRecipes);
+ log("Failed to find enough space for all fluid outputs. Free: "+aEmptyFluidHatches+", Required: "+aOutputFluids.size());
+ return 0;
+
+ }
+ }
+
+ /*
+ * End Fluid Management
+ */
+ }
+
+ return aParallelRecipes;
+ }
+
+
+ /*
+ * Handle I/O with custom hatches
+ */
+
+ @Override
+ public boolean depleteInput(FluidStack aLiquid) {
+ if (aLiquid == null) return false;
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mSteamInputFluids) {
+ tHatch.mRecipeMap = 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;
+ }
+
+ @Override
+ public boolean depleteInput(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ FluidStack aLiquid = GT_Utility.getFluidForFilledItem(aStack, true);
+ if (aLiquid != null) return depleteInput(aLiquid);
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mSteamInputFluids) {
+ tHatch.mRecipeMap = 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 (GT_MetaTileEntity_Hatch_Steam_BusInput tHatch : mSteamInputs) {
+ tHatch.mRecipeMap = 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;
+ }
+
+ @Override
+ public ArrayList<FluidStack> getStoredFluids() {
+ ArrayList<FluidStack> rList = new ArrayList<FluidStack>();
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mSteamInputFluids) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch) && tHatch.getFillableStack() != null) {
+ rList.add(tHatch.getFillableStack());
+ }
+ }
+ return rList;
+ }
+
+ @Override
+ public ArrayList<ItemStack> getStoredInputs() {
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_Steam_BusInput tHatch : mSteamInputs) {
+ tHatch.mRecipeMap = 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;
+ }
+
+ @Override
+ public boolean addOutput(ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ aStack = GT_Utility.copy(aStack);
+ boolean outputSuccess = true;
+ while (outputSuccess && aStack.stackSize > 0) {
+ outputSuccess = false;
+ ItemStack single = aStack.splitStack(1);
+ for (GT_MetaTileEntity_Hatch_Steam_BusOutput tHatch : mSteamOutputs) {
+ if (!outputSuccess && isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getSizeInventory() - 1; i >= 0 && !outputSuccess; i--) {
+ if (tHatch.getBaseMetaTileEntity().addStackToSlot(i, single)) outputSuccess = true;
+ }
+ }
+ }
+ for (GT_MetaTileEntity_Hatch_Output tHatch : mOutputHatches) {
+ if (!outputSuccess && isValidMetaTileEntity(tHatch) && tHatch.outputsItems()) {
+ if (tHatch.getBaseMetaTileEntity().addStackToSlot(1, single)) outputSuccess = true;
+ }
+ }
+ }
+ return outputSuccess;
+ }
+
+ @Override
+ public ArrayList<ItemStack> getStoredOutputs() {
+ ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_Steam_BusOutput tHatch : mSteamOutputs) {
+ if (isValidMetaTileEntity(tHatch)) {
+ for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) {
+ rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i));
+ }
+ }
+ }
+ return rList;
+ }
+
+ @Override
+ public void updateSlots() {
+ for (GT_MetaTileEntity_Hatch_Input tHatch : mSteamInputFluids)
+ if (isValidMetaTileEntity(tHatch)) tHatch.updateSlots();
+ for (GT_MetaTileEntity_Hatch_Steam_BusInput tHatch : mSteamInputs)
+ if (isValidMetaTileEntity(tHatch)) tHatch.updateSlots();
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java
index 23f7b2a6a0..ea74e650dd 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java
@@ -10,15 +10,15 @@ import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_Hatch_Catalysts extends GT_MetaTileEntity_Hatch_NbtConsumable {
public GT_MetaTileEntity_Hatch_Catalysts(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional, 7, 16, "Dedicated Catalyst Storage", false);
+ super(aID, aName, aNameRegional, 0, 16, "Dedicated Catalyst Storage", false);
}
public GT_MetaTileEntity_Hatch_Catalysts(String aName, String aDescription, ITexture[][][] aTextures) {
- super(aName, 7, 16, aDescription, false, aTextures);
+ super(aName, 0, 16, aDescription, false, aTextures);
}
public GT_MetaTileEntity_Hatch_Catalysts(String aName, String[] aDescription, ITexture[][][] aTextures) {
- super(aName, 7, 16, aDescription[0], false, aTextures);
+ super(aName, 0, 16, aDescription[0], false, aTextures);
}
@Override
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java b/src/Java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java
index 63f5043954..091ee734e6 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java
@@ -3,10 +3,7 @@ package gtPlusPlus.xmod.gregtech.common;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import org.apache.commons.lang3.ArrayUtils;
@@ -15,16 +12,10 @@ import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
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.TAE;
+import gregtech.api.enums.*;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaTileEntity;
-import gregtech.api.util.GT_LanguageManager;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_Utility;
-import gregtech.api.util.GTPP_Recipe;
+import gregtech.api.util.*;
import gregtech.common.GT_Proxy;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
@@ -32,15 +23,14 @@ import gtPlusPlus.api.objects.minecraft.FormattedTooltipString;
import gtPlusPlus.core.handler.AchievementHandler;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.material.ELEMENT;
-import gtPlusPlus.core.util.minecraft.FluidUtils;
-import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.core.util.minecraft.LangUtils;
-import gtPlusPlus.core.util.minecraft.MaterialUtils;
+import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.minecraft.*;
import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.metatileentity.BaseCustomTileEntity;
import gtPlusPlus.xmod.gregtech.api.metatileentity.custom.power.BaseCustomPower_MTE;
import gtPlusPlus.xmod.gregtech.common.covers.CoverManager;
+import gtPlusPlus.xmod.gregtech.common.helpers.MachineUpdateHandler;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_WorldAccelerator;
import ic2.core.init.BlocksItems;
import ic2.core.init.InternalName;
@@ -59,6 +49,7 @@ public class Meta_GT_Proxy {
static {
Logger.INFO("GT_PROXY - initialized.");
+ sDoesVolumetricFlaskExist = ReflectionUtils.doesClassExist("gregtech.common.items.GT_VolumetricFlask");
}
public static List<Runnable> GT_BlockIconload = new ArrayList<>();
@@ -73,6 +64,10 @@ public class Meta_GT_Proxy {
public static final Map<String, FormattedTooltipString> mCustomGregtechMetaTooltips = new LinkedHashMap<String, FormattedTooltipString>();
+ /**
+ * Does this feature exist within GT? Saves loading useless content if not.
+ */
+ public static final boolean sDoesVolumetricFlaskExist;
@SideOnly(Side.CLIENT)
public static IIconRegister sBlockIcons, sItemIcons;
@@ -119,6 +114,7 @@ public class Meta_GT_Proxy {
setValidHeatingCoilMetas();
PollutionUtils.setPollutionFluids();
fixIC2FluidNames();
+ Utils.registerEvent(new MachineUpdateHandler());
}
public static void postInit() {
@@ -216,11 +212,11 @@ public class Meta_GT_Proxy {
public static boolean generatePlasmaRecipesForAdvVacFreezer() {
- AutoMap<GTPP_Recipe> aFreezerMapRebaked = new AutoMap<GTPP_Recipe>();
- AutoMap<GTPP_Recipe> aRemovedRecipes = new AutoMap<GTPP_Recipe>();
+ AutoMap<GT_Recipe> aFreezerMapRebaked = new AutoMap<GT_Recipe>();
+ AutoMap<GT_Recipe> aRemovedRecipes = new AutoMap<GT_Recipe>();
//Find recipes containing Plasma and map them
- for (GTPP_Recipe y : GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.mRecipeList) {
+ for (GT_Recipe y : GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mRecipeList) {
if (y.mFluidInputs.length > 0) {
for (FluidStack r : y.mFluidInputs) {
if (r.getUnlocalizedName().toLowerCase().contains("plasma")) {
@@ -312,17 +308,17 @@ public class Meta_GT_Proxy {
//Best not touch the original map if we don't have a valid map to override it with.
if (aFreezerMapRebaked.size() > 0) {
- int aOriginalCount = GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.mRecipeList.size();
+ int aOriginalCount = GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mRecipeList.size();
//Empty the original map
- GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.mRecipeList.clear();
+ GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mRecipeList.clear();
//Rebake the real map
- for (GTPP_Recipe w : aFreezerMapRebaked) {
- GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.mRecipeList.add(w);
+ for (GT_Recipe w : aFreezerMapRebaked) {
+ GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mRecipeList.add(w);
}
- return GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.mRecipeList.size() >= aOriginalCount;
+ return GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.mRecipeList.size() >= aOriginalCount;
}
return false;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
index f3ad1de188..832ee2b56e 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
@@ -26,10 +26,9 @@ extends GregtechMetaCasingBlocksAbstract {
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "IsaMill Exterior Casing"); // IsaMill Casing
TAE.registerTexture(0, 2, new GT_CopiedBlockTexture(this, 6, 0));
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "IsaMill Piping"); // IsaMill Pipe
- TAE.registerTexture(0, 3, new GT_CopiedBlockTexture(this, 6, 0));
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "IsaMill Gearbox"); // IsaMill Gearbox
- TAE.registerTexture(0, 4, new GT_CopiedBlockTexture(this, 6, 0));
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Elemental Confinement Shell"); // Duplicator Casing
+ TAE.registerTexture(0, 3, new GT_CopiedBlockTexture(this, 6, 3));
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", ""); // Unused
@@ -42,9 +41,11 @@ extends GregtechMetaCasingBlocksAbstract {
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", ""); // Unused
+
GregtechItemList.Casing_IsaMill_Casing.set(new ItemStack(this, 1, 0));
GregtechItemList.Casing_IsaMill_Pipe.set(new ItemStack(this, 1, 1));
GregtechItemList.Casing_IsaMill_Gearbox.set(new ItemStack(this, 1, 2));
+ GregtechItemList.Casing_ElementalDuplicator.set(new ItemStack(this, 1, 2));
}
@Override
@@ -62,7 +63,8 @@ extends GregtechMetaCasingBlocksAbstract {
return TexturesGtBlock.TEXTURE_PIPE_GRINDING_MILL.getIcon();
case 2:
return TexturesGtBlock.TEXTURE_GEARBOX_GRINDING_MILL.getIcon();
-
+ case 3:
+ return TexturesGtBlock.TEXTURE_TECH_PANEL_D.getIcon();
}
}
return Textures.BlockIcons.RENDERING_ERROR.getIcon();
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java
new file mode 100644
index 0000000000..8f5dff592a
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java
@@ -0,0 +1,81 @@
+package gtPlusPlus.xmod.gregtech.common.blocks;
+
+import java.util.List;
+
+import gregtech.api.enums.TAE;
+import gregtech.api.enums.Textures;
+import gregtech.api.objects.GT_CopiedBlockTexture;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.common.blocks.GT_Material_Casings;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+
+
+public class GregtechMetaSpecialMachineCasings extends GregtechMetaCasingBlocksAbstract {
+
+
+ public static class SpecialCasingItemBlock extends GregtechMetaCasingItems {
+
+ public SpecialCasingItemBlock(Block par1) {
+ super(par1);
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ int aMeta = aStack.getItemDamage();
+ if (aMeta < 10) {
+ //aList.add("Tier: "+GT_Values.VN[aMeta]);
+ }
+ super.addInformation(aStack, aPlayer, aList, aF3_H);
+ }
+ }
+
+ public GregtechMetaSpecialMachineCasings() {
+ super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.2", GT_Material_Casings.INSTANCE);
+ for (byte i = 0; i < 16; i = (byte) (i + 1)) {
+ //TAE.registerTextures(new GT_CopiedBlockTexture(this, 6, i));
+ // Don't register these Textures, They already exist within vanilla GT. (May not exist in 5.08)
+ }
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Strong Bronze Machine Casing");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Sturdy Aluminium Machine Casing");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Vigorous Laurenium Machine Casing");
+ TAE.registerTexture(84, new GT_CopiedBlockTexture(this, 6, 2));
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Rugged Botmium Machine Casing");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", ""); // Unused
+
+ GregtechItemList.Casing_Machine_Custom_1.set(new ItemStack(this, 1, 0));
+ GregtechItemList.Casing_Machine_Custom_2.set(new ItemStack(this, 1, 1));
+ GregtechItemList.Casing_Machine_Custom_3.set(new ItemStack(this, 1, 2));
+ GregtechItemList.Casing_Machine_Custom_4.set(new ItemStack(this, 1, 3));
+ }
+
+ public IIcon getIcon(int aSide, int aMeta) {
+ switch (aMeta) {
+ case 0:
+ return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon();
+ case 1:
+ return Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getIcon();
+ case 2:
+ return TexturesGtBlock.Casing_Material_Laurenium.getIcon();
+ case 3:
+ return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getIcon();
+ }
+ return Textures.BlockIcons.RENDERING_ERROR.getIcon();
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
index 93322d2ef1..8b181a05f4 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
@@ -99,6 +99,10 @@ public class TexturesGtBlock {
}
}
+ public static GT_RenderedTexture getTextureFromIcon(CustomIcon aIcon, short[] aRGB) {
+ return new GT_RenderedTexture(aIcon, aRGB);
+ }
+
/*
* Add Some Custom Textures below.
* I am not sure whether or not I need to declare them as such, but better to be safe than sorry.
@@ -214,7 +218,9 @@ public class TexturesGtBlock {
public static final CustomIcon Casing_Material_HastelloyN = Internal_Casing_HastelloyN;
private static final CustomIcon Internal_Casing_Fluid_IncoloyDS = new CustomIcon("TileEntities/MACHINE_CASING_FLUID_INCOLOY_DS");
public static final CustomIcon Casing_Material_Fluid_IncoloyDS = Internal_Casing_Fluid_IncoloyDS;
-
+
+ private static final CustomIcon Internal_Casing_Laurenium = new CustomIcon("TileEntities/MACHINE_CASING_LAURENIUM");
+ public static final CustomIcon Casing_Material_Laurenium = Internal_Casing_Laurenium;
//Trinium Alloys
public static final CustomIcon Casing_Trinium_Titanium = new CustomIcon("TileEntities/MACHINE_CASING_STABLE_TRINIUM_TITANIUM");
@@ -395,7 +401,11 @@ public class TexturesGtBlock {
// Catalyst Bus
private static final CustomIcon Internal_Overlay_Bus_Catalyst = new CustomIcon("iconsets/OVERLAY_CATALYSTS");
public static final CustomIcon Overlay_Bus_Catalyst = Internal_Overlay_Bus_Catalyst;
-
+ // RTG Hatch
+ private static final CustomIcon Internal_Overlay_Hatch_RTG_Off = new CustomIcon("iconsets/OVERLAY_ENERGY_RTG_OFF");
+ public static final CustomIcon Overlay_Hatch_RTG_Off = Internal_Overlay_Hatch_RTG_Off;
+ private static final CustomIcon Internal_Overlay_Hatch_RTG_On = new CustomIcon("iconsets/OVERLAY_ENERGY_RTG_ON");
+ public static final CustomIcon Overlay_Hatch_RTG_On = Internal_Overlay_Hatch_RTG_On;
//Dimensional
private static final CustomIcon Internal_Overlay_Machine_Dimensional_Blue = new CustomIcon("TileEntities/adv_machine_dimensional_cover_blue");
@@ -467,6 +477,7 @@ public class TexturesGtBlock {
public static final CustomIcon TEXTURE_TECH_PANEL_A = new CustomIcon("metro/TEXTURE_TECH_PANEL_A");
public static final CustomIcon TEXTURE_TECH_PANEL_B = new CustomIcon("metro/TEXTURE_TECH_PANEL_B");
public static final CustomIcon TEXTURE_TECH_PANEL_C = new CustomIcon("metro/TEXTURE_TECH_PANEL_C");
+ public static final CustomIcon TEXTURE_TECH_PANEL_D = new CustomIcon("metro/TEXTURE_TECH_PANEL_D");
public static final CustomIcon TEXTURE_TECH_PANEL_RADIOACTIVE = new CustomIcon("TileEntities/DecayablesChest_bottom");
public static final CustomIcon TEXTURE_TECH_PANEL_RADIOACTIVE_ALT = new CustomIcon("TileEntities/DecayablesChest_top");
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow_Item.java b/src/Java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow_Item.java
new file mode 100644
index 0000000000..0299447694
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow_Item.java
@@ -0,0 +1,182 @@
+package gtPlusPlus.xmod.gregtech.common.covers;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.minecraft.LangUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+public class GTPP_Cover_Overflow_Item extends GT_CoverBehavior {
+
+ public final int mInitialCapacity;
+ public final int mMaxItemCapacity;
+
+ public static final Class sQuantumChest;
+ public static final Class sSuperChestGTPP;
+ public static final Class sSuperChestGTNH;
+ public static HashMap<Integer, Field> mItemAmountFields = new HashMap<Integer, Field>();
+ public static HashMap<Integer, Field> mItemTypeFields = new HashMap<Integer, Field>();
+
+ static {
+ sQuantumChest = ReflectionUtils.getClass("gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest");
+ sSuperChestGTPP = ReflectionUtils.getClass("gtPlusPlus.xmod.gregtech.common.tileentities.storage.GT_MetaTileEntity_TieredChest");
+ if (CORE.GTNH) {
+ sSuperChestGTNH = ReflectionUtils.getClass("gregtech.common.tileentities.storage.GT_MetaTileEntity_SuperChest");
+ }
+ else {
+ sSuperChestGTNH = null;
+ }
+ if (sQuantumChest != null) {
+ mItemAmountFields.put(0, ReflectionUtils.getField(sQuantumChest, "mItemCount"));
+ mItemTypeFields.put(0, ReflectionUtils.getField(sQuantumChest, "mItemStack"));
+ }
+ if (sSuperChestGTPP != null) {
+ mItemAmountFields.put(1, ReflectionUtils.getField(sSuperChestGTPP, "mItemCount"));
+ mItemTypeFields.put(1, ReflectionUtils.getField(sSuperChestGTPP, "mItemStack"));
+ }
+ if (sSuperChestGTNH != null) {
+ mItemAmountFields.put(2, ReflectionUtils.getField(sSuperChestGTNH, "mItemCount"));
+ mItemTypeFields.put(2, ReflectionUtils.getField(sSuperChestGTNH, "mItemStack"));
+ }
+ }
+
+ public GTPP_Cover_Overflow_Item(int aCapacity) {
+ this.mInitialCapacity = aCapacity;
+ this.mMaxItemCapacity = aCapacity * 1000;
+ }
+
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ long aTimer) {
+ if (aCoverVariable == 0) {
+ return aCoverVariable;
+ }
+
+ // Get the IGTTile
+ IGregTechTileEntity aGtTileEntity = aTileEntity.getIGregTechTileEntity(aTileEntity.getXCoord(), aTileEntity.getYCoord(), aTileEntity.getZCoord());
+ if (aGtTileEntity == null) {
+ return aCoverVariable;
+ }
+
+ // Get the MetaTile
+ final IMetaTileEntity aMetaTileEntity = aGtTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return aCoverVariable;
+ }
+ boolean didHandle = false;
+ // Special Case for everything I want to support. /facepalm
+ if (sQuantumChest != null && sQuantumChest.isInstance(aMetaTileEntity)) {
+ didHandle = handleDigitalChest(aMetaTileEntity, 0);
+ }
+ else if (sSuperChestGTPP.isInstance(aMetaTileEntity)) {
+ didHandle = handleDigitalChest(aMetaTileEntity, 1);
+
+ }
+ else if (CORE.GTNH && sSuperChestGTNH != null && sSuperChestGTNH.isInstance(aMetaTileEntity)) {
+ didHandle = handleDigitalChest(aMetaTileEntity, 2);
+ }
+
+ return aCoverVariable;
+ }
+
+ private boolean handleDigitalChest(IMetaTileEntity aTile, int aType) {
+ int aItemAmount = (int) ReflectionUtils.getFieldValue(mItemAmountFields.get(aType), aTile);
+ ItemStack aItemType = (ItemStack) ReflectionUtils.getFieldValue(mItemTypeFields.get(aType), aTile);
+
+ if (aItemType == null || aItemAmount <= 0) {
+ return false;
+ }
+ else {
+ if (aItemAmount > mInitialCapacity) {
+ int aNewItemAmount = mInitialCapacity;
+ ReflectionUtils.setField(aTile, mItemAmountFields.get(aType), aNewItemAmount);
+ }
+ }
+ return true;
+ }
+
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ)[0] >= 0.5F) {
+ aCoverVariable += (mMaxItemCapacity * (aPlayer.isSneaking() ? 0.1f : 0.01f));
+ } else {
+ aCoverVariable -= (mMaxItemCapacity * (aPlayer.isSneaking() ? 0.1f : 0.01f));
+ }
+ if (aCoverVariable > mMaxItemCapacity) {
+ aCoverVariable = mInitialCapacity;
+ }
+ if (aCoverVariable <= 0) {
+ aCoverVariable = mMaxItemCapacity;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, LangUtils.trans("009", "Overflow point: ") + aCoverVariable + trans("010", "L"));
+ return aCoverVariable;
+ }
+
+ public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ boolean aShift = aPlayer.isSneaking();
+ int aAmount = aShift ? 128 : 8;
+ if (GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ)[0] >= 0.5F) {
+ aCoverVariable += aAmount;
+ } else {
+ aCoverVariable -= aAmount;
+ }
+ if (aCoverVariable > mMaxItemCapacity) {
+ aCoverVariable = mInitialCapacity;
+ }
+ if (aCoverVariable <= 0) {
+ aCoverVariable = mMaxItemCapacity;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, LangUtils.trans("009", "Overflow point: ") + aCoverVariable + trans("010", "L"));
+ aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
+ return true;
+ }
+
+ public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsRedstoneGoOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return false;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 5;
+ }
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/MachineUpdateHandler.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/MachineUpdateHandler.java
new file mode 100644
index 0000000000..0b52560e0d
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/MachineUpdateHandler.java
@@ -0,0 +1,42 @@
+package gtPlusPlus.xmod.gregtech.common.helpers;
+
+import java.util.HashMap;
+
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import gregtech.api.GregTech_API;
+import net.minecraft.block.Block;
+import net.minecraftforge.event.world.BlockEvent;
+
+public class MachineUpdateHandler {
+
+ private static final HashMap<String, Block> mBlockCache = new HashMap<String, Block>();
+
+ public static void registerBlockToCauseMachineUpdate(String aUnlocalName, Block aBlock) {
+ mBlockCache.put(aUnlocalName, aBlock);
+ }
+
+ @SubscribeEvent
+ public void onBlockEvent(BlockEvent event) {
+ Block aBlock = event.block;
+ String aUnlocalName = aBlock != null ? aBlock.getUnlocalizedName() : "NULL";
+ boolean aDoUpdate = false;
+ if (aBlock != null && aUnlocalName != null && !aUnlocalName.equals("NULL")) {
+ for (String aCachedName : mBlockCache.keySet()) {
+ if (aCachedName.equals(aUnlocalName)) {
+ aDoUpdate = true;
+ break;
+ }
+ else {
+ if (aBlock == mBlockCache.get(aCachedName)) {
+ aDoUpdate = true;
+ break;
+ }
+ }
+ }
+ if (aDoUpdate) {
+ GregTech_API.causeMachineUpdate(event.world, event.x, event.y, event.z);
+ }
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java
new file mode 100644
index 0000000000..84bb52d064
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java
@@ -0,0 +1,168 @@
+package gtPlusPlus.xmod.gregtech.common.helpers;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.FluidStack;
+
+public class VolumetricFlaskHelper {
+
+ private static final Class sClassVolumetricFlask;
+ private static final Method sMethodGetFlaskMaxCapacity;
+ private static Item mFlask;
+
+ static {
+ if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
+ sClassVolumetricFlask = ReflectionUtils.getClass("gregtech.common.items.GT_VolumetricFlask");
+ Method aMaxCapacity = null;
+ try {
+ aMaxCapacity = sClassVolumetricFlask.getDeclaredMethod("getMaxCapacity", new Class[] {});
+ }
+ catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ CORE.crash("Secondary Error Obtaining instance of 'getMaxCapacity' from 'GT_VolumetricFlask'. Crashing.");
+ }
+ sMethodGetFlaskMaxCapacity = aMaxCapacity;
+ }
+ else {
+ sClassVolumetricFlask = null;
+ sMethodGetFlaskMaxCapacity = null;
+ }
+ }
+
+ public static ItemStack getVolumetricFlask(int aAmount) {
+ ItemStack aFlask = ItemUtils.getValueOfItemList("VOLUMETRIC_FLASK", aAmount, (ItemStack) null);
+ return aFlask;
+ }
+
+ public static ItemStack getLargeVolumetricFlask(int aAmount) {
+ ItemStack aFlask = GregtechItemList.VOLUMETRIC_FLASK_8k.get(aAmount);
+ return aFlask;
+ }
+
+ public static ItemStack getGiganticVolumetricFlask(int aAmount) {
+ ItemStack aFlask = GregtechItemList.VOLUMETRIC_FLASK_32k.get(aAmount);
+ return aFlask;
+ }
+
+ public static boolean isVolumetricFlask(ItemStack aStack) {
+ if (isNormalVolumetricFlask(aStack) || isLargeVolumetricFlask(aStack) || isGiganticVolumetricFlask(aStack)) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isNormalVolumetricFlask(ItemStack aStack) {
+ if (mFlask == null) {
+ ItemStack aFlask = ItemUtils.getValueOfItemList("VOLUMETRIC_FLASK", 1, (ItemStack) null);
+ if (aFlask != null) {
+ mFlask = aFlask.getItem();
+ }
+ }
+ if (aStack.getItem() == mFlask) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isLargeVolumetricFlask(ItemStack aStack) {
+ if (GregtechItemList.VOLUMETRIC_FLASK_8k.getItem() == aStack.getItem()) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isGiganticVolumetricFlask(ItemStack aStack) {
+ if (GregtechItemList.VOLUMETRIC_FLASK_32k.getItem() == aStack.getItem()) {
+ return true;
+ }
+ return false;
+ }
+
+ public static int getMaxFlaskCapacity(ItemStack aStack) {
+ if (aStack != null && sMethodGetFlaskMaxCapacity != null) {
+ Item aItem = aStack.getItem();
+ if (sClassVolumetricFlask.isInstance(aItem)) {
+ int aMaxCapacity = (int) ReflectionUtils.invokeNonBool(aItem, sMethodGetFlaskMaxCapacity, new Object[] {});
+ return aMaxCapacity;
+ }
+ }
+ return 0;
+ }
+
+ public static boolean isFlaskEmpty(ItemStack aStack) {
+ return getFlaskFluid(aStack) == null;
+ }
+
+ public static FluidStack getFlaskFluid(ItemStack aStack) {
+ if (aStack.hasTagCompound()) {
+ NBTTagCompound nbt = aStack.getTagCompound();
+ if (nbt.hasKey("Fluid", 10))
+ return FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("Fluid"));
+ }
+ return null;
+ }
+
+ public static void setFluid(ItemStack stack, FluidStack fluidStack) {
+ boolean removeFluid = (fluidStack == null) || (fluidStack.amount <= 0);
+ NBTTagCompound nbt = stack.getTagCompound();
+ if (nbt == null) {
+ if (removeFluid)
+ return;
+ stack.setTagCompound(nbt = new NBTTagCompound());
+ }
+ if (removeFluid) {
+ nbt.removeTag("Fluid");
+ if (nbt.hasNoTags()) {
+ stack.setTagCompound(null);
+ }
+ } else {
+ nbt.setTag("Fluid", fluidStack.writeToNBT(new NBTTagCompound()));
+ }
+ }
+
+ public static int getFlaskCapacity(ItemStack aStack) {
+ int capacity = 1000;
+ if (aStack.hasTagCompound()) {
+ NBTTagCompound nbt = aStack.getTagCompound();
+ if (nbt.hasKey("Capacity", 3))
+ capacity = nbt.getInteger("Capacity");
+ }
+ return Math.min(getMaxFlaskCapacity(aStack), capacity);
+ }
+
+ public static boolean setNewFlaskCapacity(ItemStack aStack, int aCapacity) {
+ if (aStack == null || aCapacity <= 0) {
+ return false;
+ }
+ aCapacity = Math.min(aCapacity, getMaxFlaskCapacity(aStack));
+ NBTTagCompound nbt = aStack.getTagCompound();
+ if (nbt == null) {
+ aStack.setTagCompound(nbt = new NBTTagCompound());
+ }
+ nbt.setInteger("Capacity", aCapacity);
+ return true;
+ }
+
+ public static Item generateNewFlask(String unlocalized, String english, int maxCapacity) {
+ Constructor aFlask = ReflectionUtils.getConstructor(sClassVolumetricFlask, new Class[] {String.class, String.class, int.class});
+ if (aFlask != null) {
+ Object aInstance = ReflectionUtils.createNewInstanceFromConstructor(aFlask, new Object[] {unlocalized, english, maxCapacity});
+ if (aInstance != null && aInstance instanceof Item) {
+ Item aNewFlaskItem = (Item) aInstance;
+ return aNewFlaskItem;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java b/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
index 1472ff9f23..ce8b6eaf62 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java
@@ -35,6 +35,7 @@ import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaItem_X32;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
import gtPlusPlus.xmod.gregtech.common.covers.GTPP_Cover_Overflow;
+import gtPlusPlus.xmod.gregtech.common.covers.GTPP_Cover_Overflow_Item;
import gtPlusPlus.xmod.gregtech.common.covers.GTPP_Cover_ToggleVisual;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
@@ -200,46 +201,13 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 {
GregtechItemList.Pellet_RTG_SR90.set(this.addItem(42, StringUtils.superscript("90")+"Sr Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
GregtechItemList.Pellet_RTG_PO210.set(this.addItem(43, StringUtils.superscript("210")+"Po Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
GregtechItemList.Pellet_RTG_AM241.set(this.addItem(44, StringUtils.superscript("241")+"Am Pellet", "", new Object[]{getTcAspectStack(TC_Aspects.RADIO, 4L), getTcAspectStack(TC_Aspects.POTENTIA, 2L), getTcAspectStack(TC_Aspects.METALLUM, 2L)}));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_PU238.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 64,
- MathUtils.roundToClosestInt(87.7f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_SR90.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 32,
- MathUtils.roundToClosestInt(28.8f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_PO210.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 512,
- MathUtils.roundToClosestInt(1f));
- GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
- true,
- new ItemStack[]{GregtechItemList.Pellet_RTG_AM241.get(1)},
- new ItemStack[]{},
- null,
- null,
- null,
- 0,
- 16,
- MathUtils.roundToClosestInt(432/2));
+
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_PU238.get(1), MathUtils.roundToClosestInt(87.7f), 64);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_SR90.get(1), MathUtils.roundToClosestInt(28.8f), 32);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_PO210.get(1), 1, 512);
+ CORE.RA.addFuelForRTG(GregtechItemList.Pellet_RTG_AM241.get(1), MathUtils.roundToClosestInt(432/2), 16);
+ CORE.RA.addFuelForRTG(GT_ModHandler.getIC2Item("RTGPellets", 1), MathUtils.roundToClosestInt(2.6f), 8);
+
//Computer Cube
GregtechItemList.Gregtech_Computer_Cube.set(this.addItem(tLastID = 55, "Gregtech Computer Cube", "Reusable", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 8L), getTcAspectStack(TC_Aspects.METALLUM, 8L), getTcAspectStack(TC_Aspects.POTENTIA, 8L)}));
this.setElectricStats(32000 + tLastID, GT_Values.V[6]* 10 * 60 * 20, GT_Values.V[5], 5L, -3L, true);
@@ -370,10 +338,24 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 {
GregtechItemList.Chip_MultiNerf_NoOutputBonus.set(this.addItem(160, "No-Bonus Chip", "You won't like using this"));
GregtechItemList.Chip_MultiNerf_NoSpeedBonus.set(this.addItem(161, "No-Bonus Chip", "You won't like using this"));
- GregtechItemList.Chip_MultiNerf_NoEuBonus.set(this.addItem(162, "No-Bonus Chip", "You won't like using this"));
-
-
+ GregtechItemList.Chip_MultiNerf_NoEuBonus.set(this.addItem(162, "No-Bonus Chip", "You won't like using this"));
+
+
+ /*
+ GregtechItemList.Cover_Overflow_Item_ULV.set(this.addItem(165, "Item Overflow Valve (ULV)", "Maximum void amount: 8000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregtechItemList.Cover_Overflow_Item_LV.set(this.addItem(166, "Item Overflow Valve (LV)", "Maximum void amount: 64000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregtechItemList.Cover_Overflow_Item_MV.set(this.addItem(167, "Item Overflow Valve (MV)", "Maximum void amount: 512000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregtechItemList.Cover_Overflow_Item_HV.set(this.addItem(168, "Item Overflow Valve (HV)", "Maximum void amount: 4096000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregtechItemList.Cover_Overflow_Item_EV.set(this.addItem(169, "Item Overflow Valve (EV)", "Maximum void amount: 32768000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregtechItemList.Cover_Overflow_Item_IV.set(this.addItem(170, "Item Overflow Valve (IV)", "Maximum void amount: 262144000", new Object[]{getTcAspectStack(TC_Aspects.ELECTRUM, 1L), getTcAspectStack(TC_Aspects.MACHINA, 1L), getTcAspectStack(TC_Aspects.ITER, 1L), getTcAspectStack(TC_Aspects.AQUA, 1L)}));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_ULV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[4][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(8));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_LV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[4][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(64));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_MV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[5][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(512));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_HV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[5][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(4096));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_EV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[8][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(32768));
+ GregTech_API.registerCover(GregtechItemList.Cover_Overflow_Item_IV.get(1L), new GT_MultiTexture(new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[8][0], new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)}), new GTPP_Cover_Overflow_Item(262144));
+ */
}
private boolean registerComponents_ULV(){
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java b/src/Java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java
new file mode 100644
index 0000000000..1561ba9f73
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java
@@ -0,0 +1,94 @@
+package gtPlusPlus.xmod.gregtech.common.render;
+
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.ItemList;
+import gregtech.common.items.GT_VolumetricFlask;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import ic2.core.util.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.MinecraftForgeClient;
+import net.minecraftforge.fluids.FluidStack;
+import org.lwjgl.opengl.GL11;
+
+@SideOnly(cpw.mods.fml.relauncher.Side.CLIENT)
+public final class GTPP_FlaskRenderer implements net.minecraftforge.client.IItemRenderer {
+
+ public GTPP_FlaskRenderer() {
+ MinecraftForgeClient.registerItemRenderer(GregtechItemList.VOLUMETRIC_FLASK_8k.getItem(), this);
+ MinecraftForgeClient.registerItemRenderer(GregtechItemList.VOLUMETRIC_FLASK_32k.getItem(), this);
+ }
+
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return type != ItemRenderType.FIRST_PERSON_MAP;
+ }
+
+
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) {
+ return type == ItemRenderType.ENTITY;
+ }
+
+ public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
+ GT_VolumetricFlask cell = (GT_VolumetricFlask) item.getItem();
+
+ int aType = cell.getMaxCapacity() == 8000 ? 0 : 1;
+ IIcon icon = item.getIconIndex();
+ GL11.glEnable(3042);
+ GL11.glEnable(3008);
+ if (type.equals(ItemRenderType.ENTITY)) {
+ GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D);
+ GL11.glRotated(90.0D, 0.0D, 1.0D, 0.0D);
+ GL11.glTranslated(-0.5D, -0.6D, 0.0D);
+ } else if (type.equals(ItemRenderType.EQUIPPED_FIRST_PERSON)) {
+ GL11.glTranslated(1.0D, 1.0D, 0.0D);
+ GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D);
+ } else if (type.equals(ItemRenderType.EQUIPPED)) {
+ GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D);
+ GL11.glTranslated(-1.0D, -1.0D, 0.0D);
+ }
+
+ FluidStack fs = cell.getFluid(item);
+ if (fs != null) {
+ IIcon iconWindow = cell.iconWindow;
+ IIcon fluidicon = fs.getFluid().getIcon(fs);
+ int fluidColor = fs.getFluid().getColor(fs);
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(0, 1);
+ if (type.equals(ItemRenderType.INVENTORY)) {
+ DrawUtil.renderIcon(iconWindow, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F);
+ } else {
+ DrawUtil.renderIcon(iconWindow, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F);
+ DrawUtil.renderIcon(iconWindow, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F);
+ }
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
+ GL11.glBlendFunc(770, 771);
+ GL11.glDepthFunc(514);
+ GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor);
+ if (type.equals(ItemRenderType.INVENTORY)) {
+ DrawUtil.renderIcon(fluidicon, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F);
+ } else {
+ DrawUtil.renderIcon(fluidicon, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F);
+ DrawUtil.renderIcon(fluidicon, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F);
+ }
+
+ GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1);
+ GL11.glDepthFunc(515);
+ }
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(770, 771);
+ if (type.equals(ItemRenderType.INVENTORY)) {
+ DrawUtil.renderIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
+ }
+ GL11.glDisable(3008);
+ GL11.glDisable(3042);
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java
index 33c6bacbd4..eb01823151 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java
@@ -21,6 +21,7 @@ import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.item.general.ItemAirFilter;
+import gtPlusPlus.core.item.general.ItemBasicScrubberTurbine;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
@@ -44,7 +45,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
protected int SLOT_ROTOR = 4;
protected int SLOT_FILTER = 5;
protected static boolean mPollutionEnabled = true;
-
+
protected boolean mSaveRotor = false;
public GregtechMetaAtmosphericReconditioner(int aID, String aName, String aNameRegional, int aTier) {
@@ -78,20 +79,21 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
@Override
public String[] getDescription() {
-
+
boolean highTier = this.mTier >= 7;
-
+
String[] A = new String[]{
this.mDescription,
highTier ? "Will attempt to remove 1/4 pollution from 8 surrounding chunks" : "",
highTier ? "If these chunks are not loaded, they will be ignored" : "",
- "Requires a turbine rotor and an Air Filter [T1/T2] to run.",
- "The turbine rotor must be manually inserted/replaced",
- "Can be configured with a soldering iron to change modes",
- "Low Efficiency: Removes half pollution, Turbine takes 50% dmg",
- "High Efficiency: Removes full pollution, Turbine takes 100% dmg",
- "Turbine Rotor will not break in LE mode",
- };
+ "Requires a turbine rotor and an Air Filter [T1/T2] to run.",
+ "The turbine rotor must be manually inserted/replaced",
+ "Can be configured with a soldering iron to change modes",
+ "Low Efficiency: Removes half pollution, Turbine takes 50% dmg",
+ "High Efficiency: Removes full pollution, Turbine takes 100% dmg",
+ "Turbine Rotor will not break in LE mode",
+ "Insert an equal tier Conveyor Module to enable automation"
+ };
if (!mPollutionEnabled) {
String[] B = new String[] {
"===============================================",
@@ -176,10 +178,10 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
aBaseMetaTileEntity.setActive(false);
this.sendSound((byte) -122);
}
-
+
//Only try once/sec.
if (!isIdle && aTick % 20L == 0L){
-
+
//Check if machine can work.
if ((aBaseMetaTileEntity.isAllowedToWork())){
@@ -195,13 +197,13 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
this.sendSound((byte) -122);
}
}
-
+
//If Active.
if (aBaseMetaTileEntity.isActive()){
//Do nothing if there is no pollution.
if(this.mHasPollution && mCurrentPollution > 0){
-
+
//Only check every 30s.
if (!isIdle && aTick % (20L * 30) == 0L){
mPollutionEnabled = PollutionUtils.mPollution();
@@ -210,9 +212,9 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
PollutionUtils.nullifyPollution(this.getBaseMetaTileEntity());
}
}
-
-
-
+
+
+
//Use a Turbine
if(hasRotor(stackRotor) && hasAirFilter(stackFilter)){
@@ -238,7 +240,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
int mAirSides = getFreeSpaces();
int reduction = 0;
-
+
//If no sides are free, how will you process the atmosphere?
if (mAirSides > 0){
reduction += (((Math.max((tTier-2), 1)*2)*50)*mAirSides); //Was originally *100
@@ -251,7 +253,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
Logger.WARNING("reduction[3]:"+reduction);
mPollutionReduction = reduction;
-
+
//Set a temp to remove variable to aleviate duplicate code.
int toRemove = 0;
@@ -268,6 +270,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
//We are good to clean
if (toRemove > 0){
if (damageTurbineRotor() && damageAirFilter()){
+ Logger.INFO("Removing "+toRemove+" pollution");
removePollution(mSaveRotor ? (toRemove/2) : toRemove);
Logger.WARNING("mNewPollution[4]:"+getCurrentChunkPollution());
}
@@ -293,21 +296,21 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
} //End of 1/sec action block.
else {
-
+
if (hasRotor(stackRotor) && hasAirFilter(stackFilter) && this.mHasPollution && !isIdle && aBaseMetaTileEntity.isAllowedToWork()){
aBaseMetaTileEntity.setActive(true);
}
else if (isIdle || !this.mHasPollution || mCurrentPollution <= 0 || stackRotor == null || stackFilter == null || !hasRotor(stackRotor) || !hasAirFilter(stackFilter)){
aBaseMetaTileEntity.setActive(false);
}
-
+
}
if (this.getBaseMetaTileEntity().isActive()) {
if (MathUtils.randInt(0, 5) <= 2) {
this.sendSound((byte) -120);
}
}
-
+
} //End of is serverside block.
}
@@ -363,9 +366,12 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
return mCurrentChunkPollution;
}
-
+
public boolean hasRotor(ItemStack rotorStack){
if(rotorStack != null){
+ if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) {
+ return true;
+ }
if (rotorStack.getItem() instanceof GT_MetaGenerated_Tool && rotorStack.getItemDamage() >= 170 && rotorStack.getItemDamage() <= 179){
return true;
}
@@ -375,7 +381,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
public boolean damageTurbineRotor(){
try{
-
+
boolean creativeRotor = false;
ItemStack rotorStack = this.mInventory[SLOT_ROTOR];
if (rotorStack == null) {
@@ -390,15 +396,34 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
}
}
-
+
+ if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) {
+ long currentUse = ItemBasicScrubberTurbine.getFilterDamage(rotorStack);
+ //Remove broken Filter
+ if (rotorStack.getItemDamage() == 0 && currentUse >= 2500-10){
+ this.mInventory[this.SLOT_FILTER] = null;
+ return false;
+ }
+ else if (rotorStack.getItemDamage() == 1 && currentUse >= 5000-10){
+ this.mInventory[this.SLOT_FILTER] = null;
+ return false;
+ }
+ else {
+ //Do Damage
+ ItemAirFilter.setFilterDamage(rotorStack, currentUse+10);
+ Logger.WARNING("Rotor Damage: "+currentUse);
+ return true;
+ }
+ }
+
if(mInventory[SLOT_ROTOR].getItem() instanceof GT_MetaGenerated_Tool_01 &&
((GT_MetaGenerated_Tool) mInventory[SLOT_ROTOR].getItem()).getToolStats(mInventory[SLOT_ROTOR]).getSpeedMultiplier()>0 &&
GT_MetaGenerated_Tool.getPrimaryMaterial(mInventory[SLOT_ROTOR]).mToolSpeed>0 ) {
-
+
long damageValue = (long) Math.floor(Math.abs(MathUtils.randFloat(1, 2) - MathUtils.randFloat(1, 3)) * (1 + 3 - 1) + 1);
double fDam = Math.floor(Math.abs(MathUtils.randFloat(1f, 2f) - MathUtils.randFloat(1f, 2f)) * (1f + 2f - 1f) + 1f);
damageValue -= fDam;
-
+
//Logger.WARNING("Trying to do "+damageValue+" damage to the rotor. ["+fDam+"]");
/*Materials M1 = GT_MetaGenerated_Tool.getPrimaryMaterial(this.mInventory[this.SLOT_ROTOR]);
Materials M2 = GT_MetaGenerated_Tool.getSecondaryMaterial(this.mInventory[this.SLOT_ROTOR]);
@@ -412,14 +437,27 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
long rotorDurability = (rotorDurabilityMax - rotorDamage);
Logger.WARNING("Rotor Damage: "+rotorDamage + " | Max Durability: "+rotorDurabilityMax+" | "+" Remaining Durability: "+rotorDurability);
if (rotorDurability >= damageValue){
-
-
- if (!mSaveRotor){
- Logger.WARNING("Damaging Rotor.");
-
- if (!creativeRotor)
+
+
+ if (!mSaveRotor){
+ Logger.WARNING("Damaging Rotor.");
+
+ if (!creativeRotor)
GT_ModHandler.damageOrDechargeItem(this.mInventory[this.SLOT_ROTOR], (int) damageValue, 0, null);
+ long tempDur = GT_MetaGenerated_Tool.getToolDamage(this.mInventory[this.SLOT_ROTOR]);
+ if (tempDur < rotorDurabilityMax){
+ return true;
+ }
+ else {
+ rotorDurability = 0;
+ }
+ }
+ else {
+ Logger.WARNING("Damaging Rotor.");
+ if (rotorDurability > 1000){
+ if (!creativeRotor)
+ GT_ModHandler.damageOrDechargeItem(this.mInventory[this.SLOT_ROTOR], (int) damageValue/2, 0, null);
long tempDur = GT_MetaGenerated_Tool.getToolDamage(this.mInventory[this.SLOT_ROTOR]);
if (tempDur < rotorDurabilityMax){
return true;
@@ -427,23 +465,10 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
else {
rotorDurability = 0;
}
- }
- else {
- Logger.WARNING("Damaging Rotor.");
- if (rotorDurability > 1000){
- if (!creativeRotor)
- GT_ModHandler.damageOrDechargeItem(this.mInventory[this.SLOT_ROTOR], (int) damageValue/2, 0, null);
- long tempDur = GT_MetaGenerated_Tool.getToolDamage(this.mInventory[this.SLOT_ROTOR]);
- if (tempDur < rotorDurabilityMax){
- return true;
- }
- else {
- rotorDurability = 0;
- }
- }
- }
-
-
+ }
+ }
+
+
}
if (rotorDurability <= 0 && !mSaveRotor && !creativeRotor) {
@@ -494,11 +519,11 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
public boolean removePollution(int toRemove){
-
+
if (this == null || this.getBaseMetaTileEntity() == null || this.getBaseMetaTileEntity().getWorld() == null) {
return false;
}
-
+
if (this.mTier < 7) {
int startPollution = getCurrentChunkPollution();
PollutionUtils.removePollution(this.getBaseMetaTileEntity(), toRemove);
@@ -512,7 +537,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
Chunk aThisChunk = this.getBaseMetaTileEntity().getWorld().getChunkFromBlockCoords(this.getBaseMetaTileEntity().getXCoord(), this.getBaseMetaTileEntity().getZCoord());
int mainChunkX = aThisChunk.xPosition;
int mainChunkZ = aThisChunk.zPosition;
-
+
World aWorld = this.getBaseMetaTileEntity().getWorld();
int xPos = this.getBaseMetaTileEntity().getXCoord();
int zPos = this.getBaseMetaTileEntity().getZCoord();
@@ -536,21 +561,21 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
aSurrounding.put(c1);
aSurrounding.put(c2);
aSurrounding.put(c3);
-
+
for (Chunk r : aSurrounding) {
if (!r.isChunkLoaded) {
continue;
}
-
+
int startPollution = getPollutionInChunk(r);
if (startPollution == 0) {
continue;
}
-
+
Logger.WARNING("Trying to remove pollution from chunk "+r.xPosition+", "+r.zPosition+" | "+startPollution);
int after = 0;
boolean isMainChunk = r.isAtLocation(mainChunkX, mainChunkZ);
-
+
int removal = Math.max(0, !isMainChunk ? (toRemove/4) : toRemove);
if (removePollution(r, removal)) {
chunksWithRemoval++;
@@ -567,7 +592,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
return totalRemoved > 0 && chunksWithRemoval > 0;
}
}
-
+
public boolean removePollution(Chunk aChunk, int toRemove){
int before = getCurrentChunkPollution();
PollutionUtils.removePollution(aChunk, toRemove);
@@ -591,7 +616,7 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
if (filter == null) {
return false;
}
-
+
boolean creativeRotor = false;
ItemStack rotorStack = this.mInventory[SLOT_ROTOR];
if (rotorStack != null) {
@@ -603,11 +628,11 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
}
}
-
+
if (creativeRotor) {
return true;
}
-
+
if (filter.getItem() instanceof ItemAirFilter){
@@ -645,10 +670,25 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
@Override
public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
- if (aIndex == 4){
- return false;
+ if (aIndex == 5) {
+ if (aStack.getItem() instanceof ItemAirFilter) {
+ Logger.INFO("Inserting Air Filter into "+aIndex);
+ return true;
+ }
}
- return super.canInsertItem(aIndex, aStack, aSide);
+ if (aIndex == 4) {
+ if (this.mInventory[6] != null) {
+ Logger.INFO("Found conveyor, can automate turbines. Inserting into "+aIndex);
+ if (aStack.getItem() instanceof ItemBasicScrubberTurbine) {
+ return true;
+ }
+ if (aStack.getItem() instanceof GT_MetaGenerated_Tool && aStack.getItemDamage() >= 170 && aStack.getItemDamage() <= 179){
+ return true;
+ }
+ }
+ }
+ //return super.canInsertItem(aIndex, aStack, aSide);
+ return false;
}
@Override
@@ -695,29 +735,29 @@ public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_Basi
}
int mAirSides = getFreeSpaces();
int reduction = 0;
-
+
try {
- long tVoltage = maxEUInput();
- byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
- reduction += (((Math.max((tTier-2), 1)*2)*50)*mAirSides);
- reduction = (MathUtils.safeInt((long)reduction*this.mBaseEff)/100000)*mAirSides*Math.max((tTier-2), 1);
- reduction = MathUtils.safeInt(((long)reduction/100)*this.mOptimalAirFlow);
-
- aTooltipSuper.put("Maximum pollution removed per second: "+reduction);
+ long tVoltage = maxEUInput();
+ byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+ reduction += (((Math.max((tTier-2), 1)*2)*50)*mAirSides);
+ reduction = (MathUtils.safeInt((long)reduction*this.mBaseEff)/100000)*mAirSides*Math.max((tTier-2), 1);
+ reduction = MathUtils.safeInt(((long)reduction/100)*this.mOptimalAirFlow);
+
+ aTooltipSuper.put("Maximum pollution removed per second: "+reduction);
}
catch (Throwable t) {
aTooltipSuper.put("Maximum pollution removed per second: "+mPollutionReduction);
}
aTooltipSuper.put("Air Sides: "+mAirSides);
-
+
String[] mBuiltOutput = new String[aTooltipSuper.size()];
int aIndex = 0;
for (String i : aTooltipSuper) {
mBuiltOutput[aIndex++] = i;
}
-
-
-
+
+
+
return mBuiltOutput;
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java
index 2f9bbcc9fb..78f60f13c9 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java
@@ -350,15 +350,16 @@ public class GregtechMetaPollutionDetector extends GregtechMetaTileEntity {
}
//Emit Redstone
if (this.getCurrentChunkPollution() >= this.mRedstoneLevel){
- this.markDirty();
for (int i=0;i<6;i++){
this.getBaseMetaTileEntity().setStrongOutputRedstoneSignal((byte) i, (byte) 16);
}
+ this.markDirty();
}
else {
for (int i=0;i<6;i++){
this.getBaseMetaTileEntity().setStrongOutputRedstoneSignal((byte) i, (byte) 0);
}
+ this.markDirty();
}
//Do Math for stats
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
index eca02d290e..10286411a7 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java
@@ -2,9 +2,6 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc;
import java.util.ArrayList;
-import net.minecraft.block.Block;
-import net.minecraft.item.ItemStack;
-
import gregtech.api.enums.*;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -15,13 +12,13 @@ import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.api.objects.minecraft.ItemStackData;
import gtPlusPlus.core.block.ModBlocks;
-import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java
index 31c9636cac..2d249feaff 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java
@@ -221,6 +221,11 @@ extends GregtechMeta_MultiBlockBase {
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
- mCuttingMode = aNBT.getBoolean("mCuttingMode");
+ if (aNBT.hasKey("mCuttingMode")) {
+ mCuttingMode = aNBT.getBoolean("mCuttingMode");
+ }
+ else {
+ mCuttingMode = true;
+ }
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java
index 4cf8c55005..8f54d21906 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java
@@ -1,8 +1,5 @@
package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing;
-import static gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes;
-import static gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT;
-
import gregtech.api.GregTech_API;
import gregtech.api.enums.TAE;
import gregtech.api.enums.Textures;
@@ -11,8 +8,8 @@ import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.objects.GT_RenderedTexture;
-import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GTPP_Recipe;
+import gregtech.api.util.GT_Recipe;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.util.minecraft.FluidUtils;
@@ -106,12 +103,7 @@ public class GregtechMetaTileEntity_IndustrialVacuumFreezer extends GregtechMeta
return "VacuumFreezer";
}
- public GT_Recipe.GT_Recipe_Map getRecipeMap() {
- if (sAdvFreezerRecipes_GT.mRecipeList.size() < 1) {
- for (GT_Recipe a : sAdvFreezerRecipes.mRecipeList) {
- sAdvFreezerRecipes_GT.add(a);
- }
- }
+ public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT;
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java
new file mode 100644
index 0000000000..06d63867da
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java
@@ -0,0 +1,135 @@
+package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam;
+
+import static gregtech.api.GregTech_API.sBlockCasings1;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GT_Recipe;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class GregtechMetaTileEntity_SteamMacerator extends GregtechMeta_SteamMultiBase {
+
+ private String mCasingName = "Bronze Plated Bricks";
+
+ public GregtechMetaTileEntity_SteamMacerator(String aName) {
+ super(aName);
+ }
+
+ public GregtechMetaTileEntity_SteamMacerator(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) {
+ return new GregtechMetaTileEntity_SteamMacerator(this.mName);
+ }
+
+ public boolean isFacingValid(byte aFacing) {
+ return aFacing > 1;
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlay() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR);
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlayActive() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE);
+ }
+
+ @Override
+ public String getMachineType() {
+ return "Macerator";
+ }
+
+ @Override
+ public String[] getTooltip() {
+ if (mCasingName.contains("gt.blockcasings")) {
+ mCasingName = ItemList.Casing_BronzePlatedBricks.get(1).getDisplayName();
+ }
+ return new String[]{
+ "Controller Block for the Steam Macerator",
+ "Macerates "+getMaxParallelRecipes()+" ores at a time",
+ "Size(WxHxD): 3x3x3 (Hollow), Controller (Front centered)",
+ "1x Input Bus (Any casing)",
+ "1x Output Bus (Any casing)",
+ "1x Steam Hatch (Any casing)",
+ mCasingName+" for the rest (14 at least!)",
+ TAG_HIDE_MAINT
+ };
+ }
+
+ @Override
+ public int getMaxParallelRecipes() {
+ return 8;
+ }
+
+
+ public GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ return GT_Recipe.GT_Recipe_Map.sMaceratorRecipes;
+ }
+
+ @Override
+ public boolean checkMultiblock(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;
+ int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+ int tAmount = 0;
+ if (!aBaseMetaTileEntity.getAirOffset(xDir, 0, zDir)) {
+ return false;
+ } else {
+ for (int i = -1; i < 2; ++i) {
+ for (int j = -1; j < 2; ++j) {
+ for (int h = -1; h < 2; ++h) {
+ if (h != 0 || (xDir + i != 0 || zDir + j != 0) && (i != 0 || j != 0)) {
+ IGregTechTileEntity tTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xDir + i,
+ h, zDir + j);
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j);
+
+ if (!isValidBlockForStructure(tTileEntity, 10, true, aBlock, aMeta,
+ sBlockCasings1, 10)) {
+ Logger.INFO("Bad macerator casing");
+ return false;
+ }
+ ++tAmount;
+
+ }
+ }
+ }
+ }
+ if (tAmount >= 14) {
+ fixAllMaintenanceIssue();
+ }
+ return tAmount >= 14;
+ }
+ }
+
+ @Override
+ public ItemStack[] getOutputItems(GT_Recipe aRecipe) {
+ // Collect output item types
+ ItemStack[] tOutputItems = new ItemStack[1];
+ for (int h = 0; h < 1; h++) {
+ if (aRecipe.getOutput(h) != null) {
+ tOutputItems[h] = aRecipe.getOutput(h).copy();
+ tOutputItems[h].stackSize = 0;
+ }
+ }
+ return tOutputItems;
+ }
+
+ @Override
+ public int getOutputCount(ItemStack[] aOutputs) {
+ return 1;
+ }
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java
new file mode 100644
index 0000000000..05b6b19d5c
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java
@@ -0,0 +1,989 @@
+package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production;
+
+import static gtPlusPlus.core.util.data.ArrayUtils.removeNulls;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GTPP_Recipe;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Triplet;
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.recipe.common.CI;
+import gtPlusPlus.core.util.math.MathUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_ElementalDataOrbHolder;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_Catalysts;
+import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
+import gtPlusPlus.xmod.gregtech.common.StaticFields59;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+public class GregtechMTE_ElementalDuplicator extends GregtechMeta_MultiBlockBase {
+
+ private int mSolidCasingTier = 0;
+ private int mMachineCasingTier = 0;
+ private int mPipeCasingTier = 0;
+ private int mCoilTier = 0;
+
+ private ArrayList<GT_MetaTileEntity_Hatch_ElementalDataOrbHolder> mDataHolders = new ArrayList<GT_MetaTileEntity_Hatch_ElementalDataOrbHolder>();
+
+ private static final HashMap<Integer, Triplet<Block, Integer, Integer>> mTieredBlockRegistry = new HashMap<Integer, Triplet<Block, Integer, Integer>>();
+
+ public GregtechMTE_ElementalDuplicator(final int aID, final String aName, final String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GregtechMTE_ElementalDuplicator(final String aName) {
+ super(aName);
+ }
+
+ public static boolean registerMachineCasingForTier(int aTier, Block aBlock, int aMeta, int aCasingTextureID) {
+ int aSize = mTieredBlockRegistry.size();
+ int aSize2 = aSize;
+ Triplet<Block, Integer, Integer> aCasingData = new Triplet<Block, Integer, Integer>(aBlock, aMeta, aCasingTextureID);
+ if (mTieredBlockRegistry.containsKey(aTier)) {
+ CORE.crash("Tried to register a Machine casing for tier "+aTier+" to the Chemical Plant, however this tier already contains one.");
+ }
+ mTieredBlockRegistry.put(aTier, aCasingData);
+ aSize = mTieredBlockRegistry.size();
+ return aSize > aSize2;
+ }
+
+ private static Block getBlockForTier(int aTier) {
+ if (!mTieredBlockRegistry.containsKey(aTier)) {
+ return Blocks.bedrock;
+ }
+ return mTieredBlockRegistry.get(aTier).getValue_1();
+ }
+ private static int getMetaForTier(int aTier) {
+ if (!mTieredBlockRegistry.containsKey(aTier)) {
+ return 32;
+ }
+ return mTieredBlockRegistry.get(aTier).getValue_2();
+ }
+ private static int getCasingTextureIdForTier(int aTier) {
+ return 67;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) {
+ return new GregtechMTE_ElementalDuplicator(this.mName);
+ }
+
+ @Override
+ public String getMachineType() {
+ return "Chemical Plant";
+ }
+
+ @Override
+ public String[] getTooltip() {
+ return new String[] {
+ "Controller Block for the Industrial Replication Machine",
+ "Now replication is less painful",
+ "Please read to user manual for more information on construction & usage",
+ TAG_HIDE_MAINT
+ };
+ }
+
+ @Override
+ public String getSound() {
+ return GregTech_API.sSoundList.get(Integer.valueOf(207));
+ }
+
+ @Override
+ public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final byte aFacing, final byte aColorIndex, final boolean aActive, final boolean aRedstone) {
+
+ ITexture aOriginalTexture;
+
+ // Check things exist client side (The worst code ever)
+ if (aBaseMetaTileEntity.getWorld() != null) {
+
+ }
+ int aCasingID = getCasingTextureID();
+ aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[aCasingID];
+
+ if (aSide == aFacing) {
+ return new ITexture[]{aOriginalTexture, new GT_RenderedTexture(aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced)};
+ }
+ return new ITexture[]{aOriginalTexture};
+ }
+
+ @Override
+ public boolean hasSlotInGUI() {
+ return true;
+ }
+
+ @Override
+ public GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ return GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlant_GT;
+ }
+
+ public static void generateRecipes() {
+ for (GTPP_Recipe i : GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlantRecipes.mRecipeList) {
+ GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlant_GT.add(i);
+ }
+ }
+
+ @Override
+ public boolean isFacingValid(final byte aFacing) {
+ return aFacing > 1;
+ }
+
+ @Override
+ public int getMaxParallelRecipes() {
+ return 2 * getPipeCasingTier();
+ }
+
+ @Override
+ public int getEuDiscountForParallelism() {
+ return 100;
+ }
+
+ private int getSolidCasingTier() {
+ return this.mSolidCasingTier;
+ }
+
+ private int getMachineCasingTier() {
+ return mMachineCasingTier;
+ }
+ private int getPipeCasingTier() {
+ return mPipeCasingTier;
+ }
+ private int getCoilTier() {
+ return mCoilTier;
+ }
+
+ private int getCasingTextureID() {
+ // Check the Tier Client Side
+ int aTier = mSolidCasingTier;
+ int aCasingID = getCasingTextureIdForTier(aTier);
+ return aCasingID;
+ }
+
+ public boolean addToMachineList(IGregTechTileEntity aTileEntity) {
+ int aMaxTier = getMachineCasingTier();
+ final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_TieredMachineBlock) {
+ GT_MetaTileEntity_TieredMachineBlock aMachineBlock = (GT_MetaTileEntity_TieredMachineBlock) aMetaTileEntity;
+ int aTileTier = aMachineBlock.mTier;
+ if (aTileTier > aMaxTier) {
+ Logger.INFO("Hatch tier too high.");
+ return false;
+ }
+ else {
+ return addToMachineList(aTileEntity, getCasingTextureID());
+ }
+ }
+ else {
+ Logger.INFO("Bad Tile Entity being added to hatch map."); // Shouldn't ever happen, but.. ya know..
+ return false;
+ }
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("mSolidCasingTier", this.mSolidCasingTier);
+ aNBT.setInteger("mMachineCasingTier", this.mMachineCasingTier);
+ aNBT.setInteger("mPipeCasingTier", this.mPipeCasingTier);
+ aNBT.setInteger("mCoilTier", this.mCoilTier);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mSolidCasingTier = aNBT.getInteger("mSolidCasingTier");
+ mMachineCasingTier = aNBT.getInteger("mMachineCasingTier");
+ mPipeCasingTier = aNBT.getInteger("mPipeCasingTier");
+ mCoilTier = aNBT.getInteger("mCoilTier");
+ }
+
+ private static boolean isBlockSolidCasing(int aCurrentTier, Block aBlock, int aMeta) {
+ if (aBlock == null || (aMeta < 0 || aMeta > 16)) {
+ return false;
+ }
+ Block aTieredCasing = ModBlocks.blockCasings5Misc;
+ int aTieredMeta = 3;
+ if (aBlock == aTieredCasing && aMeta == aTieredMeta) {
+ return true;
+ }
+ return false;
+ }
+ private static boolean isBlockMachineCasing(Block aBlock, int aMeta) {
+ Block aCasingBlock1 = GregTech_API.sBlockCasings1;
+ if (aBlock == aCasingBlock1) {
+ if (aMeta > 9 || aMeta < 0) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ else {
+ return false;
+ }
+ }
+ private static boolean isBlockPipeCasing(Block aBlock, int aMeta) {
+ Block aCasingBlock2 = GregTech_API.sBlockCasings2;
+ if (aBlock == aCasingBlock2) {
+ int aMetaBronzePipeCasing = 12;
+ //int aMetaSteelPipeCasing = 13;
+ //int aMetaTitaniumPipeCasing = 14;
+ int aMetaTungstenPipeCasing = 15;
+ if (aMeta > aMetaTungstenPipeCasing || aMeta < aMetaBronzePipeCasing) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ else {
+ return false;
+ }
+ }
+
+ private static AutoMap<Integer> mValidCoilMetaCache;
+
+ private static boolean isBlockCoil(Block aBlock, int aMeta) {
+ Block aCasingBlock;
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) {
+ aCasingBlock = StaticFields59.getBlockCasings5();
+ }
+ else {
+ aCasingBlock = GregTech_API.sBlockCasings1;
+ }
+ // Cache the meta values for later
+ if (mValidCoilMetaCache == null || mValidCoilMetaCache.isEmpty()) {
+ AutoMap<Integer> aValidCoilMeta = new AutoMap<Integer>();
+ // Only use the right meta values available.
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) {
+ aValidCoilMeta = Meta_GT_Proxy.GT_ValidHeatingCoilMetas;
+ }
+ else {
+ aValidCoilMeta.put(12);
+ aValidCoilMeta.put(13);
+ aValidCoilMeta.put(14);
+ }
+ mValidCoilMetaCache = aValidCoilMeta;
+ }
+ if (aBlock == aCasingBlock) {
+ for (int i: mValidCoilMetaCache.values()) {
+ if (i == aMeta) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ @Override
+ public boolean checkMultiblock(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack) {
+
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX * 3;
+ int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ * 3;
+
+ Logger.INFO("Checking ChemPlant Structure");
+
+ // Require Air above controller
+ boolean aAirCheck = aBaseMetaTileEntity.getAirOffset(0, 1, 0);
+
+ if (!aAirCheck) {
+ Logger.INFO("No Air Above Controller");
+ return false;
+ } else {
+
+ //String aName = aInitStructureCheck != null ? ItemUtils.getLocalizedNameOfBlock(aInitStructureCheck, aInitStructureCheckMeta) : "Air";
+
+ mSolidCasingTier = getSolidCasingTierCheck(aBaseMetaTileEntity, xDir, zDir);
+ mMachineCasingTier = getMachineCasingTierCheck(aBaseMetaTileEntity, xDir, zDir);
+
+ Logger.INFO("Initial Casing Check Complete, Solid Casing Tier: "+mSolidCasingTier+", Machine Casing Tier: "+mMachineCasingTier);
+
+ int aSolidCasingCount = 0;
+ int aMachineCasingCount = 0;
+ int aPipeCount = 0;
+ int aCoilCount = 0;
+
+ aSolidCasingCount = checkSolidCasings(aBaseMetaTileEntity, aStack, xDir, zDir);
+ aMachineCasingCount = checkMachineCasings(aBaseMetaTileEntity, aStack, xDir, zDir);
+ aPipeCount = checkPipes(aBaseMetaTileEntity, aStack, xDir, zDir);
+ aCoilCount = checkCoils(aBaseMetaTileEntity, aStack, xDir, zDir);
+
+ Logger.INFO("Casing Counts: ");
+ Logger.INFO("Solid: "+aSolidCasingCount+", Machine: "+aMachineCasingCount);
+ Logger.INFO("Pipe: "+aPipeCount+", Coil: "+aCoilCount);
+
+
+ Logger.INFO("Casing Tiers: ");
+ Logger.INFO("Solid: "+getSolidCasingTier()+", Machine: "+getMachineCasingTier());
+ Logger.INFO("Pipe: "+getPipeCasingTier()+", Coil: "+getCoilTier());
+
+ // Attempt to sync fields here, so that it updates client side values.
+ aBaseMetaTileEntity.getWorld().markBlockForUpdate(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord());
+
+
+
+ // Minimum 80/93 Solid Casings
+ if (aSolidCasingCount < 80) {
+ Logger.INFO("Not enough solid casings. Found "+aSolidCasingCount+", require: 80.");
+ return false;
+ }
+ if (aMachineCasingCount != 57) {
+ Logger.INFO("Not enough machine casings. Found "+aMachineCasingCount+", require: 57.");
+ return false;
+ }
+ if (aPipeCount != 18) {
+ Logger.INFO("Not enough pipe casings. Found "+aPipeCount+", require: 18.");
+ return false;
+ }
+ if (aCoilCount != 27) {
+ Logger.INFO("Not enough coils. Found "+aCoilCount+", require: 27.");
+ return false;
+ }
+
+ Logger.INFO("Structure Check Complete!");
+
+ return true;
+ }
+ }
+
+
+ public int checkCoils(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack, int aOffsetX, int aOffsetZ) {
+ int tAmount = 0;
+ int aCurrentCoilMeta = -1;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = 0; h < 8; h++) {
+ if (h == 1 || h == 3 || h == 5) {
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, h, aOffsetZ + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, h, aOffsetZ + j);
+ if (isBlockCoil(aBlock, aMeta)) {
+ if (aCurrentCoilMeta < 0) {
+ aCurrentCoilMeta = aMeta;
+ }
+ if (aCurrentCoilMeta != aMeta) {
+ return tAmount;
+ }
+ else {
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK) {
+ this.mCoilTier = (aCurrentCoilMeta+1);
+ }
+ else {
+ if (aCurrentCoilMeta == 12) {
+ this.mCoilTier = 1;
+ }
+ else if (aCurrentCoilMeta == 13) {
+ this.mCoilTier = 2;
+ }
+ else if (aCurrentCoilMeta == 14) {
+ this.mCoilTier = 3;
+ }
+ else {
+ this.mCoilTier = 0;
+ }
+ }
+
+ return tAmount;
+ }
+
+
+ public int checkPipes(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack, int aOffsetX, int aOffsetZ) {
+ int tAmount = 0;
+ int aCurrentPipeMeta = -1;
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ for (int h = 0; h < 8; h++) {
+ if (h == 2 || h == 4) {
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, h, aOffsetZ + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, h, aOffsetZ + j);
+ if (isBlockPipeCasing(aBlock, aMeta)) {
+ if (aCurrentPipeMeta < 0) {
+ aCurrentPipeMeta = aMeta;
+ }
+ if (aCurrentPipeMeta != aMeta) {
+ return tAmount;
+ }
+ else {
+ tAmount++;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (aCurrentPipeMeta == 12) {
+ this.mPipeCasingTier = 1;
+ }
+ else if (aCurrentPipeMeta == 13) {
+ this.mPipeCasingTier = 2;
+ }
+ else if (aCurrentPipeMeta == 14) {
+ this.mPipeCasingTier = 3;
+ }
+ else if (aCurrentPipeMeta == 15) {
+ this.mPipeCasingTier = 4;
+ }
+ else {
+ this.mPipeCasingTier = 0;
+ }
+
+ return tAmount;
+ }
+
+
+ public int checkSolidCasings(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack, int aOffsetX, int aOffsetZ) {
+
+ int tAmount = 0;
+
+ // Only check a 7x7
+ for (int i = -3; i < 4; i++) {
+ for (int j = -3; j < 4; j++) {
+ // If we are on the 7x7 ring, proceed
+ IGregTechTileEntity aTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityOffset(aOffsetX + i, 0, aOffsetZ + j);
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, 0, aOffsetZ + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, 0, aOffsetZ + j);
+
+ if (aTileEntity != null) {
+
+ if (this.addToMachineList(aTileEntity)) {
+ tAmount++;
+ }
+ else {
+ if (aTileEntity != null) {
+ Logger.INFO("Adding "+aTileEntity.getInventoryName());
+ }
+ final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ Logger.INFO("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aTileEntity.getInventoryName());
+ return tAmount;
+ }
+ //Handle controller
+ if (aMetaTileEntity instanceof GregtechMTE_ElementalDuplicator) {
+ continue;
+ }
+ else {
+ Logger.INFO("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aMetaTileEntity.getInventoryName());
+ return tAmount;
+ }
+ }
+ }
+ else {
+ if (isBlockSolidCasing(mSolidCasingTier, aBlock, aMeta)) {
+ tAmount++;
+ }
+ else {
+ Logger.INFO("Error counting Bottom Layer Casing Ring. Found "+aBlock.getLocalizedName()+":"+aMeta);
+ return tAmount;
+ }
+ }
+
+ }
+ }
+
+ return tAmount;
+ }
+
+
+ public int checkMachineCasings(final IGregTechTileEntity aBaseMetaTileEntity, final ItemStack aStack, int aOffsetX, int aOffsetZ) {
+ int tAmount = 0;
+ int aHeight = 0;
+ // Iterate once for each layer
+ for (int aIteration=0;aIteration<3;aIteration++) {
+ // Dynamically set height
+ aHeight = (aIteration == 0 ? 0 : aIteration == 1 ? 1 : 5);
+ // Only check a 5x5 area
+ for (int i = -2; i < 3; i++) {
+ for (int j = -2; j < 3; j++) {
+ // If we are on the 5x5 ring, proceed
+ if (i == -2 || i == 2 || j == -2 || j == 2) {
+ // If the second axis is on the outer ring, continue
+ if (i < -2 || i > 2 || j < -2 || j > 2) {
+ continue;
+ }
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, aHeight, aOffsetZ + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, aHeight, aOffsetZ + j);
+ if (isBlockMachineCasing(aBlock, aMeta)) {
+ tAmount++;
+ }
+ else {
+ return tAmount;
+ }
+ }
+ }
+ }
+ }
+
+ // Check bottom layer inner 3x3
+ for (int i = -1; i < 2; i++) {
+ for (int j = -1; j < 2; j++) {
+ Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, 0, aOffsetZ + j);
+ int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, 0, aOffsetZ + j);
+ if (isBlockMachineCasing(aBlock, aMeta)) {
+ tAmount++;
+ }
+ else {
+ return tAmount;
+ }
+ }
+ }
+
+ return tAmount;
+ }
+
+ public int getSolidCasingTierCheck(IGregTechTileEntity aBaseMetaTileEntity, int xDir, int zDir) {
+ Block aInitStructureCheck;
+ int aInitStructureCheckMeta;
+ if (xDir == 0) {
+ aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(zDir, 1, 0);
+ aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(zDir, 1, 0);
+ }
+ else {
+ aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 1, xDir);
+ aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 1, xDir);
+ }
+ for (int aTier : mTieredBlockRegistry.keySet()) {
+ Triplet<Block, Integer, Integer> aData = mTieredBlockRegistry.get(aTier);
+ if (aData.getValue_1() == aInitStructureCheck && aData.getValue_2() == aInitStructureCheckMeta) {
+ return aTier;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
+ final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ }
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_ElementalDataOrbHolder) {
+ log("Found GT_MetaTileEntity_Hatch_ElementalDataOrbHolder");
+ return addToMachineListInternal(mDataHolders, aMetaTileEntity, aBaseCasingIndex);
+ }
+ return super.addToMachineList(aTileEntity, aBaseCasingIndex);
+ }
+
+ public int getMachineCasingTierCheck(IGregTechTileEntity aBaseMetaTileEntity, int xDir, int zDir) {
+ return 10;
+ }
+
+
+ @Override
+ public int getMaxEfficiency(final ItemStack aStack) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerTick(final ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public int getAmountOfOutputs() {
+ return 1;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(final ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public String getCustomGUIResourceName() {
+ return null;
+ }
+
+ // Same speed bonus as pyro oven
+ public int getSpeedBonus() {
+ return 50 * (this.mCoilTier - 2);
+ }
+
+ public int getMaxCatalystDurability() {
+ return 50;
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (this.mUpdate == 1 || this.mStartUpCheck == 1) {
+ this.mDataHolders.clear();
+ }
+ }
+ // Silly Client Syncing
+ if (aBaseMetaTileEntity.isClientSide()) {
+ if (this != null && this.getBaseMetaTileEntity() != null && this.getBaseMetaTileEntity().getWorld() != null) {
+ this.mSolidCasingTier = getCasingTierOnClientSide();
+ markDirty();
+ }
+ }
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ }
+
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ }
+
+ @Override
+ public boolean checkRecipe(final ItemStack aStack) {
+ return checkRecipeGeneric(getMaxParallelRecipes(), getEuDiscountForParallelism(), getSpeedBonus());
+ }
+
+
+ @Override
+ public boolean checkRecipeGeneric(
+ ItemStack[] aItemInputs, FluidStack[] aFluidInputs,
+ int aMaxParallelRecipes, int aEUPercent,
+ int aSpeedBonusPercent, int aOutputChanceRoll, GT_Recipe aRecipe) {
+
+ // Based on the Processing Array. A bit overkill, but very flexible.
+
+ // Reset outputs and progress stats
+ this.mEUt = 0;
+ this.mMaxProgresstime = 0;
+ this.mOutputItems = new ItemStack[]{};
+ this.mOutputFluids = new FluidStack[]{};
+
+ long tVoltage = getMaxInputVoltage();
+ byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+ long tEnergy = getMaxInputEnergy();
+ log("Running checkRecipeGeneric(0)");
+
+ // checks if it has a catalyst with enough durability
+ ItemStack tCatalystRecipe = findCatalyst(aItemInputs);
+ if (tCatalystRecipe == null) {
+ log("does not have catalyst");
+ return false;
+ }
+
+ GT_Recipe tRecipe = findRecipe(
+ getBaseMetaTileEntity(), mLastRecipe, false,
+ gregtech.api.enums.GT_Values.V[tTier], aFluidInputs, aItemInputs);
+
+
+ log("Running checkRecipeGeneric(1)");
+ // Remember last recipe - an optimization for findRecipe()
+ this.mLastRecipe = tRecipe;
+
+
+ if (tRecipe == null) {
+ log("BAD RETURN - 1");
+ return false;
+ }
+
+ if (tRecipe.mSpecialValue > this.mSolidCasingTier) {
+ log("solid tier is too low");
+ return false;
+ }
+
+
+ aMaxParallelRecipes = this.canBufferOutputs(tRecipe, aMaxParallelRecipes);
+ if (aMaxParallelRecipes == 0) {
+ log("BAD RETURN - 2");
+ return false;
+ }
+
+ // checks if it has enough catalyst durabilety
+ ArrayList<ItemStack>tCatalysts = null;
+ int tMaxParrallelCatalyst = aMaxParallelRecipes;
+ if (tCatalystRecipe != null) {
+ tCatalysts = new ArrayList<ItemStack>();
+ tMaxParrallelCatalyst = getCatalysts(aItemInputs, tCatalystRecipe, aMaxParallelRecipes, tCatalysts);
+ log("Can process "+tMaxParrallelCatalyst+" recipes. If less than "+aMaxParallelRecipes+", catalyst does not have enough durability.");
+ }
+
+ if (tMaxParrallelCatalyst == 0) {
+ log("found not enough catalysts");
+ return false;
+ }
+
+ // EU discount
+ float tRecipeEUt = (tRecipe.mEUt * aEUPercent) / 100.0f;
+ float tTotalEUt = 0.0f;
+ log("aEUPercent "+aEUPercent);
+ log("mEUt "+tRecipe.mEUt);
+
+ int parallelRecipes = 0;
+
+ log("parallelRecipes: "+parallelRecipes);
+ log("aMaxParallelRecipes: "+tMaxParrallelCatalyst);
+ log("tTotalEUt: "+tTotalEUt);
+ log("tVoltage: "+tVoltage);
+ log("tEnergy: "+tEnergy);
+ log("tRecipeEUt: "+tRecipeEUt);
+ // Count recipes to do in parallel, consuming input items and fluids and considering input voltage limits
+ for (; parallelRecipes < tMaxParrallelCatalyst && tTotalEUt < (tEnergy - tRecipeEUt); parallelRecipes++) {
+ if (!tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) {
+ log("Broke at "+parallelRecipes+".");
+ break;
+ }
+ log("Bumped EU from "+tTotalEUt+" to "+(tTotalEUt+tRecipeEUt)+".");
+ tTotalEUt += tRecipeEUt;
+ }
+
+ if (parallelRecipes == 0) {
+ log("BAD RETURN - 3");
+ return false;
+ }
+
+ // -- Try not to fail after this point - inputs have already been consumed! --
+
+
+ // Convert speed bonus to duration multiplier
+ // e.g. 100% speed bonus = 200% speed = 100%/200% = 50% recipe duration.
+ aSpeedBonusPercent = Math.max(-99, aSpeedBonusPercent);
+ float tTimeFactor = 100.0f / (100.0f + aSpeedBonusPercent);
+ this.mMaxProgresstime = (int)(tRecipe.mDuration * tTimeFactor);
+
+ this.mEUt = (int)Math.ceil(tTotalEUt);
+
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+
+ // Overclock
+ if (this.mEUt <= 16) {
+ this.mEUt = (this.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
+ this.mMaxProgresstime = (this.mMaxProgresstime / (1 << tTier - 1));
+ } else {
+ while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)]) {
+ this.mEUt *= 4;
+ this.mMaxProgresstime /= 2;
+ }
+ }
+
+ if (this.mEUt > 0) {
+ this.mEUt = (-this.mEUt);
+ }
+
+
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+
+ // Collect fluid outputs
+ FluidStack[] tOutputFluids = new FluidStack[tRecipe.mFluidOutputs.length];
+ for (int h = 0; h < tRecipe.mFluidOutputs.length; h++) {
+ if (tRecipe.getFluidOutput(h) != null) {
+ tOutputFluids[h] = tRecipe.getFluidOutput(h).copy();
+ tOutputFluids[h].amount *= parallelRecipes;
+ }
+ }
+
+ // Collect output item types
+ ItemStack[] tOutputItems = new ItemStack[tRecipe.mOutputs.length];
+ for (int h = 0; h < tRecipe.mOutputs.length; h++) {
+ if (tRecipe.getOutput(h) != null) {
+ tOutputItems[h] = tRecipe.getOutput(h).copy();
+ tOutputItems[h].stackSize = 0;
+ }
+ }
+
+ // Set output item stack sizes (taking output chance into account)
+ for (int f = 0; f < tOutputItems.length; f++) {
+ if (tRecipe.mOutputs[f] != null && tOutputItems[f] != null) {
+ for (int g = 0; g < parallelRecipes; g++) {
+ if (getBaseMetaTileEntity().getRandomNumber(aOutputChanceRoll) < tRecipe.getOutputChance(f))
+ tOutputItems[f].stackSize += tRecipe.mOutputs[f].stackSize;
+ }
+ }
+ }
+
+ tOutputItems = removeNulls(tOutputItems);
+
+ // Sanitize item stack size, splitting any stacks greater than max stack size
+ List<ItemStack> splitStacks = new ArrayList<ItemStack>();
+ for (ItemStack tItem : tOutputItems) {
+ while (tItem.getMaxStackSize() < tItem.stackSize) {
+ ItemStack tmp = tItem.copy();
+ tmp.stackSize = tmp.getMaxStackSize();
+ tItem.stackSize = tItem.stackSize - tItem.getMaxStackSize();
+ splitStacks.add(tmp);
+ }
+ }
+
+ if (splitStacks.size() > 0) {
+ ItemStack[] tmp = new ItemStack[splitStacks.size()];
+ tmp = splitStacks.toArray(tmp);
+ tOutputItems = ArrayUtils.addAll(tOutputItems, tmp);
+ }
+
+ // Strip empty stacks
+ List<ItemStack> tSList = new ArrayList<ItemStack>();
+ for (ItemStack tS : tOutputItems) {
+ if (tS.stackSize > 0) tSList.add(tS);
+ }
+ tOutputItems = tSList.toArray(new ItemStack[tSList.size()]);
+
+ // Damage catalyst once all is said and done.
+ if (tCatalystRecipe != null) {
+ log("damaging catalyst");
+ damageCatalyst(tCatalystRecipe, parallelRecipes);
+ }
+
+ // Commit outputs
+ this.mOutputItems = tOutputItems;
+ this.mOutputFluids = tOutputFluids;
+ updateSlots();
+
+ // Play sounds (GT++ addition - GT multiblocks play no sounds)
+ startProcess();
+
+ log("GOOD RETURN - 1");
+ return true;
+ }
+
+ private int getCatalysts(ItemStack[] aItemInputs, ItemStack aRecipeCatalyst, int aMaxParrallel, ArrayList<ItemStack> aOutPut) {
+ int allowedParrallel = 0;
+ for (final ItemStack aInput : aItemInputs) {
+ if (aRecipeCatalyst.isItemEqual(aInput)) {
+ int aDurabilityRemaining = getMaxCatalystDurability() - getDamage(aInput);
+ return Math.min(aMaxParrallel, aDurabilityRemaining);
+ }
+ }
+ return allowedParrallel;
+ }
+
+ private ItemStack findCatalyst(ItemStack[] aItemInputs) {
+ if (aItemInputs != null) {
+ for (final ItemStack aInput : aItemInputs) {
+ if (aInput != null) {
+ if (ItemUtils.isCatalyst(aInput)) {
+ return aInput;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
+ private void damageCatalyst(ItemStack aStack, int parallelRecipes) {
+ for (int i=0; i<parallelRecipes; i++){
+ if (MathUtils.randFloat(0, 10000000)/10000000f < (1.2f - (0.2 * this.mPipeCasingTier))) {
+ int damage = getDamage(aStack) + 1;
+ log("damage catalyst "+damage);
+ if (damage >= getMaxCatalystDurability()) {
+ log("consume catalyst");
+ addOutput(CI.getEmptyCatalyst(1));
+ aStack = null;
+ }
+ else {
+ log("damaging catalyst");
+ setDamage(aStack, damage);
+ }
+ }
+ else {
+ log("not consuming catalyst");
+ }
+ }
+
+
+
+ }
+
+ private int getDamage(ItemStack aStack) {
+ return ItemGenericChemBase.getCatalystDamage(aStack);
+ }
+
+ private void setDamage(ItemStack aStack,int aAmount) {
+ ItemGenericChemBase.setCatalystDamage(aStack, aAmount);
+ }
+
+
+
+ @SideOnly(Side.CLIENT)
+ private final int getCasingTierOnClientSide() {
+
+ if (this == null || this.getBaseMetaTileEntity().getWorld() == null) {
+ return 0;
+ }
+ try {
+ Block aInitStructureCheck;
+ int aInitStructureCheckMeta;
+ IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity();
+ int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX * 3;
+ int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ * 3;
+ if (xDir == 0) {
+ aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(zDir, 1, 0);
+ aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(zDir, 1, 0);
+ }
+ else {
+ aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 1, xDir);
+ aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 1, xDir);
+ }
+ for (int aTier : mTieredBlockRegistry.keySet()) {
+ Triplet<Block, Integer, Integer> aData = mTieredBlockRegistry.get(aTier);
+ if (aData.getValue_1() == aInitStructureCheck && aData.getValue_2() == aInitStructureCheckMeta) {
+ return aTier;
+ }
+ }
+ return 0;
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ return 0;
+ }
+
+ }
+
+
+
+ /*
+ * Catalyst Handling
+ */
+
+
+
+ @Override
+ public ArrayList<ItemStack> getStoredInputs() {
+ ArrayList<ItemStack> tItems = super.getStoredInputs();
+ for (GT_MetaTileEntity_Hatch_ElementalDataOrbHolder tHatch : mDataHolders) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ ArrayList<ItemStack> aTempList = new ArrayList();
+ for (ItemStack s : tHatch.mInventory) {
+ aTempList.add(s);
+ }
+ tItems.addAll(aTempList);
+ }
+ }
+ return tItems;
+ }
+
+
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java
index 4a508f2f0f..d60e248ac1 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java
@@ -1,10 +1,5 @@
package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production;
-import static gregtech.api.enums.GT_Values.E;
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import java.util.HashSet;
-
import gregtech.api.enums.TAE;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
@@ -12,8 +7,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
import gregtech.api.objects.GT_RenderedTexture;
-import gregtech.api.util.CustomRecipeMap;
-import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GTPP_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.ModBlocks;
@@ -72,16 +66,9 @@ public class GregtechMetaTileEntity_Refinery extends GregtechMeta_MultiBlockBase
return "MatterFabricator";
}
- private static final GT_Recipe_Map mGregTypeRecipeMap = new GT_Recipe_Map(new HashSet<GT_Recipe>(), "internal.recipe.fissionfuel", "Nuclear Fuel Processing", null, RES_PATH_GUI + "basicmachines/FissionFuel", 0, 0, 0, 4, 1, E, 1, E, true, false);
-
@Override
public GT_Recipe_Map getRecipeMap() {
- if (mGregTypeRecipeMap.mRecipeList.size() <= 0) {
- for (GT_Recipe g : CustomRecipeMap.sFissionFuelProcessing.mRecipeList) {
- mGregTypeRecipeMap.mRecipeList.add(g);
- }
- }
- return mGregTypeRecipeMap;
+ return GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing;
}
@Override
@@ -255,7 +242,7 @@ public class GregtechMetaTileEntity_Refinery extends GregtechMeta_MultiBlockBase
Logger.INFO("Your Muffler must be AT LEAST ZPM tier or higher.");
}
}
- Logger.INFO("Fission Fuel Production Plant Formed. "+mGregTypeRecipeMap.mRecipeList.size());
+ Logger.INFO("Fission Fuel Production Plant Formed. "+this.getRecipeMap().mRecipeList.size());
this.resetRecipeMapForAllInputHatches(this.getRecipeMap());
return true;
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java
index 823edbedcc..093075f395 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java
@@ -3,6 +3,7 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.c
import static gtPlusPlus.core.util.data.ArrayUtils.removeNulls;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
@@ -16,11 +17,12 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.util.GTPP_Recipe;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.GTPP_Recipe;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Triplet;
import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.recipe.common.CI;
@@ -32,6 +34,7 @@ import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import gtPlusPlus.xmod.gregtech.common.StaticFields59;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
@@ -45,7 +48,9 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
private int mCoilTier = 0;
private ArrayList<GT_MetaTileEntity_Hatch_Catalysts> mCatalystBuses = new ArrayList<GT_MetaTileEntity_Hatch_Catalysts>();
-
+
+ private static final HashMap<Integer, Triplet<Block, Integer, Integer>> mTieredBlockRegistry = new HashMap<Integer, Triplet<Block, Integer, Integer>>();
+
public GregtechMTE_ChemicalPlant(final int aID, final String aName, final String aNameRegional) {
super(aID, aName, aNameRegional);
}
@@ -54,6 +59,39 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
super(aName);
}
+ public static boolean registerMachineCasingForTier(int aTier, Block aBlock, int aMeta, int aCasingTextureID) {
+ int aSize = mTieredBlockRegistry.size();
+ int aSize2 = aSize;
+ Triplet<Block, Integer, Integer> aCasingData = new Triplet<Block, Integer, Integer>(aBlock, aMeta, aCasingTextureID);
+ if (mTieredBlockRegistry.containsKey(aTier)) {
+ CORE.crash("Tried to register a Machine casing for tier "+aTier+" to the Chemical Plant, however this tier already contains one.");
+ }
+ mTieredBlockRegistry.put(aTier, aCasingData);
+ aSize = mTieredBlockRegistry.size();
+ return aSize > aSize2;
+ }
+
+ private static Block getBlockForTier(int aTier) {
+ if (!mTieredBlockRegistry.containsKey(aTier)) {
+ return Blocks.bedrock;
+ }
+ return mTieredBlockRegistry.get(aTier).getValue_1();
+ }
+ private static int getMetaForTier(int aTier) {
+ if (!mTieredBlockRegistry.containsKey(aTier)) {
+ return 32;
+ }
+ return mTieredBlockRegistry.get(aTier).getValue_2();
+ }
+ private static int getCasingTextureIdForTier(int aTier) {
+ if (!mTieredBlockRegistry.containsKey(aTier)) {
+ return 10;
+ }
+ int aCasingID = mTieredBlockRegistry.get(aTier).getValue_3();
+ //Logger.INFO("Found casing texture ID "+aCasingID+" for tier "+aTier);
+ return aCasingID;
+ }
+
@Override
public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) {
return new GregtechMTE_ChemicalPlant(this.mName);
@@ -69,28 +107,8 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
return new String[] {
"Controller Block for the Chemical Plant",
"Heavy Industry, now right at your doorstep!",
- "Solid Casings dictate Chemical Plant tier",
- "Machine Casings dictate Hatch tier",
- "Higher tier coils speed up the machine",
- "CuNi 50% , FeAlCr 100% , Ni4Cr 150% , ...",
- "Higher tier pipe casings boost parallel and reduce catalyst consumption",
- "+2 parallel per tier, 20% extra chance of not damaging catalyst per tier",
- "27x Coils",
- "18x Pipe Casings",
- "57x Tiered Machine Casings",
- "80+ Solid Casings",
- "Construction Guide:",
- "Controller is placed on a middle casing in the bottom layer",
- "Hatches can only be placed on the bottom layer edges",
- "7x7x7 Hollow frame of solid casings",
- "5x1x5 layer of solid casings (fills in top layer)",
- "5x1x5 layer of machine casings (fills in bottom layer)",
- "In the central 3x5x3:",
- "3x1x3 layer of Coils, surrounded by ring of Machine Casings",
- "3x1x3 layer of Pipe Casings",
- "3x1x3 layer of Coils",
- "3x1x3 layer of Pipe Casings",
- "3x1x3 layer of Coils, surrounded by ring of Machine Casings",
+ "Please read to user manual for more information on construction & usage",
+ TAG_HIDE_MAINT
};
}
@@ -108,24 +126,8 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
if (aBaseMetaTileEntity.getWorld() != null) {
}
- // Check the Tier Client Side
- int aTier = mSolidCasingTier;
-
- if (aTier == 1) {
- aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[16];
- }
- else if (aTier == 2) {
- aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[49];
- }
- else if (aTier == 3) {
- aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[50];
- }
- else if (aTier == 4) {
- aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[48];
- }
- else {
- aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[11];
- }
+ int aCasingID = getCasingTextureID();
+ aOriginalTexture = Textures.BlockIcons.CASING_BLOCKS[aCasingID];
if (aSide == aFacing) {
return new ITexture[]{aOriginalTexture, new GT_RenderedTexture(aActive ? TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active : TexturesGtBlock.Overlay_Machine_Controller_Advanced)};
@@ -135,11 +137,14 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
@Override
public boolean hasSlotInGUI() {
- return false;
+ return true;
}
@Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ if (GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlant_GT.mRecipeList.size() == 0) {
+ generateRecipes();
+ }
return GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlant_GT;
}
@@ -165,7 +170,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
}
private int getSolidCasingTier() {
- return mSolidCasingTier;
+ return this.mSolidCasingTier;
}
private int getMachineCasingTier() {
@@ -180,23 +185,9 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
private int getCasingTextureID() {
// Check the Tier Client Side
- int aTier = mSolidCasingTier;
-
- if (aTier == 1) {
- return 16;
- }
- else if (aTier == 2) {
- return 49;
- }
- else if (aTier == 3) {
- return 50;
- }
- else if (aTier == 4) {
- return 48;
- }
- else {
- return 11;
- }
+ int aTier = mSolidCasingTier;
+ int aCasingID = getCasingTextureIdForTier(aTier);
+ return aCasingID;
}
public boolean addToMachineList(IGregTechTileEntity aTileEntity) {
@@ -206,7 +197,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
GT_MetaTileEntity_TieredMachineBlock aMachineBlock = (GT_MetaTileEntity_TieredMachineBlock) aMetaTileEntity;
int aTileTier = aMachineBlock.mTier;
if (aTileTier > aMaxTier) {
- Logger.INFO("Hatch tier too high.");
+ log("Hatch tier too high.");
return false;
}
else {
@@ -214,7 +205,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
}
}
else {
- Logger.INFO("Bad Tile Entity being added to hatch map."); // Shouldn't ever happen, but.. ya know..
+ log("Bad Tile Entity being added to hatch map."); // Shouldn't ever happen, but.. ya know..
return false;
}
}
@@ -237,21 +228,15 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
mCoilTier = aNBT.getInteger("mCoilTier");
}
- private static boolean isBlockSolidCasing(Block aBlock, int aMeta) {
- if (aBlock == null) {
+ private static boolean isBlockSolidCasing(int aCurrentTier, Block aBlock, int aMeta) {
+ if (aBlock == null || (aMeta < 0 || aMeta > 16)) {
return false;
}
- if (aBlock == GregTech_API.sBlockCasings2 && aMeta == 0) {
+ Block aTieredCasing = getBlockForTier(aCurrentTier);
+ int aTieredMeta = getMetaForTier(aCurrentTier);
+ if (aBlock == aTieredCasing && aMeta == aTieredMeta) {
return true;
}
- if (aBlock == GregTech_API.sBlockCasings4) {
- int aMetaStainlessCasing = 1;
- int aMetaTitaniumCasing = 2;
- int aMetaTungstenCasing = 0;
- if (aMeta == aMetaStainlessCasing || aMeta == aMetaTitaniumCasing || aMeta == aMetaTungstenCasing) {
- return true;
- }
- }
return false;
}
private static boolean isBlockMachineCasing(Block aBlock, int aMeta) {
@@ -272,8 +257,8 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
Block aCasingBlock2 = GregTech_API.sBlockCasings2;
if (aBlock == aCasingBlock2) {
int aMetaBronzePipeCasing = 12;
- int aMetaSteelPipeCasing = 13;
- int aMetaTitaniumPipeCasing = 14;
+ //int aMetaSteelPipeCasing = 13;
+ //int aMetaTitaniumPipeCasing = 14;
int aMetaTungstenPipeCasing = 15;
if (aMeta > aMetaTungstenPipeCasing || aMeta < aMetaBronzePipeCasing) {
return false;
@@ -328,14 +313,13 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX * 3;
int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ * 3;
- int tAmount = 0;
- Logger.INFO("Checking ChemPlant Structure");
+ log("Checking ChemPlant Structure");
// Require Air above controller
boolean aAirCheck = aBaseMetaTileEntity.getAirOffset(0, 1, 0);
if (!aAirCheck) {
- Logger.INFO("No Air Above Controller");
+ log("No Air Above Controller");
return false;
} else {
@@ -344,7 +328,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
mSolidCasingTier = getSolidCasingTierCheck(aBaseMetaTileEntity, xDir, zDir);
mMachineCasingTier = getMachineCasingTierCheck(aBaseMetaTileEntity, xDir, zDir);
- Logger.INFO("Initial Casing Check Complete, Solid Casing Tier: "+mSolidCasingTier+", Machine Casing Tier: "+mMachineCasingTier);
+ log("Initial Casing Check Complete, Solid Casing Tier: "+mSolidCasingTier+", Machine Casing Tier: "+mMachineCasingTier);
int aSolidCasingCount = 0;
int aMachineCasingCount = 0;
@@ -356,14 +340,14 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
aPipeCount = checkPipes(aBaseMetaTileEntity, aStack, xDir, zDir);
aCoilCount = checkCoils(aBaseMetaTileEntity, aStack, xDir, zDir);
- Logger.INFO("Casing Counts: ");
- Logger.INFO("Solid: "+aSolidCasingCount+", Machine: "+aMachineCasingCount);
- Logger.INFO("Pipe: "+aPipeCount+", Coil: "+aCoilCount);
+ log("Casing Counts: ");
+ log("Solid: "+aSolidCasingCount+", Machine: "+aMachineCasingCount);
+ log("Pipe: "+aPipeCount+", Coil: "+aCoilCount);
- Logger.INFO("Casing Tiers: ");
- Logger.INFO("Solid: "+getSolidCasingTier()+", Machine: "+getMachineCasingTier());
- Logger.INFO("Pipe: "+getPipeCasingTier()+", Coil: "+getCoilTier());
+ log("Casing Tiers: ");
+ log("Solid: "+getSolidCasingTier()+", Machine: "+getMachineCasingTier());
+ log("Pipe: "+getPipeCasingTier()+", Coil: "+getCoilTier());
// Attempt to sync fields here, so that it updates client side values.
aBaseMetaTileEntity.getWorld().markBlockForUpdate(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord());
@@ -372,23 +356,27 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
// Minimum 80/93 Solid Casings
if (aSolidCasingCount < 80) {
- Logger.INFO("Not enough solid casings. Found "+aSolidCasingCount+", require: 80.");
+ log("Not enough solid casings. Found "+aSolidCasingCount+", require: 80.");
return false;
}
if (aMachineCasingCount != 57) {
- Logger.INFO("Not enough machine casings. Found "+aMachineCasingCount+", require: 57.");
+ log("Not enough machine casings. Found "+aMachineCasingCount+", require: 57.");
return false;
}
if (aPipeCount != 18) {
- Logger.INFO("Not enough pipe casings. Found "+aPipeCount+", require: 18.");
+ log("Not enough pipe casings. Found "+aPipeCount+", require: 18.");
return false;
}
if (aCoilCount != 27) {
- Logger.INFO("Not enough coils. Found "+aCoilCount+", require: 27.");
+ log("Not enough coils. Found "+aCoilCount+", require: 27.");
return false;
}
+ /*if (mCatalystBuses.size() != 1) {
+ log("A Catalyst Bus is Required.");
+ return false;
+ }*/
- Logger.INFO("Structure Check Complete!");
+ log("Structure Check Complete!");
return true;
}
@@ -508,7 +496,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
else {
final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
if (aMetaTileEntity == null) {
- Logger.INFO("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aTileEntity.getInventoryName());
+ log("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aTileEntity.getInventoryName());
return tAmount;
}
//Handle controller
@@ -516,17 +504,17 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
continue;
}
else {
- Logger.INFO("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aMetaTileEntity.getInventoryName());
+ log("Error counting Bottom Layer Casing Ring. Bad Tile Entity. Found "+aMetaTileEntity.getInventoryName());
return tAmount;
}
}
}
else {
- if (isBlockSolidCasing(aBlock, aMeta)) {
+ if (isBlockSolidCasing(mSolidCasingTier, aBlock, aMeta)) {
tAmount++;
}
else {
- Logger.INFO("Error counting Bottom Layer Casing Ring. Found "+aBlock.getLocalizedName()+":"+aMeta);
+ log("Error counting Bottom Layer Casing Ring. Found "+aBlock.getLocalizedName()+":"+aMeta);
return tAmount;
}
}
@@ -558,11 +546,11 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
}
Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, r, aOffsetZ + j);
int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, r, aOffsetZ + j);
- if (isBlockSolidCasing(aBlock, aMeta)) {
+ if (isBlockSolidCasing(mSolidCasingTier, aBlock, aMeta)) {
tAmount++;
}
else {
- Logger.INFO("Error counting Pillars. Found "+ItemUtils.getLocalizedNameOfBlock(aBlock, aMeta));
+ log("Error counting Pillars. Found "+ItemUtils.getLocalizedNameOfBlock(aBlock, aMeta));
return tAmount;
}
}
@@ -574,11 +562,11 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
for (int j = -3; j < 4; j++) {
Block aBlock = aBaseMetaTileEntity.getBlockOffset(aOffsetX + i, 6, aOffsetZ + j);
int aMeta = aBaseMetaTileEntity.getMetaIDOffset(aOffsetX + i, 6, aOffsetZ + j);
- if (isBlockSolidCasing(aBlock, aMeta)) {
+ if (isBlockSolidCasing(mSolidCasingTier, aBlock, aMeta)) {
tAmount++;
}
else {
- Logger.INFO("Error counting Top Layer casings. Found "+ItemUtils.getLocalizedNameOfBlock(aBlock, aMeta));
+ log("Error counting Top Layer casings. Found "+ItemUtils.getLocalizedNameOfBlock(aBlock, aMeta));
return tAmount;
}
}
@@ -644,26 +632,12 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
else {
aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 1, xDir);
aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 1, xDir);
- }
- if (aInitStructureCheck == GregTech_API.sBlockCasings2) {
- int aMetaSteelCasing = 0;
- if (aInitStructureCheckMeta == aMetaSteelCasing) {
- return 1;
- }
- }
- else if (aInitStructureCheck == GregTech_API.sBlockCasings4) {
- int aMetaStainlessCasing = 1;
- int aMetaTitaniumCasing = 2;
- int aMetaTungstenCasing = 0;
- if (aInitStructureCheckMeta == aMetaStainlessCasing) {
- return 2;
- }
- else if (aInitStructureCheckMeta == aMetaTitaniumCasing) {
- return 3;
- }
- else if (aInitStructureCheckMeta == aMetaTungstenCasing) {
- return 4;
- }
+ }
+ for (int aTier : mTieredBlockRegistry.keySet()) {
+ Triplet<Block, Integer, Integer> aData = mTieredBlockRegistry.get(aTier);
+ if (aData.getValue_1() == aInitStructureCheck && aData.getValue_2() == aInitStructureCheckMeta) {
+ return aTier;
+ }
}
return 0;
}
@@ -684,7 +658,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
public int getMachineCasingTierCheck(IGregTechTileEntity aBaseMetaTileEntity, int xDir, int zDir) {
Block aInitStructureCheck;
int aInitStructureCheckMeta;
- Logger.INFO(""+xDir+", "+zDir);
+ log(""+xDir+", "+zDir);
if (xDir == 0) {
if (zDir > 0) {
aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 0, 1);
@@ -694,7 +668,6 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 0, -1);
aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 0, -1);
}
-
}
else {
if (xDir > 0) {
@@ -706,9 +679,8 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(-1, 0, 0);
}
}
-
if (isBlockMachineCasing(aInitStructureCheck, aInitStructureCheckMeta)) {
- Logger.INFO("Using Meta "+aInitStructureCheckMeta);
+ log("Using Meta "+aInitStructureCheckMeta);
return aInitStructureCheckMeta;
}
return 0;
@@ -758,7 +730,10 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
}
// Silly Client Syncing
if (aBaseMetaTileEntity.isClientSide()) {
- this.mSolidCasingTier = getCasingTierOnClientSide();
+ if (this != null && this.getBaseMetaTileEntity() != null && this.getBaseMetaTileEntity().getWorld() != null) {
+ this.mSolidCasingTier = getCasingTierOnClientSide();
+ markDirty();
+ }
}
super.onPostTick(aBaseMetaTileEntity, aTick);
}
@@ -793,34 +768,47 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
long tEnergy = getMaxInputEnergy();
log("Running checkRecipeGeneric(0)");
+ //GT_Recipe tRecipe = findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, gregtech.api.enums.GT_Values.V[tTier], aFluidInputs, aItemInputs);
+ GT_Recipe tRecipe = findRecipe(mLastRecipe, gregtech.api.enums.GT_Values.V[tTier], getSolidCasingTier(), aItemInputs, aFluidInputs);
+
+
+
+
+ if (tRecipe == null) {
+ log("BAD RETURN - 1");
+ return false;
+ }
+
// checks if it has a catalyst with enough durability
ItemStack tCatalystRecipe = findCatalyst(aItemInputs);
- if (tCatalystRecipe == null) {
- log("does not have catalyst");
- return false;
+ boolean aDoesRecipeNeedCatalyst = false;
+ for (ItemStack aInputItem : tRecipe.mInputs) {
+ if (ItemUtils.isCatalyst(aInputItem)) {
+ aDoesRecipeNeedCatalyst = true;
+ break;
+ }
+ }
+ if (aDoesRecipeNeedCatalyst) {
+ if (tCatalystRecipe == null) {
+ log("does not have catalyst");
+ return false;
+ }
+ if (mCatalystBuses.size() != 1) {
+ log("does not have correct number of catalyst hatchs. (Required 1, found "+mCatalystBuses.size()+")");
+ return false;
+ }
}
-
- GT_Recipe tRecipe = findRecipe(
- getBaseMetaTileEntity(), mLastRecipe, false,
- gregtech.api.enums.GT_Values.V[tTier], aFluidInputs, aItemInputs);
log("Running checkRecipeGeneric(1)");
// Remember last recipe - an optimization for findRecipe()
this.mLastRecipe = tRecipe;
-
- if (tRecipe == null) {
- log("BAD RETURN - 1");
- return false;
- }
-
if (tRecipe.mSpecialValue > this.mSolidCasingTier) {
log("solid tier is too low");
return false;
}
-
aMaxParallelRecipes = this.canBufferOutputs(tRecipe, aMaxParallelRecipes);
if (aMaxParallelRecipes == 0) {
log("BAD RETURN - 2");
@@ -961,7 +949,7 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
log("damaging catalyst");
damageCatalyst(tCatalystRecipe, parallelRecipes);
}
-
+
// Commit outputs
this.mOutputItems = tOutputItems;
this.mOutputFluids = tOutputFluids;
@@ -974,6 +962,159 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
return true;
}
+ private static final HashMap<Long, AutoMap<GT_Recipe>> mTieredRecipeMap = new HashMap<Long, AutoMap<GT_Recipe>>();
+ private static final AutoMap<GT_Recipe> aTier0Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier1Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier2Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier3Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier4Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier5Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier6Recipes = new AutoMap<GT_Recipe>();
+ private static final AutoMap<GT_Recipe> aTier7Recipes = new AutoMap<GT_Recipe>();
+ private static boolean mInitRecipeCache = false;
+
+ private static void initRecipeCaches() {
+ if (!mInitRecipeCache) {
+ mTieredRecipeMap.put((long) 0, aTier0Recipes);
+ mTieredRecipeMap.put((long) 1, aTier1Recipes);
+ mTieredRecipeMap.put((long) 2, aTier2Recipes);
+ mTieredRecipeMap.put((long) 3, aTier3Recipes);
+ mTieredRecipeMap.put((long) 4, aTier4Recipes);
+ mTieredRecipeMap.put((long) 5, aTier5Recipes);
+ mTieredRecipeMap.put((long) 6, aTier6Recipes);
+ mTieredRecipeMap.put((long) 7, aTier7Recipes);
+ for (GT_Recipe aRecipe : GTPP_Recipe.GTPP_Recipe_Map.sChemicalPlant_GT.mRecipeList) {
+ if (aRecipe != null) {
+ switch (aRecipe.mSpecialValue) {
+ case 0:
+ aTier0Recipes.add(aRecipe);
+ continue;
+ case 1:
+ aTier1Recipes.add(aRecipe);
+ continue;
+ case 2:
+ aTier2Recipes.add(aRecipe);
+ continue;
+ case 3:
+ aTier3Recipes.add(aRecipe);
+ continue;
+ case 4:
+ aTier4Recipes.add(aRecipe);
+ continue;
+ case 5:
+ aTier5Recipes.add(aRecipe);
+ continue;
+ case 6:
+ aTier6Recipes.add(aRecipe);
+ continue;
+ case 7:
+ aTier7Recipes.add(aRecipe);
+ continue;
+ }
+ }
+ }
+ mInitRecipeCache = true;
+ }
+ }
+
+ private static boolean areInputsEqual(GT_Recipe aComparator, ItemStack[] aInputs, FluidStack[] aFluids) {
+ int aInputCount = aComparator.mInputs.length;
+ if (aInputCount > 0) {
+ //Logger.INFO("Looking for recipe with "+aInputCount+" Items");
+ int aMatchingInputs = 0;
+ recipe : for (ItemStack a : aComparator.mInputs) {
+ for (ItemStack b : aInputs) {
+ if (a.getItem() == b.getItem()) {
+ if (a.getItemDamage() == b.getItemDamage()) {
+ //Logger.INFO("Found matching Item Input - "+b.getUnlocalizedName());
+ aMatchingInputs++;
+ continue recipe;
+ }
+ }
+ }
+ }
+ if (aMatchingInputs != aInputCount) {
+ return false;
+ }
+ }
+ int aFluidInputCount = aComparator.mFluidInputs.length;
+ if (aFluidInputCount > 0) {
+ //Logger.INFO("Looking for recipe with "+aFluidInputCount+" Fluids");
+ int aMatchingFluidInputs = 0;
+ recipe : for (FluidStack b : aComparator.mFluidInputs) {
+ //Logger.INFO("Checking for fluid "+b.getLocalizedName());
+ for (FluidStack a : aFluids) {
+ if (GT_Utility.areFluidsEqual(a, b)) {
+ //Logger.INFO("Found matching Fluid Input - "+b.getLocalizedName());
+ aMatchingFluidInputs++;
+ continue recipe;
+ }
+ else {
+ //Logger.INFO("Found fluid which did not match - "+a.getLocalizedName());
+ }
+ }
+ }
+ if (aMatchingFluidInputs != aFluidInputCount) {
+ return false;
+ }
+ }
+ Logger.INFO("Recipes Match!");
+ return true;
+ }
+
+ public GT_Recipe findRecipe(final GT_Recipe aRecipe, final long aVoltage, final long aSpecialValue, ItemStack[] aInputs, final FluidStack[] aFluids) {
+ if (!mInitRecipeCache) {
+ initRecipeCaches();
+ }
+ if (this.getRecipeMap().mRecipeList.isEmpty()) {
+ log("No Recipes in Map to search through.");
+ return null;
+ }
+ else {
+ log("Checking tier "+aSpecialValue+" recipes and below. Using Input Voltage of "+aVoltage+"V.");
+ log("We have "+aInputs.length+" Items and "+aFluids.length+" Fluids.");
+ // Try check the cached recipe first
+ if (aRecipe != null) {
+ if (areInputsEqual(aRecipe, aInputs, aFluids)) {
+ if (aRecipe.mEUt <= aVoltage) {
+ Logger.INFO("Using cached recipe.");
+ return aRecipe;
+ }
+ }
+ }
+
+ // Get all recipes for the tier
+ AutoMap<AutoMap<GT_Recipe>> aMasterMap = new AutoMap<AutoMap<GT_Recipe>>();
+ for (long i=0;i<=aSpecialValue;i++) {
+ aMasterMap.add(mTieredRecipeMap.get(i));
+ }
+ GT_Recipe aFoundRecipe = null;
+
+ // Iterate the tiers recipes until we find the one with all inputs matching
+ master : for (AutoMap<GT_Recipe> aTieredMap : aMasterMap) {
+ for (GT_Recipe aRecipeToCheck : aTieredMap) {
+ if (areInputsEqual(aRecipeToCheck, aInputs, aFluids)) {
+ log("Found recipe with matching inputs!");
+ if (aRecipeToCheck.mSpecialValue <= aSpecialValue) {
+ if (aRecipeToCheck.mEUt <= aVoltage) {
+ aFoundRecipe = aRecipeToCheck;
+ break master;
+ }
+ }
+ }
+ }
+ }
+
+ // If we found a recipe, return it
+ if (aFoundRecipe != null) {
+ log("Found valid recipe.");
+ return aFoundRecipe;
+ }
+ }
+ log("Did not find valid recipe.");
+ return null;
+ }
+
private int getCatalysts(ItemStack[] aItemInputs, ItemStack aRecipeCatalyst, int aMaxParrallel, ArrayList<ItemStack> aOutPut) {
int allowedParrallel = 0;
for (final ItemStack aInput : aItemInputs) {
@@ -1018,8 +1159,8 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
log("not consuming catalyst");
}
}
-
-
+
+
}
@@ -1053,25 +1194,11 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(0, 1, xDir);
aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 1, xDir);
}
- if (aInitStructureCheck == GregTech_API.sBlockCasings2) {
- int aMetaSteelCasing = 0;
- if (aInitStructureCheckMeta == aMetaSteelCasing) {
- return 1;
- }
- }
- else if (aInitStructureCheck == GregTech_API.sBlockCasings4) {
- int aMetaStainlessCasing = 1;
- int aMetaTitaniumCasing = 2;
- int aMetaTungstenCasing = 0;
- if (aInitStructureCheckMeta == aMetaStainlessCasing) {
- return 2;
- }
- else if (aInitStructureCheckMeta == aMetaTitaniumCasing) {
- return 3;
- }
- else if (aInitStructureCheckMeta == aMetaTungstenCasing) {
- return 4;
- }
+ for (int aTier : mTieredBlockRegistry.keySet()) {
+ Triplet<Block, Integer, Integer> aData = mTieredBlockRegistry.get(aTier);
+ if (aData.getValue_1() == aInitStructureCheck && aData.getValue_2() == aInitStructureCheckMeta) {
+ return aTier;
+ }
}
return 0;
}
@@ -1087,18 +1214,18 @@ public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase {
/*
* Catalyst Handling
*/
-
-
+
+
@Override
- public ArrayList<ItemStack> getStoredInputs() {
+ public ArrayList<ItemStack> getStoredInputs() {
ArrayList<ItemStack> tItems = super.getStoredInputs();
- for (GT_MetaTileEntity_Hatch_Catalysts tHatch : mCatalystBuses) {
- tHatch.mRecipeMap = getRecipeMap();
- if (isValidMetaTileEntity(tHatch)) {
- tItems.addAll(tHatch.getContentUsageSlots());
- }
- }
+ for (GT_MetaTileEntity_Hatch_Catalysts tHatch : mCatalystBuses) {
+ tHatch.mRecipeMap = getRecipeMap();
+ if (isValidMetaTileEntity(tHatch)) {
+ tItems.addAll(tHatch.getContentUsageSlots());
+ }
+ }
return tItems;
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java
index 3eabcf517e..6619bc1253 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java
@@ -19,6 +19,7 @@ import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.math.MathUtils;
+import gtPlusPlus.core.util.minecraft.NBTUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
import gtPlusPlus.preloader.asm.AsmConfig;
import gtPlusPlus.xmod.gregtech.api.gui.CONTAINER_PowerSubStation;
@@ -36,7 +37,7 @@ import net.minecraftforge.common.util.ForgeDirection;
public class GregtechMetaTileEntity_PowerSubStationController extends GregtechMeta_MultiBlockBase {
- protected int mAverageEuUsage = 0;
+ protected long mAverageEuUsage = 0;
protected long mTotalEnergyAdded = 0;
protected long mTotalEnergyConsumed = 0;
protected long mTotalEnergyLost = 0;
@@ -366,7 +367,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends GregtechMe
//mTotalEnergyAdded
@Override
public void saveNBTData(NBTTagCompound aNBT) {
- aNBT.setInteger("mAverageEuUsage", this.mAverageEuUsage);
+ aNBT.setLong("mAverageEuUsage", this.mAverageEuUsage);
//Usage Stats
aNBT.setLong("mTotalEnergyAdded", this.mTotalEnergyAdded);
@@ -380,7 +381,17 @@ public class GregtechMetaTileEntity_PowerSubStationController extends GregtechMe
@Override
public void loadNBTData(NBTTagCompound aNBT) {
- this.mAverageEuUsage = aNBT.getInteger("mAverageEuUsage");
+
+ // Best not to get a long if the Tag Map is holding an int
+ if (aNBT.hasKey("mAverageEuUsage")) {
+ if (NBTUtils.isTagInteger(aNBT, "mAverageEuUsage")) {
+ int aAverageTag = aNBT.getInteger("mAverageEuUsage");
+ this.mAverageEuUsage = aAverageTag;
+ }
+ else {
+ this.mAverageEuUsage = aNBT.getLong("mAverageEuUsage");
+ }
+ }
//Usage Stats
this.mTotalEnergyAdded = aNBT.getLong("mTotalEnergyAdded");
@@ -421,7 +432,9 @@ public class GregtechMetaTileEntity_PowerSubStationController extends GregtechMe
long stored = aHatch.getEUVar();
long voltage = aHatch.maxEUInput() * aHatch.maxAmperesIn();
- if (voltage > stored) return;
+ if (voltage > stored) {
+ return;
+ }
if (this.getBaseMetaTileEntity().increaseStoredEnergyUnits(voltage, false)) {
aHatch.setEUVar((stored - voltage));
@@ -449,7 +462,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends GregtechMe
// Increase tax up to 2x if machine is not fully repaired
mTax = mTax * (1f + (10000f - mEfficiency) / 10000f);
- return MathUtils.roundToClosestInt(mTax);
+ return MathUtils.roundToClosestLong(mTax);
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java
index a8af3dcb11..e918d8015e 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java
@@ -1,13 +1,7 @@
package gtPlusPlus.xmod.gregtech.loaders;
import gtPlusPlus.core.block.ModBlocks;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks2;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks3;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks4;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks5;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings;
-import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaTieredCasingBlocks1;
+import gtPlusPlus.xmod.gregtech.common.blocks.*;
public class Gregtech_Blocks {
@@ -22,6 +16,7 @@ public class Gregtech_Blocks {
ModBlocks.blockCasingsTieredGTPP = new GregtechMetaTieredCasingBlocks1();
ModBlocks.blockSpecialMultiCasings = new GregtechMetaSpecialMultiCasings();
+ ModBlocks.blockCustomMachineCasings = new GregtechMetaSpecialMachineCasings();
}
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java
index bf4e9b1390..51316f024a 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java
@@ -31,11 +31,7 @@ public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, R
if (aMaterial != Materials.Rubber) {
if ((!aMaterial.contains(SubTag.WOOD)) && (!aMaterial.contains(SubTag.BOUNCY))
&& (!aMaterial.contains(SubTag.NO_SMASHING))) {
- GT_ModHandler.addCraftingRecipe(
- MetaGeneratedGregtechTools.INSTANCE.getToolWithStats(16, 1, aMaterial, aMaterial, null),
- GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
- new Object[] { "IhI", "III", " I ", Character.valueOf('I'),
- OrePrefixes.ingot.get(aMaterial) });
+
}
}
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricButcherKnife.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricButcherKnife.java
index e8f9f5129c..9fe9ad7816 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricButcherKnife.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricButcherKnife.java
@@ -14,6 +14,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.minecraft.MaterialUtils;
+import gtPlusPlus.core.util.minecraft.RecipeUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator;
@@ -32,11 +33,7 @@ public class ProcessingElectricButcherKnife implements Interface_OreRecipeRegist
if (aMaterial != Materials.Rubber) {
if ((!aMaterial.contains(SubTag.WOOD)) && (!aMaterial.contains(SubTag.BOUNCY))
&& (!aMaterial.contains(SubTag.NO_SMASHING))) {
- GT_ModHandler.addCraftingRecipe(
- MetaGeneratedGregtechTools.INSTANCE.getToolWithStats(16, 1, aMaterial, aMaterial, null),
- GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
- new Object[] { "IhI", "III", " I ", Character.valueOf('I'),
- OrePrefixes.ingot.get(aMaterial) });
+
}
}
}
@@ -68,8 +65,9 @@ public class ProcessingElectricButcherKnife implements Interface_OreRecipeRegist
final ItemStack plate = GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L);
+ final ItemStack screw = GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L);
- if ((null != plate)) {
+ if ((null != plate) && screw != null) {
addRecipe(aMaterial, 1600000L, 3, ItemList.Battery_RE_HV_Lithium.get(1));
addRecipe(aMaterial, 1200000L, 3, ItemList.Battery_RE_HV_Cadmium.get(1));
addRecipe(aMaterial, 800000L, 3, ItemList.Battery_RE_HV_Sodium.get(1));
@@ -97,7 +95,7 @@ public class ProcessingElectricButcherKnife implements Interface_OreRecipeRegist
@Override
public void run() {
- Logger.INFO("Generating Electric Butcher Knifes for all valid GT Materials.");
+ Logger.INFO("Generating Electric Butcher Knives for all valid GT Materials.");
this.materialsLoops();
}
@@ -123,20 +121,13 @@ public class ProcessingElectricButcherKnife implements Interface_OreRecipeRegist
return false;
}
- return GT_ModHandler.addCraftingRecipe(
- aOutputStack,
- RecipeBits.DISMANTLEABLE | RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED,
- new Object[]{
- "SXS",
- "GMG",
- "PBP",
- 'X', aInputCutter,
- 'M', CI.getElectricMotor(aVoltageTier, 1),
- 'S', OrePrefixes.wireFine.get(Materials.Electrum),
- 'P', OrePrefixes.plate.get(aMaterial),
- 'G', ELEMENT.STANDALONE.WHITE_METAL.getGear(1),
- 'B', aBattery
- });
+
+
+ return RecipeUtils.addShapedRecipe(
+ OrePrefixes.wireFine.get(Materials.Electrum), aInputCutter, OrePrefixes.wireFine.get(Materials.Electrum),
+ OrePrefixes.plate.get(aMaterial), CI.getElectricMotor(aVoltageTier, 1), OrePrefixes.plate.get(aMaterial),
+ OrePrefixes.screw.get(aMaterial), aBattery, OrePrefixes.screw.get(aMaterial),
+ aOutputStack);
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricLighter.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricLighter.java
index f3dc546191..5f6c5a0427 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricLighter.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricLighter.java
@@ -14,6 +14,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.minecraft.MaterialUtils;
+import gtPlusPlus.core.util.minecraft.RecipeUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator;
@@ -32,11 +33,7 @@ public class ProcessingElectricLighter implements Interface_OreRecipeRegistrator
if (aMaterial != Materials.Rubber) {
if ((!aMaterial.contains(SubTag.WOOD)) && (!aMaterial.contains(SubTag.BOUNCY))
&& (!aMaterial.contains(SubTag.NO_SMASHING))) {
- GT_ModHandler.addCraftingRecipe(
- MetaGeneratedGregtechTools.INSTANCE.getToolWithStats(16, 1, aMaterial, aMaterial, null),
- GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
- new Object[] { "IhI", "III", " I ", Character.valueOf('I'),
- OrePrefixes.ingot.get(aMaterial) });
+
}
}
}
@@ -123,20 +120,11 @@ public class ProcessingElectricLighter implements Interface_OreRecipeRegistrator
return false;
}
- return GT_ModHandler.addCraftingRecipe(
- aOutputStack,
- RecipeBits.DISMANTLEABLE | RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED,
- new Object[]{
- "SXS",
- "GMG",
- "PBP",
- 'X', aInputCutter,
- 'M', CI.getSensor(aVoltageTier, 1),
- 'S', OrePrefixes.wireGt04.get(Materials.Gold),
- 'P', OrePrefixes.plate.get(aMaterial),
- 'G', ELEMENT.STANDALONE.RUNITE.getPlate(1),
- 'B', aBattery
- });
+ return RecipeUtils.addShapedRecipe(
+ OrePrefixes.wireGt04.get(Materials.Gold), aInputCutter, OrePrefixes.wireGt04.get(Materials.Gold),
+ ELEMENT.STANDALONE.RUNITE.getPlate(1), CI.getSensor(aVoltageTier, 1), ELEMENT.STANDALONE.RUNITE.getPlate(1),
+ OrePrefixes.plate.get(aMaterial), aBattery, OrePrefixes.plate.get(aMaterial),
+ aOutputStack);
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java
index 9285dbc63d..dfcb7de4f8 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java
@@ -14,6 +14,7 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.minecraft.MaterialUtils;
+import gtPlusPlus.core.util.minecraft.RecipeUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator;
@@ -32,11 +33,7 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator,
if (aMaterial != Materials.Rubber) {
if ((!aMaterial.contains(SubTag.WOOD)) && (!aMaterial.contains(SubTag.BOUNCY))
&& (!aMaterial.contains(SubTag.NO_SMASHING))) {
- GT_ModHandler.addCraftingRecipe(
- MetaGeneratedGregtechTools.INSTANCE.getToolWithStats(16, 1, aMaterial, aMaterial, null),
- GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
- new Object[] { "IhI", "III", " I ", Character.valueOf('I'),
- OrePrefixes.ingot.get(aMaterial) });
+
}
}
}
@@ -97,7 +94,7 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator,
@Override
public void run() {
- Logger.INFO("Generating Electric Snipss for all valid GT Materials.");
+ Logger.INFO("Generating Electric Snips for all valid GT Materials.");
this.materialsLoops();
}
@@ -122,21 +119,11 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator,
Logger.MATERIALS("Unable to generate Electric Snips from "+MaterialUtils.getMaterialName(aMaterial)+", Durability: "+aDura);
return false;
}
-
- return GT_ModHandler.addCraftingRecipe(
- aOutputStack,
- RecipeBits.DISMANTLEABLE | RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED,
- new Object[]{
- "SXS",
- "GMG",
- "PBP",
- 'X', aInputCutter,
- 'M', CI.getElectricMotor(aVoltageTier, 1),
- 'S', OrePrefixes.wireFine.get(Materials.Electrum),
- 'P', OrePrefixes.plate.get(aMaterial),
- 'G', ELEMENT.STANDALONE.WHITE_METAL.getGear(1),
- 'B', aBattery
- });
+ return RecipeUtils.addShapedRecipe(
+ OrePrefixes.wireFine.get(Materials.Electrum), aInputCutter, OrePrefixes.wireFine.get(Materials.Electrum),
+ ELEMENT.STANDALONE.WHITE_METAL.getGear(1), CI.getElectricMotor(aVoltageTier, 1), ELEMENT.STANDALONE.WHITE_METAL.getGear(1),
+ OrePrefixes.plate.get(aMaterial), aBattery, OrePrefixes.plate.get(aMaterial),
+ aOutputStack);
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingToolHeadChoocher.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingToolHeadChoocher.java
index 9131975b21..e4858f8cd1 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingToolHeadChoocher.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/ProcessingToolHeadChoocher.java
@@ -56,7 +56,7 @@ public class ProcessingToolHeadChoocher implements Interface_OreRecipeRegistrato
final ItemStack hammerhead = GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L);
if ((null != plate) && (null != ingot) && (null != hammerhead) && (null != longrod) && (null != screw)){
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
hammerhead, ToolDictNames.craftingToolScrewdriver.name(), plate,
ingot, plate, plate,
longrod, screw, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java
index a8a7af9bba..cabadee87a 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java
@@ -206,100 +206,7 @@ public class RecipeGen_BlastSmelterGT_GTNH {
}
else {
Logger.MACHINE_INFO("[ABS] Failure. Did not find any EBF recipes to iterate.");
- }
-
- Logger.MACHINE_INFO("[ABS] Generating recipes based on existing Alloy Smelter recipes.");
- //Okay, so now lets Iterate existing EBF recipes.
- if (GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mRecipeList.size() > 0) {
- for (GT_Recipe x : GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mRecipeList) {
- if (x == null) {
- continue;
- }
- ItemStack[] inputs, outputs;
- FluidStack[] inputsF;
- int voltage, time, special;
- boolean enabled;
- inputs = x.mInputs;
- outputs = x.mOutputs;
- inputsF = x.mFluidInputs;
- voltage = x.mEUt;
- time = x.mDuration;
- enabled = x.mEnabled;
- special = x.mSpecialValue;
-
- /*Check for GTNH, if it's found, continue to next recipe if the Temp is too high.
- if (CORE.GTNH && special > 3600) {
- Logger.MACHINE_INFO("[ABS] Skipping ABS addition for GTNH due to temp.");
- continue;
- }*/
- FluidStack mMoltenStack = null;
- int mMoltenCount = 0;
- //If We have a valid Output, let's try use our cached data to get it's molten form.
- if (x.mOutputs != null && x.mOutputs[0] != null) {
- mMoltenCount = x.mOutputs[0].stackSize;
- ItemStackData R = new ItemStackData(x.mOutputs[0]);
- Logger.MACHINE_INFO("[ABS] Found "+x.mOutputs[0].getDisplayName()+" as valid AS output, finding it's fluid from the cache. We will require "+(144*mMoltenCount)+"L. Looking for ID "+R.getUniqueDataIdentifier());
- FluidStack tempFluid = getFluidFromIngot(R);
- if (tempFluid != null) {
- //Logger.MACHINE_INFO("[ABS] Got Fluid from Cache.");
- mMoltenStack = FluidUtils.getFluidStack(tempFluid, mMoltenCount*144);
- }
- else {
- Logger.MACHINE_INFO("[ABS] Failed to get Fluid from Cache.");
- }
- }
- //If this recipe is enabled and we have a valid molten fluidstack, let's try add this recipe.
- if (enabled && isValid(inputs, outputs, inputsF, mMoltenStack)) {
- //Build correct input stack
- ItemStack[] newInput = new ItemStack[inputs.length+1];
- int l = 1;
- for (ItemStack y : inputs) {
- newInput[l++] = y;
- }
- newInput[0] = CI.getNumberedCircuit(19);
- //Logger.MACHINE_INFO("[ABS] Generating ABS recipe for "+mMoltenStack.getLocalizedName()+".");
- if (CORE.RA.addBlastSmelterRecipe(newInput, (inputsF.length > 0 ? inputsF[0] : null), mMoltenStack, 100, MathUtils.roundToClosestInt(time*0.8), voltage, special)) {
- //Logger.MACHINE_INFO("[ABS] Success.");
- mSuccess++;
- }
- else {
- Logger.MACHINE_INFO("[ABS] AS Recipe Failure.");
- }
- }
- else {
- if (!enabled) {
- Logger.MACHINE_INFO("[ABS] Failure. AS recipe was not enabled.");
- }
- else {
- Logger.MACHINE_INFO("[ABS] Failure. Invalid Inputs or Outputs.");
- if (inputs == null) {
- Logger.MACHINE_INFO("[ABS] Inputs were not Valid.");
- }
- else {
- Logger.MACHINE_INFO("[ABS] inputs size: "+inputs.length);
- }
- if (outputs == null) {
- Logger.MACHINE_INFO("[ABS] Outputs were not Valid.");
- }
- else {
- Logger.MACHINE_INFO("[ABS] outputs size: "+outputs.length);
- }
- if (inputsF == null) {
- Logger.MACHINE_INFO("[ABS] Input Fluids were not Valid.");
- }
- else {
- Logger.MACHINE_INFO("[ABS] inputsF size: "+inputsF.length);
- }
- if (mMoltenStack == null) {
- Logger.MACHINE_INFO("[ABS] Output Fluid were not Valid.");
- }
- }
- }
- }
- }
- else {
- Logger.MACHINE_INFO("[ABS] Failure. Did not find any Alloy Smelter recipes to iterate.");
- }
+ }
Logger.INFO("[ABS] Processed "+mSuccess+" recipes.");
return mSuccess > 0;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java
index da93fe212c..a346464eeb 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java
@@ -58,7 +58,7 @@ public class RecipeGen_DustGeneration extends RecipeGen_Base {
if (ItemUtils.checkForInvalidItems(tinyDust) && ItemUtils.checkForInvalidItems(normalDust)) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
@@ -69,7 +69,7 @@ public class RecipeGen_DustGeneration extends RecipeGen_Base {
Logger.WARNING("9 Tiny dust to 1 Dust Recipe: "+material.getLocalizedName()+" - Failed");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
normalDust, null, null,
null, null, null,
null, null, null,
@@ -82,7 +82,7 @@ public class RecipeGen_DustGeneration extends RecipeGen_Base {
}
if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(normalDust)) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
smallDust, smallDust, null,
smallDust, smallDust, null,
null, null, null,
@@ -92,7 +92,7 @@ public class RecipeGen_DustGeneration extends RecipeGen_Base {
else {
Logger.WARNING("4 Small dust to 1 Dust Recipe: "+material.getLocalizedName()+" - Failed");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
null, normalDust, null,
null, null, null,
null, null, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java
new file mode 100644
index 0000000000..b94dbfa51f
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java
@@ -0,0 +1,182 @@
+package gtPlusPlus.xmod.gregtech.loaders;
+
+import gregtech.api.util.GTPP_Recipe;
+import gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map_Internal;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import gregtech.api.util.GT_Utility;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.recipe.common.CI;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class RecipeGen_MultisUsingFluidInsteadOfCells {
+
+
+ private static ItemStack mEmptyCell;
+ private static AutoMap<ItemStack> mItemsToIgnore = new AutoMap<ItemStack>();
+ private static boolean mInit = false;
+
+ private static void init() {
+ if (!mInit) {
+ mInit = true;
+ mItemsToIgnore.add(ItemUtils.simpleMetaStack(CI.emptyCells(1).getItem(), 8, 1));
+
+
+ }
+ }
+
+ private static boolean doesItemMatchIgnoringStackSize(ItemStack a, ItemStack b) {
+ if (a == null || b == null) {
+ return false;
+ }
+ if (a.getItem() == b.getItem()) {
+ if (a.getItemDamage() == b.getItemDamage()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isEmptyCell(ItemStack aCell) {
+ if (aCell == null) {
+ return false;
+ }
+ if (mEmptyCell == null) {
+ mEmptyCell = CI.emptyCells(1);
+ }
+ if (mEmptyCell != null) {
+ ItemStack aTempStack = mEmptyCell.copy();
+ aTempStack.stackSize = aCell.stackSize;
+ if (GT_Utility.areStacksEqual(aTempStack, aCell)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private synchronized static FluidStack getFluidFromItemStack(final ItemStack ingot) {
+ if (ingot == null) {
+ return null;
+ }
+ FluidStack aFluid = GT_Utility.getFluidForFilledItem(ingot, true);
+ if (aFluid != null) {
+ return aFluid;
+ }
+ return null;
+ }
+
+ public synchronized static int generateRecipesNotUsingCells(GT_Recipe_Map aInputs, GTPP_Recipe_Map_Internal aOutputs) {
+ init();
+ int aRecipesHandled = 0;
+ int aInvalidRecipesToConvert = 0;
+ int aOriginalCount = aInputs.mRecipeList.size();
+
+ recipe : for (GT_Recipe x : aInputs.mRecipeList) {
+ if (x != null) {
+
+ ItemStack[] aInputItems = x.mInputs.clone();
+ ItemStack[] aOutputItems = x.mOutputs.clone();
+ FluidStack[] aInputFluids = x.mFluidInputs.clone();
+ FluidStack[] aOutputFluids = x.mFluidOutputs.clone();
+
+ AutoMap<ItemStack> aInputItemsMap = new AutoMap<ItemStack>();
+ AutoMap<ItemStack> aOutputItemsMap = new AutoMap<ItemStack>();
+ AutoMap<FluidStack> aInputFluidsMap = new AutoMap<FluidStack>();
+ AutoMap<FluidStack> aOutputFluidsMap = new AutoMap<FluidStack>();
+
+ // Iterate Inputs, Convert valid items into fluids
+ inputs : for (ItemStack aInputStack : aInputItems) {
+ FluidStack aFoundFluid = getFluidFromItemStack(aInputStack);
+ if (aFoundFluid == null) {
+ for (ItemStack aBadStack : mItemsToIgnore) {
+ if (doesItemMatchIgnoringStackSize(aInputStack, aBadStack)) {
+ continue recipe; // Skip this recipe entirely if we find an item we don't like
+ }
+ }
+ if (!isEmptyCell(aInputStack)) {
+ aInputItemsMap.add(aInputStack);
+ }
+ }
+ else {
+ aFoundFluid.amount = aFoundFluid.amount * aInputStack.stackSize;
+ aInputFluidsMap.add(aFoundFluid);
+ }
+ }
+ // Iterate Outputs, Convert valid items into fluids
+ outputs: for (ItemStack aOutputStack : aOutputItems) {
+ FluidStack aFoundFluid = getFluidFromItemStack(aOutputStack);
+ if (aFoundFluid == null) {
+ for (ItemStack aBadStack : mItemsToIgnore) {
+ if (doesItemMatchIgnoringStackSize(aOutputStack, aBadStack)) {
+ continue recipe; // Skip this recipe entirely if we find an item we don't like
+ }
+ }
+ if (!isEmptyCell(aOutputStack)) {
+ aOutputItemsMap.add(aOutputStack);
+ }
+ }
+ else {
+ aFoundFluid.amount = aFoundFluid.amount * aOutputStack.stackSize;
+ aOutputFluidsMap.add(aFoundFluid);
+ }
+ }
+ // Add Input fluids second
+ for (FluidStack aInputFluid : aInputFluids) {
+ aInputFluidsMap.add(aInputFluid);
+ }
+ // Add Output fluids second
+ for (FluidStack aOutputFluid : aOutputFluids) {
+ aOutputFluidsMap.add(aOutputFluid);
+ }
+
+ // Make some new Arrays
+ ItemStack[] aNewItemInputs = new ItemStack[aInputItemsMap.size()];
+ ItemStack[] aNewItemOutputs = new ItemStack[aOutputItemsMap.size()];
+ FluidStack[] aNewFluidInputs = new FluidStack[aInputFluidsMap.size()];
+ FluidStack[] aNewFluidOutputs = new FluidStack[aOutputFluidsMap.size()];
+
+ // Add AutoMap contents to Arrays
+ for (int i = 0; i < aInputItemsMap.size(); i++) {
+ aNewItemInputs[i] = aInputItemsMap.get(i);
+ }
+ for (int i = 0; i < aOutputItemsMap.size(); i++) {
+ aNewItemOutputs[i] = aOutputItemsMap.get(i);
+ }
+ for (int i = 0; i < aInputFluidsMap.size(); i++) {
+ aNewFluidInputs[i] = aInputFluidsMap.get(i);
+ }
+ for (int i = 0; i < aOutputFluidsMap.size(); i++) {
+ aNewFluidOutputs[i] = aOutputFluidsMap.get(i);
+ }
+
+ // Add Recipe to map
+ GT_Recipe aNewRecipe = new GTPP_Recipe(
+ false,
+ aNewItemInputs,
+ aNewItemOutputs,
+ x.mSpecialItems,
+ x.mChances,
+ aNewFluidInputs,
+ aNewFluidOutputs,
+ x.mDuration,
+ x.mEUt,
+ x.mSpecialValue);
+ aOutputs.add(aNewRecipe);
+ aRecipesHandled++;
+ }
+ else {
+ aInvalidRecipesToConvert++;
+ }
+ }
+
+ Logger.INFO("Generated Recipes for "+aOutputs.mNEIName);
+ Logger.INFO("Original Map contains "+aOriginalCount+" recipes.");
+ Logger.INFO("Output Map contains "+aRecipesHandled+" recipes.");
+ Logger.INFO("There were "+aInvalidRecipesToConvert+" invalid recipes.");
+ return aRecipesHandled;
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java
index 9b7e1d708d..b7043b5983 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java
@@ -462,19 +462,19 @@ public class RecipeGen_Ore extends RecipeGen_Base {
/**
* Shaped Crafting
*/
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
CI.craftingToolHammer_Hard, null, null,
material.getCrushedPurified(1), null, null,
null, null, null,
material.getDustPurified(1));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
CI.craftingToolHammer_Hard, null, null,
material.getCrushed(1), null, null,
null, null, null,
material.getDustImpure(1));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
CI.craftingToolHammer_Hard, null, null,
material.getCrushedCentrifuged(1), null, null,
null, null, null,
@@ -486,7 +486,7 @@ public class RecipeGen_Ore extends RecipeGen_Base {
final ItemStack smallDust = material.getSmallDust(1);
final ItemStack tinyDust = material.getTinyDust(1);
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
tinyDust, tinyDust, tinyDust,
@@ -497,7 +497,7 @@ public class RecipeGen_Ore extends RecipeGen_Base {
Logger.WARNING("9 Tiny dust to 1 Dust Recipe: "+material.getLocalizedName()+" - Failed");
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
normalDust, null, null,
null, null, null,
null, null, null,
@@ -509,7 +509,7 @@ public class RecipeGen_Ore extends RecipeGen_Base {
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
smallDust, smallDust, null,
smallDust, smallDust, null,
null, null, null,
@@ -521,7 +521,7 @@ public class RecipeGen_Ore extends RecipeGen_Base {
}
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
null, normalDust, null,
null, null, null,
null, null, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java
index 3249e0101d..ea129a2b0e 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java
@@ -93,7 +93,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Ring Recipe
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getRing(1)) && ItemUtils.checkForInvalidItems(material.getRod(1))) {
if (CORE.GTNH){
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolHardHammer", null, null,
"craftingToolFile", material.getRod(1), null,
null, null, null,
@@ -105,7 +105,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
}
}
else {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolHardHammer", null, null,
null, material.getRod(1), null,
null, null, null,
@@ -122,7 +122,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Framebox Recipe
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getFrameBox(1)) && ItemUtils.checkForInvalidItems(material.getRod(1))) {
final ItemStack stackStick = material.getRod(1);
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
stackStick, stackStick, stackStick,
stackStick, "craftingToolWrench", stackStick,
stackStick, stackStick, stackStick,
@@ -166,7 +166,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Shaped Recipe - Bolts
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getBolt(1)) && ItemUtils.checkForInvalidItems(material.getRod(1))) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolSaw", null, null,
null, material.getRod(1), null,
null, null, null,
@@ -181,7 +181,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Shaped Recipe - Ingot to Rod
if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getIngot(1)))
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolFile", null, null,
null, material.getIngot(1), null,
null, null, null,
@@ -195,7 +195,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Shaped Recipe - Long Rod to two smalls
if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getLongRod(1)))
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolSaw", null, null,
material.getLongRod(1), null, null,
null, null, null,
@@ -208,7 +208,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Two small to long rod
if (ItemUtils.checkForInvalidItems(material.getLongRod(1)) && ItemUtils.checkForInvalidItems(material.getRod(1)))
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
material.getRod(1), "craftingToolHardHammer", material.getRod(1),
null, null, null,
null, null, null,
@@ -221,7 +221,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Rotor Recipe
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getRotor(1)) && ItemUtils.checkForInvalidItems(material.getRing(1)) && !material.isRadioactive && ItemUtils.checkForInvalidItems(material.getPlate(1)) && ItemUtils.checkForInvalidItems(material.getScrew(1))) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
material.getPlate(1), "craftingToolHardHammer", material.getPlate(1),
material.getScrew(1), material.getRing(1), "craftingToolFile",
material.getPlate(1), "craftingToolScrewdriver", material.getPlate(1),
@@ -235,7 +235,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Gear Recipe
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getGear(1)) && ItemUtils.checkForInvalidItems(material.getPlate(1)) && ItemUtils.checkForInvalidItems(material.getRod(1))) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
material.getRod(1), material.getPlate(1), material.getRod(1),
material.getPlate(1), "craftingToolWrench", material.getPlate(1),
material.getRod(1), material.getPlate(1), material.getRod(1),
@@ -249,7 +249,7 @@ public class RecipeGen_ShapedCrafting extends RecipeGen_Base {
//Screws
if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getScrew(1)) && ItemUtils.checkForInvalidItems(material.getBolt(1))) {
- if (RecipeUtils.recipeBuilder(
+ if (RecipeUtils.addShapedRecipe(
"craftingToolFile", material.getBolt(1), null,
material.getBolt(1), null, null,
null, null, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
index 4138fff564..1f41bf84e3 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/GregtechRecipeAdder.java
@@ -26,8 +26,10 @@ import gtPlusPlus.core.util.minecraft.MaterialUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IGregtech_RecipeAdder;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy_RTG;
import gtPlusPlus.xmod.gregtech.common.StaticFields59;
import gtPlusPlus.xmod.gregtech.common.helpers.FlotationRecipeHandler;
+import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GregtechMetaTileEntity_RTG;
import gtPlusPlus.xmod.gregtech.recipes.machines.RECIPEHANDLER_MatterFabricator;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -96,9 +98,28 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
e.getStackTrace();
}
try {
+
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ new ItemStack[] { aInput1, aInput2 },
+ new ItemStack[] { aOutput },
+ null,
+ new int[] {},
+ new FluidStack[] { aFluidInput },
+ new FluidStack[] { aFluidOutput },
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ 0);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.mRecipeList.size();
+
+
// RECIPEHANDLER_CokeOven.debug4(aInput1, aInput2, aFluidInput,
// aFluidOutput, aOutput, aDuration, aEUt);
- if (aFluidInput == null && aInput2 != null) {
+ /*if (aFluidInput == null && aInput2 != null) {
GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 },
new ItemStack[] { aOutput }, null, null, null, new FluidStack[] { aFluidOutput }, aDuration,
aEUt, 0);
@@ -112,11 +133,11 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
GTPP_Recipe.GTPP_Recipe_Map.sCokeOvenRecipes.addRecipe(true, new ItemStack[] { aInput1, aInput2 },
new ItemStack[] { aOutput }, null, null, new FluidStack[] { aFluidInput },
new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
- }
+ }*/
// RECIPEHANDLER_CokeOven.debug5(aInput1, aInput2, aFluidInput,
// aFluidOutput, aOutput, aDuration, aEUt);
- return true;
+ return aSize > aSize2;
}
catch (final NullPointerException e) {
@@ -163,15 +184,36 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
// Recipe_GT.Gregtech_Recipe_Map.sMatterFabRecipes.addRecipe(true,
// null, new FluidStack[]{aFluidOutput}, aDuration, aEUt,
// 0);
- GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(true, null, null, null, null,
- new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] {},
+ new ItemStack[] {},
+ null,
+ new int[] {},
+ new FluidStack[] {},
+ new FluidStack[] {aFluidOutput},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(aRecipe);
}
else {
// Recipe_GT.Gregtech_Recipe_Map.sMatterFabRecipes.addRecipe(true,
// new FluidStack[]{aFluidInput}, new
// FluidStack[]{aFluidOutput}, aDuration, aEUt, 0);
- GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(true, null, null, null,
- new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] {},
+ new ItemStack[] {},
+ null,
+ new int[] {},
+ new FluidStack[] {aFluidInput},
+ new FluidStack[] {aFluidOutput},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(aRecipe);
}
RECIPEHANDLER_MatterFabricator.debug5(aFluidInput, aFluidOutput, aDuration, aEUt);
@@ -205,13 +247,32 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
}
try {
if (aFluidInput == null) {
- GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(true, new ItemStack[] { aInputStack },
- null, null, null, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] { aInputStack },
+ new ItemStack[] {},
+ null,
+ new int[] {},
+ new FluidStack[] {},
+ new FluidStack[] {aFluidOutput},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(aRecipe);
}
else {
- GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(true, new ItemStack[] { aInputStack },
- null, null, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration,
- aEUt, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] { aInputStack },
+ new ItemStack[] {},
+ null,
+ new int[] {},
+ new FluidStack[] {aFluidInput},
+ new FluidStack[] {aFluidOutput},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sMatterFab2Recipes.addRecipe(aRecipe);
}
RECIPEHANDLER_MatterFabricator.debug5(aFluidInput, aFluidOutput, aDuration, aEUt);
return true;
@@ -282,8 +343,18 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
if ((aDuration = GregTech_API.sRecipeFile.get("dehydrator", aInput, aDuration)) <= 0) {
return false;
}
- GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.addRecipe(true, new ItemStack[] { aInput },
- aOutput, null, new FluidStack[] { aFluid }, null, aDuration, aEUt, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] { aInput },
+ aOutput,
+ null,
+ new int[] {},
+ new FluidStack[] { aFluid },
+ new FluidStack[] {},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.addRecipe(aRecipe);
// RECIPEHANDLER_Dehydrator.debug5(aInput, null, aFluid, null,
// aOutput, aDuration, aEUt);
return true;
@@ -330,7 +401,24 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
Logger.WARNING("Recipe will output: " + aFluidOutput.getFluid().getName());
}
- if (aInput.length == 1) {
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ aInput,
+ aOutputItems,
+ null,
+ aChances,
+ new FluidStack[] { aFluidInput },
+ new FluidStack[] { aFluidOutput },
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ 0);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.mRecipeList.size();
+
+ /*if (aInput.length == 1) {
Logger.WARNING("Dehydrator recipe only has a single input item.");
GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.addRecipe(true, aInput, aOutputItems, null,
aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt,
@@ -342,10 +430,9 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
GTPP_Recipe.GTPP_Recipe_Map.sChemicalDehydratorRecipes.addRecipe(true, aInput, aOutputItems, null,
aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt,
0);
+ }*/
- }
-
- return true;
+ return aSize > aSize2;
}
catch (final NullPointerException e) {
Logger.WARNING("FAILED TO LOAD RECIPES - NULL POINTER SOMEWHERE");
@@ -407,13 +494,29 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
if (aInput.length <= 1) {
return false;
}
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ aInput,
+ aOutputStack,
+ null,
+ aChance,
+ new FluidStack[] { aInputFluid },
+ new FluidStack[] { aOutput },
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ aSpecialValue);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.mRecipeList.size();
-
- GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.addRecipe(true, aInput, aOutputStack, null,
+ /*GTPP_Recipe.GTPP_Recipe_Map.sAlloyBlastSmelterRecipes.addRecipe(true, aInput, aOutputStack, null,
aChance, new FluidStack[] { aInputFluid }, new FluidStack[] { aOutput }, aDuration, aEUt,
- aSpecialValue);
- return true;
+ aSpecialValue);*/
+
+ return aSize > aSize2;
}
@Override
@@ -451,10 +554,29 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
}
final FluidStack inputs[] = { aInput1, aInput2, aInput3, aInput4, aInput5, aInput6, aInput7, aInput8, aInput9 };
final FluidStack outputs[] = { aOutput1, aOutput2 };
- // Recipe_GT.Gregtech_Recipe_Map.sFissionFuelProcessing.addRecipe(null,
- // inputs, outputs, aDuration, aEUt, 0);
- CustomRecipeMap.sFissionFuelProcessing.addRecipe(null, inputs, outputs, aDuration, aEUt, 0);
- return true;
+
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ new ItemStack[] {},
+ new ItemStack[] {},
+ null,
+ new int[] {},
+ inputs,
+ outputs,
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ 0);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sFissionFuelProcessing.mRecipeList.size();
+
+ if (aSize > aSize2) {
+ Logger.INFO("Added Nuclear Fuel Recipe.");
+ return true;
+ }
+ return false;
}
@Override
@@ -467,14 +589,33 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
public boolean addCyclotronRecipe(ItemStack[] aInputs, FluidStack aFluidInput, ItemStack[] aOutput,
FluidStack aFluidOutput, int[] aChances, int aDuration, int aEUt, int aSpecialValue) {
if (aOutput == null || aOutput.length < 1 || !ItemUtils.checkForInvalidItems(aOutput)) {
+ Logger.INFO("Bad output for Cyclotron Recipe.");
return false;
}
- if (GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.addRecipe(true, aInputs, aOutput,
- null, aChances, new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput },
- Math.max(1, aDuration), Math.max(1, aEUt), aSpecialValue) != null) {
+
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ aInputs,
+ aOutput,
+ null,
+ aChances,
+ new FluidStack[] { aFluidInput },
+ new FluidStack[] { aFluidOutput },
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ aSpecialValue);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sCyclotronRecipes.mRecipeList.size();
+
+ if (aSize > aSize2) {
+ Logger.INFO("Added Cyclotron Recipe.");
return true;
}
+ Logger.INFO("Failed to add Cyclotron Recipe. Output: "+ItemUtils.getArrayStackNames(aOutput));
return false;
}
@@ -493,11 +634,29 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
aFluidOutput.getFluid().getName(), aDuration)) <= 0)) {
return false;
}
- GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.addRecipe(true,
+ GTPP_Recipe aSpecialRecipe = new GTPP_Recipe(
+ true,
+ new ItemStack[] { aInput1, aInput2, aInput3, aInput4 },
+ new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4 },
+ null,
+ new int[] {},
+ new FluidStack[] { aFluidInput },
+ new FluidStack[] { aFluidOutput },
+ Math.max(1, aDuration),
+ Math.max(1, aEUt),
+ 0);
+
+ int aSize = GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.mRecipeList.size();
+ int aSize2 = aSize;
+ GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.add(aSpecialRecipe);
+ aSize = GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.mRecipeList.size();
+
+ /*GTPP_Recipe.GTPP_Recipe_Map.sAdvancedMixerRecipes.addRecipe(true,
new ItemStack[] { aInput1, aInput2, aInput3, aInput4 },
new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4 }, null, null,
- new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);
- return true;
+ new FluidStack[] { aFluidInput }, new FluidStack[] { aFluidOutput }, aDuration, aEUt, 0);*/
+
+ return aSize > aSize2;
}
// Machine Component Assembler
@@ -516,8 +675,18 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
if (GTNH) {
return false;
}
- GTPP_Recipe.GTPP_Recipe_Map.sComponentAssemblerRecipes.addRecipe(true, aInputs, new ItemStack[] { aOutput1 },
- null, new FluidStack[] { aFluidInput }, null, aDuration, aEUt, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ aInputs,
+ new ItemStack[] { aOutput1 },
+ null,
+ new int[] {},
+ new FluidStack[] {aFluidInput},
+ new FluidStack[] {},
+ aDuration,
+ aEUt,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sComponentAssemblerRecipes.addRecipe(aRecipe);
return true;
}
@@ -535,7 +704,21 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
Logger.INFO("Fluid Outputs: "+ItemUtils.getArrayStackNames(aFluidOutputs));
return false;
}
- GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial);
+
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ aInputs,
+ aOutputs,
+ null,
+ aChances,
+ aFluidInputs,
+ aFluidOutputs,
+ aDuration,
+ aEUtick,
+ aSpecial);
+ GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.addRecipe(aRecipe);
+
+ //GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial);
return true;
}
@@ -551,7 +734,20 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
Logger.INFO("Fluid Outputs: "+ItemUtils.getArrayStackNames(aFluidOutputs));
return false;
}
- GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial);
+
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ aInputs,
+ aOutputs,
+ null,
+ aChances,
+ aFluidInputs,
+ aFluidOutputs,
+ aDuration,
+ aEUtick,
+ aSpecial);
+ GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes_GT.addRecipe(aRecipe);
+ //GTPP_Recipe.GTPP_Recipe_Map.sMultiblockElectrolyzerRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial);
return true;
}
@@ -569,9 +765,22 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
Logger.INFO("Fluid Outputs: "+ItemUtils.getArrayStackNames(aFluidOutputs));
return false;
}
- if (GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial) != null) {
+
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ aInputs,
+ aOutputs,
+ null,
+ aChances,
+ aFluidInputs,
+ aFluidOutputs,
+ aDuration,
+ aEUtick,
+ aSpecial);
+ GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes_GT.addRecipe(aRecipe);
+ /*if (GTPP_Recipe.GTPP_Recipe_Map.sAdvFreezerRecipes.addRecipe(true, aInputs, aOutputs, null, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUtick, aSpecial) != null) {
return true;
- }
+ }*/
return false;
}
@@ -1453,6 +1662,46 @@ public class GregtechRecipeAdder implements IGregtech_RecipeAdder {
return aSize > aSize2;
}
+ @Override
+ public boolean addpackagerRecipe(ItemStack aRecipeType, ItemStack aSmallDust, ItemStack aTinyDust, ItemStack aOutputStack1) {
+ AutoMap<Boolean> aResults = new AutoMap<Boolean>();
+ //Dust 1
+ aResults.put(GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(4L, new Object[]{aSmallDust}), aRecipeType, aOutputStack1, 100, 4));
+ //Dust 2
+ aResults.put(GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(9L, new Object[]{aTinyDust}), aRecipeType, aOutputStack1, 100, 4));
+ for (boolean b : aResults) {
+ if (!b) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean addFuelForRTG(ItemStack aFuelPellet, int aFuelDays, int aVoltage) {
+ int aSize1 = GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.mRecipeList.size();
+ GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.addRecipe(
+ true,
+ new ItemStack[]{aFuelPellet},
+ new ItemStack[]{},
+ null,
+ null,
+ null,
+ 0,
+ aVoltage,
+ aFuelDays);
+ int aSize2 = GTPP_Recipe.GTPP_Recipe_Map.sRTGFuels.mRecipeList.size();
+
+ if (aSize2 > aSize1) {
+ long eu = GregtechMetaTileEntity_RTG.getTotalEUGenerated(GregtechMetaTileEntity_RTG.convertDaysToTicks(aFuelDays), aVoltage);
+ GT_MetaTileEntity_Hatch_Energy_RTG.registerPelletForHatch(aFuelPellet, eu);
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/recipes/RecipesToRemove.java b/src/Java/gtPlusPlus/xmod/gregtech/recipes/RecipesToRemove.java
index f36d714a03..99e3d5c4d9 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/recipes/RecipesToRemove.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/recipes/RecipesToRemove.java
@@ -23,8 +23,8 @@ public class RecipesToRemove {
aRareEarthCentrifuging.mEnabled = false;
aRareEarthCentrifuging.mHidden = true;
GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes.mRecipeList.remove(aRareEarthCentrifuging);
- GTPP_Recipe.GT_Recipe_Map_LargeCentrifuge.sMultiblockCentrifugeRecipes.mRecipeList.remove(aRareEarthCentrifuging);
- GTPP_Recipe.GT_Recipe_Map_LargeCentrifuge.sMultiblockCentrifugeRecipes_GT.mRecipeList.remove(aRareEarthCentrifuging);
+ //GTPP_Recipe.GT_Recipe_Map_LargeCentrifuge.sMultiblockCentrifugeRecipes.mRecipeList.remove(aRareEarthCentrifuging);
+ GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mRecipeList.remove(aRareEarthCentrifuging);
Logger.INFO("Removed vanilla GT Rare Earth processing.");
//Set the Chemical Symbol for Rare Earth now that we are giving it custom outputs
//Best not to set this unless the original recipe is removed.
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java
index 08901a1a3b..6ddc971f85 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java
@@ -1,6 +1,9 @@
package gtPlusPlus.xmod.gregtech.registration.gregtech;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_Catalysts;
@@ -25,6 +28,28 @@ public class GregtechAlgaeContent {
GregtechItemList.ChemicalPlant_Controller.set(new GregtechMTE_ChemicalPlant(998, "chemicalplant.controller.tier.single", "ExxonMobil Chemical Plant").getStackForm(1L));
GregtechItemList.Bus_Catalysts.set((new GT_MetaTileEntity_Hatch_Catalysts(31030, "hatch.catalysts", "Catalyst Housing")).getStackForm(1L));
+
+
+ int aTier = 0;
+ // Bronze
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, ModBlocks.blockCustomMachineCasings, 0, 10);
+ // Steel
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, GregTech_API.sBlockCasings2, 0, 16);
+ // Aluminium
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, ModBlocks.blockCustomMachineCasings, 1, 17);
+ // Stainless
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, GregTech_API.sBlockCasings4, 1, 49);
+ // Titanium
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, GregTech_API.sBlockCasings4, 2, 50);
+ // Tungsten
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, GregTech_API.sBlockCasings4, 0, 48);
+ // Laurenium
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, ModBlocks.blockCustomMachineCasings, 2, 84);
+ // Botmium
+ GregtechMTE_ChemicalPlant.registerMachineCasingForTier(aTier++, ModBlocks.blockCustomMachineCasings, 3, 11);
+
+
+
}
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
index abc5558444..e709d207ed 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java
@@ -363,19 +363,19 @@ public class GregtechConduits {
//Add the Three Shaped Recipes First
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
pipePlate, "craftingToolWrench", pipePlate,
pipePlate, null, pipePlate,
pipePlate, "craftingToolHardHammer", pipePlate,
ItemUtils.getItemStackOfAmountFromOreDict("pipe"+"Small"+output, 6));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
pipePlate, pipePlate, pipePlate,
"craftingToolWrench", null, "craftingToolHardHammer",
pipePlate, pipePlate, pipePlate,
ItemUtils.getItemStackOfAmountFromOreDict("pipe"+"Medium"+output, 2));
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
pipePlate, "craftingToolHardHammer", pipePlate,
pipePlate, null, pipePlate,
pipePlate, "craftingToolWrench", pipePlate,
@@ -418,7 +418,7 @@ public class GregtechConduits {
try {
final ItemStack pipePlateDouble = ItemUtils.getItemStackOfAmountFromOreDict("plateDouble"+output, 1).copy();
if (pipePlateDouble != null) {
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
pipePlateDouble, "craftingToolHardHammer", pipePlateDouble,
pipePlateDouble, null, pipePlateDouble,
pipePlateDouble, "craftingToolWrench", pipePlateDouble,
@@ -456,7 +456,7 @@ public class GregtechConduits {
public static boolean generateWireRecipes(Material aMaterial){
//Adds manual crafting recipe
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
Utils.sanitizeString("plate"+aMaterial.getLocalizedName()), CI.craftingToolWireCutter, null,
null, null, null,
null, null, null,
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
index 2c622b9d8e..c748da5d3c 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java
@@ -7,14 +7,9 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_ControlCore;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler_Adv;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Naquadah;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_TurbineProvider;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Input;
-import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SuperBus_Output;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.*;
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GT_MetaTileEntity_Hatch_CustomFluidBase;
public class GregtechCustomHatches {
@@ -27,6 +22,7 @@ public class GregtechCustomHatches {
run2();
}
run3();
+ run4();
}
}
@@ -70,15 +66,26 @@ public class GregtechCustomHatches {
// Multiblock Control Core Bus
GregtechItemList.Hatch_Control_Core.set((new GT_MetaTileEntity_Hatch_ControlCore(30020, "hatch.control.adv", "Control Core Module", 1)).getStackForm(1L));
-
+
// Multiblock Air Intake Hatch
GregtechItemList.Hatch_Air_Intake.set(new GT_MetaTileEntity_Hatch_AirIntake(861, "hatch.air.intake.tier.00", "Air Intake Hatch", 5).getStackForm(1L));
-
-
-
-
-
-
+
+ // Steam Hatch
+ GregtechItemList.Hatch_Input_Steam
+ .set(new GT_MetaTileEntity_Hatch_CustomFluidBase(FluidUtils.getSteam(1).getFluid(), // Fluid
+ // to
+ // resitrct
+ // hatch
+ // to
+ 64000, // Capacity
+ 31040, // ID
+ "hatch.steam.input.tier.00", // unlocal name
+ "Steam Hatch" // Local name
+ ).getStackForm(1L));
+
+
+
+
}
@@ -114,86 +121,86 @@ public class GregtechCustomHatches {
private static void run3() {
-
-
+
+
/*
* Super Input Busses
*/
-
+
int aStartID = 30021;
Class aGT_MetaTileEntity_SuperBus_Input = GT_MetaTileEntity_SuperBus_Input.class;
Class aGT_MetaTileEntity_SuperBus_Output = GT_MetaTileEntity_SuperBus_Output.class;
-
+
GregtechItemList.Hatch_SuperBus_Input_ULV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.00", "Super Bus (I) (ULV)", 0))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.00", "Super Bus (I) (ULV)", 0))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_LV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.01", "Super Bus (I) (LV)", 1))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.01", "Super Bus (I) (LV)", 1))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_MV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.02", "Super Bus (I) (MV)", 2))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.02", "Super Bus (I) (MV)", 2))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_HV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.03", "Super Bus (I) (HV)", 3))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.03", "Super Bus (I) (HV)", 3))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_EV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.04", "Super Bus (I) (EV)", 4))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.04", "Super Bus (I) (EV)", 4))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_IV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.05", "Super Bus (I) (IV)", 5))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.05", "Super Bus (I) (IV)", 5))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_LuV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.06", "Super Bus (I) (LuV)", 6))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.06", "Super Bus (I) (LuV)", 6))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_ZPM
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.07", "Super Bus (I) (ZPM)", 7))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.07", "Super Bus (I) (ZPM)", 7))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_UV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.08", "Super Bus (I) (UV)", 8))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.08", "Super Bus (I) (UV)", 8))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Input_MAX
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.09", "Super Bus (I) (MAX)", 9))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Input, aStartID++, "hatch.superbus.input.tier.09", "Super Bus (I) (MAX)", 9))
+ .getStackForm(1L));
/*
* Super Output Busses
*/
GregtechItemList.Hatch_SuperBus_Output_ULV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.00", "Super Bus (O) (ULV)", 0))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.00", "Super Bus (O) (ULV)", 0))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_LV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.01", "Super Bus (O) (LV)", 1))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.01", "Super Bus (O) (LV)", 1))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_MV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.02", "Super Bus (O) (MV)", 2))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.02", "Super Bus (O) (MV)", 2))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_HV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.03", "Super Bus (O) (HV)", 3))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.03", "Super Bus (O) (HV)", 3))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_EV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.04", "Super Bus (O) (EV)", 4))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.04", "Super Bus (O) (EV)", 4))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_IV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.05", "Super Bus (O) (IV)", 5))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.05", "Super Bus (O) (IV)", 5))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_LuV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.06", "Super Bus (O) (LuV)", 6))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.06", "Super Bus (O) (LuV)", 6))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_ZPM
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.07", "Super Bus (O) (ZPM)", 7))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.07", "Super Bus (O) (ZPM)", 7))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_UV
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.08", "Super Bus (O) (UV)", 8))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.08", "Super Bus (O) (UV)", 8))
+ .getStackForm(1L));
GregtechItemList.Hatch_SuperBus_Output_MAX
- .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.09", "Super Bus (O) (MAX)", 9))
- .getStackForm(1L));
+ .set(((IMetaTileEntity) generateBus(aGT_MetaTileEntity_SuperBus_Output, aStartID++, "hatch.superbus.output.tier.09", "Super Bus (O) (MAX)", 9))
+ .getStackForm(1L));
}
-
+
private static Object generateBus(Class aClass, int aID, String aUnlocalName, String aLocalName, int aTier) {
Class<?> aBusEntity = aClass;
Constructor<?> constructor;
@@ -227,4 +234,19 @@ public class GregtechCustomHatches {
return null;
}
+
+ private static void run4() {
+ int aID = 31060;
+ //41, "hatch.energy.tier.01", "LV Energy Hatch", 1
+ Constructor aRTG = ReflectionUtils.getConstructor(GT_MetaTileEntity_Hatch_Energy_RTG.class, new Class[] {int.class, String.class, String.class, int.class, int.class});
+ Object aHatch1 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.01", "RTG Power Unit [LV]", 1, 9});
+ Object aHatch2 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.02", "RTG Power Unit [MV]", 2, 9});
+ Object aHatch3 = ReflectionUtils.createNewInstanceFromConstructor(aRTG, new Object[] {aID++, "hatch.energy.rtg.tier.03", "RTG Power Unit [HV]", 3, 9});
+
+ GregtechItemList.Hatch_RTG_LV.set(((IMetaTileEntity) aHatch1).getStackForm(1L));
+ GregtechItemList.Hatch_RTG_MV.set(((IMetaTileEntity) aHatch2).getStackForm(1L));
+ GregtechItemList.Hatch_RTG_HV.set(((IMetaTileEntity) aHatch3).getStackForm(1L));
+
+ }
+
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java
new file mode 100644
index 0000000000..5fa9ebdace
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java
@@ -0,0 +1,20 @@
+package gtPlusPlus.xmod.gregtech.registration.gregtech;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_ElementalDataOrbHolder;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusInput;
+import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMTE_ElementalDuplicator;
+
+public class GregtechIndustrialElementDuplicator {
+
+ public static void run(){
+
+ Logger.INFO("Gregtech5u Content | Registering Elemental Duplicator Multiblock.");
+
+ GregtechItemList.Controller_ElementalDuplicator.set(new GregtechMTE_ElementalDuplicator(31050, "gtpp.multimachine.replicator", "Elemental Duplicator").getStackForm(1L));
+ GregtechItemList.Hatch_Input_Elemental_Duplicator.set(new GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(31051, "hatch.input_bus.elementalorbholder", "Elemental Data Orb Storage", 7).getStackForm(1L));
+
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java
index 1d4fa84782..d2087b22f4 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java
@@ -41,17 +41,33 @@ public class GregtechSimpleWasher {
}
private static boolean generateDirtyDustRecipes(){
+ boolean disablePlat = CORE.GTNH;
int mRecipeCount = 0;
// Generate Recipe Map for the Dust Washer.
ItemStack dustClean;
ItemStack dustDirty;
- for (Materials v : Materials.values()) {
+ for (Materials v : Materials.values()) {
+ if (disablePlat) {
+ if (v == Materials.Platinum || v == Materials.Osmium || v == Materials.Iridium || v == Materials.Palladium) {
+ continue;
+ }
+ }
+
dustClean = GT_OreDictUnificator.get(OrePrefixes.dust, v, 1L);
dustDirty = GT_OreDictUnificator.get(OrePrefixes.dustImpure, v, 1L);
if (dustClean != null && dustDirty != null) {
- GTPP_Recipe.GTPP_Recipe_Map.sSimpleWasherRecipes.addRecipe(false, new ItemStack[] { dustDirty },
- new ItemStack[] { dustClean }, null,
- new FluidStack[] { FluidUtils.getFluidStack("water", 100) }, null, 5, 8, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] { dustDirty },
+ new ItemStack[] { dustClean },
+ null,
+ new int[] {},
+ new FluidStack[] { FluidUtils.getFluidStack("water", 100) },
+ new FluidStack[] {},
+ 5,
+ 8,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sSimpleWasherRecipes.addRecipe(aRecipe);
}
}
@@ -70,9 +86,18 @@ public class GregtechSimpleWasher {
crushedClean = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, v, 1L);
crushedDirty = GT_OreDictUnificator.get(OrePrefixes.crushed, v, 1L);
if (crushedClean != null && crushedDirty != null) {
- GTPP_Recipe.GTPP_Recipe_Map.sSimpleWasherRecipes.addRecipe(false, new ItemStack[] { crushedDirty },
- new ItemStack[] { crushedClean }, null,
- new FluidStack[] { FluidUtils.getFluidStack("water", 100) }, null, 5, 8, 0);
+ GTPP_Recipe aRecipe = new GTPP_Recipe(
+ false,
+ new ItemStack[] { crushedDirty },
+ new ItemStack[] { crushedClean },
+ null,
+ new int[] {},
+ new FluidStack[] { FluidUtils.getFluidStack("water", 100) },
+ new FluidStack[] {},
+ 5,
+ 8,
+ 0);
+ GTPP_Recipe.GTPP_Recipe_Map.sSimpleWasherRecipes.addRecipe(aRecipe);
}
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java
new file mode 100644
index 0000000000..add0400d87
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java
@@ -0,0 +1,22 @@
+package gtPlusPlus.xmod.gregtech.registration.gregtech;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusInput;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusOutput;
+import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamMacerator;
+
+public class GregtechSteamMultis {
+
+ public static void run(){
+
+ Logger.INFO("Gregtech5u Content | Registering Steam Multiblocks.");
+
+ GregtechItemList.Controller_SteamMaceratorMulti.set(new GregtechMetaTileEntity_SteamMacerator(31041, "gtpp.multimachine.steam.macerator", "Steam Grinder").getStackForm(1L));
+
+ GregtechItemList.Hatch_Input_Bus_Steam.set(new GT_MetaTileEntity_Hatch_Steam_BusInput(31046, "hatch.input_bus.tier.steam", "Input Bus (Steam)", 0).getStackForm(1L));
+ GregtechItemList.Hatch_Output_Bus_Steam.set(new GT_MetaTileEntity_Hatch_Steam_BusOutput(31047, "hatch.output_bus.tier.steam", "Output Bus (Steam)", 0).getStackForm(1L));
+
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java
index dcf52a5008..5027e2d6e8 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java
@@ -22,11 +22,11 @@ public class GregtechSuperChests {
aSuffix = " [Disabled]";
}
- GregtechItemList.Super_Chest_LV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.tier.01", "Super Chest I"+aSuffix, 1)).getStackForm(1L));
- GregtechItemList.Super_Chest_MV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.tier.02", "Super Chest II"+aSuffix, 2)).getStackForm(1L));
- GregtechItemList.Super_Chest_HV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.tier.03", "Super Chest III"+aSuffix, 3)).getStackForm(1L));
- GregtechItemList.Super_Chest_EV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.tier.04", "Super Chest IV"+aSuffix, 4)).getStackForm(1L));
- GregtechItemList.Super_Chest_IV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.tier.05", "Super Chest V"+aSuffix, 5)).getStackForm(1L));
+ GregtechItemList.Super_Chest_LV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.gtpp.tier.01", "Super Chest I"+aSuffix, 1)).getStackForm(1L));
+ GregtechItemList.Super_Chest_MV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.gtpp.tier.02", "Super Chest II"+aSuffix, 2)).getStackForm(1L));
+ GregtechItemList.Super_Chest_HV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.gtpp.tier.03", "Super Chest III"+aSuffix, 3)).getStackForm(1L));
+ GregtechItemList.Super_Chest_EV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.gtpp.tier.04", "Super Chest IV"+aSuffix, 4)).getStackForm(1L));
+ GregtechItemList.Super_Chest_IV.set((new GT_MetaTileEntity_TieredChest(mId++, "super.chest.gtpp.tier.05", "Super Chest V"+aSuffix, 5)).getStackForm(1L));
// Do not add Recipes for GTNH, hide them from NEI instead.
if (CORE.GTNH) {
diff --git a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java
index 686910b9aa..43347949b6 100644
--- a/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java
+++ b/src/Java/gtPlusPlus/xmod/growthcraft/fishtrap/FishTrapHandler.java
@@ -102,7 +102,7 @@ public class FishTrapHandler {
final static String greenheartFish = "foodGreenheartfish";
private static final String[] harvestcraftFish = {
"Anchovy", "Bass", "Carp", "Catfish", "Charr", "Clam", "Crab", "Crayfish", "Eel", "Frog", "Grouper", "Herring",
- "Jellyfish", "Mudfish", "Octopus", "Perch", "Scallop", "Shrimp", "Snail", "Snapper", "Tilapia", "Trout", "Tuna", "Turtle", "Walleye"};
+ "Jellyfish", "Mudfish", "Octopus", "Perch", "Scallop", "Shrimp", "Snail", "Snapper", "Tilapia", "Trout", "Tuna", "Turtle", "Walley"};
public static void pamsHarvestCraftCompat(){
for (int i = 0; i < harvestcraftFish.length; i++){
final String itemName = prefix+harvestcraftFish[i]+suffix;
diff --git a/src/Java/gtPlusPlus/xmod/ic2/CustomInternalName.java b/src/Java/gtPlusPlus/xmod/ic2/CustomInternalName.java
index 18fb286d15..a349d7f86e 100644
--- a/src/Java/gtPlusPlus/xmod/ic2/CustomInternalName.java
+++ b/src/Java/gtPlusPlus/xmod/ic2/CustomInternalName.java
@@ -1,6 +1,5 @@
package gtPlusPlus.xmod.ic2;
-import gtPlusPlus.core.util.data.EnumUtils;
import ic2.core.init.InternalName;
import net.minecraftforge.common.util.EnumHelper;
@@ -12,14 +11,10 @@ public class CustomInternalName {
public static InternalName aHazmatBootsEx;
public static void init() {
- EnumHelper.addEnum(InternalName.class, "itemArmorHazmatHelmetEx", new Class[] {}, new Object[] {});
- EnumHelper.addEnum(InternalName.class, "itemArmorHazmatChestplateEx", new Class[] {}, new Object[] {});
- EnumHelper.addEnum(InternalName.class, "itemArmorHazmatLeggingsEx", new Class[] {}, new Object[] {});
- EnumHelper.addEnum(InternalName.class, "itemArmorRubBootsEx", new Class[] {}, new Object[] {});
- aHazmatHelmetEx = EnumUtils.getValue(InternalName.class, "itemArmorHazmatHelmetEx");
- aHazmatChestEx = EnumUtils.getValue(InternalName.class, "itemArmorHazmatChestplateEx");
- aHazmatLegsEx = EnumUtils.getValue(InternalName.class, "itemArmorHazmatLeggingsEx");
- aHazmatBootsEx = EnumUtils.getValue(InternalName.class, "itemArmorRubBootsEx");
+ aHazmatHelmetEx = EnumHelper.addEnum(InternalName.class, "itemArmorHazmatHelmetEx", new Class[] {}, new Object[] {});
+ aHazmatChestEx = EnumHelper.addEnum(InternalName.class, "itemArmorHazmatChestplateEx", new Class[] {}, new Object[] {});
+ aHazmatLegsEx = EnumHelper.addEnum(InternalName.class, "itemArmorHazmatLeggingsEx", new Class[] {}, new Object[] {});
+ aHazmatBootsEx = EnumHelper.addEnum(InternalName.class, "itemArmorRubBootsEx", new Class[] {}, new Object[] {});
}
diff --git a/src/Java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java b/src/Java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java
index 1f5f9abe1d..e22a609814 100644
--- a/src/Java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java
+++ b/src/Java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java
@@ -95,25 +95,25 @@ public class RECIPE_IC2 {
if (!CORE.GTNH) {
//Rotor Blade Recipes
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T1, ingot_T1, plate_T1,
plate_T1, ingot_T1, plate_T1,
plate_T1, ingot_T1, plate_T1,
rotor_blade_T1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T2, ingot_T2, plate_T2,
plate_T2, ingot_T2, plate_T2,
plate_T2, ingot_T2, plate_T2,
rotor_blade_T2);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T3, ingot_T3, plate_T3,
plate_T3, ingot_T3, plate_T3,
plate_T3, ingot_T3, plate_T3,
rotor_blade_T3);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T4, ingot_T4, plate_T4,
plate_T4, ingot_T4, plate_T4,
plate_T4, ingot_T4, plate_T4,
@@ -121,25 +121,25 @@ public class RECIPE_IC2 {
}
if (CORE.GTNH) {
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T1, plate_T1, plate_T1,
plate_T1, ring_T1, plate_T1,
plate_T1, plate_T1, plate_T1,
rotor_blade_T1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T2, plate_T2, plate_T2,
plate_T2, ring_T2, plate_T2,
plate_T2, plate_T2, plate_T2,
rotor_blade_T2);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T3, plate_T3, plate_T3,
plate_T3, ring_T3, plate_T3,
plate_T3, plate_T3, plate_T3,
rotor_blade_T3);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
plate_T4, plate_T4, plate_T4,
plate_T4, ring_T4, plate_T4,
plate_T4, plate_T4, plate_T4,
@@ -190,25 +190,25 @@ public class RECIPE_IC2 {
if (!CORE.GTNH) {
//Rotor Recipes
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, rotor_blade_T1, null,
rotor_blade_T1, shaft_T1, rotor_blade_T1,
null, rotor_blade_T1, null,
rotor_T1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, rotor_blade_T2, null,
rotor_blade_T2, shaft_T2, rotor_blade_T2,
null, rotor_blade_T2, null,
rotor_T2);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, rotor_blade_T3, null,
rotor_blade_T3, shaft_T3, rotor_blade_T3,
null, rotor_blade_T3, null,
rotor_T3);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
null, rotor_blade_T4, null,
rotor_blade_T4, shaft_T4, rotor_blade_T4,
null, rotor_blade_T4, null,
@@ -216,25 +216,25 @@ public class RECIPE_IC2 {
}
if (CORE.GTNH) {
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
shaft_T1, rotor_blade_T1, craftingToolHardHammer,
rotor_blade_T1, ring_T1, rotor_blade_T1,
craftingToolWrench, rotor_blade_T1, shaft_T1,
rotor_T1);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
shaft_T2, rotor_blade_T2, craftingToolHardHammer,
rotor_blade_T2, ring_T2, rotor_blade_T2,
craftingToolWrench, rotor_blade_T2, shaft_T2,
rotor_T2);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
shaft_T3, rotor_blade_T3, craftingToolHardHammer,
rotor_blade_T3, ring_T3, rotor_blade_T3,
craftingToolWrench, rotor_blade_T3, shaft_T3,
rotor_T3);
- RecipeUtils.recipeBuilder(
+ RecipeUtils.addShapedRecipe(
shaft_T4, rotor_blade_T4, craftingToolHardHammer,
rotor_blade_T4, ring_T4, rotor_blade_T4,
craftingToolWrench, rotor_blade_T4, shaft_T4,
diff --git a/src/Java/gtPlusPlus/xmod/sol/HANDLER_SpiceOfLife.java b/src/Java/gtPlusPlus/xmod/sol/HANDLER_SpiceOfLife.java
new file mode 100644
index 0000000000..11cc5da89c
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/sol/HANDLER_SpiceOfLife.java
@@ -0,0 +1,61 @@
+package gtPlusPlus.xmod.sol;
+
+import java.lang.reflect.Constructor;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.LoadedMods;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.item.Item;
+
+public class HANDLER_SpiceOfLife {
+
+ public static final void preInit() {
+ if (LoadedMods.SpiceOfLife) {
+ //Add a new Lunch Box with a reasonable amount of slots
+ tryRegisterNewLunchBox("foodcrate", 12);
+ }
+ }
+
+ public static final void init() {
+ if (LoadedMods.SpiceOfLife) {
+
+ }
+ }
+
+ public static final void postInit() {
+ if (LoadedMods.SpiceOfLife) {
+
+ }
+ }
+
+ private static boolean tryRegisterNewLunchBox(String aItemName, int aSlots) {
+ Item aNewBox = getNewLunchBox(aItemName, aSlots);
+ if (aNewBox != null) {
+ GameRegistry.registerItem(aNewBox, aItemName);
+ Logger.INFO("[Spice of Life] Registered "+aItemName+" as a new food container.");
+ return true;
+ }
+ return false;
+ }
+
+ private static Item getNewLunchBox(String aItemName, int aSlots) {
+ Class aItemFoodContainer = ReflectionUtils.getClass("squeek.spiceoflife.items.ItemFoodContainer");
+ if (aItemFoodContainer != null) {
+ Constructor aItemFoodContainerConstructor = ReflectionUtils.getConstructor(aItemFoodContainer, new Class[] {String.class, int.class});
+ if (aItemFoodContainerConstructor != null) {
+ Object aNewObject = ReflectionUtils.createNewInstanceFromConstructor(aItemFoodContainerConstructor, new Object[] {aItemName, aSlots});
+ if (aNewObject instanceof Item) {
+ Item aNewInstance = (Item) aNewObject;
+ return aNewInstance;
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
index 491633b381..fdcf7b8498 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ThreadAspectScanner.java
@@ -36,7 +36,7 @@ public class ThreadAspectScanner extends Thread {
}
String nameKey;
try {
- nameKey = aStack.getUnlocalizedName();
+ nameKey = ItemUtils.getUnlocalizedItemName(aStack);
} catch (NullPointerException n) {
try {
nameKey = Utils.sanitizeString(aStack.getDisplayName().toLowerCase());